楼主最近还看过
“ winter938 ”的思路是:
把指定的一个“输入通道”的“当前值”与该通道在前一周期的“数值”做一个“异或”运算,如果该输入通道的某(或某些)“位”有状态变化,则 在“异或”运算的结果中对应“位”的状态就为“1 ”。
状态变化有两种情况:1、由OFF翻转为ON; 2 、由ON翻转为OFF 。我们要求的是当输入通道中的“位”由OFF翻转为ON 的时候才去触发指定“输出通道”的对应的“位”。
所以,要把这个“异或运算”结果中的因输入通道某些位由ON翻转为OFF所引起的“1”滤除掉!于是用“输入通道”的当前值跟“异或运算”的结果做一个“字逻辑与”的运算,这样就只剩下了“有用”的触发信号了!如果运算结果中有“有用信号”就令其去触发指定“输出通道”中对应的“位”使之为“ ON ”。
在做完“异或”运算之后再把“输入通道”当前值的内容保存到某个“中间通道”里,以便在下一个周期里与新的输入数据做“异或”运算,随时监控指定“输入通道”的最新变化情况。
举例说明“在‘MOV D2 D128指令前串个M8003 触头’所引起的问题不只是简单的一个扫描周期的问题!”
例:输入通道中的某个“位”(譬如:X1)其 ON 状态在PLC 运行的第1个周期就开始存在,且ON 状态存续期间没有发生其它“输入位”的“上升沿”变化。
以№27楼的片断(“ MOV D2 D128 ”指令前未串 M8003 触头)来分析:
X1在第1个扫描周期就出现的ON 可以触发其对应的“输出位”Y1 。
如果照<winter938>提议的在“ MOV D2 D128指令前串个M8003 触头”,则出现:在前述相同情况下这个X1的ON状态未能触发其对应的“输出位”Y1 !
可见:“MOV D2 D128 指令前串个M8003触头”所引起的问题并不仅仅是“1个扫描周期不通”的问题!