FUNCTION_BLOCK BS_DelayGroupVavle VAR_EXTERNAL END_VAR VAR_INPUT LOCK :INT:=0; BOOL_GroupSet :BOOL; INT_GroupSet :INT; REAL_GroupSet :REAL; REAL_IN :ARRAY[0..10] OF REAL; INT_IN :ARRAY[0..10] OF INT; BOOL_IN :ARRAY[0..10] OF BOOL; END_VAR VAR_OUTPUT REAL_OUT :ARRAY[0..10] OF REAL; INT_OUT :ARRAY[0..10] OF INT; BOOL_OUT :ARRAY[0..10] OF BOOL; END_VAR VAR REAL_GroupSetP :REAL; BOOL_GroupSetP :BOOL; INT_GroupSetP :INT; Delay_Ton1 :TON; Delay_Ton2 :TON; Delay_Ton3 :TON; END_VAR (* 时 间:20191008 版 本:1.1 作 者:姚立 名 称:变量延时批量赋值 说 明:用于变量延时批量赋值,可选锁定单体变量输入 1-5s分别赋值1-10变量/1-5s分别赋值11-20变量; LOCK 0均不锁定;1锁定BOOL;2,锁定INT;3,锁定REAL; 备 注:支持10组BOOL,10组REAL,10组INT 依赖块:无 *) (**********一个REAL型总变量对50个变量赋值,50个变量也可单独赋值*************) Delay_Ton1(PT :=t#5s ); if REAL_GroupSet<>REAL_GroupSetP and Delay_Ton1.Q=0 then Delay_Ton1.IN:=1; end_if; if Delay_Ton1.Q=1 then Delay_Ton1.IN:=0; end_if; Delay_Ton2(PT :=t#5s ); if BOOL_GroupSet<>BOOL_GroupSetP and Delay_Ton2.Q=0 then Delay_Ton2.IN:=1; end_if; if Delay_Ton2.Q=1 then Delay_Ton2.IN:=0; end_if; Delay_Ton3(PT :=t#5s ); if INT_GroupSet<>INT_GroupSetP and Delay_Ton3.Q=0 then Delay_Ton3.IN:=1; end_if; if Delay_Ton3.Q=1 then Delay_Ton3.IN:=0; end_if; if Delay_Ton1.IN=1 then if Delay_Ton1.et>t#0.0s then REAL_OUT[01]:=REAL_GroupSet; end_if; if Delay_Ton1.et>t#0.5s then REAL_OUT[02]:=REAL_GroupSet; end_if; if Delay_Ton1.et>t#1.0s then REAL_OUT[03]:=REAL_GroupSet; end_if; if Delay_Ton1.et>t#1.5s then REAL_OUT[04]:=REAL_GroupSet; end_if; if Delay_Ton1.et>t#2.0s then REAL_OUT[05]:=REAL_GroupSet; end_if; if Delay_Ton1.et>t#2.5s then REAL_OUT[06]:=REAL_GroupSet; end_if; if Delay_Ton1.et>t#3.0s then REAL_OUT[07]:=REAL_GroupSet; end_if; if Delay_Ton1.et>t#3.5s then REAL_OUT[08]:=REAL_GroupSet; end_if; if Delay_Ton1.et>t#4.0s then REAL_OUT[09]:=REAL_GroupSet; end_if; if Delay_Ton1.et>t#4.5s then REAL_OUT[10]:=REAL_GroupSet; end_if; elsif REAL_GroupSet=REAL_GroupSetP then REAL_OUT[01]:=REAL_IN[01]; REAL_OUT[02]:=REAL_IN[02]; REAL_OUT[03]:=REAL_IN[03]; REAL_OUT[04]:=REAL_IN[04]; REAL_OUT[05]:=REAL_IN[05]; REAL_OUT[06]:=REAL_IN[06]; REAL_OUT[07]:=REAL_IN[07]; REAL_OUT[08]:=REAL_IN[08]; REAL_OUT[09]:=REAL_IN[09]; REAL_OUT[10]:=REAL_IN[10]; end_if; (**********一个BOOL型总变量对50个变量赋值,50个变量也可单独赋值*************) if Delay_Ton2.IN=1 then if Delay_Ton2.et>t#0.0s then BOOL_OUT[01]:=BOOL_GroupSet; end_if; if Delay_Ton2.et>t#0.5s then BOOL_OUT[02]:=BOOL_GroupSet; end_if; if Delay_Ton2.et>t#1.0s then BOOL_OUT[03]:=BOOL_GroupSet; end_if; if Delay_Ton2.et>t#1.5s then BOOL_OUT[04]:=BOOL_GroupSet; end_if; if Delay_Ton2.et>t#2.0s then BOOL_OUT[05]:=BOOL_GroupSet; end_if; if Delay_Ton2.et>t#2.5s then BOOL_OUT[06]:=BOOL_GroupSet; end_if; if Delay_Ton2.et>t#3.0s then BOOL_OUT[07]:=BOOL_GroupSet; end_if; if Delay_Ton2.et>t#3.5s then BOOL_OUT[08]:=BOOL_GroupSet; end_if; if Delay_Ton2.et>t#4.0s then BOOL_OUT[09]:=BOOL_GroupSet; end_if; if Delay_Ton2.et>t#4.5s then BOOL_OUT[10]:=BOOL_GroupSet; end_if; elsif BOOL_GroupSet=BOOL_GroupSetP then BOOL_OUT[01]:=BOOL_IN[01]; BOOL_OUT[02]:=BOOL_IN[02]; BOOL_OUT[03]:=BOOL_IN[03]; BOOL_OUT[04]:=BOOL_IN[04]; BOOL_OUT[05]:=BOOL_IN[05]; BOOL_OUT[06]:=BOOL_IN[06]; BOOL_OUT[07]:=BOOL_IN[07]; BOOL_OUT[08]:=BOOL_IN[08]; BOOL_OUT[09]:=BOOL_IN[09]; BOOL_OUT[10]:=BOOL_IN[10]; end_if; (**********一个INT型总变量对50个变量赋值,50个变量也可单独赋值*************) if Delay_Ton3.IN=1 then if Delay_Ton3.et>t#0.0s then INT_OUT[01]:=INT_GroupSet; end_if; if Delay_Ton3.et>t#0.5s then INT_OUT[02]:=INT_GroupSet; end_if; if Delay_Ton3.et>t#1.0s then INT_OUT[03]:=INT_GroupSet; end_if; if Delay_Ton3.et>t#1.5s then INT_OUT[04]:=INT_GroupSet; end_if; if Delay_Ton3.et>t#2.0s then INT_OUT[05]:=INT_GroupSet; end_if; if Delay_Ton3.et>t#2.5s then INT_OUT[06]:=INT_GroupSet; end_if; if Delay_Ton3.et>t#3.0s then INT_OUT[07]:=INT_GroupSet; end_if; if Delay_Ton3.et>t#3.5s then INT_OUT[08]:=INT_GroupSet; end_if; if Delay_Ton3.et>t#4.0s then INT_OUT[09]:=INT_GroupSet; end_if; if Delay_Ton3.et>t#4.5s then INT_OUT[10]:=INT_GroupSet; end_if; elsif INT_GroupSet=INT_GroupSetP then INT_OUT[01]:=INT_IN[01]; INT_OUT[02]:=INT_IN[02]; INT_OUT[03]:=INT_IN[03]; INT_OUT[04]:=INT_IN[04]; INT_OUT[05]:=INT_IN[05]; INT_OUT[06]:=INT_IN[06]; INT_OUT[07]:=INT_IN[07]; INT_OUT[08]:=INT_IN[08]; INT_OUT[09]:=INT_IN[09]; INT_OUT[10]:=INT_IN[10]; end_if; case lock of (*0时,均不锁定,1锁定BOOL;2,锁定INT;3,锁定REAL;*) 0: BOOL_GroupSetP:=BOOL_GroupSet; INT_GroupSetP:=INT_GroupSet; REAL_GroupSetP:=REAL_GroupSet; 1: INT_GroupSetP:=INT_GroupSet; REAL_GroupSetP:=REAL_GroupSet; 2: BOOL_GroupSetP:=BOOL_GroupSet; REAL_GroupSetP:=REAL_GroupSet; 3: BOOL_GroupSetP:=BOOL_GroupSet; INT_GroupSetP:=INT_GroupSet; end_case; END_FUNCTION_BLOCK