登录
首页 PLC论坛 PLC论坛
回帖 发帖
正文

主题:提个问题,在博途中同时调用了两个FB块,这两个FB块里面的临时变量temp会不会有冲突的情况,即相互影响其值?

点击:6210 回复:3

计划利用中间变量写一个特定功能的功能块,突然想起前段时间200SMART在使用子程序时,在里面用了临时变量,当同时调用多个子程序时出现了数据冲突的情况,单独测试每个子程序都没问题,一集中运行就不行了,后来彻底不用temp变量就好了。
各位大佬指教一下,我想写一个特殊功能的块,可以在任何程序中直接调用这个快而不用考虑任何地址问题,我只要连引脚变量就行了,类似于模拟量采集块那样的(我想知道怎么写的)。
19-05-24 15:44
   可以肯定的告诉你,不会相互影响
    FB由于有自己的背景数据块,里面的TEMP变量在进行FB调用时由于生成的背景数据块进行数据保存。
    每调用一次会产生相对应的背景数据块,所以完全不用担心。
    在使用时,你可以使用或者控制不同调用的各自的背景数据块地址变量。
   假如在网络一调用了FB,产生了DB1,第二个网络又调用了FB,产生了DB2,由于同样的FB程序,假如网络一的FB里的INPUT引脚BOOL 变量为1导致 FB的 TEMP 值为1,它改变的也只是DB1里的TEMP变量
最后修改:2019/5/24 16:08:27
19-05-24 16:05
你要根据你的返回值的数量来决定使用FC还是FB。
如果你有多个返回值,请使用FB,如果只有一个返回值,请使用FC。
无论你使用FB还是FC,请注意一点,临时变量必须遵循先赋值后使用的原则,包括在200系列中也应该遵循同样的原则。
导致必须遵守这一原则的原因在于:西门子不负责对于临时变量的垃圾回收,因此,你的临时变量可能被用于其他FC,FB甚至于子程序中的数据存储,所以才会导致你说的数据冲突。
Good Luck~
19-05-24 16:06

引用 965528555 在 2019/5/24 16:05:53 发言【内容省略】

明白了,谢谢指点,我也觉着应该这么用,但是想起之前的怪现象我还是有点虚,特来请教。
19-05-24 16:12

工控新闻

更多新闻资讯