题目要求:
两台电动机M1、M2,要求当按下启动按钮"x启动"后,M1启动,10秒后M2启动;
当需要按下停止按钮"x停止",M2停车,8秒后M1停车。
两个开关相互独立,不能同时按下。当按下“x急停”时,所有电机和开关全部复位。
要求在HMI上可以控制,可以设置启动、停止延时时间,显示剩余时间。
Step1: 先写按下启动后需要实现的动作
Step2: 再写按下停止后需要实现的动作
Step3:再写按下急停后需要实现的功能
Step4:要在HMI上对时间可以设置,并且也要显示剩余时间,因此需要数据转换程序
Step5:对变量赋地址,方便与HMI绑定起来
Step6:制作触摸屏界面,设置地址与PLC变量对应,在线模拟运行
到此为止,题目基本功能就已经完成了,接下来就是查一查有没有BUG。
通过测试发现,当按下“启动”时,无法按“停止”,这是正常的,我们程序里面就是这样写的。但是问题来了,当按下“停止”时,却可以再按下“启动”,这跟我们程序想的不一致。
观察程序,发现问题,是由于PLC扫描顺序导致的问题!
当按下“x启动”,“x停止”被复位,HMI上确实按不了停止按钮,没问题。
程序执行到下面这段网络时,按下“x停止”,“x启动”被复位了,也没啥问题。
但如果此时再按“x启动”,程序扫描到上面这个网络时,又要执行"x停止"被复位这句话,"x停止"置FALSE,那么下面网络就不执行了,"x启动"被释放,这时就可以按下“x启动”了。
最终导致的结果就是:按下“启动”时,无法按“停止”;按下“停止”时,可以按“启动”....
解决办法:加入标志位,进行约束。
在TON_2运行的时候,按下“x启动”无效果,在TON_1运行的时候,按下“x停止”无效果,类似于“互锁”的感觉,便可以解决上述由于PLC扫描顺序而引起的小问题。