FC块的in-out调用

闲来无事,写了一段程序,FC块的in_out端口调用;图1,图2采用赋值“=”,得到的结果是0;图3,图4采用置位“S”,得到结果是1;大伙对这个结果有什么看法?

问题补充:
OB1中的DB330.DBX0.0没有再赋值,即两种情况下在M920.0未赋值1前DB330.dbx0.0值均为初始值0

图片说明:

FC块的in-out调用    FC块的in-out调用    FC块的in-out调用    FC块的in-out调用   

最佳答案

1、两种调用都是无条件调用,而且所监视的变量都不是临时变量,这方面的因素就不用考虑了;
2、图1、3 FC42的内部,分析一下:
图1的:
网络 2 与网络 3 相当于双线圈输出,程序自上而下扫描的原理,网络2的运算结果被网络3履盖了,所以只有网络3的结果起作用,即DB330.DBX0.0的值不受网络2 “#IN0” 的影响;所以只看网络3就可分析输出结果。
当DB330.DBX0.0=0时,输出到下一个扫描周期时 DB330.DBX0.0=0;
当DB330.DBX0.0=1时,输出到下一个扫描周期时 DB330.DBX0.0=1;
图3的:
网络 2 与网络 3 则不是双线圈输出;
当 #IN0=0、DB330.DBX0.0=0时,网络2先写使得 IN_OUT0 为0,网络3 条件不满足,此时置位指令不执行,那么网络2对 IN_OUT0 的操作起作用;
当 #IN0=1、DB330.DBX0.0=0时,网络2先写使得 IN_OUT0 为1,网络3 条件不满足,此时置位指令不执行,但不会履盖网络2已经对 IN_OUT0 的逻辑运算,即在本扫描周期结束时,DB330.DBX0.0=1;
下一扫描周期,就可以看到 IN_OUT0 脚处的 DB330.DBX0.0=1;
3、可以通过这个试验理解一下线圈、置位(S)、复位(R)指令的不同。
一般情况下,有一个置位指令,就一定有一个与之对应的复位指令;除非程序就是想让这一位常1。
而对于线圈的多次操作,总是最后一个起作用。

提问者对于答案的评价:
感谢各位的评论~

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc288247.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年10月30日 下午11:54
下一篇 2020年10月30日 下午11:54

相关推荐