TYPE "Ignition_data" VERSION : 0.1 STRUCT ignition_fault : Bool; Reset_time : Time; END_STRUCT; END_TYPE FUNCTION_BLOCK "ignition_reset" { S7_Optimized_Access := 'TRUE' } VERSION : 0.1 VAR_INPUT "1.1fault" : Bool; "1.2fault" : Bool; "1.3fault" : Bool; "1.4fault" : Bool; "2.1fault" : Bool; "2.2fault" : Bool; "2.3fault" : Bool; "2.4fault" : Bool; "3.1fault" : Bool; "3.2fault" : Bool; "3.3fault" : Bool; "3.4fault" : Bool; "4.1fault" : Bool; "4.2fault" : Bool; "4.3fault" : Bool; "4.4fault" : Bool; "5.1fault" : Bool; "5.2fault" : Bool; "5.3fault" : Bool; "5.4fault" : Bool; "6.1fault" : Bool; "6.2fault" : Bool; "6.3fault" : Bool; "6.4fault" : Bool; "7.1fault" : Bool; "7.2fault" : Bool; "7.3fault" : Bool; "7.4fault" : Bool; END_VAR VAR_OUTPUT "1.1delay_time" : S5Time; "1.2delay_time" : S5Time; "1.3delay_time" : S5Time; "1.4delay_time" : S5Time; "2.1delay_time" : S5Time; "2.2delay_time" : S5Time; "2.3delay_time" : S5Time; "2.4delay_time" : S5Time; "3.1delay_time" : S5Time; "3.2delay_time" : S5Time; "3.3delay_time" : S5Time; "3.4delay_time" : S5Time; "4.1delay_time" : S5Time; "4.2delay_time" : S5Time; "4.3delay_time" : S5Time; "4.4delay_time" : S5Time; "5.1delay_time" : S5Time; "5.2delay_time" : S5Time; "5.3delay_time" : S5Time; "5.4delay_time" : S5Time; "6.1delay_time" : S5Time; "6.2delay_time" : S5Time; "6.3delay_time" : S5Time; "6.4delay_time" : S5Time; "7.1delay_time" : S5Time; "7.2delay_time" : S5Time; "7.3delay_time" : S5Time; "7.4delay_time" : S5Time; END_VAR VAR_IN_OUT Reset_status : Bool; END_VAR VAR Ignition_data { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Array[1..29] of "Ignition_data"; Ignition_Num : Int := 1; Reset_time {InstructionName := 'TP_TIME'; LibVersion := '1.0'} : TP_TIME; Fault_time_delay {InstructionName := 'TON_TIME'; LibVersion := '1.0'} : TON_TIME; Caculat_rise {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG; R_TRIG_Instance {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG; Caculate_rise : Bool; END_VAR BEGIN REGION input #Ignition_data[1].ignition_fault :=#"1.1fault"; #Ignition_data[2].ignition_fault := #"1.2fault"; #Ignition_data[3].ignition_fault := #"1.3fault"; #Ignition_data[4].ignition_fault := #"1.4fault"; #Ignition_data[5].ignition_fault := #"2.1fault"; #Ignition_data[6].ignition_fault := #"2.2fault"; #Ignition_data[7].ignition_fault := #"2.3fault"; #Ignition_data[8].ignition_fault := #"2.4fault"; #Ignition_data[9].ignition_fault := #"3.1fault"; #Ignition_data[10].ignition_fault := #"3.2fault"; #Ignition_data[11].ignition_fault := #"3.3fault"; #Ignition_data[12].ignition_fault := #"3.4fault"; #Ignition_data[13].ignition_fault := #"4.1fault"; #Ignition_data[14].ignition_fault := #"4.2fault"; #Ignition_data[15].ignition_fault := #"4.3fault"; #Ignition_data[16].ignition_fault := #"4.4fault"; #Ignition_data[17].ignition_fault := #"5.1fault"; #Ignition_data[18].ignition_fault := #"5.2fault"; #Ignition_data[19].ignition_fault := #"5.3fault"; #Ignition_data[20].ignition_fault := #"5.4fault"; #Ignition_data[21].ignition_fault := #"6.1fault"; #Ignition_data[22].ignition_fault := #"6.2fault"; #Ignition_data[23].ignition_fault := #"6.3fault"; #Ignition_data[24].ignition_fault := #"6.4fault"; #Ignition_data[25].ignition_fault := #"7.1fault"; #Ignition_data[26].ignition_fault := #"7.2fault"; #Ignition_data[27].ignition_fault := #"7.3fault"; #Ignition_data[28].ignition_fault := #"7.4fault"; END_REGION REGION Time // Statement section REGION #Reset_time(IN := #Reset_status, PT := t#3m); IF #Reset_status = FALSE THEN // Statement section IF RESET_TIMER(#Reset_time); END_IF; END_REGION #Ignition_Num := 1; REGION caculate reset time // Statement section REGION IF #Reset_status THEN WHILE #Reset_status AND #Ignition_Num <= 29 DO // Statement section WHILE #Fault_time_delay(IN := #Ignition_data[#Ignition_Num].ignition_fault, PT := t#2ms); IF #Ignition_data[#Ignition_Num].ignition_fault AND #Fault_time_delay.Q THEN // Statement section IF #Ignition_data[#Ignition_Num].Reset_time := #Reset_time.ET * 1000; #Ignition_Num := #Ignition_Num + 1; RESET_TIMER(#Fault_time_delay); ELSIF NOT #Ignition_data[#Ignition_Num].ignition_fault THEN #Ignition_Num := #Ignition_Num + 1; END_IF; IF #Ignition_Num > 29 THEN // Statement section IF #Reset_status := FALSE; END_IF; END_WHILE; END_IF; END_REGION REGION output // Statement section REGION #"1.1delay_time" := TIME_TO_S5TIME(#Ignition_data[1].Reset_time); #"1.2delay_time" := TIME_TO_S5TIME(#Ignition_data[2].Reset_time); #"1.3delay_time" := TIME_TO_S5TIME(#Ignition_data[3].Reset_time); #"1.4delay_time" := TIME_TO_S5TIME(#Ignition_data[4].Reset_time); #"2.1delay_time" := TIME_TO_S5TIME(#Ignition_data[5].Reset_time); #"2.2delay_time" := TIME_TO_S5TIME(#Ignition_data[6].Reset_time); #"2.3delay_time" := TIME_TO_S5TIME(#Ignition_data[7].Reset_time); #"2.4delay_time" := TIME_TO_S5TIME(#Ignition_data[8].Reset_time); #"3.1delay_time" := TIME_TO_S5TIME(#Ignition_data[9].Reset_time); #"3.2delay_time" := TIME_TO_S5TIME(#Ignition_data[10].Reset_time); #"3.3delay_time" := TIME_TO_S5TIME(#Ignition_data[11].Reset_time); #"3.4delay_time" := TIME_TO_S5TIME(#Ignition_data[12].Reset_time); #"4.1delay_time" := TIME_TO_S5TIME(#Ignition_data[13].Reset_time); #"4.2delay_time" := TIME_TO_S5TIME(#Ignition_data[14].Reset_time); #"4.3delay_time" := TIME_TO_S5TIME(#Ignition_data[15].Reset_time); #"4.4delay_time" := TIME_TO_S5TIME(#Ignition_data[16].Reset_time); #"5.1delay_time" := TIME_TO_S5TIME(#Ignition_data[17].Reset_time); #"5.2delay_time" := TIME_TO_S5TIME(#Ignition_data[18].Reset_time); #"5.3delay_time" := TIME_TO_S5TIME(#Ignition_data[19].Reset_time); #"5.4delay_time" := TIME_TO_S5TIME(#Ignition_data[20].Reset_time); #"6.1delay_time" := TIME_TO_S5TIME(#Ignition_data[21].Reset_time); #"6.2delay_time" := TIME_TO_S5TIME(#Ignition_data[22].Reset_time); #"6.3delay_time" := TIME_TO_S5TIME(#Ignition_data[23].Reset_time); #"6.4delay_time" := TIME_TO_S5TIME(#Ignition_data[24].Reset_time); #"7.1delay_time" := TIME_TO_S5TIME(#Ignition_data[25].Reset_time); #"7.2delay_time" := TIME_TO_S5TIME(#Ignition_data[26].Reset_time); #"7.3delay_time" := TIME_TO_S5TIME(#Ignition_data[27].Reset_time); #"7.4delay_time" := TIME_TO_S5TIME(#Ignition_data[28].Reset_time); END_REGION END_FUNCTION_BLOCK