PLC-8N 第三章 S7-300PLC 第5节 用户程序结构与编程
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
说明: 1)程序写在OB1中。 2)计数值存储在DB1中,需先建立DB1。 DB1的0 ~ 47共48个字节为24个INT数(16位,
2字节),用于存储各小时的计数值。 第48 ~ 55共8个字节用于存储日期-时间。 Byte48:年, Byte49:月, Byte50:日 Byte51:时, Byte52:分, Byte53:秒 Word54:毫秒。 日期-时间均为BCD格式。 3)SFC21为存储器初始化模块。 4)SFC1为读日期-时间模块。
循环处理组织块:如OB1(主程序循环,每个扫描 周期执行一次)
时间中断组织块:如OB10(日期时间中断,即在 设置的日期和时间时启动),OB35(时间循环中 断,即以设定的时间为周期循环执行)
事件中断组织块:如OB20(延时中断,过程事件 出现后延时一段时间再执行中断程序),OB40 (硬件中断,快速响应过程事件)
500 IN2
OB1程序
Network1 I0.1
MW10 MW12 MW14 MW16
FC1
EN
ENO
INn0 OUTn8
INn2
INn4
INn6
<0 MW18
Q4.1 ()
Network2 I0.3
MW20 MW22 MW24 MW26
FC1
EN
ENO
INn0 OUTn8
INn2
INn4
INn6
FC没有静态存储空间,调用后其程序中的 临时变量不保留,其它程序不能使用这些临时 变量。
功能调用方法
3、STEP 7库中的功能块与功能的调用
在STEP 7编程软件中提供了一些常用的功能块 (FB)和功能(FC),用户不用再创建这些子 程序,编程时可直接调用,其方法与调用用户自 己编写的FB或FC相同。
FC是用户编写的或STEP 7库中提供的无背景数据 块的子程序。调用时必须提供输入和输出参数。
对于STEP 7库中提供的用户常用FB和FC软件包, 用户在编程时可直接调用,系统在编译时会将相 应的子程序调入,相当于用户编写的FB或FC, 占用用户程序存储空间。
程序结构 示意图
操
作 系
OB1 其它
SFB41模块带有自己的背景数据块,用于存 放其各种参数及状态信息等,如比例增益、 积分时间、微分时间、自动/手动、自动输出 值、手动输出值、起用P/I/D、扫描时间等。
SFB41模块调用
2)系统功能(SFC)的调用
对于系统功能,在程序中可直接调用,与一般 指令类似,只需将输入和输出端进行相应的变 量连接即可。
调用时可指明其输入、输出,如某些参数未指 明,则使用背景数据块中的数据。
功能块调用
2、功能(FC)的创建与调用
1)功能的创建
如控制程序不需要保存自己的数据,则可用功能 (FC)来编程,FC没有背景数据块,不能给其 变量分配初值,也没有静态变量。FC的创建方法 与FB类似。
在SIMATIC管理器中打开工程内S7程序文件夹 下的“块( BLOCK)”文件夹,然后,右键点击 右侧窗口栏,选择“插入新对象(InsertNew Object)”中的“功能(Function )”,再分配 编号即可插入新的功能。
双击插入的功能块,进行功能块编程。
先进行变量声明,这些变量声明实际上就是定 义该FB的背景数据块的结构及其变量的初值。 然后,再编写该功能块的程序。
功能块的创建
功能块在管理器中的显示
FB变量声明(以实验二FB调用为例)
FB编程
2)功能块(FB)的调用
功能块创建后,在其它程序中可有条件调用和 无条件调用。采用梯形图编程时,FB如同一条 功能指令。其它程序在调用该功能块时,需指 定其背景数据块的编号,然后,在编译调用程 序时会自动生成对应的背景数据块(调用FB时, 系统会提示分配背景数据块)。
#INn6 IN1 OUT #TEMP1
#INn2 IN2
MUL_I EN ENO
#INn0 IN1 OUT #TEMP2
#INn4 IN2
Network2
SUB_I EN ENO
ADD_I EN ENO
#TEMP1 IN1 OUT #TEMP3 #TEMP3 IN1 OUT #OUTn8
#TEMP2 IN2
<0 MW28
Q4.3 ()
Network3 I0.5
MW30 MW32 MW34 MW36
FC1
EN
ENO
INn0 OUTn8
INn2
INn4
INn6
<0 MW38
Q4.5 ()
2、易拉罐生产线计数 易拉罐生产线需要统计每小时生产的易拉罐数
量。系统中有一传感器,每当一易拉罐经过时, 就产生一个脉冲。要求编制程序将一天24小时 生产的易拉罐数量统计出来,并分别存储在24 个数据寄存器中。 I/O分配: I0.0—启动按钮(自锁型按钮); I0.1—复位按钮; I0.2—计数输入;
上例中的调用是将MD120中的实数按0.0~100.0% 对应转换为0~27648之间的数据,并由模拟量输出 通道PQW800输出。
4、系统功能块与系统功能的调用
系统功能块(SFB)和系统功能(SFC)的调用方法 与STEP 7库中提供的功能块(FB)和功能 (FC)的调用相同。只是SFB和SFC是集成在 CPU模块内,程序代码本身不占用用户程序存 储空间。但SFB调用时需用户提供背景数据块, 其背景数据块仍占用用户的存储空间。
S7-300PLC支持的SFB和SFC取决于CPU型号。
SFB和SFC可视为系统软件的一部分,它们不占 用用户程序存储空间。
3、功能块(FB)和功能(FC)
FB是用户编写的或STEP 7库中提供的有背景数据 块的子程序。调用时需指定背景数据块,用于以 静态方式存储相关的变量。当其某些输入变量未 指定时,则程序将使用背景数据块对应的数据存 储器中的数据作为输入值;对于输出变量,程序 始终先将运算结果存入背景数据块中对应的存储 器中,再视用户程序做进一步处理。
双击插入的功能,进行功能编程。
先进行变量声明,然后编写该功能的执行程序。
FC变量声明
FC编程
2)功能(FC )的调用
功能(FC)创建后,在其它程序中可有条 件调用或无条件调用。采用梯形图编程时,FC 也如同一条功能指令。因其没有背景数据块, 所以调用必须指明各输入/输出参数。
此外,FC提供了一个特殊的输出参数—— 返回值,编程时可指定一个存储单元来存储返 回值。例如:使用M区寄存器作为存储单元。
对于简单的程序可只包含OB1,称作线性化编 程。
将复杂的自动化任务分割成反映过程技术的功 能或可多次处理的小任务,可以更易于控制复 杂任务。这些任务以相应的程序块表示,称为 结构化编程。
二、功能块与功能的创建和调用
1、功能块(FB)的创建与调用
1)功能块的创建
在SIMATIC管理器中打开工程内S7程序文件 夹下的“块( BLOCK)”文件夹,然后,右键 点击右侧窗口栏,选择“插入新对象 (InsertNew Object)”中的“功能块 (Function Block)”,再分配编号即可插入 新的功能块。
统
OB
DBn SFBs
SFCs DBn FBs
FCs
至少包含1个OB
用户程序
DBn SFBs
SFCs DBn FBs FCs
DBn SFBs
SFCs DBn FBs
FCs
用户程序中可包含的程序块或数据块的数量与 CPU型号有关,分为1024/2048/4096个。单个块 的最大容量为64K。
程序块调用嵌套深度一般为8或16层。
系统功能块由系统提供带有背景数据块如sfb41模块就是控制系统中常用的pid模sfb41模块带有自己的背景数据块用于存放其各种参数及状态信息等如比例增益积分时间微分时间自动手动自动输出值手动输出值起用pid扫描时间等
第5节 S7-300PLC的用户程序结构与编程
一、用户程序结构
S7-300PLC的用户程序由程序块(或称为逻辑块) 和数据块组成。
根据题意可使用FC完成运算部分,然后在OB1中 调用该FC。
在FC中定义4个整型输入变量(依次为INn0、 INn2、 INn4和INn6),1个整型输出变量 (OUTn8 ),及3个临时整型变量(依次为 TEMP1、TEMP2和TEMP3)。
FC1程序
Network1 DIV_I EN ENO
此外,CPU模块所支持的SFB和SFC与CPU型 号有关。
编程时,这些系统功能块或系统功能位于编程 部件窗口中的“库\Standard Library\System Function Blocks内,可依程序需要来调用。
1)系统功能块(SFB)的调用
系统功能块由系统提供,带有背景数据块, 如SFB 41模块就是控制系统中常用的PID模 块。
2)数据块中变量的调用
用户程序中一般采用DBn.变量名形式使用其中 的变量,也可使用绝对地址,如DBn.DBXm、 DBn.DBBm、 DBn.DBWm、 DBn.DBDm 等形式。
例题 1、FC编程 编写一程序,要求当I0.1、I0.3或I0.5接通时,分
别对MW10~MW16、 MW20~MW26 和 MW30~MW36 单元内的数据(均为16位整数) 按 MWn6 / MWn2 – MWn0 * MWn4 + 500进行计算 (各单元内数据均不为0),并将最终计算结果存 储在MWn8开始的单元中,且当该数小于0时,对 应地将Q4.1、Q4.3或Q4.5置为ON。
这些部件位于编程部件窗口中的“库\ Standard Library下的相关目录下。
以功能FC105为例,该功能为输入标度变换,既 将输入数据按规定的上限和下限进行线性转换。
FC105调用(常用于模拟量输入处理等)
OUT = [((IN -K1)/(K2-K1))*(HI_LIM-LO_LIM)] + LO_LIM
下面的调用是将MW0中的数据转换为0~ 100%之间的数据。
FC106调用(常用于模拟量输出处理)
OUT = [( (IN - LO_LIM K1)/(HI_LIM-LO_LIM) ) *(K2-K1)] +K1
K1和K2的值与极性控制BIPOLAR有关, BIPOLAR=0时,K1=0.0,K2=27648.0; BIPOLAR=1时,K1= -27648.0, K2= 27648.0。
K1和K2的值与极性控制BIPOLAR有关, BIPOLAR=0时,K1=0.0,K2=27648.0;
BIPOLAR=1时,K1=-27648.0, K2=27648.0 。
上例中上面的调用是将模拟量输入通道 PIW752的数据转换为0~100%之间的数据。 即将输入PIW752的模拟量进行百分量处理。
程序块包括组织块OB、系统功能块SFB、系统 功能SFC、功能块FB、功能FC等。
OB由操作系统调用,其它块由OB调用。 OB可调用SFB、FB、SFC、FC。 FB、FC可调用SFB、 FB、SFC、FC 数据块为程序块提供相应的数据,包扩共享数
据块和背景数据块。
1、组织块(OB)
启动组织块:如OB100 (暖启动,PLC启动时执 行一次。)
要创建共享数据块时,可在SIMATIC管理器中打 开工程内S7程序文件夹下的“块( BLOCK)”文 件夹,然后,右键点击右侧窗口栏,选择“插入(DATA Block)”,再分配编号即可插入新的 数据块。打开该块后,即可定义变量。
数据块变量定义
现以系统功能SFC20“块传送”功能为例说明 调用方法。(见下图)
这里,SRCBLK规定原数据区起始地址及要传 送的字节数,指针型地址(P#)。DSTBLK规 定目的数据区起始地址,RET_VAL规定错误 代码存储地址。
SFC20调用
5、共享数据块的创建及数据调用
1)共享数据块的定义
共享数据块通常是用户对一些全局变量的定义, 也包括变量名、变量数据类型及初始值等。一般 在程序设计时预先定义,然后再在程序中使用其 内部的变量。
应注意:PLC支持的各种组织块的数量与CPU型 号有关。
2、系统功能块(SFB)和系统功能(SFC)
SFB是系统提供的子程序,集成在CPU模块中, 有背景数据块,背景数据块可在编译时自动生成。 例如连续PID控制块SFB 41(名称为CONT_C)。
SFC也是系统提供的子程序,且集成在CPU模块 中,但无背景数据块,而是以参数传递的形式交 换数据。如设置和读取系统时钟的SFC 0和SFC 1 等。