恭喜,你发布的帖子
发布于 2019-06-09 23:39:30
11楼
在程序中要实现一个功能:长按按钮C_MTC超过5秒钟切换S_MTC的状态。本来认为是一个非常简单的逻辑,所以第一次我是这么写的,其中T_PRES是记录按钮按下时间的变量。
第一次想象很简单:按钮按下超过5秒的上升沿,如果状态是1则复位状态,是0则置位状态。结果运行发现状态置位以后就复位不掉了,因为如果是置位状态,边沿触发后先复位紧接着就被置位。
第二次改成了下面的样子,觉得用两个触发是不是就可以了呢?
结果发现其实更糟糕,变成了两个边沿触发交替使能,最后只有置位有效,同样不能复位。为了能复位只有在复位后置位指令失去执行条件才可以,那么很简单,把计时变量清零就可以了,所以我又改成了下面的样子。
运行发现还是不行,因为前面扫描条件是满足的,在同一行里虽然把计时变量清零了也无效,最后的解决方案就是分成两行来判断,像下面的样子:
学习PLC第一个要理解的就是PLC的扫描机制:从左至右,从上至下循环扫描。在同一行程序里,后面的任何动作都不会影响前面的判断结果,所以前面几次有问题的逻辑都是在用人脑子想当然做了判断,换作PLC这个死脑筋就不灵了,这也是编程过程中常犯的错误。同样的功能,如果用上程序跳转就简单多了,各位高手指点一下吧。
PLC编程确实是需要见多识广,否则容易闭门造车封闭在自己的思路里。做了十年的水处理控制,其实没有在编程上有太大长进,因为这行对程序要求不高,也就没有动力。最近在做一个编程标准化的研究,就是同类设备使用同样的功能块开发上下位,达到不同人开发不同项目功能和风格一致的目的。开始做才发现要考虑的问题非常多,命名的规则,程序功能,移植和复制的简便性,配套上位机的复用功能等很多问题要处理。如果有正在做类似工作的人大家可以互相交流一下。
请填写推广理由:
分享
只看
楼主