最近在老外写的一段SPL(SAFE.SPF)中有一段程序无法理解,有疑问部分的内容如下:
....
DEFINE TIMER_RESET AS $A_PLCSIOUT[2]
....
IDS=98 WHEN (TIMER_RESET == 1) DO TIMER_RESET = 0
IDS=99 WHEN (TIMER_RESET == 0) DO TIMER_RESET = 1
N999 $A_PLCSIOUT[1]=1;
N1000 RET
问题:
比较疑惑的时红色部分,IDS=98中将TIMER_RESET设置为0,IDS=99中将TIMER_RESET设置为1,按理同步动作会在一个插补周期完成,那么执行的结果是什么呢?
测试:
SINUTRAIN中没有SPL,为了理解上述同步动作,只好利用程序事件激活同步动作,在CYCPE1MA.SPF添加以下程序段:
....
IDS=10 WHEN (R10 == 1) DO $R10=0
IDS=11 WHEN (R10 == 0) DO $R10=1
M17
测试结果:
重新启动SINUTRAIN后
1)可以看到同步动作有效;
2)R10的值由0变1;
3)手动将R10的值改成0后,R10保持值0
4)每次按复位键,R10的值会交替由0变1,或由1变0
结论:
各个同步动作之间相互关联,一个同步动作对一个变量操作后,下一个同步动作对同一变量无效。
虽然对其工作方式有了新的认识,但是,还是不太明白其中的道理,如果用PLC的工作原理思考,这两个程序段就无法理解了,希望各位高手来发表自己的见解!