Codesys——小灯顺序点亮(case语句)
以下内容纯属个人理解,如有错误欢迎指正。本篇主要是关于ST编程CASE语句的一个小案例,是顺序亮灯一个小程序。
控制要求:
按下启动按钮 (10.0),绿灯 (Q0.0)亮3S,然后红灯 (Q0.1)亮 2S,接着红绿灯同时 亮5S 后灭。
在这次程序编写的过程中使用到了一个MOVE指令,下面简单对该指令做个介绍。
MOVE指令
上图中的指令使用案例: A2 := MOVE(A1);的功能就是将A1的值传送到A2.
完整程序如下:
/********************变量声明************************/
PROGRAM PLC_PRG
VAR
BUTTON_ON: BOOL;
BUTTON_OFF: BOOL;
TEMP0: BOOL;
STEP: INT;
LED1: BOOL;
LED2: BOOL;
TON_0_PT: TIME:=T#3S;
TON_1_PT: TIME:=T#2S;
TON_2_PT: TIME:=T#5S;
TON_0_ET: TIME;
TON_1_ET: TIME;
TON_2_ET: TIME;
TON_0_Q: BOOL;
TON_1_Q: BOOL;
TON_2_Q: BOOL;
TON_0: TON;
TON_1: TON;
TON_2: TON;
END_VAR
/********************程序编写************************/
TEMP0 := (BUTTON_ON OR TEMP0) AND (NOT BUTTON_OFF) AND (NOT TON_2_Q);
IF TEMP0 THEN
STEP := MOVE(1); //第一步:LED1亮3S
TON_0(IN:=TEMP0 , PT:=TON_0_PT ,
Q=>TON_0_Q , ET=>TON_0_ET );
IF TON_0_Q THEN
STEP := MOVE(2);//第二步:LED2亮2S
END_IF
TON_1(IN:=TON_0_Q , PT:=TON_1_PT ,
Q=>TON_1_Q , ET=>TON_1_ET );
IF TON_1_Q THEN
TON_0_Q := FALSE;
STEP := MOVE(3);//第三步:LED1、LED2同时亮5S
END_IF
TON_2(IN:=TON_1_Q , PT:=TON_2_PT ,
Q=>TON_2_Q , ET=>TON_2_ET );
IF TON_2_Q THEN
TON_1_Q := FALSE;
STEP := MOVE(4);//第四步:LED1、LED2同时熄灭
END_IF
CASE STEP OF
1 :
LED1 := TRUE;
LED2 := FALSE;
2 :
LED1 := FALSE;
LED2 := TRUE;
3 :
LED1 := TRUE;
LED2 := TRUE;
4 :
LED1 := FALSE;
LED2 := FALSE;
END_CASE
END_IF
页:
[1]