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
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
|