You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

212 lines
6.3 KiB

FUNCTION_BLOCK IJ_LSyncControl
VAR_EXTERNAL
END_VAR
VAR_INPUT
REAL_IN0 :REAL;
REAL_IN1 :REAL;
REAL_IN2 :REAL;
BOOL_IN0 :BOOL;
BOOL_IN1 :BOOL;
BOOL_IN2 :BOOL;
BOOL_IN3 :BOOL;
INT_IN0 :INT;
INT_IN1 :INT;
INT_IN2 :INT;
CM :BOOL;
RM :INT;
END_VAR
VAR_OUTPUT
REAL_OUT0 :REAL;
REAL_OUT1 :REAL;
REAL_OUT2 :REAL;
BOOL_OUT0 :BOOL;
BOOL_OUT1 :BOOL;
BOOL_OUT2 :BOOL;
BOOL_OUT3 :BOOL;
INT_OUT0 :INT;
INT_OUT1 :INT;
INT_OUT2 :INT;
END_VAR
VAR
REAL_TEMP0 :REAL;
REAL_TEMP1 :REAL;
REAL_TEMP2 :REAL;
BOOL_TEMP0 :BOOL;
BOOL_TEMP1 :BOOL;
BOOL_TEMP2 :BOOL;
BOOL_TEMP3 :BOOL;
INT_TEMP0 :INT;
INT_TEMP1 :INT;
INT_TEMP2 :INT;
VER :REAL;
END_VAR
(*
20200410
1.0
/
BOOL0为本地定时控制输入 BOOL3为联动控制输入
用于需要设备群组定时 BOOL0为群组定时控制输入 BOOL3为联动控制输入
IN0为本地定时/ IN3为联动控制参数IN1为本地单控参数IN2为新云单控参数
CM 为新云模式 0本地模式 1新云模式
RM 为运行模式 0本地模式 1调试模式 2应急模式
CM=0 本地单控参数--
CM=1,RM<>2 新云群控参数--/ --
CM=1,RM =2 预留给应急情况下由上位机脚本进行群组控制 --
BOOL,REAL,INT三种类型变量
*)
VER:=1.0;
(**********->*************)
if CM =0 then
if BOOL_IN0<>BOOL_TEMP0 and BOOL_IN3=BOOL_TEMP3 then (*/--/*)
BOOL_OUT0:=BOOL_IN0; (**)
BOOL_OUT1:=BOOL_IN0; (**)
BOOL_OUT2:=BOOL_IN0; (**)
end_if;
if BOOL_IN3<>BOOL_TEMP3 and BOOL_IN0=BOOL_TEMP0 then (*--/*)
BOOL_OUT3:=BOOL_IN3; (**)
BOOL_OUT1:=BOOL_IN3; (**)
BOOL_OUT2:=BOOL_IN3; (**)
end_if;
if BOOL_IN0=BOOL_TEMP0 and BOOL_IN3=BOOL_TEMP3 then
BOOL_OUT1:=BOOL_IN1;
BOOL_OUT2:=BOOL_IN1;
end_if;
end_if;
if CM =1 then
if RM=2 then
(*--*)
if BOOL_IN1<>BOOL_TEMP1 then (*-- *)
BOOL_OUT1:=BOOL_IN1;
BOOL_OUT2:=BOOL_IN1;
elsif BOOL_IN2<>BOOL_TEMP2 then (* --*)
BOOL_OUT1:=BOOL_IN2;
BOOL_OUT2:=BOOL_IN2;
end_if;
else
if BOOL_IN0<>BOOL_TEMP0 then (*/--/*)
BOOL_OUT0:=BOOL_IN0; (*/*)
BOOL_OUT1:=BOOL_IN0; (**)
BOOL_OUT2:=BOOL_IN0; (**)
end_if;
if BOOL_IN3<>BOOL_TEMP3 then (*--/*)
BOOL_OUT3:=BOOL_IN3; (**)
BOOL_OUT1:=BOOL_IN3; (**)
BOOL_OUT2:=BOOL_IN3; (**)
end_if;
(*--*)
if BOOL_IN1<>BOOL_TEMP1 then (*-- *)
BOOL_OUT1:=BOOL_IN1;
BOOL_OUT2:=BOOL_IN1;
elsif BOOL_IN2<>BOOL_TEMP2 then (* --*)
BOOL_OUT1:=BOOL_IN2;
BOOL_OUT2:=BOOL_IN2;
end_if;
end_if;
end_if;
BOOL_TEMP0:=BOOL_IN0;
BOOL_TEMP1:=BOOL_IN1;
BOOL_TEMP2:=BOOL_IN2;
BOOL_TEMP3:=BOOL_IN3;
(**********->*************)
if CM =0 then (*CPU*)
if REAL_IN0<>REAL_TEMP0 then (*CPU--/*)
REAL_OUT0:=REAL_IN0; (**)
REAL_OUT1:=REAL_IN0; (**)
REAL_OUT2:=REAL_IN0; (**)
else (**)
REAL_OUT1:=REAL_IN1;
REAL_OUT2:=REAL_IN1;
end_if;
end_if;
if CM =1 then
if RM=2 then
(*--*)
if REAL_IN1<>REAL_TEMP1 then (*-- *)
REAL_OUT1:=REAL_IN1;
REAL_OUT2:=REAL_IN1;
elsif REAL_IN2<>REAL_TEMP2 then (* --*)
REAL_OUT1:=REAL_IN2;
REAL_OUT2:=REAL_IN2;
end_if;
else
if REAL_IN0<>REAL_TEMP0 then (*CPU--/*)
REAL_OUT0:=REAL_IN0; (**)
REAL_OUT1:=REAL_IN0; (**)
REAL_OUT2:=REAL_IN0; (**)
end_if;
(*--*)
if REAL_IN1<>REAL_TEMP1 then (*-- *)
REAL_OUT1:=REAL_IN1;
REAL_OUT2:=REAL_IN1;
elsif REAL_IN2<>REAL_TEMP2 then (* --*)
REAL_OUT1:=REAL_IN2;
REAL_OUT2:=REAL_IN2;
end_if;
end_if;
end_if;
REAL_TEMP0:=REAL_IN0;
REAL_TEMP1:=REAL_IN1;
REAL_TEMP2:=REAL_IN2;
(**********->*************)
if CM =0 then (*CPU*)
if INT_IN0<>INT_TEMP0 then (*CPU--/*)
INT_OUT0:=INT_IN0; (**)
INT_OUT1:=INT_IN0; (**)
INT_OUT2:=INT_IN0; (**)
else (**)
INT_OUT1:=INT_IN1;
INT_OUT2:=INT_IN1;
end_if;
end_if;
if CM =1 then
if RM=2 then
(*--*)
if INT_IN1<>INT_TEMP1 then (*-- *)
INT_OUT1:=INT_IN1;
INT_OUT2:=INT_IN1;
elsif INT_IN2<>INT_TEMP2 then (* --*)
INT_OUT1:=INT_IN2;
INT_OUT2:=INT_IN2;
end_if;
else
if INT_IN0<>INT_TEMP0 then (*CPU--/*)
INT_OUT0:=INT_IN0; (**)
INT_OUT1:=INT_IN0; (**)
INT_OUT2:=INT_IN0; (**)
end_if;
(*--*)
if INT_IN1<>INT_TEMP1 then (*-- *)
INT_OUT1:=INT_IN1;
INT_OUT2:=INT_IN1;
elsif INT_IN2<>INT_TEMP2 then (* --*)
INT_OUT1:=INT_IN2;
INT_OUT2:=INT_IN2;
end_if;
end_if;
end_if;
INT_TEMP0:=INT_IN0;
INT_TEMP1:=INT_IN1;
INT_TEMP2:=INT_IN2;
END_FUNCTION_BLOCK