如果逻辑块执行完后不需要保存它内部的数据,可以用功能FC来编程。与功能块FB相比,调用FC时不需要指定背景数据块。
1.生成功能
用右键单击SIMATIC管理器左边窗口中的“块”,执行出现的快捷菜单中的“插入新对象”→“功能”,生成一个新的功能。在出现的功能属性对话框中,采用系统自动生成的功能的名称FC1,设置梯形图(LAD)为功能默认的编程语言。
双击SIMATIC管理器中FC1的图标,打开程序编辑器(见图4-9)。与功能块的变量声明表(见图4-7)相比,功能没有静态数据(STAT)。
FC1的变量声明表中的返回值RET_VAL是自动生成的,它没有初始的数据类型。如果将它设置为任意的数据类型,在调用FC1时,可以看到FC1方框内右边出现了RET_VAL。因此RET_VAL属于FC的输出参数。
图4-9 功能FC1
FC1用来控制发动机的风扇,要求在发动机运行信号Engine_On为1状态时起动风扇,发动机停车后,用输出参数Fan_On控制的风扇继续运行30s后停机。
在FC1中,用断开延时定时器S_OFFDT(见图4-9)来定时。在功能的变量声明表中定义的输入参数Timer_Function是断开延时定时器的编号,数据类型为Timer,在调用FC1时用它来为不同的发动机指定不同的定时器。
3.功能与功能块的区别(www.xing528.com)
FB和FC均为用户编写的子程序,变量声明表中均有IN、OUT、IN_OUT和TEMP变量,临时数据TEMP储存在局部数据堆栈中。
1)返回值RET_VAL实际上是输出参数。因此有无静态数据(STAT)是FC和FB的局部变量的本质区别,功能块的静态数据用背景数据块来保存。
功能如果有执行完后需要保存的数据,只能用全局数据区(例如共享数据块和M区)来保存,但是这样会影响功能的可移植性。如果功能或功能块的内部不使用全局变量,只使用局部变量,不需要做任何修改,就可以将块移植到其他项目。如果块的内部使用了全局变量,在移植时需要重新统一分配所有的块内部使用的全局变量的地址,以保证不会出现地址冲突。当程序很复杂,逻辑块很多时,这种重新分配全局变量地址的工作量非常大,也很容易出错。
如果逻辑块有执行完后需要保存的数据,显然应使用功能块,而不是功能。
2)功能块有背景数据块,功能没有背景数据块。只能在功能内部访问功能的局部变量,其他逻辑块可以访问功能块的背景数据块中的变量。
3)功能块的局部变量(不包括TEMP)有初始值,功能的局部变量没有初始值。在调用功能块时如果没有设置某些输入、输出参数的实参,将使用背景数据块中的初始值,或使用上一次执行后的参数值。调用功能时应给所有的输入、输出参数指定实参。
4)功能块的输出参数不仅与来自外部的输入参数有关,还与用静态变量保存的内部状态数据有关。功能因为没有静态变量,相同的输入参数产生的执行结果是相同的。
4.组织块与其他逻辑块的区别
出现事件或故障时,由操作系统调用对应的组织块,其他逻辑块是用户程序调用的。
组织块没有输入参数、输出参数和静态变量,只有临时局部变量。组织块自动生成的20B临时局部变量包含了与触发组织块的事件有关的信息(见表4-8),它们由操作系统提供。组织块中的程序是用户编写的,用户可以自己定义和使用组织块前20B之后的临时局部数据。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。