作者 | 主题 |
---|---|
老学童 奇侠 经验值: 7521 发帖数: 715 精华帖: 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的工作原理思考,这两个程序段就无法理解了,希望各位高手来发表自己的见解!
人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。
|
西范斯 至圣 经验值: 18859 发帖数: 3962 精华帖: 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]格式。 |
菲戈 至圣 经验值: 28623 发帖数: 5906 精华帖: 61 |
2楼 2020-08-18 21:50:22
主题:回复:同步动作的工作方式 西门子的同步异步功能真的是太好用了,最低级的808D都支持。可以玩出很多花样
欢迎交流,QQ:2301013064 邮箱:feige6@139.com
|
老学童 奇侠 经验值: 7521 发帖数: 715 精华帖: 29 |
3楼 2020-08-19 18:26:04
主题:回复:同步动作的工作方式 谢谢西侠,分析的太棒了!
人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。
|