一、任务总体概述
根据控制任务描述:我们应该实现如下功能:
1.在没有按下启动按钮之前,按下装料,右行,卸料,左行,复位按钮系统看不出任何反应。
2.按下启动按钮之后,装料、右行、卸料、左行这四个操作按钮中只有装料按钮按下系统会有响应,并且在装料过程中(3s),按下启动、右行、卸料、左行这个四个按钮,系统不会有其他多余的响应。
3.同理2,装料动作完成之后,除复位按钮外,只有右行按钮能被响应,启动、装料、卸料、左行这四个按钮按下不会有多余响应
4.同理3,右行动作完成后,只有卸料按钮能被响应
5.同理4,卸料动作完成后,只有左行按钮会被响应
6.左行动作完成后,系统开始新一轮的循环。
7.当系统在做某一动作的过程中,此时按下复位按钮紧急停车,系统应立即停止响应,待再次按下启动按钮时,系统将没做完的动作继续做完后,等待手动控制的其他指令。(如在右行过程中系统刚闪烁了1s,此时复位按钮被按下,那么对应指示灯应立即熄灭,再次按下启动按钮后,右行灯将剩余3s闪烁完后,等待其他指令。)
二、时序图及IO分配表和接线图
略。(较为简单)
三、话不多说直接上程序
1.
停止优先自锁电路,其中M1是代表着系统处于启动状态的标志位
2.
M6标志位的具体作用请往下看,这也算是程序设计时的一个败笔。
3.
第一条程序上串接了一个M2的常闭触点(默认闭合),最后的输出是一个3s高电平的沿触发宽脉冲继电器,第二条是输出给Q1,第三条是M2标志位的一个自锁电路,意味着只有当启动按钮按下时,才会得电。在一个程序运行周期内,当按下SB5时,第一条程序是通路,T006有输出,作用给Q1,然后到第三条语句,M2得电并自锁。在之后的程序运行周期内,只要M2是得电状态,按下SB5按钮,Q1都不会再次被触发(因为此时M2常闭触点是断开的)。这就实现了任务所要求的目标。
4.
接下来是右行逻辑,同理也有标志位M3,SB6实现有效执行一次的逻辑与上面相同,不再赘述。我们看一下第三条语句,当Q2得电时M3才会得电并自锁。
5.
我们看一下信号的时序图:
图中加减计数器C007,M3反 端为1时,输出为0,M3反 端为0时,开始记录上升沿个数,达到设定值2时,输出为1;锁存继电器SF005 Q2端为高电平时输出置1,之后的输出状态仅由C007端控制,当C007输出高电平时,输出置位为0(因为左边是电源母线,输出线圈得电,对应常开触点得电,常闭触点不得电,所以会引起电路的通断,因表述方便所以直接按照上面说了)。这样我们就得到了3s的完全高电平。
6.
接着,我们把得到的SF005反 放在SB7按钮通路上(如图第一条语句所示),由时序图可以看出,SF005反 与M3的通断在Q2响应期间是完全反相的,这样我们就能实现在Q2响应期间,其他按键按下也没有响应。
在上图第三条语句中,M4的自锁位置放在了M1启动标志位之后,这样就能实现在卸料过程中按下复位按钮,重新启动后,不会出现异常情况(比如M4的自锁位置放在M1之前就会出现复位即停并且能够反复执行SB7的问题)
7.
SB8按键设计和前面思想一致,在此不再赘述。
当然对于编写的程序,应该还会存在一些未知的bug以及较多的冗余。所以程序仅供参考。
四、关于执行任务时按下复位,重新启动后自动先完成剩余任务
这里提供一个思路,利用沿宽脉冲继电器和加减计数器
以下提供了在装料过程中实现类似中断的功能,但只能中断一次,看看就行。
eg:
五、写在后面
源码链接放在这里:链接:https://pan.baidu.com/s/1Vt_158pzYRaVTf91UT38sA
提取码:1pep
由于笔者能力有限,对本次任务只能做到这种程度。如果后面的读者有好的方法也欢迎告知我!!!非常感谢!
最后给大家推荐一些自学的视频
【西门子LOGO!基础及应用】 https://www.bilibili.com/video/BV17x411R7KM/?p=16&share_source=copy_web&vd_source=b7375adc908f34178d4e3d6deea89b8a
这个主要看用到的定时器和计数器就行
【S71200第3课(梯形图入门)】 https://www.bilibili.com/video/BV1hQ4y1R7vi/?share_source=copy_web&vd_source=b7375adc908f34178d4e3d6deea89b8a
这个视频我感觉内容挺好的。