展开查看
以下是引用西范斯在2020-08-18 19:52:05的发言 >1楼:分析:
IDS=98 WHEN (TIMER_RESET == 1) DO TIMER_RESET = 0
IDS=99 WHEN (TIMER_RESET == 0) DO TIMER_RESET = 1
IDS开机执行一次后一直生效。when条件成立后只执行一次,完成后不管条件是否变化不再执行。同一周期静态同步动作执行顺序是IDS号从小到大而非程序顺序。多个IDS同时满足条件给同一变量赋值时,Ids从小到大执行,变量值由IDS号大的语句决定。老外逻辑开机TIMER_RESET=1( $A_PLCSIOUT[2]应该不可能开机是1 ),IDS=10/11顺序执行最后结果不会变化。开机TIMER_RESET=0先执行IDS=11,下一周期执行IDS=10,产生唯一一个周期的上升沿。
你的实验:
1.每次按复位键,R10的值会交替由0变1,或由1变0,是由于你设了md20108中 Reset执行事件子程序而非开机执行事件子程序,所以when每次Reset会执行一次。
2.为什么你的实验每次只有其中一个IDS执行呢?
因为条件中使用格式r10只会执行程序时检检测/锁定r10状态,要实时检测r10需要写成同步动作$r[10]格式。
分析的很好。