;;1功能块FB;2生成功能块FB;3定义函数块FB的局部变量;根据控制任务要求,控制程序中需要加入定时器指令。定时器和计数器实际上是函数块,在函数块中调用这些指令时,如果给其指定固定的单个实例背景数据块,则当函数块FB被多次调用时,定时器、计数器的背景数据块被同时用于多处,程序运行时将会出错。为了解决这一问题,在块接口区定义数据类型为“IEC_TIMER”的静态变量,用它给定时器提供背景数据,那么每次调用FB时,在FB不同的背景数据块中,都有独立的背景数据块为调用FB中的定时器或计数器提供背景数据,而不会发生混乱。;在FB1的程序编辑区编写控制程序,如图所示。在本程序中,TOF定时器的参数用静态变量“定时器DB”来保存。在为TOF定时器选择背景数据块的时候,选择“多重实例”,并在接口参数中名称下拉菜单中选择“#定时器DB”。;生成功能块的输入、输出参数和静态变量时,它们被自动指定一个默认值,可以修改这些默认值。变量的默认值被传送给FB的背景数据块,作为同一个变量的初始值。;在PLC变量表中生成两次调用FB1使用的符号地址。
在OB1程序编辑区中,将项目树中的FB1拖放至右边的程序段1的水平线上,松开鼠标时,会弹出“调用选项”对话框,需要输入FB1背景数据块的名称,采用默认名称,单击“确定”后,则在“程序块”下自动生成FB1的背景数据块“电动机制动控制_DB”。
函数块的背景数据块中的变量就是对应的FB接口区中的Input、Output、Inout参数和Static变量。双击该背景数据块,可以看到其中的数据与FB1接口区数据是一致的。
为各形参指定实参时,可以使用变量表或全局数据块中定义的符号地址,也可以使用绝对地址。;函数块上述的数据因为用背景数据块保存,在函数块执行完后也不会丢失,以供下次执行时使用,其他代码块也可以访问背景数据块中的数据。不能直接删除和修改背景数据块中的变量,只能在功能块的界面区中删除和修改这些变量。;在OB1中调用两次FB1(第二次调用也要为FB1指定背景数据块),分别控制两套设备,并将输入输出实参赋给形参。调用程序及赋值如图所示。;单击工具栏上的“开始仿真”按钮,打开S7-PLCSIM,切换到项目视图。在S7-PLCSIM的项目视图中打开项目树中的“SIM表格_1”,在表中手工生成需要仿真的I/O点条目,也可在“SIM表格_1”编辑栏空白处单击鼠标右键选择“加载项目标签”,从而加载项目的全部标签,如图所示。;6PLCSIM仿真调试;首先用鼠标点击标签,则在“SIM表格_1”下方出现虚拟按钮“启动按钮1”,如图所示。用鼠标单击该按钮,观察“监视/修改值”中的变量状态,点击虚拟按钮“停止按钮1”观察变量状态。接下来可按控制顺序依次对2号设备进行仿真,观察和相关变量的状态。也可同时在程序段中监视程序的执行,观察各变量状态。;6PLCSIM仿真调试;(1)函数块有背景数据块,函数没有背景数据块。
(2)只能在函数内部访问它的局部变量,其他代码块或HMI可以访问函数块的背景数据块中的变量。
(3)函数没有静态变量,函数块有保存在背景数据块中的静态变量。
函数如果有执行完后需要保存的数据,只能存放在全局变量中(如全局数据块和M区),但这样会影响函数的可移植性。如果函数或函数块的内部不使用全局变量,只使用局部变量,不需要做任何修改,就可以将块移植到其他项目。如果代码块有执行完后需要保存的数据,应该使用函数块。;(4)函数块的局部变量(不包含Temp)有默认值(初始值),函数的局部变量没有初始值。在调用函数块时如果没有设置某些输入、输出参数的实参,将使用背景数据块中的初始值。调用函数时应给所有的形参指定实参。
(5)函数块的输出参数值不仅与来自外部的输入参数有关,还与静态数据保存的内部状态数据有关。函数因为没有静态数据,相同的输入参数产生相同的执行结果。;7FC和FB的区别