FUNCTION_BLOCK IJ_SyncControl VAR_EXTERNAL END_VAR VAR_INPUT REAL_IN0 :REAL; REAL_IN1 :REAL; REAL_IN2 :REAL; BOOL_IN0 :BOOL; BOOL_IN1 :BOOL; BOOL_IN2 :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; 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; INT_TEMP0 :INT; INT_TEMP1 :INT; INT_TEMP2 :INT; END_VAR (* 时 间:20191129 版 本:1.4 作 者:姚立 名 称:吾悦定制新云群控、新云单控、本地单控数据同步功能块 说 明: IN0为新云/本地群控参数 IN1为本地单控参数,IN2为新云单控参数 CM 为新云模式 0本地模式 1新云模式 RM 为运行模式 0本地模式 1调试模式 2应急模式 CM=0 本地单控参数--》新云单控参数 CM=1,RM<>2 新云群控参数--》新云单控参数/本地单控参数 ;新云单控参数《--》本地单控参数 CM=1,RM =2 预留给应急情况下由上位机脚本进行群组控制 ;新云单控参数《--》本地单控参数 支持BOOL,REAL,INT三种类型变量 备 注: 依赖块:无 *) (**********新云模式时变量相互同步,本地模式时,本地->新云单向同步*************) if CM =0 then (*本地时赋值新云模式开关,主控CPU时赋值为定时开关*) if BOOL_IN0<>BOOL_TEMP0 then (*主控CPU群组控制--》新云/本地控制*) BOOL_OUT0:=BOOL_IN0; (*新云群控*) BOOL_OUT1:=BOOL_IN0; (*本地单控*) BOOL_OUT2:=BOOL_IN0; (*新云单控*) else (*新云单控失效*) 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 (*主控CPU群组控制--》新云/本地控制*) BOOL_OUT0:=BOOL_IN0; (*新云群控*) BOOL_OUT1:=BOOL_IN0; (*本地单控*) BOOL_OUT2:=BOOL_IN0; (*新云单控*) 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; (**********新云模式时变量相互同步,本地模式时,本地->新云单向同步*************) 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