您现在所在的是:

PLC论坛

回帖:3个,阅读:5873 [上一页] [1] [下一页]
5479
121111115
文章数:1400
年度积分:562
历史总积分:5479
注册时间:2015/3/16
发站内信
2018论坛分享达人
发表于:2019/5/24 15:44:52
#0楼
计划利用中间变量写一个特定功能的功能块,突然想起前段时间200SMART在使用子程序时,在里面用了临时变量,当同时调用多个子程序时出现了数据冲突的情况,单独测试每个子程序都没问题,一集中运行就不行了,后来彻底不用temp变量就好了。
各位大佬指教一下,我想写一个特殊功能的块,可以在任何程序中直接调用这个快而不用考虑任何地址问题,我只要连引脚变量就行了,类似于模拟量采集块那样的(我想知道怎么写的)。
4326
965528555
文章数:507
年度积分:50
历史总积分:4326
注册时间:2009/9/7
发站内信
三菱电机活动(三)
发表于:2019/5/24 16:05:53
#1楼
   可以肯定的告诉你,不会相互影响

    FB由于有自己的背景数据块,里面的TEMP变量在进行FB调用时由于生成的背景数据块进行数据保存。
    每调用一次会产生相对应的背景数据块,所以完全不用担心。

    在使用时,你可以使用或者控制不同调用的各自的背景数据块地址变量。

   假如在网络一调用了FB,产生了DB1,第二个网络又调用了FB,产生了DB2,由于同样的FB程序,假如网络一的FB里的INPUT引脚BOOL 变量为1导致 FB的 TEMP 值为1,它改变的也只是DB1里的TEMP变量
[此贴子已经被作者于2019/5/24 16:08:27编辑过]
西门子S7-1200.S7-1500.S7-300.V90.G120.S120.
37246
cvlsam 版主
文章数:12401
年度积分:1598
历史总积分:37246
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2019/5/24 16:06:57
#2楼
你要根据你的返回值的数量来决定使用FC还是FB。

如果你有多个返回值,请使用FB,如果只有一个返回值,请使用FC。

无论你使用FB还是FC,请注意一点,临时变量必须遵循先赋值后使用的原则,包括在200系列中也应该遵循同样的原则。

导致必须遵守这一原则的原因在于:西门子不负责对于临时变量的垃圾回收,因此,你的临时变量可能被用于其他FC,FB甚至于子程序中的数据存储,所以才会导致你说的数据冲突。

Good Luck~
5479
121111115
文章数:1400
年度积分:562
历史总积分:5479
注册时间:2015/3/16
发站内信
2018论坛分享达人
发表于:2019/5/24 16:12:39
#3楼
以下是引用9655285552019/5/24 16:05:53的发言:
   可以肯定的告诉你,不会相互影响

    FB由于有自己的背景数据块,里面的TEMP变量在进行FB调用时由于生成的背景数据块进行数据保存。
    每调用一次会产生相对应的背景数据块,所以完全不用担心。

    在使用时,你可以使用或者控制不同调用的各自的背景数据块地址变量。

   假如在网络一调用了FB,产生了DB1,第二个网络又调用了FB,产生了DB2,由于同样的FB程序,假如网络一的FB里的INPUT引脚BOOL 变量为1导致 FB的 TEMP 值为1,它改变的也只是DB1里的TEMP变量
[此贴子已经被作者于2019/5/24 16:08:27编辑过]
明白了,谢谢指点,我也觉着应该这么用,但是想起之前的怪现象我还是有点虚,特来请教。

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

46.8003