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