前言:
此刻大家对“动态分配和静态分配有什么区别”可能比较关怀,你们都需要学习一些“动态分配和静态分配有什么区别”的相关资讯。那么小编也在网上汇集了一些有关“动态分配和静态分配有什么区别””的相关资讯,希望看官们能喜欢,我们快快来了解一下吧!一、功能及功能块的区别
FB和FC均为用户编写的子程序,局部数据均有IN、OUT、IN_OUT、TEMP,临时变量TEMP储存在局部数据堆栈中。
1)FC的返回值RET_VAL实际上输出参数,因此有无动态变量(STAT)是二者的局部变量的本质区别,功能块的静态变量用北京数据块来保存,如果功能有执行完后需要保存的数据,只能存放在全局变量(I/O、PI/PO、M、T、共享数据块DB中),但是这样会影响功能的可移植性,如果功能或功能块的内部不使用全局变量,只使用局部变量,不需要做任何修改,就可以将块移植到其他项目,如果块使用了全局变量,在移植时需要重新统一分配它们的内部使用的全局变量地址,以保证不会出现地址冲突,当程序复杂,子程序和中断程序很多时,这种重新分配全局变量地址的工作量非常大,也容易出错。如果逻辑块有执行完成需要保存的数据,显然应使用功能块,而不是功能。
2)功能块的输出参数不仅与来自外部的输入参数有关,还与用静态变量保存的内部状态数据有关,功能因为没有静态变量,相同的输入参数产生的执行结果是相同。
3)功能块有背景数据块DB,功能没有背景数据块,只能在功能内部访问功能的局部变量,其他逻辑块与人机界面可以访问相应背景数据块中的变量。
4)不能给功能的局部比啊娘设置初始值,可以给功能块的局部变量(不包含TEMP)设置初始值,在调用功能块时如果没有设置某些输入参数的实参,将使用背景数据块中的初始值,或上一次执行后的值,调用功能时应给所有的形参指定实参。
举例说明:
一、功能的生成和调用
1、生成功能
打开SIMATIC管理器执行【插入】-【S7块】-【功能】如下图所示
2、生成局部数据
双击打开FC1,如下图,将分隔条向下拉,分隔条上面是功能的变量声明表,下面为程序编写区,
在变量声明表中定义局部变量,(局部变量只能在所在的功能中使用),
1)IN:由调用它的块提供的输入参数
2)OUT:返回给调用它的块的输出参数
3)IN_OUT:初值由调用它的块提供,块执行后返回给调用它的块。
4)TEMP:暂时保存在局部数据堆栈中的数据,只是在执行块时使用临时数据,执行完后,不再保存临时数据的数值,它可能被别的数据覆盖。
5)RETURN中的RET_VAL属于输出参数。
本例IN和OUT参数如下图
3、生成功能中的程序
STEP7自动在局部变量的前面加#号,如#start。
4、调用功能
在OB1导入FC1,如下图
启动仿真如下:
二、功能块的生成和调用
1、生成功能块
打开SIMATIC管理器执行【插入】-【S7块】-【功能块】如下图所示
2、生成局部变量
要求:按下输入参数START启动,按下输入参数STOP后,TOF指定的断电延时定时器开始启动,输出参数BRAKE(制动)为1,经过设置时间后,停止制动。输入参数SPEED与静态变量PRESPEED比较,SPEED大于PRESPEED时,输出参数OVERSPEED为1。FB1变量声明表如下:
3、在OB1调用FB1
4、背景数据块
背景数据块中的变量就是其功能块中的局部变量,功能块的数据永久性的保存在它的背景数据块中如下。
仿真如下
喜欢的朋友别忘记关注、点赞和评论,愿跟大家一起讨论和学习