tt99166 发表于 2023-11-22 16:02:29

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]
查看完整版本: Codesys——小灯顺序点亮(case语句)