以下内容纯属个人理解,如有错误欢迎指正。
本篇主要是关于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 );
//复位定时器完成位,否则后续流程无法顺利进行。
IF TON_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 );
IF TON_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 );
IF TON_5_Q THEN
TON_4_Q := FALSE;
TON_3_Q := FALSE;
END_IF
END_IF