tt99166 发表于 2023-11-22 15:49:40

Codesys——模拟喷泉(if 语句)

以下内容纯属个人理解,如有错误欢迎指正。
本篇主要是关于ST编程IF语句的一个小案例,是模拟喷泉的一个小程序。
控制要求:
按下10.0启动,按下10.1停止启动后,
1、A组先喷5秒后灭
2、B、C同时喷,5秒后B停,再5秒C停
3、A、B又同时喷,2秒后,C也喷,持续5秒后全部停。
/********************变量声明************************/
PROGRAM PLC_PRG
VAR
        BUTTON_ON: BOOL;      //启动按钮
        BUTTON_OFF: BOOL;   //停止按钮
        TEMP0: BOOL;          //中间变量
        LED1: BOOL;         //灯(喷泉)1
        LED2: BOOL;         //灯(喷泉)2
        LED3: BOOL;         //灯(喷泉)3
       
        TON_0_PT: TIME:=T#5S; //定时器0预设值
        TON_1_PT: TIME:=T#5S;
        TON_2_PT: TIME:=T#5S;
        TON_3_PT: TIME:=T#2S;
        TON_4_PT: TIME:=T#5S;
        TON_5_PT: TIME:=T#3S;
        TON_0_ET: TIME;       //定时器0当前值
        TON_1_ET: TIME;
        TON_2_ET: TIME;
        TON_3_ET: TIME;
        TON_4_ET: TIME;
        TON_5_ET: TIME;
        TON_0_Q: BOOL;      //定时器0输出
        TON_1_Q: BOOL;
        TON_2_Q: BOOL;
        TON_3_Q: BOOL;
        TON_4_Q: BOOL;
        TON_5_Q: BOOL;
       
        TON_0: TON;
        TON_1: TON;
        TON_2: TON;
        TON_3: TON;
        TON_4: TON;
        TON_5: TON;
END_VAR


/********************程序编写************************/
//起保停电路,当停止按钮按下或者定时器5时间到(流程结束)的时候,TEMP值为0。
TEMP0 := (TEMP0 OR BUTTON_ON) AND (NOT BUTTON_OFF) AND (NOT TON_5_Q);
IF TEMP0 THEN
        //亮5S后灭,10S之后再亮,亮7S后灭。
        LED1 := (TEMP0 OR TON_2_Q ) AND (NOT TON_0_Q) AND (NOT TON_4_Q);
        //启动5S后亮5S后灭,5S后再亮,亮7S后灭
        LED2 := (TON_0_Q OR TON_2_Q OR TON_3_Q ) AND (NOT TON_1_Q) AND (NOT TON_4_Q);
        //启动5S后亮10S后灭,2S后再亮,亮5S后灭
        LED3 := (TON_0_Q OR TON_3_Q ) AND (NOT TON_2_Q) AND (NOT TON_4_Q);
   
        TON_0(IN:=TEMP0 , PT:=TON_0_PT ,
                  Q=>TON_0_Q , ET=>TON_0_ET );
        TON_1(IN:=TON_0_Q , PT:=TON_1_PT ,
                  Q=>TON_1_Q , ET=>TON_1_ET );
        TON_2(IN:=TON_1_Q , PT:=TON_2_PT ,
                  Q=>TON_2_Q , ET=>TON_2_ET );
        //复位定时器完成位,否则后续流程无法顺利进行。
        IFTON_2_Q THEN
            TON_0_Q := FALSE;
                TON_1_Q := FALSE;
    END_IF
        TON_3(IN:=TON_2_Q , PT:=TON_3_PT ,
                  Q=>TON_3_Q , ET=>TON_3_ET );       
        IFTON_3_Q THEN
            TON_2_Q := FALSE;
    END_IF
        TON_4(IN:=TON_3_Q , PT:=TON_4_PT ,
                  Q=>TON_4_Q , ET=>TON_4_ET );
        TON_5(IN:=TON_4_Q , PT:=TON_5_PT ,
                  Q=>TON_5_Q , ET=>TON_5_ET );
    IFTON_5_Q THEN
            TON_4_Q := FALSE;
                TON_3_Q := FALSE;
    END_IF

END_IF
页: [1]
查看完整版本: Codesys——模拟喷泉(if 语句)