4、
电机控制,不带频率输出
FUNCTION_BLOCK "Moto_NoSpeed"
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR_INPUT
_inFB : Bool; // 电机反馈运行状态输入
_inAlarm : Bool; // 电机反馈报警状态输入
_Interlock : Bool; // 联锁保护
_A_Start : Bool; // 自动,运行命令
END_VAR
VAR_OUTPUT
_MotoRun : Bool;
_Err : Bool;
END_VAR
VAR_IN_OUT
_M_Start : Bool; // 手动,运行命令
END_VAR
VAR
"_A/M_Sel" : Bool; // 自动,手动命令选择
_LocJC : Bool; // interLock保护解除
_outRunTemp { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool; // 临时变量‘’
_Timer01 : Time := T#3S;
_ErrCode : Word;
IEC_Timer_01 {InstructionName := 'TON_TIME'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : TON_TIME;
F_TRIG_Alarm {InstructionName := 'F_TRIG'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : F_TRIG;
_ErrTemp { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Word;
END_VAR
BEGIN
IF ((NOT #_Interlock) OR #_LocJC) AND (NOT #_inAlarm) THEN //当联锁没有触发时或联锁解除,且没有外部报警。
IF #"_A/M_Sel" THEN //当自动运行触发后,运行自动程序,同时锁定手动控制
IF #_A_Start THEN
#_outRunTemp := 1;
#_M_Start := 1;
ELSE
#_outRunTemp := 0;
#_M_Start := 0;
END_IF;
ELSE //当自动运行没有触发,运行手动控制
IF #_M_Start THEN
#_outRunTemp := 1;
ELSE
#_outRunTemp := 0;
END_IF;
END_IF;
ELSE
#_M_Start := 0;
//#"_A/M_Sel" := 0;
#_outRunTemp := 0;
END_IF;
#_MotoRun := #_outRunTemp; //电机控制点输出
#F_TRIG_Alarm(CLK := #_inAlarm);
#IEC_Timer_01(IN := #_outRunTemp AND #_inFB = 0,
PT := #_Timer01);
//下面程序全部为错误状态判断,同时输出错误代码及错误状态
IF #IEC_Timer_01.Q THEN //当运行后,设定时间到达后没有反馈信号,输出错误信号
#_ErrCode := #_ErrCode OR 16#1;
ELSE
#_ErrCode := #_ErrCode AND 16#fe;
END_IF;
IF #_inAlarm THEN //当反馈报警信号输入后,显示错误信号
#_ErrCode := #_ErrCode OR 16#2;
END_IF;
IF #F_TRIG_Alarm.Q THEN
#_ErrCode := #_ErrCode AND 16#fd;
END_IF;
IF #_ErrCode <> 0 THEN
#_Err := 1;
ELSE
#_Err := 0;
END_IF;
END_FUNCTION_BLOCK
5、阀门控制
FUNCTION_BLOCK "Valve01"
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR_INPUT
_inFO : Bool;
_inFC : Bool;
_Loc : Bool; // 保护锁定功能。
_sigFB : Bool; // 只有一个FO反馈输入端时,使能次端口。消除没有FC反馈的错误。
_A_Start : Bool; // 自动,启动
END_VAR
VAR_OUTPUT
_outOP : Bool;
_Err : Bool; // 错误触发信号。
END_VAR
VAR_IN_OUT
"_A/M_Sw" : Bool; // 手动/自动切换
_M_Start : Bool; // 手动,启动
END_VAR
VAR
_Timer01 : Time := T#3S; // 错误延时时间设定
IEC_Timer_01 {InstructionName := 'TON_TIME'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : TON_TIME; // 错误判断定时器1 有输出无FO信号输入错误
IEC_Timer_02 {InstructionName := 'TON_TIME'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : TON_TIME; // 错误判断定时器2 无输出无FC信号输入错误或但FO输入时无输出有FO信号输入错误
IEC_Timer_03 {InstructionName := 'TON_TIME'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : TON_TIME; // 错误判断定时器3 FC信号FO信号同时有错误
IEC_Timer_04 {InstructionName := 'TON_TIME'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : TON_TIME; // 错误判断定时器4 FC信号FO信号同时无错误
_ErrCode : Word; // 错误代码,1bit定时器1错误,2bit定时器2错误,3bit定时器3错误,4bit定时器4错误。
_outTemp { ExternalVisible := 'False'} : Bool; // 动作与_outOP相同,作为内部调用使用。
_LocJC : Bool; // Loc保护动作解除
_NotLoc : Bool;
END_VAR
BEGIN
IF (NOT #_Loc) OR #_LocJC THEN
IF #"_A/M_Sw" = 1 THEN
IF #_A_Start = 1 THEN
#_outOP := 1;
#_M_Start := 1;
ELSE
#_outOP := 0;
#_M_Start := 0;
END_IF;
#_M_Start := 0;
ELSE
IF #_M_Start = 1 THEN
#_outOP := 1;
ELSE
#_outOP := 0;
END_IF;
END_IF;
ELSE
#_M_Start := 0;
//#"_A/M_Sw" := 0;
#_outOP := 0;
END_IF;
#IEC_Timer_01(IN := (#_outTemp = TRUE) AND (#_inFO = 0),
PT := #_Timer01);
#IEC_Timer_02(IN := (#_outTemp = FALSE AND #_inFC = 0 AND NOT #_sigFB) OR (#_outTemp = FALSE AND #_inFO = 1 AND #_sigFB),
PT := #_Timer01);
#IEC_Timer_03(IN := (#_inFC = 1 AND #_inFO = 1 AND NOT #_sigFB),
PT := #_Timer01);
#IEC_Timer_04(IN := (#_inFC = 0 AND #_inFO = 0 AND NOT #_sigFB),
PT := #_Timer01);
IF #IEC_Timer_01.Q = 1 THEN
#_ErrCode := #_ErrCode OR 16#1;
ELSE
#_ErrCode := #_ErrCode AND 16#fe;
END_IF;
IF #IEC_Timer_02.Q = 1 THEN
#_ErrCode := #_ErrCode OR 16#2;
ELSE
#_ErrCode := #_ErrCode AND 16#fd;
END_IF;
IF #IEC_Timer_03.Q = 1 THEN
#_ErrCode := #_ErrCode OR 16#4;
ELSE
#_ErrCode := #_ErrCode AND 16#fb;
END_IF;
IF #IEC_Timer_04.Q = 1 THEN
#_ErrCode := #_ErrCode OR 16#8;
ELSE
#_ErrCode := #_ErrCode AND 16#f7;
END_IF;
IF #_ErrCode <> 0 THEN //错误触发
#_Err := 1;
//#_M_Start := 0;
ELSE
#_Err := 0;
END_IF;
END_FUNCTION_BLOCK
楼主最近还看过