[三菱] 三菱PLC基本编程练习(18):加延时,用交替输出指令ALTP...

[复制链接]
查看146 | 回复0 | 2025-3-22 07:30:36 | 显示全部楼层 |阅读模式
前面(17)讲的是用比较指令控制点数长度可调的广告灯的往亮复灭移动程序,如要全亮后延时10秒,全灭后延时10秒,且看下面能否实现。


案例要求:


一开关控制5个小灯的循环点亮,每次隔1秒钟,依次点亮Y0~Y4亮灯个数可调为2-5个,全亮后延时10秒。


再返回依次熄灭Y4~Y0,全灭后延时10秒,往复循环移动。


直到开关断开,全部灯都灭掉。


X1为设定亮灯个数的按钮,需要在5秒钟内设定,按一次加一个,长按5秒时间,设定个数归零。


软元件分配/使用如下表:


Y0
灯1HL1
Y1
灯2HL2
Y2灯3HL3
Y3灯4HL4
Y4灯5HL5
X0开关SB1
X1
按钮
SB2


设计思路:


按钮按动次数计数,并对次数用乘法指令MUL乘10运算,因要延时,需要加上100。结果做为定时器的时间设定值。


定时器每动作一次,用交替输出指令ALTP或FF,把移位条件M0反向,刚好在设定时间内左移或右移完成。


按钮设定次数需要在5秒钟之内设定完成,否则长按按钮5秒次数复位。




接线简图同上回:



编写程序:


首先,我们用梯形图语言来编写,打开三菱PLC编程软件MELSOFT GX Works3,新建一个工程,选择系列、机型,选择梯形图语言编写:



梯形图逻辑程序如下:


▲ 初始化及亮灯个数设置



▲ 主程序



这里可初始化复位T0-T2,也可不复位。如复位后,要重新设定亮灯个数。


注意:乘法的积是用32位寄存器来保存的,后面的+就需要用32位的D+。


乘法指令解释:


其次,我们再用ST语言来编写,打开三菱PLC编程软件MELSOFT GX Works3,新建一个工程,选择系列、机型,选择ST语言编写:



ST语言程序如下:


MOV(SM402 OR NOT X0,K0,K4Y0);//初始化


OUT_C(X1,C0,K5);//移位长度限位5位

OUT_T(X1,T0,K50);//移位长度5秒复位

MOV(T0,K0,C0);


MOV(X0,C0,D3);//C0的值要转换一下

OUT_T(X0 AND NOT C1 AND NOT T1,T1,K10);//1秒脉冲


OUT_C(X0 AND NOT C1 AND T1,C1,D3);//亮灯数


RST(T2,C1);//这里不能用传送0的方式复位。


D1:=C0*10;

D10:=D1+K100;//T2的计时


OUT_T(X0 AND NOT T2,T2,D10);//反转定时


FF(X0 AND NOT T2,M0);//移位条件反转


SFTLP(X0 AND T1 AND  M0,SM400,K16,K1,Y0);//左移位

SFTRP(X0 AND T1 AND NOT M0,SM401,K16,K1,Y0);//右移位



ST语言程序2:


MOV(SM402 OR NOT X0,K0,K4Y0);//初始化


OUT_C(X1,C0,K5);//移位长度限位5位

OUT_T(X1,T0,K50);//移位长度5秒复位

MOV(T0,K0,C0);


MOV(X0,C0,D3);//C0的值要转换一下

OUT_T(X0 AND NOT C1 AND NOT T1,T1,K10);//1秒脉冲


OUT_C(X0 AND NOT C1 AND T1,C1,D3);//亮灯数


RST(T2,C1);//这里不能用传送0的方式复位。


D1:=C0*10;


IF  M0  THEN//左移时间延时选择10秒

D10:=D1+K100;//T2的计时数

END_IF;

IF  NOT M0  THEN//右移时间延时选择5秒

D10:=D1+K50;//T2的计时数

END_IF;

OUT_T(X0 AND NOT T2,T2,D10);//反转定时


FF(X0 AND NOT T2,M0);//移位条件反转


SFTLP(X0 AND T1 AND  M0,SM400,K16,K1,Y0);//左移位

SFTRP(X0 AND T1 AND NOT M0,SM401,K16,K1,Y0);//右移位


▲ 左右移位延时时间不同的程序



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则