找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
问题
取消精华
首页精华问答
取消推荐
高端用户推荐
申请置评
已申请置评
修改
修改标签
添加标签
官方认证
取消官方认证
修改标签
添加标签
转移分类
删除
{{itemCategory}}
收藏({{answerDetail.Q_FavoriteCounts}})
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
专家建议
取消最佳答案
修改
1、这不是双线圈的问题
2、这是FB调用参数传递的问题
3、西门子热线工程师案例:
http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1173967&b_id=94&b_sid=6&s_id=&num=23#anch
4、分析:
热线工程师分析的很透彻啊!
要理解清楚这个问题,我们先要从FB功能块内部参数的传递机制说起。从很多场合我们都可以了解到:FB块区别于FC块主要在于每个FB块都需要一个指定的背景数据块,这个指定的背景数据块用来存放FB块的实际参数。其工作原理是,对于FB块定义的IN类型接口参数,在FB块被调用执行时,将实参传递给背景数据块中形参的对应地址,并用于FB内部的逻辑运算;对于FB块定义的OUT类型接口参数,在FB块被调用执行时将FB内部的逻辑运算结果给出到背景数据块中形参的对应地址,然后再将背景数据块中形参的对应地址的值传递给实参,得到实际的输出结果。
根据FB功能块接口参数传递的机制,最终,你FB定义的OUT参数,当再将背景数据块中形参的对应地址的值传递给实参,得到实际的输出结果,所以,m0.2还是false,为0.
当M0.0接通 M0.2置位为1,接着调用FB1,由于背景数据块里的M0.4所占用地址值为0,所以,第二个网段的程序,M0.2就直接把零这个值赋给了OUT 变量M0.2,还是为0.
我们知道对于FB功能块,除了IN、OUT类型接口参数,还有一个IN_OUT类型接口参数。对于IN_OUT类型的接口参数,在调用执行时首先将实参读入,然后进行逻辑运算,最后再将逻辑运算的结果传递给实参进行输出。可见相对于OUT类型接口参数而言,IN_OUT类型接口参数是要先读入实际参数的值,这样就可以保持上面的逻辑运算结果不会因为FB块的调用执行而被修改。 你把FB1out变量定义为INOUT变量之后,你的测试结果就按照你的要求执行了!
当M0.0接通 M0.2置位为1
当M0.4接通,M0.2复位为0
等您来回答
换一换
{{item.CoinValue}}西币
{{item.VisitNum}}人想问
本版相关问题
换一换
专家置评
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!

西门子商城