本期分享一个使用S7-1200编写跑马灯小程序.
跑马灯程序主要分为两个部分: 震荡电路和计数器累计计数、复位及跑马灯输出
1.首先用两个延时继电器组合,编写一个震荡电路.
解析说明:当PLC开始运行时,延时继电器2(DB2)延时50毫秒接通M0.1输出有效. M0.1输出后延时50毫秒延时继电器1(DB1)M0.0,M0.0生效后关断延时继电器2,程序进入震荡循环模式。
编程实例如下:
震荡循环波形图如下:
(注:以上所示震荡周期为50ms,可根据具体情况设定延时继电器中数值.)
2.累计计数:
解析说明:当M0.1震荡时,计数器(DB3)接收计数使能信号开始计数,计数所得结果寄存在MW1中.M0.1计数使能信号震荡一次,计数器结果MW1加1.当计数结果为1时比较指令接通输出Q0.1,依次类推直到计数结果为4,输出Q0.3.当Q0.3闪烁周期完成熄灭时,使用Q0.3的下降沿信号去复位计数器,使计数器重新开始从1开始计数,依次循环.
(注: ①案例中跑马灯由四个灯交替闪烁,故计数器累计到4,复位计数器.②使用常1信号的上升沿,复位作用为当程序首次运行时,复位计数器中的值,相当于使用开机脉冲清零计数器寄存器中的值.)
编程实例如下:
总结:以上设计利用震荡电路产生脉冲,计数器指令进行累计计数并清零,辅助比较指令进行结果比较,然后输出对应的灯,完成跑马灯的设计要求.
附波形图一张,以便粉丝们理解(图中信号从上到下依次为M0.1、M0.0、M6.0、Q0.0、Q0.1、Q0.2、Q0.3).
设计程序运行视频如下图所示:
video: https://mp.weixin.qq.com/mp/readtemplate?t=pages/video_player_tmpl&action=mpvideo&auto=0&vid=wxv_896159887695265794
文末增加一枚彩蛋,拓展一个更简洁、有效的方案实现上述功能.
解析:上图前两行依然使用第一种方案中的震荡循环方式(详细参照第一种方案).
第5行程序中SHL(左移指令),当SHL指令收到左移使能信号时,整个字节左移一位,结果如图:
第1个左移使能信号(M0.0)有效时, MB1=1,输出结果Q0.0有效;
第2个左移使能信号(M0.0)有效时, MB1=2,输出结果Q0.1有效;
第3个左移使能信号(M0.0)有效时, MB1=4,输出结果Q0.2有效;
第4个左移使能信号(M0.0)有效时, MB1=8,输出结果Q0.3有效;
第5个左移使能信号(M0.0)有效时,MB1=16,此时利用MOVE指令赋值给MB1=0,此处与第一个案例相同,增加一个开机脉冲用以在开机运行时清零MB1中寄存的值.
调试中遇到的问题:跑马灯出现无规律,乱输出的情况,后来查出原因为第5行程序中使能信号(M0.0)开始编写的时候为一个常开触点,由于PLC自身的扫描周期比震荡电路循环周期速度快很多,所以会造成左移使能信号(M0.0)一个震荡电路循环周期内多次被PLC输入寄存器读取为1,后更改为将M0.0更改为一个上升沿信号后故障消失.
本期案例分享就到这里了,如有不妥之处请朋友们指出,同时欢迎同行提供案例分享,下次我们继续聊!
|