技术论坛

TIA V17 CFC功能块FB初始化,你会使用哪一种?

作者 主题
至圣

经验值: 11495
发帖数: 1028
精华帖: 39
主题:【探讨】TIA V17 CFC功能块FB初始化,你会使用哪一种?


只看楼主 楼主 2022-03-07 20:57:48


我们通常需要在编写的FB块的CPU首次扫描调用时需要初始化各种参数,或者该块还可能包含只需要执行一次的附加任务,具体取决于你的块功能。如果你的块是这种情况,你必须实现初始启动序列。下面介绍三种常见的初始化方式。


  1  

通过在静态变量区定义一个 BOOLEAN 变量来完成的,例如 SxFirstScan,其初始值为True,在初始程序内完成功能后复位。


但TIA Portal对于S7-1500中FB的保持性与经典STEP 7的S7-300/400不同,TIA如果勾选了优化块的访问,则FB编辑列会出现保持选项。如果选择不保持,CPU在暖启动Stop到Run时,SxFirstScan会有0到1的跳变,如果选择保持,当复位后,下次CPU暖启动等会保持为0,并不会执行你认为的初始化程序段。对于STEP 7中S7-300/400来说,所有的静态变量区都是保持的。



  2  

鉴于上述情况,如果我们希望静态变量区的数值都是保持的,可以取消块的优化访问,可以通过SFC6 “RD_SINFO”读取CPU当前执行的OB来进行程序初始化。如图在Temp临时变量区创建以下变量:

SI_Current: SI_None

SI_StartupLast: SI_Startup

SFC6_RetVal: INT

xOB_Cycle: Bool

xOB_Startup: Bool


调用SFC6,在变量SI_Current.OB_Nr中的值就是程序在CPU当前执行OB的编号,对于TIA CFC的OB编号来说,OB编号需要增加1000,如启动OB100在CFC的编号是1100,因此下图程序中xOB_StartUp只会在功能块被OB调用后接通一周期。


回到CFC,我们拖拽FB功能块到CFC编辑界面,在块属性中S7 specific > Task extensions > Additional task 中勾选Startup,为块添加启动附加任务后,功能块FB会被在CPU启动执行一次调用。


双击Chart sequence & extras后,在task assignment中可以看到FB既被OB1035调用,也被OB1100调用。


运行测试:



  3  

另外我们可以使用CPU属性中“Enable the use of system memory byte”,

如图设置后M1.0即为系统初始位。


基于面向过程对象编写实例,不建议在FB内使用M和T区域,因此推荐1和2两种方式。在第一种方法中,可以考虑是否需要将SxFirstScan设置为不保持,以保证每次暖启动等都能执行某些初始化程序。



 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1751101&b_id=66&s_id=0&num=1

至圣

经验值: 16187
发帖数: 6610
精华帖: 50
回复:TIA V17 CFC功能块FB初始化,你会使用哪一种?


只看楼主 1楼 2022-03-08 11:51:25

OB100?


知其道,用其妙!
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
TIA V17 CFC功能块FB初始化,你会使用哪一种?
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。