楼主最近还看过
这个是我用三菱的ST语言写的功能块(水处理行业用的)给你参考一下。
(*////////////////////////////////////////////////////启动////////////////////////////////////////////*)
R2(CLK:=SM412);
R1(CLK:=自动启动);
IF R1.Q THEN
Pump_Condition:=1;
END_IF;
IF NOT 自动启动 THEN
Pump_Condition:=0;
END_IF;
(*////////////////////////////////////////////////////液位////////////////////////////////////////////*)
IF 低液位 THEN
Level_In := FALSE;
ELSIF 高液位 OR R1.Q THEN
Level_In := TRUE;
END_IF;
(*/////////////////////////////////////////////////////开始计时////////////////////////////////////////////*)
IF 自动启动 AND 急停 AND Level_In AND (泵1自动_手动 OR 泵2自动_手动 )THEN
IF r2.q THEN
Pump_TimePV_Sec:= Pump_TimePV_Sec+1;
END_IF;
IF Pump_TimePV_Sec>=60 THEN
Pump_TimePV_Minute:=Pump_TimePV_Minute+1;
Pump_TimePV_Sec:=0;
END_IF;
IF Pump_TimePV_Minute>=60 THEN
Pump_TimePV_Hour:=Pump_TimePV_Hour+1;
Pump_TimePV_Minute:=0;
END_IF;
END_IF;
(*////////////////////////////////////////////////////计时1#泵运行时间到判断////////////////////////////////////////////*)
IF Pump_Condition=1 AND ((Pump_TimePV_Minute >= Pump1_RunTime_Minute AND Pump_TimePV_Hour >= Pump1_RunTime_Hour) OR (Pump_TimePV_Hour > Pump1_RunTime_Hour)) THEN
Pump_Condition:= 2;
Pump_TimePV_Sec:=0;
Pump_TimePV_Minute:=0;
Pump_TimePV_Hour:=0;
END_IF;
(*////////////////////////////////////////////////////计时1#泵停止时间到判断////////////////////////////////////////////;*)
IF Pump_Condition=2 AND ((Pump_TimePV_Minute >= Pump1_StopTime_Minute AND Pump_TimePV_Hour >= Pump1_StopTime_Hour) OR (Pump_TimePV_Hour > Pump1_StopTime_Hour)) THEN
Pump_Condition:= 3;
Pump_TimePV_Sec:=0;
Pump_TimePV_Minute:=0;
Pump_TimePV_Hour:=0;
END_IF;
(*/////////////////////////////////////////////////////计时2#泵启动时间到判断////////////////////////////////////////////*)
IF Pump_Condition=3 AND ((Pump_TimePV_Minute >= Pump2_RunTime_Minute AND Pump_TimePV_Hour >= Pump2_RunTime_Hour) OR (Pump_TimePV_Hour > Pump2_RunTime_Hour)) THEN
Pump_Condition:= 4;
Pump_TimePV_Sec:=0;
Pump_TimePV_Minute:=0;
Pump_TimePV_Hour:=0;
END_IF;
(*/////////////////////////////////////////////////////计时2#泵停止时间到判断////////////////////////////////////////////*)
IF Pump_Condition=4 AND ((Pump_TimePV_Minute >= Pump1_StopTime_Minute AND Pump_TimePV_Hour >= Pump1_StopTime_Hour) OR (Pump_TimePV_Hour > Pump1_StopTime_Hour)) THEN
Pump_Condition:= 1;
Pump_TimePV_Sec:=0;
Pump_TimePV_Minute:=0;
Pump_TimePV_Hour:=0;
END_IF;
(*/////////////////////////////////////////////////////1#泵故障和手动切换2#泵////////////////////////////////////////////*)
IF Pump_Condition=1 AND (NOT 泵1自动_手动 OR Pump1_Fault) THEN
Pump_Condition:= 3;
END_IF;
(*/////////////////////////////////////////////////////2#泵故障和手动切换1#泵////////////////////////////////////////////*)
IF Pump_Condition=3 AND (NOT 泵2自动_手动 OR Pump2_Fault) THEN
Pump_Condition:= 1;
END_IF;
(*/////////////////////////////////////////////////////1#泵输出////////////////////////////////////////////*)
Pump1_Out:= 急停 AND NOT Pump1_Fault AND ((Level_In AND 自动启动 AND 泵1自动_手动 AND NOT Pump1_Fault AND Pump_Condition=1) OR (NOT 泵1自动_手动 AND Pump1_Hand ));
(*/////////////////////////////////////////////////////2#泵输出////////////////////////////////////////////*)
Pump2_Out:= 急停 AND NOT Pump2_Fault AND ((Level_In AND 自动启动 AND 泵2自动_手动 AND NOT Pump1_Fault AND Pump_Condition=3) OR (NOT 泵2自动_手动 AND Pump2_Hand ));
;