SCL语言之上升沿和下降沿指令,用SCL语言做程序时经常使用上升沿和下降沿指令,对于这个指令有两种写法,本文简单介绍一下这两种写法,大家根据自己的需要,看看适合自己那种写法
一、系统标准块:R_TRIG(上升沿) / F_TRIG(下降沿)
| 引脚 | 含义 |
| CLK | 边沿检测输入信号 |
| Q | 边沿脉冲输出,仅1个扫描周期=1 |
内部自带历史寄存器,不用自己定义前一周期变量.
工作原理:PLC每个周期自动保存上一周期 CLK 状态,
- R_TRIG:上周期0→本周期1 → Q=1(1周期)
- F_TRIG:上周期1→本周期0 → Q=1(1周期)
优缺点
优点:代码整洁、不易写错、标准化、便于阅读,项目首选
缺点:每个边沿占用一个DB/背景数据块,点位极多时略占资源
以下是实例:
二、前后周期对比法(自写边沿,最底层原理)
原理公式
- 上升沿脉冲: P_UP := 当前信号 & !上周期信号
- 下降沿脉冲: P_DOWN := !当前信号 & 上周期信号
关键:最后把当前值存入历史变量,留给下个周期对比
优缺点
优点:不生成额外FB背景块、省存储、大量点位批量处理方便
缺点:每个信号多1个BOOL变量,新手容易刷新顺序写错失效
以下是实例:
三.做了一个简单的传送带控制功能块
1.调用系统功能块 R_TRIG(上升沿) / F_TRIG(下降沿)编写的程序
2.前后周期对比法编写的程序
3.两者相互比较
对于上升沿和下降沿指令,除了以上两种写法,还有别的方法,例如,可以通过数组+FOR循环写,但个人觉得不如以上两种方法简单易懂,个人觉得日常使用还是使用以上两种比较好.
数组+FOR循环实例:
FOR i:=0 TO 9 DO
Puls:=Sig AND NOT Sig_Last;
Sig_Last:=Sig;
END_FOR;
好了,本文就介绍到这里,这些都是个人自己学习SCL语言时总结,只想记录总结一下,把这些知识分享出来仅供大家参考,希望也能对您们有所帮助,不对的地方,欢迎留言讨论,感谢大家的阅读,谢谢大家啦!