技术论坛

 同步动作的工作方式

返回主题列表
作者 主题
老学童
奇侠

经验值:7504
发帖数:714
精华帖:29
楼主    2020-08-18 15:14:29
主题:同步动作的工作方式

最近在老外写的一段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的工作原理思考,这两个程序段就无法理解了,希望各位高手来发表自己的见解!


人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。
西范斯
至圣

经验值:18820
发帖数:3948
精华帖:36
1楼    2020-08-18 19:52:05
精华帖  主题:回复:同步动作的工作方式
分析:
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]格式。
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。