如何理解这个INV_I

各位大侠,本人遇到以下附图的程序问题:根据程序理解IW66的每一个bit位经过INV_I处理后取反,由于输入端没有条件,所以是每一个扫描周期都执行取反操作,也就是每个周期IW66的值都会变化,但是我通过仿真软件观查却没有看到IW66的变化,还有一个问题是实际工程中这个IW66来自于现场的小键盘(Keypad),如果根据程序的思路如果小键盘输入一个bit位=1,这下一个扫描周期会自动=0,如此来回自动变化就不会接收小键盘的信号了!请教大家给予详细分析一下,谢谢!

问题补充:
请教阿鸣:
为何附图中的程序EN端在一直接通情况下,只执行一次INV_I功能了?我原以为上述条件下会每一个扫描周期都执行一次,则会使得IW66每个扫描周期都会反相一次!请帮忙解释一下,谢谢!

图片说明:

如何理解这个INV_I   

最佳答案

1、楼主给出的附图是什么意思?图中的结果是正确的。
INV_I(对整数求反码)读取IN 参数的内容,并使用十六进制掩码W#16#FFFF 执行布尔“异或”运算。此指令将每一位变成相反状态。ENO 始终与EN 的信号状态相同。
图中的输入值为0(0000 0000 0000 0000),转换结果为(1111 1111 1111 1111 )十六进制的FFFF,即十进制的-1。
2、如果小键盘输入一个bit位=1,这下一个扫描周期会自动=0,如此来回自动变化就不会接收小键盘的信号了?
是的,因为程序中没有EN 的信号端的变化。EN 的信号没有变化,所以只转换一次。例如,EN 的信号端为I0.0,如果I0.0 为“1”,则将IW66 的每一位都取反(仅一次)。如果如果I0.0 为“0”再变为“1”,则IW66 再翻转一次。并非每个扫描周期都在翻转。
3、应用断点跟踪的方法来观察:
如何使用断点功能调试 STEP 7 程序?
http://support.automation.siemens.com/CN/llisapi.dll?func=cslib.csinfo&objId=24537446&ehbid=13336639&load=treecontent&lang=zh&siteid=cseus&aktprim=0&objaction=csview&extranet=standard&viewreg=CN

提问者对于答案的评价:
谢谢阿鸣!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月1日 下午5:37
下一篇 2018年12月1日 下午5:37

相关推荐