sunlf 1 mese fa
parent
commit
ace4c76c6c

+ 1 - 0
Helios

@@ -0,0 +1 @@
+Subproject commit 8a106e2bda9aed42b6c752a49f9a48bca4e5b483

+ 600 - 0
PHT/PLC/POUs/PRG/Temp.TcPOU

@@ -0,0 +1,600 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
+  <POU Name="Temp" Id="{8e4146c5-83e0-483d-9024-7c58de37e9e4}" SpecialFunc="None">
+    <Declaration><![CDATA[PROGRAM Temp
+VAR	
+	H_LID				:ARRAY[1..10] OF Temp_controller;
+	H_CHAMBER			:ARRAY[1..10] OF Temp_controller;
+	H_PEN_VALVE			:Temp_controller;
+	H_GATE_VALVE		:Temp_controller;
+	H_IGS				:ARRAY[1..10] OF Temp_controller;
+	H_TAPE				:ARRAY[1..10] OF Temp_controller;
+	H_FORELINE			:ARRAY[1..20] OF Temp_controller;
+	H_STAGE				:ARRAY[1..10] OF Temp_controller;	
+END_VAR
+]]></Declaration>
+    <Implementation>
+      <ST><![CDATA[//E01 PEN_VALVE PID		
+	IF 	GV.AI.APC_Temp-GV.AO.APC_Temp_SV<3	
+	THEN 
+		H_PEN_VALVE.PID_Feedforward:=GV_H.PEN_VALVE_HEATER_PID.Feedforward;
+	ELSE
+		H_PEN_VALVE.PID_Feedforward:=0;
+	END_IF	
+	H_PEN_VALVE(
+		ENABLE:= GV.AI.APC_Temp<110, 
+		AUTO_TUNE:= GV.PEN_VALVE_HEATER_AUTO_TUNE_EN, 
+		AUTO_TUNE_OUTPUT:=GV.PEN_VALVE_HEATER_AUTO_TUNE_OUTPUT,
+		TEMP_SV:= GV.AO.APC_Temp_SV, 
+		TEMP_ACTUAL:= GV.AI.APC_Temp, 
+		TEMP_RATE:=5,
+		PID_P:= GV_H.PEN_VALVE_HEATER_PID.P, 
+		PID_I:= GV_H.PEN_VALVE_HEATER_PID.I, 
+		PID_D:= GV_H.PEN_VALVE_HEATER_PID.D, 
+		PID_Dp:= GV_H.PEN_VALVE_HEATER_PID.DP,
+		PID_Output_Limit:= GV_H.PEN_VALVE_HEATER_PID.Output_Limit,
+		SSR_ON=> GV.PEN_VALVE_HEATER_SSR_ON
+	);		
+	IF H_PEN_VALVE.PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.PEN_VALVE_HEATER_PID.P:=H_PEN_VALVE.PID_AUTO_TUNE_P;
+		GV_H.PEN_VALVE_HEATER_PID.I:=H_PEN_VALVE.PID_AUTO_TUNE_I;
+		GV_H.PEN_VALVE_HEATER_PID.D:=H_PEN_VALVE.PID_AUTO_TUNE_D;
+		GV.PEN_VALVE_HEATER_AUTO_TUNE_EN:=FALSE;
+	END_IF
+	
+//E02 LID1 PID
+	H_LID[1](
+	ENABLE:= GV.AI.Lid_Temp<100, 
+	AUTO_TUNE:= GV.LID_HEATER_AUTO_TUNE_EN[1], 
+	AUTO_TUNE_OUTPUT:=GV.LID_HEATER_AUTO_TUNE_OUTPUT[1],
+	TEMP_SV:= GV.AO.LID_Temp_SV, 
+	TEMP_ACTUAL:= GV.AI.Lid_Temp, 
+	TEMP_RATE:=5,
+	PID_P:= GV_H.LID_HEATER_PID[1].P, 
+	PID_I:= GV_H.LID_HEATER_PID[1].I, 
+	PID_D:= GV_H.LID_HEATER_PID[1].D, 
+	PID_Dp:= GV_H.LID_HEATER_PID[1].DP, 
+	PID_Feedforward:= GV_H.LID_HEATER_PID[1].Feedforward,
+	PID_Output_Limit:= GV_H.LID_HEATER_PID[1].Output_Limit,
+	SSR_ON=> GV.LID_HEATER_SSR_ON[1],
+	SSR_ON=> GV.LID_HEATER_SSR_ON[2],
+	SSR_ON=> GV.LID_HEATER_SSR_ON[3],
+	SSR_ON=> GV.LID_HEATER_SSR_ON[4]
+	);	
+	IF H_LID[1].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.LID_HEATER_PID[1].P:=H_LID[1].PID_AUTO_TUNE_P;
+		GV_H.LID_HEATER_PID[1].I:=H_LID[1].PID_AUTO_TUNE_I;
+		GV_H.LID_HEATER_PID[1].D:=H_LID[1].PID_AUTO_TUNE_D;
+		GV.LID_HEATER_AUTO_TUNE_EN[1]:=FALSE;
+	END_IF
+//E06 CHAMBER1 PID
+	H_CHAMBER[1](
+	ENABLE:= GV.AI.CHAMBER_Temp1<100, 
+	AUTO_TUNE:= GV.CHAMBER_HEATER_AUTO_TUNE_EN[1], 
+	AUTO_TUNE_OUTPUT:=GV.CHAMBER_HEATER_AUTO_TUNE_OUTPUT[1],
+	TEMP_SV:= GV.AO.Chamber_Temp1_SV, 
+	TEMP_ACTUAL:= GV.AI.CHAMBER_Temp1, 
+	TEMP_RATE:=5,
+	PID_P:= GV_H.CHAMBER_HEATER_PID[1].P, 
+	PID_I:= GV_H.CHAMBER_HEATER_PID[1].I, 
+	PID_D:= GV_H.CHAMBER_HEATER_PID[1].D, 
+	PID_Dp:= GV_H.CHAMBER_HEATER_PID[1].DP, 
+	PID_Feedforward:= GV_H.CHAMBER_HEATER_PID[1].Feedforward,
+	PID_Output_Limit:= GV_H.CHAMBER_HEATER_PID[1].Output_Limit,
+	SSR_ON=> GV.CHAMBER_HEATER_SSR_ON[1]
+	);	
+	IF H_CHAMBER[1].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.CHAMBER_HEATER_PID[1].P:=H_CHAMBER[1].PID_AUTO_TUNE_P;
+		GV_H.CHAMBER_HEATER_PID[1].I:=H_CHAMBER[1].PID_AUTO_TUNE_I;
+		GV_H.CHAMBER_HEATER_PID[1].D:=H_CHAMBER[1].PID_AUTO_TUNE_D;
+		GV.CHAMBER_HEATER_AUTO_TUNE_EN[1]:=FALSE;
+	END_IF
+//E07 CHAMBER2 PID	
+	H_CHAMBER[2](
+	ENABLE:= GV.AI.CHAMBER_Temp2<100, 
+	AUTO_TUNE:= GV.CHAMBER_HEATER_AUTO_TUNE_EN[2], 
+	AUTO_TUNE_OUTPUT:=GV.CHAMBER_HEATER_AUTO_TUNE_OUTPUT[2],
+	TEMP_SV:= GV.AO.Chamber_Temp2_SV, 
+	TEMP_ACTUAL:= GV.AI.CHAMBER_Temp2, 
+	TEMP_RATE:=5,
+	PID_P:= GV_H.CHAMBER_HEATER_PID[2].P, 
+	PID_I:= GV_H.CHAMBER_HEATER_PID[2].I, 
+	PID_D:= GV_H.CHAMBER_HEATER_PID[2].D, 
+	PID_Dp:= GV_H.CHAMBER_HEATER_PID[2].DP, 
+	PID_Feedforward:= GV_H.CHAMBER_HEATER_PID[2].Feedforward,
+	PID_Output_Limit:= GV_H.CHAMBER_HEATER_PID[2].Output_Limit,
+	SSR_ON=> GV.CHAMBER_HEATER_SSR_ON[2]
+	);	
+	IF H_CHAMBER[2].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.CHAMBER_HEATER_PID[2].P:=H_CHAMBER[2].PID_AUTO_TUNE_P;
+		GV_H.CHAMBER_HEATER_PID[2].I:=H_CHAMBER[2].PID_AUTO_TUNE_I;
+		GV_H.CHAMBER_HEATER_PID[2].D:=H_CHAMBER[2].PID_AUTO_TUNE_D;
+		GV.CHAMBER_HEATER_AUTO_TUNE_EN[2]:=FALSE;
+	END_IF
+(*
+	//E08 CHAMBER3 PID		
+	H_CHAMBER[3](
+	ENABLE:= GV.AI.CHAMBER_Temp3<100, 
+	AUTO_TUNE:= GV.CHAMBER_HEATER_AUTO_TUNE_EN[3], 
+	AUTO_TUNE_OUTPUT:=GV.CHAMBER_HEATER_AUTO_TUNE_OUTPUT[3],
+	TEMP_SV:= GV.AO.Chamber_Temp3_SV, 
+	TEMP_ACTUAL:= GV.AI.Chamber_Temp3, 
+	PID_P:= GV_H.CHAMBER_HEATER_PID[3].P, 
+	PID_I:= GV_H.CHAMBER_HEATER_PID[3].I, 
+	PID_D:= GV_H.CHAMBER_HEATER_PID[3].D, 
+	PID_Dp:= GV_H.CHAMBER_HEATER_PID[3].DP,
+	PID_Feedforward:= GV_H.CHAMBER_HEATER_PID[3].Feedforward,
+	PID_Output_Limit:= GV_H.CHAMBER_HEATER_PID[3].Output_Limit,
+	SSR_ON=> GV.CHAMBER_HEATER_SSR_ON[4]
+	);	
+	IF H_CHAMBER[3].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.CHAMBER_HEATER_PID[3].P:=H_CHAMBER[3].PID_AUTO_TUNE_P;
+		GV_H.CHAMBER_HEATER_PID[3].I:=H_CHAMBER[3].PID_AUTO_TUNE_I;
+		GV_H.CHAMBER_HEATER_PID[3].D:=H_CHAMBER[3].PID_AUTO_TUNE_D;
+		GV.CHAMBER_HEATER_AUTO_TUNE_EN[3]:=FALSE;
+	END_IF
+
+	//E18 GATE VALVE PID
+		IF 	ABS(GV.AI.GATE_VALVE_Temp-GV.AO.Gate_Valve_Temp_SV)<5	
+		THEN 
+			H_GATE_VALVE.PID_Feedforward:=GV_H.GATE_VALVE_HEATER_PID.Feedforward;
+		ELSE
+			H_GATE_VALVE.PID_Feedforward:=0;
+		END_IF
+		H_GATE_VALVE(
+		ENABLE:= GV.AI.GATE_VALVE_Temp<100, 
+		AUTO_TUNE:= GV.GATE_VALVE_HEATER_AUTO_TUNE_EN, 
+		AUTO_TUNE_OUTPUT:=GV.GATE_VALVE_HEATER_AUTO_TUNE_OUTPUT,
+		TEMP_SV:= GV.AO.Gate_Valve_Temp_SV, 
+		TEMP_ACTUAL:= GV.AI.GATE_VALVE_Temp, 
+		PID_P:= GV_H.GATE_VALVE_HEATER_PID.P, 
+		PID_I:= GV_H.GATE_VALVE_HEATER_PID.I, 
+		PID_D:= GV_H.GATE_VALVE_HEATER_PID.D, 
+		PID_Dp:= GV_H.GATE_VALVE_HEATER_PID.DP, 
+		PID_Output_Limit:= GV_H.GATE_VALVE_HEATER_PID.Output_Limit,
+		SSR_ON=> GV.GATE_VALVE_SSR_ON
+		);		
+		IF H_GATE_VALVE.PID_AUTO_TUNE_DONE
+			THEN
+			GV_H.GATE_VALVE_HEATER_PID.P:=H_GATE_VALVE.PID_AUTO_TUNE_P;
+			GV_H.GATE_VALVE_HEATER_PID.I:=H_GATE_VALVE.PID_AUTO_TUNE_I;
+			GV_H.GATE_VALVE_HEATER_PID.D:=H_GATE_VALVE.PID_AUTO_TUNE_D;
+			GV.GATE_VALVE_HEATER_AUTO_TUNE_EN:=FALSE;
+		END_IF	
+		
+	//E31	TAPE1 PID		
+		H_TAPE[1](
+		ENABLE:= GV.AI.TAPE_Temp1<120, 
+		AUTO_TUNE:= GV.TAPE_HEATER_AUTO_TUNE_EN[1],
+		AUTO_TUNE_OUTPUT:=GV.TAPE_HEATER_AUTO_TUNE_OUTPUT[1], 
+		TEMP_SV:= GV.AO.Tape_Temp1_SV, 
+		TEMP_ACTUAL:= GV.AI.TAPE_Temp1, 
+		PID_P:= GV_H.TAPE_HEATER_PID[1].P, 
+		PID_I:= GV_H.TAPE_HEATER_PID[1].I, 
+		PID_D:= GV_H.TAPE_HEATER_PID[1].D, 
+		PID_Dp:= GV_H.TAPE_HEATER_PID[1].DP, 
+		PID_Feedforward:= ,
+		PID_Output_Limit:= GV_H.TAPE_HEATER_PID[1].Output_Limit,
+		SSR_ON=> GV.TAPE_HEATER_SSR_ON[1]
+		);	
+		IF H_TAPE[1].PID_AUTO_TUNE_DONE
+			THEN
+			GV_H.TAPE_HEATER_PID[1].P:=H_TAPE[1].PID_AUTO_TUNE_P;
+			GV_H.TAPE_HEATER_PID[1].I:=H_TAPE[1].PID_AUTO_TUNE_I;
+			GV_H.TAPE_HEATER_PID[1].D:=H_TAPE[1].PID_AUTO_TUNE_D;
+			GV.TAPE_HEATER_AUTO_TUNE_EN[1]:=FALSE;
+		END_IF
+	//E32	TAPE2 PID		
+		H_TAPE[2](
+		ENABLE:= GV.AI.TAPE_Temp2<120, 
+		AUTO_TUNE:= GV.TAPE_HEATER_AUTO_TUNE_EN[2], 
+		AUTO_TUNE_OUTPUT:=GV.TAPE_HEATER_AUTO_TUNE_OUTPUT[2], 
+		TEMP_SV:= GV.AO.Tape_Temp2_SV, 
+		TEMP_ACTUAL:= GV.AI.TAPE_Temp2, 
+		PID_P:= GV_H.TAPE_HEATER_PID[2].P, 
+		PID_I:= GV_H.TAPE_HEATER_PID[2].I, 
+		PID_D:= GV_H.TAPE_HEATER_PID[2].D, 
+		PID_Dp:= GV_H.TAPE_HEATER_PID[2].DP, 
+		PID_Feedforward:= ,
+		PID_Output_Limit:= GV_H.TAPE_HEATER_PID[2].Output_Limit,
+		SSR_ON=> GV.TAPE_HEATER_SSR_ON[2]
+		);	
+		IF H_TAPE[2].PID_AUTO_TUNE_DONE
+			THEN
+			GV_H.TAPE_HEATER_PID[2].P:=H_TAPE[2].PID_AUTO_TUNE_P;
+			GV_H.TAPE_HEATER_PID[2].I:=H_TAPE[2].PID_AUTO_TUNE_I;
+			GV_H.TAPE_HEATER_PID[2].D:=H_TAPE[2].PID_AUTO_TUNE_D;
+			GV.TAPE_HEATER_AUTO_TUNE_EN[2]:=FALSE;
+		END_IF
+	//E35	IGS1 PID		
+		H_IGS[1](
+		ENABLE:= GV.AI.IGS_Temp1<50, 
+		AUTO_TUNE:= GV.IGS_HEATER_AUTO_TUNE_EN[1], 
+		AUTO_TUNE_OUTPUT:=GV.IGS_HEATER_AUTO_TUNE_OUTPUT[1], 
+		TEMP_SV:= GV.AO.IGS_Temp1_SV, 
+		TEMP_ACTUAL:= GV.AI.IGS_Temp1, 
+		PID_P:= GV_H.IGS_HEATER_PID[1].P, 
+		PID_I:= GV_H.IGS_HEATER_PID[1].I, 
+		PID_D:= GV_H.IGS_HEATER_PID[1].D, 
+		PID_Dp:= GV_H.IGS_HEATER_PID[1].DP, 
+		PID_Feedforward:= GV_H.IGS_HEATER_PID[1].Feedforward,
+		PID_Output_Limit:= GV_H.IGS_HEATER_PID[1].Output_Limit,
+		SSR_ON=> GV.IGS_HEATER_SSR_ON[1]
+		);	
+		IF H_IGS[1].PID_AUTO_TUNE_DONE
+			THEN
+			GV_H.IGS_HEATER_PID[1].P:=H_IGS[1].PID_AUTO_TUNE_P;
+			GV_H.IGS_HEATER_PID[1].I:=H_IGS[1].PID_AUTO_TUNE_I;
+			GV_H.IGS_HEATER_PID[1].D:=H_IGS[1].PID_AUTO_TUNE_D;
+			GV.IGS_HEATER_AUTO_TUNE_EN[1]:=FALSE;
+		END_IF
+	//E36	IGS2 PID	
+		IF 	GV.AI.IGS_Temp2>GV.AO.IGS_Temp2_SV+3 THEN 
+			H_IGS[2].PID_Feedforward:=0;
+			ELSE
+				H_IGS[2].PID_Feedforward:=GV_H.IGS_HEATER_PID[2].Feedforward;
+		
+		END_IF
+		H_IGS[2](
+		ENABLE:= GV.AI.IGS_Temp2<50, 
+		AUTO_TUNE:= GV.IGS_HEATER_AUTO_TUNE_EN[2], 
+		AUTO_TUNE_OUTPUT:=GV.IGS_HEATER_AUTO_TUNE_OUTPUT[2],
+		TEMP_SV:= GV.AO.IGS_Temp2_SV, 
+		TEMP_ACTUAL:= GV.AI.IGS_Temp2, 
+		TEMP_RATE:=10,
+		PID_P:= GV_H.IGS_HEATER_PID[2].P, 
+		PID_I:= GV_H.IGS_HEATER_PID[2].I, 
+		PID_D:= GV_H.IGS_HEATER_PID[2].D, 
+		PID_Dp:= GV_H.IGS_HEATER_PID[2].DP, 
+		PID_Feedforward:= ,
+		PID_Output_Limit:= GV_H.IGS_HEATER_PID[2].Output_Limit,
+		SSR_ON=> GV.IGS_HEATER_SSR_ON[2]
+		);	
+		IF H_IGS[2].PID_AUTO_TUNE_DONE
+			THEN
+			GV_H.IGS_HEATER_PID[2].P:=H_IGS[2].PID_AUTO_TUNE_P;
+			GV_H.IGS_HEATER_PID[2].I:=H_IGS[2].PID_AUTO_TUNE_I;
+			GV_H.IGS_HEATER_PID[2].D:=H_IGS[2].PID_AUTO_TUNE_D;
+			GV.IGS_HEATER_AUTO_TUNE_EN[2]:=FALSE;
+		END_IF
+*)	
+//FORELINE1 PID	SSR7	AV105	
+	H_FORELINE[1](
+	ENABLE:= GV.AI.AV105_Temp<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[1], 
+	AUTO_TUNE_OUTPUT:=GV.FORELINE_HEATER_AUTO_TUNE_OUTPUT[1],
+	TEMP_SV:= GV.AO.AV105_Temp_SV, 
+	TEMP_ACTUAL:= GV.AI.AV105_Temp, 
+	TEMP_RATE:=10,
+	PID_P:= GV_H.FORELINE_HEATER_PID[1].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[1].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[1].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[1].DP, 
+	PID_Feedforward:= GV_H.FORELINE_HEATER_PID[1].Feedforward,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[1].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[1]);
+	
+	IF H_FORELINE[1].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[1].P:=H_FORELINE[1].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[1].I:=H_FORELINE[1].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[1].D:=H_FORELINE[1].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[1]:=FALSE;
+	END_IF
+//FORELINE2 PID		SSR8	AV104
+	H_FORELINE[2](
+	ENABLE:= GV.AI.AV104_Temp<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[2], 
+	AUTO_TUNE_OUTPUT:=GV.FORELINE_HEATER_AUTO_TUNE_OUTPUT[2],
+	TEMP_SV:= GV.AO.AV104_Temp_SV, 
+	TEMP_ACTUAL:= GV.AI.AV104_Temp,
+	TEMP_RATE:=10, 
+	PID_P:= GV_H.FORELINE_HEATER_PID[2].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[2].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[2].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[2].DP, 
+	PID_Feedforward:= GV_H.FORELINE_HEATER_PID[2].Feedforward,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[2].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[2]);
+	
+	IF H_FORELINE[2].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[2].P:=H_FORELINE[2].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[2].I:=H_FORELINE[2].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[2].D:=H_FORELINE[2].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[2]:=FALSE;
+	END_IF
+//FORELINE3 PID		SSR9	AV102
+	H_FORELINE[3](
+	ENABLE:= GV.AI.AV102_Temp<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[3], 
+	AUTO_TUNE_OUTPUT:=GV.FORELINE_HEATER_AUTO_TUNE_OUTPUT[3],
+	TEMP_SV:= GV.AO.AV102_Temp_SV, 
+	TEMP_ACTUAL:= GV.AI.AV102_Temp,
+	TEMP_RATE:=10, 
+	PID_P:= GV_H.FORELINE_HEATER_PID[3].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[3].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[3].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[3].DP, 
+	PID_Feedforward:= GV_H.FORELINE_HEATER_PID[3].Feedforward,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[3].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[3]);
+	
+	IF H_FORELINE[3].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[3].P:=H_FORELINE[3].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[3].I:=H_FORELINE[3].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[3].D:=H_FORELINE[3].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[3]:=FALSE;
+	END_IF	
+//FORELINE4 PID		SSR10	AV101
+	H_FORELINE[4](
+	ENABLE:= GV.AI.AV101_Temp<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[4],
+	AUTO_TUNE_OUTPUT:=GV.FORELINE_HEATER_AUTO_TUNE_OUTPUT[4], 
+	TEMP_SV:= GV.AO.AV101_Temp_SV, 
+	TEMP_ACTUAL:= GV.AI.AV101_Temp, 
+	TEMP_RATE:=10,
+	PID_P:= GV_H.FORELINE_HEATER_PID[4].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[4].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[4].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[4].DP, 
+	PID_Feedforward:= GV_H.FORELINE_HEATER_PID[4].Feedforward,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[4].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[4]);
+	
+	IF H_FORELINE[4].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[4].P:=H_FORELINE[4].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[4].I:=H_FORELINE[4].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[4].D:=H_FORELINE[4].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[4]:=FALSE;
+	END_IF
+//FORELINE5 PID		SS11	Exh1-3
+	H_FORELINE[5](
+	ENABLE:= GV.AI.Exhaust1_3_Temp<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[5], 
+	AUTO_TUNE_OUTPUT:=GV.FORELINE_HEATER_AUTO_TUNE_OUTPUT[5],
+	TEMP_SV:= GV.AO.Exhaust1_3_Temp_SV ,
+	TEMP_ACTUAL:= GV.AI.Exhaust1_3_Temp,
+	TEMP_RATE:=10, 
+	PID_P:= GV_H.FORELINE_HEATER_PID[5].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[5].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[5].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[5].DP, 
+	PID_Feedforward:= GV_H.FORELINE_HEATER_PID[5].Feedforward,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[5].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[5]);
+	
+	IF H_FORELINE[5].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[5].P:=H_FORELINE[5].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[5].I:=H_FORELINE[5].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[5].D:=H_FORELINE[5].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[5]:=FALSE;
+	END_IF
+//FORELINE6 PID		SS12	Exh4-7
+	H_FORELINE[6](
+	ENABLE:= GV.AI.Exhaust4_7_Temp<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[6], 
+	TEMP_SV:= GV.AO.Exhaust4_7_Temp_SV, 
+	TEMP_ACTUAL:= GV.AI.Exhaust4_7_Temp,
+	TEMP_RATE:=10, 
+	PID_P:= GV_H.FORELINE_HEATER_PID[6].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[6].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[6].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[6].DP, 
+	PID_Feedforward:= GV_H.FORELINE_HEATER_PID[6].Feedforward,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[6].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[6]);
+	
+	IF H_FORELINE[6].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[6].P:=H_FORELINE[6].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[6].I:=H_FORELINE[6].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[6].D:=H_FORELINE[6].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[6]:=FALSE;
+	END_IF	
+//H-STAGE1
+	H_STAGE[1](
+	ENABLE:= GV.AI.Stage_Temp1<250, 
+	AUTO_TUNE:= GV.STAGE_HEATER_AUTO_TUNE_EN[1], 
+	TEMP_SV:= GV.AO.Stage_Temp1_SV, 
+	TEMP_ACTUAL:= GV.AI.Stage_Temp1,
+	TEMP_RATE:=10, 
+	PID_P:= GV_H.STAGE_HEATER_PID[1].P, 
+	PID_I:= GV_H.STAGE_HEATER_PID[1].I, 
+	PID_D:= GV_H.STAGE_HEATER_PID[1].D, 
+	PID_Dp:= GV_H.STAGE_HEATER_PID[1].DP, 
+	PID_Feedforward:= GV_H.STAGE_HEATER_PID[1].Feedforward,
+	PID_Output_Limit:= GV_H.STAGE_HEATER_PID[1].Output_Limit,
+	SCR_OUT=> GV.STAGE_HEATER_SCR_OUTPUT[1]);
+		
+	IF H_STAGE[1].TEMP_ACTUAL>=H_STAGE[1].TEMP_SV	THEN GV.STAGE_HEATER_SCR_OUTPUT[1]:=H_STAGE[1].PID_Feedforward;END_IF;
+	
+	IF H_STAGE[1].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.STAGE_HEATER_PID[1].P:=H_STAGE[1].PID_AUTO_TUNE_P;
+		GV_H.STAGE_HEATER_PID[1].I:=H_STAGE[1].PID_AUTO_TUNE_I;
+		GV_H.STAGE_HEATER_PID[1].D:=H_STAGE[1].PID_AUTO_TUNE_D;
+		GV.STAGE_HEATER_AUTO_TUNE_EN[1]:=FALSE;
+	END_IF
+	
+//H-STAGE2
+	H_STAGE[2](
+	ENABLE:= GV.AI.Stage_Temp2<250, 
+	AUTO_TUNE:= GV.STAGE_HEATER_AUTO_TUNE_EN[2], 
+	TEMP_SV:= GV.AO.Stage_Temp2_SV, 
+	TEMP_ACTUAL:= GV.AI.Stage_Temp2, 
+	TEMP_RATE:=10,
+	PID_P:= GV_H.STAGE_HEATER_PID[2].P, 
+	PID_I:= GV_H.STAGE_HEATER_PID[2].I, 
+	PID_D:= GV_H.STAGE_HEATER_PID[2].D, 
+	PID_Dp:= GV_H.STAGE_HEATER_PID[2].DP, 
+	PID_Feedforward:= GV_H.STAGE_HEATER_PID[2].Feedforward,
+	PID_Output_Limit:= GV_H.STAGE_HEATER_PID[2].Output_Limit,
+	SCR_OUT=> GV.STAGE_HEATER_SCR_OUTPUT[2]);
+
+	IF H_STAGE[2].TEMP_ACTUAL>=H_STAGE[2].TEMP_SV	THEN GV.STAGE_HEATER_SCR_OUTPUT[2]:=H_STAGE[2].PID_Feedforward;END_IF;
+	
+	IF H_STAGE[2].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.STAGE_HEATER_PID[2].P:=H_STAGE[2].PID_AUTO_TUNE_P;
+		GV_H.STAGE_HEATER_PID[2].I:=H_STAGE[2].PID_AUTO_TUNE_I;
+		GV_H.STAGE_HEATER_PID[2].D:=H_STAGE[2].PID_AUTO_TUNE_D;
+		GV.STAGE_HEATER_AUTO_TUNE_EN[2]:=FALSE;
+	END_IF
+	
+//H-STAGE3
+	H_STAGE[3](
+	ENABLE:= GV.AI.Stage_Temp3<250, 
+	AUTO_TUNE:= GV.STAGE_HEATER_AUTO_TUNE_EN[3], 
+	TEMP_SV:= GV.AO.Stage_Temp3_SV, 
+	TEMP_ACTUAL:= GV.AI.Stage_Temp3, 
+	TEMP_RATE:=10,
+	PID_P:= GV_H.STAGE_HEATER_PID[3].P, 
+	PID_I:= GV_H.STAGE_HEATER_PID[3].I, 
+	PID_D:= GV_H.STAGE_HEATER_PID[3].D, 
+	PID_Dp:= GV_H.STAGE_HEATER_PID[3].DP, 
+	PID_Feedforward:= GV_H.STAGE_HEATER_PID[3].Feedforward,
+	PID_Output_Limit:= GV_H.STAGE_HEATER_PID[3].Output_Limit,
+	SCR_OUT=> GV.STAGE_HEATER_SCR_OUTPUT[3]);
+
+	IF H_STAGE[3].TEMP_ACTUAL>=H_STAGE[3].TEMP_SV	THEN GV.STAGE_HEATER_SCR_OUTPUT[3]:=H_STAGE[3].PID_Feedforward;END_IF;
+	
+	IF H_STAGE[3].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.STAGE_HEATER_PID[3].P:=H_STAGE[3].PID_AUTO_TUNE_P;
+		GV_H.STAGE_HEATER_PID[3].I:=H_STAGE[3].PID_AUTO_TUNE_I;
+		GV_H.STAGE_HEATER_PID[3].D:=H_STAGE[3].PID_AUTO_TUNE_D;
+		GV.STAGE_HEATER_AUTO_TUNE_EN[3]:=FALSE;
+	END_IF
+	
+//H-STAGE4
+	H_STAGE[4](
+	ENABLE:= GV.AI.Stage_Temp4<250, 
+	AUTO_TUNE:= GV.STAGE_HEATER_AUTO_TUNE_EN[4], 
+	TEMP_SV:= GV.AO.Stage_Temp4_SV, 
+	TEMP_ACTUAL:= GV.AI.Stage_Temp4, 
+	TEMP_RATE:=10,
+	PID_P:= GV_H.STAGE_HEATER_PID[4].P, 
+	PID_I:= GV_H.STAGE_HEATER_PID[4].I, 
+	PID_D:= GV_H.STAGE_HEATER_PID[4].D, 
+	PID_Dp:= GV_H.STAGE_HEATER_PID[4].DP, 
+	PID_Feedforward:= GV_H.STAGE_HEATER_PID[4].Feedforward,
+	PID_Output_Limit:= GV_H.STAGE_HEATER_PID[4].Output_Limit,
+	SCR_OUT=> GV.STAGE_HEATER_SCR_OUTPUT[4]);
+
+	IF H_STAGE[4].TEMP_ACTUAL>=H_STAGE[4].TEMP_SV	THEN GV.STAGE_HEATER_SCR_OUTPUT[4]:=H_STAGE[4].PID_Feedforward;END_IF;
+	
+	IF H_STAGE[4].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.STAGE_HEATER_PID[4].P:=H_STAGE[4].PID_AUTO_TUNE_P;
+		GV_H.STAGE_HEATER_PID[4].I:=H_STAGE[4].PID_AUTO_TUNE_I;
+		GV_H.STAGE_HEATER_PID[4].D:=H_STAGE[4].PID_AUTO_TUNE_D;
+		GV.STAGE_HEATER_AUTO_TUNE_EN[4]:=FALSE;
+	END_IF]]></ST>
+    </Implementation>
+    <LineIds Name="Temp">
+      <LineId Id="33" Count="6" />
+      <LineId Id="41" Count="5" />
+      <LineId Id="1162" Count="0" />
+      <LineId Id="47" Count="5" />
+      <LineId Id="935" Count="0" />
+      <LineId Id="54" Count="14" />
+      <LineId Id="1163" Count="0" />
+      <LineId Id="69" Count="10" />
+      <LineId Id="81" Count="6" />
+      <LineId Id="926" Count="0" />
+      <LineId Id="159" Count="5" />
+      <LineId Id="1164" Count="0" />
+      <LineId Id="165" Count="6" />
+      <LineId Id="938" Count="0" />
+      <LineId Id="174" Count="13" />
+      <LineId Id="1165" Count="0" />
+      <LineId Id="188" Count="6" />
+      <LineId Id="937" Count="0" />
+      <LineId Id="196" Count="6" />
+      <LineId Id="1150" Count="0" />
+      <LineId Id="203" Count="14" />
+      <LineId Id="219" Count="6" />
+      <LineId Id="1087" Count="0" />
+      <LineId Id="338" Count="6" />
+      <LineId Id="346" Count="11" />
+      <LineId Id="936" Count="0" />
+      <LineId Id="359" Count="21" />
+      <LineId Id="939" Count="0" />
+      <LineId Id="382" Count="20" />
+      <LineId Id="940" Count="0" />
+      <LineId Id="404" Count="6" />
+      <LineId Id="456" Count="13" />
+      <LineId Id="941" Count="0" />
+      <LineId Id="471" Count="7" />
+      <LineId Id="962" Count="1" />
+      <LineId Id="965" Count="2" />
+      <LineId Id="964" Count="0" />
+      <LineId Id="479" Count="5" />
+      <LineId Id="961" Count="0" />
+      <LineId Id="485" Count="6" />
+      <LineId Id="942" Count="0" />
+      <LineId Id="493" Count="6" />
+      <LineId Id="1086" Count="0" />
+      <LineId Id="500" Count="6" />
+      <LineId Id="1166" Count="0" />
+      <LineId Id="507" Count="21" />
+      <LineId Id="1167" Count="0" />
+      <LineId Id="529" Count="15" />
+      <LineId Id="1110" Count="5" />
+      <LineId Id="1168" Count="0" />
+      <LineId Id="1116" Count="13" />
+      <LineId Id="565" Count="1" />
+      <LineId Id="1130" Count="2" />
+      <LineId Id="1149" Count="0" />
+      <LineId Id="1133" Count="1" />
+      <LineId Id="1169" Count="0" />
+      <LineId Id="1135" Count="13" />
+      <LineId Id="587" Count="1" />
+      <LineId Id="1089" Count="5" />
+      <LineId Id="1170" Count="0" />
+      <LineId Id="1095" Count="13" />
+      <LineId Id="1088" Count="0" />
+      <LineId Id="609" Count="5" />
+      <LineId Id="1171" Count="0" />
+      <LineId Id="615" Count="14" />
+      <LineId Id="988" Count="0" />
+      <LineId Id="990" Count="4" />
+      <LineId Id="1172" Count="0" />
+      <LineId Id="995" Count="7" />
+      <LineId Id="1177" Count="1" />
+      <LineId Id="1003" Count="5" />
+      <LineId Id="989" Count="0" />
+      <LineId Id="1009" Count="0" />
+      <LineId Id="1011" Count="5" />
+      <LineId Id="1173" Count="0" />
+      <LineId Id="1017" Count="6" />
+      <LineId Id="1181" Count="1" />
+      <LineId Id="1180" Count="0" />
+      <LineId Id="1025" Count="5" />
+      <LineId Id="1010" Count="0" />
+      <LineId Id="1031" Count="0" />
+      <LineId Id="1033" Count="5" />
+      <LineId Id="1174" Count="0" />
+      <LineId Id="1039" Count="6" />
+      <LineId Id="1183" Count="1" />
+      <LineId Id="1046" Count="6" />
+      <LineId Id="1032" Count="0" />
+      <LineId Id="1053" Count="0" />
+      <LineId Id="1055" Count="5" />
+      <LineId Id="1175" Count="0" />
+      <LineId Id="1061" Count="6" />
+      <LineId Id="1185" Count="1" />
+      <LineId Id="1068" Count="6" />
+      <LineId Id="1054" Count="0" />
+    </LineIds>
+  </POU>
+</TcPlcObject>

BIN
PHT/PLC/_CompileInfo/A2BC6247-FF86-F971-9010-C0554FDA0424.compileinfo


+ 799 - 0
PLC/POUs/PRG/Temp.TcPOU

@@ -0,0 +1,799 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
+  <POU Name="Temp" Id="{de337f70-c820-498d-b2b1-1b320905ecbd}" SpecialFunc="None">
+    <Declaration><![CDATA[PROGRAM Temp
+VAR
+	H_LID				:ARRAY[1..10] OF Temp_controller;
+	H_CHAMBER			:ARRAY[1..10] OF Temp_controller;
+	H_PEN_VALVE			:Temp_controller;
+	H_GATE_VALVE		:Temp_controller;
+	H_IGS				:ARRAY[1..10] OF Temp_controller;
+	H_TAPE				:ARRAY[1..10] OF Temp_controller;
+	H_FORELINE			:ARRAY[1..20] OF Temp_controller;	
+END_VAR
+]]></Declaration>
+    <Implementation>
+      <ST><![CDATA[//E01 PEN_VALVE PID		
+	IF 	GV.AI.APC_Temp-GV.AO.APC_Temp_SV<3	
+	THEN 
+		H_PEN_VALVE.PID_Feedforward:=GV_H.PEN_VALVE_HEATER_PID.Feedforward;
+	ELSE
+		H_PEN_VALVE.PID_Feedforward:=0;
+	END_IF	
+	H_PEN_VALVE(
+		ENABLE:= GV.AI.APC_Temp<110, 
+		AUTO_TUNE:= GV.PEN_VALVE_HEATER_AUTO_TUNE_EN, 
+		AUTO_TUNE_OUTPUT:=GV.PEN_VALVE_HEATER_AUTO_TUNE_OUTPUT,
+		TEMP_SV:= GV.AO.APC_Temp_SV, 
+		TEMP_ACTUAL:= GV.AI.APC_Temp, 
+		TEMP_RATE:=5,
+		PID_P:= GV_H.PEN_VALVE_HEATER_PID.P, 
+		PID_I:= GV_H.PEN_VALVE_HEATER_PID.I, 
+		PID_D:= GV_H.PEN_VALVE_HEATER_PID.D, 
+		PID_Dp:= GV_H.PEN_VALVE_HEATER_PID.DP,
+		PID_Output_Limit:= GV_H.PEN_VALVE_HEATER_PID.Output_Limit,
+		SSR_ON=> GV.PEN_VALVE_HEATER_SSR_ON
+	);		
+	IF H_PEN_VALVE.PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.PEN_VALVE_HEATER_PID.P:=H_PEN_VALVE.PID_AUTO_TUNE_P;
+		GV_H.PEN_VALVE_HEATER_PID.I:=H_PEN_VALVE.PID_AUTO_TUNE_I;
+		GV_H.PEN_VALVE_HEATER_PID.D:=H_PEN_VALVE.PID_AUTO_TUNE_D;
+		GV.PEN_VALVE_HEATER_AUTO_TUNE_EN:=FALSE;
+	END_IF
+	
+//E02 LID1 PID
+	H_LID[1](
+	ENABLE:= GV.AI.Lid_Temp<100, 
+	AUTO_TUNE:= GV.LID_HEATER_AUTO_TUNE_EN[1], 
+	AUTO_TUNE_OUTPUT:=GV.LID_HEATER_AUTO_TUNE_OUTPUT[1],
+	TEMP_SV:= GV.AO.LID_Temp_SV, 
+	TEMP_ACTUAL:= GV.AI.Lid_Temp, 
+	TEMP_RATE:=5,
+	PID_P:= GV_H.LID_HEATER_PID[1].P, 
+	PID_I:= GV_H.LID_HEATER_PID[1].I, 
+	PID_D:= GV_H.LID_HEATER_PID[1].D, 
+	PID_Dp:= GV_H.LID_HEATER_PID[1].DP, 
+	PID_Feedforward:= GV_H.LID_HEATER_PID[1].Feedforward,
+	PID_Output_Limit:= GV_H.LID_HEATER_PID[1].Output_Limit,
+	SSR_ON=> GV.LID_HEATER_SSR_ON[1],
+	SSR_ON=> GV.LID_HEATER_SSR_ON[2],
+	SSR_ON=> GV.LID_HEATER_SSR_ON[3],
+	SSR_ON=> GV.LID_HEATER_SSR_ON[4]
+	);	
+	IF H_LID[1].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.LID_HEATER_PID[1].P:=H_LID[1].PID_AUTO_TUNE_P;
+		GV_H.LID_HEATER_PID[1].I:=H_LID[1].PID_AUTO_TUNE_I;
+		GV_H.LID_HEATER_PID[1].D:=H_LID[1].PID_AUTO_TUNE_D;
+		GV.LID_HEATER_AUTO_TUNE_EN[1]:=FALSE;
+	END_IF
+//E06 CHAMBER1 PID
+	H_CHAMBER[1](
+	ENABLE:= GV.AI.CHAMBER_Temp1<100, 
+	AUTO_TUNE:= GV.CHAMBER_HEATER_AUTO_TUNE_EN[1], 
+	AUTO_TUNE_OUTPUT:=GV.CHAMBER_HEATER_AUTO_TUNE_OUTPUT[1],
+	TEMP_SV:= GV.AO.Chamber_Temp1_SV, 
+	TEMP_ACTUAL:= GV.AI.CHAMBER_Temp1, 
+	TEMP_RATE:=5,
+	PID_P:= GV_H.CHAMBER_HEATER_PID[1].P, 
+	PID_I:= GV_H.CHAMBER_HEATER_PID[1].I, 
+	PID_D:= GV_H.CHAMBER_HEATER_PID[1].D, 
+	PID_Dp:= GV_H.CHAMBER_HEATER_PID[1].DP, 
+	PID_Feedforward:= GV_H.CHAMBER_HEATER_PID[1].Feedforward,
+	PID_Output_Limit:= GV_H.CHAMBER_HEATER_PID[1].Output_Limit,
+	SSR_ON=> GV.CHAMBER_HEATER_SSR_ON[1],
+	SSR_ON=> GV.CHAMBER_HEATER_SSR_ON[2]
+	);	
+	IF H_CHAMBER[1].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.CHAMBER_HEATER_PID[1].P:=H_CHAMBER[1].PID_AUTO_TUNE_P;
+		GV_H.CHAMBER_HEATER_PID[1].I:=H_CHAMBER[1].PID_AUTO_TUNE_I;
+		GV_H.CHAMBER_HEATER_PID[1].D:=H_CHAMBER[1].PID_AUTO_TUNE_D;
+		GV.CHAMBER_HEATER_AUTO_TUNE_EN[1]:=FALSE;
+	END_IF
+//E07 CHAMBER2 PID	
+	H_CHAMBER[2](
+	ENABLE:= GV.AI.CHAMBER_Temp2<100, 
+	AUTO_TUNE:= GV.CHAMBER_HEATER_AUTO_TUNE_EN[2], 
+	AUTO_TUNE_OUTPUT:=GV.CHAMBER_HEATER_AUTO_TUNE_OUTPUT[2],
+	TEMP_SV:= GV.AO.Chamber_Temp2_SV, 
+	TEMP_ACTUAL:= GV.AI.CHAMBER_Temp2, 
+	TEMP_RATE:=5,
+	PID_P:= GV_H.CHAMBER_HEATER_PID[2].P, 
+	PID_I:= GV_H.CHAMBER_HEATER_PID[2].I, 
+	PID_D:= GV_H.CHAMBER_HEATER_PID[2].D, 
+	PID_Dp:= GV_H.CHAMBER_HEATER_PID[2].DP, 
+	PID_Feedforward:= GV_H.CHAMBER_HEATER_PID[2].Feedforward,
+	PID_Output_Limit:= GV_H.CHAMBER_HEATER_PID[2].Output_Limit,
+	SSR_ON=> GV.CHAMBER_HEATER_SSR_ON[3]
+	);	
+	IF H_CHAMBER[2].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.CHAMBER_HEATER_PID[2].P:=H_CHAMBER[2].PID_AUTO_TUNE_P;
+		GV_H.CHAMBER_HEATER_PID[2].I:=H_CHAMBER[2].PID_AUTO_TUNE_I;
+		GV_H.CHAMBER_HEATER_PID[2].D:=H_CHAMBER[2].PID_AUTO_TUNE_D;
+		GV.CHAMBER_HEATER_AUTO_TUNE_EN[2]:=FALSE;
+	END_IF
+//E08 CHAMBER3 PID		
+	H_CHAMBER[3](
+	ENABLE:= GV.AI.CHAMBER_Temp3<100, 
+	AUTO_TUNE:= GV.CHAMBER_HEATER_AUTO_TUNE_EN[3], 
+	AUTO_TUNE_OUTPUT:=GV.CHAMBER_HEATER_AUTO_TUNE_OUTPUT[3],
+	TEMP_SV:= GV.AO.Chamber_Temp3_SV, 
+	TEMP_ACTUAL:= GV.AI.Chamber_Temp3, 
+	TEMP_RATE:=5,
+	PID_P:= GV_H.CHAMBER_HEATER_PID[3].P, 
+	PID_I:= GV_H.CHAMBER_HEATER_PID[3].I, 
+	PID_D:= GV_H.CHAMBER_HEATER_PID[3].D, 
+	PID_Dp:= GV_H.CHAMBER_HEATER_PID[3].DP,
+	PID_Feedforward:= GV_H.CHAMBER_HEATER_PID[3].Feedforward,
+	PID_Output_Limit:= GV_H.CHAMBER_HEATER_PID[3].Output_Limit,
+	SSR_ON=> GV.CHAMBER_HEATER_SSR_ON[4]
+	);	
+	IF H_CHAMBER[3].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.CHAMBER_HEATER_PID[3].P:=H_CHAMBER[3].PID_AUTO_TUNE_P;
+		GV_H.CHAMBER_HEATER_PID[3].I:=H_CHAMBER[3].PID_AUTO_TUNE_I;
+		GV_H.CHAMBER_HEATER_PID[3].D:=H_CHAMBER[3].PID_AUTO_TUNE_D;
+		GV.CHAMBER_HEATER_AUTO_TUNE_EN[3]:=FALSE;
+	END_IF
+//E18 GATE VALVE PID
+	IF 	ABS(GV.AI.GATE_VALVE_Temp-GV.AO.Gate_Valve_Temp_SV)<5	
+	THEN 
+		H_GATE_VALVE.PID_Feedforward:=GV_H.GATE_VALVE_HEATER_PID.Feedforward;
+	ELSE
+		H_GATE_VALVE.PID_Feedforward:=0;
+	END_IF
+	H_GATE_VALVE(
+	ENABLE:= GV.AI.GATE_VALVE_Temp<100, 
+	AUTO_TUNE:= GV.GATE_VALVE_HEATER_AUTO_TUNE_EN, 
+	AUTO_TUNE_OUTPUT:=GV.GATE_VALVE_HEATER_AUTO_TUNE_OUTPUT,
+	TEMP_SV:= GV.AO.Gate_Valve_Temp_SV, 
+	TEMP_ACTUAL:= GV.AI.GATE_VALVE_Temp, 
+	TEMP_RATE:=5,
+	PID_P:= GV_H.GATE_VALVE_HEATER_PID.P, 
+	PID_I:= GV_H.GATE_VALVE_HEATER_PID.I, 
+	PID_D:= GV_H.GATE_VALVE_HEATER_PID.D, 
+	PID_Dp:= GV_H.GATE_VALVE_HEATER_PID.DP, 
+	PID_Output_Limit:= GV_H.GATE_VALVE_HEATER_PID.Output_Limit,
+	SSR_ON=> GV.GATE_VALVE_SSR_ON
+	);		
+	IF H_GATE_VALVE.PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.GATE_VALVE_HEATER_PID.P:=H_GATE_VALVE.PID_AUTO_TUNE_P;
+		GV_H.GATE_VALVE_HEATER_PID.I:=H_GATE_VALVE.PID_AUTO_TUNE_I;
+		GV_H.GATE_VALVE_HEATER_PID.D:=H_GATE_VALVE.PID_AUTO_TUNE_D;
+		GV.GATE_VALVE_HEATER_AUTO_TUNE_EN:=FALSE;
+	END_IF	
+	
+//E31	TAPE1 PID		
+	H_TAPE[1](
+	ENABLE:= GV.AI.TAPE_Temp1<120, 
+	AUTO_TUNE:= GV.TAPE_HEATER_AUTO_TUNE_EN[1],
+	AUTO_TUNE_OUTPUT:=GV.TAPE_HEATER_AUTO_TUNE_OUTPUT[1], 
+	TEMP_SV:= GV.AO.Tape_Temp1_SV, 
+	TEMP_ACTUAL:= GV.AI.TAPE_Temp1,
+	TEMP_RATE:=10, 
+	PID_P:= GV_H.TAPE_HEATER_PID[1].P, 
+	PID_I:= GV_H.TAPE_HEATER_PID[1].I, 
+	PID_D:= GV_H.TAPE_HEATER_PID[1].D, 
+	PID_Dp:= GV_H.TAPE_HEATER_PID[1].DP, 
+	PID_Feedforward:= GV_H.TAPE_HEATER_PID[1].Feedforward,
+	PID_Output_Limit:= GV_H.TAPE_HEATER_PID[1].Output_Limit,
+	SSR_ON=> GV.TAPE_HEATER_SSR_ON[1]
+	);	
+	IF H_TAPE[1].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.TAPE_HEATER_PID[1].P:=H_TAPE[1].PID_AUTO_TUNE_P;
+		GV_H.TAPE_HEATER_PID[1].I:=H_TAPE[1].PID_AUTO_TUNE_I;
+		GV_H.TAPE_HEATER_PID[1].D:=H_TAPE[1].PID_AUTO_TUNE_D;
+		GV.TAPE_HEATER_AUTO_TUNE_EN[1]:=FALSE;
+	END_IF
+//E32	TAPE2 PID		
+	H_TAPE[2](
+	ENABLE:= GV.AI.TAPE_Temp2<120, 
+	AUTO_TUNE:= GV.TAPE_HEATER_AUTO_TUNE_EN[2], 
+	AUTO_TUNE_OUTPUT:=GV.TAPE_HEATER_AUTO_TUNE_OUTPUT[2], 
+	TEMP_SV:= GV.AO.Tape_Temp2_SV, 
+	TEMP_ACTUAL:= GV.AI.TAPE_Temp2, 
+	TEMP_RATE:=10,
+	PID_P:= GV_H.TAPE_HEATER_PID[2].P, 
+	PID_I:= GV_H.TAPE_HEATER_PID[2].I, 
+	PID_D:= GV_H.TAPE_HEATER_PID[2].D, 
+	PID_Dp:= GV_H.TAPE_HEATER_PID[2].DP, 
+	PID_Feedforward:= GV_H.TAPE_HEATER_PID[2].Feedforward,
+	PID_Output_Limit:= GV_H.TAPE_HEATER_PID[2].Output_Limit,
+	SSR_ON=> GV.TAPE_HEATER_SSR_ON[2]
+	);	
+	IF H_TAPE[2].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.TAPE_HEATER_PID[2].P:=H_TAPE[2].PID_AUTO_TUNE_P;
+		GV_H.TAPE_HEATER_PID[2].I:=H_TAPE[2].PID_AUTO_TUNE_I;
+		GV_H.TAPE_HEATER_PID[2].D:=H_TAPE[2].PID_AUTO_TUNE_D;
+		GV.TAPE_HEATER_AUTO_TUNE_EN[2]:=FALSE;
+	END_IF
+//	TAPE3 PID		
+	H_TAPE[3](
+	ENABLE:= GV.AI.TAPE_Temp3<120, 
+	AUTO_TUNE:= GV.TAPE_HEATER_AUTO_TUNE_EN[3], 
+	AUTO_TUNE_OUTPUT:=GV.TAPE_HEATER_AUTO_TUNE_OUTPUT[3], 
+	TEMP_SV:= GV.AO.Tape_Temp3_SV, 
+	TEMP_ACTUAL:= GV.AI.TAPE_Temp3, 
+	TEMP_RATE:=10,
+	PID_P:= GV_H.TAPE_HEATER_PID[3].P, 
+	PID_I:= GV_H.TAPE_HEATER_PID[3].I, 
+	PID_D:= GV_H.TAPE_HEATER_PID[3].D, 
+	PID_Dp:= GV_H.TAPE_HEATER_PID[3].DP, 
+	PID_Feedforward:= GV_H.TAPE_HEATER_PID[3].Feedforward,
+	PID_Output_Limit:= GV_H.TAPE_HEATER_PID[3].Output_Limit,
+	SSR_ON=> GV.TAPE_HEATER_SSR_ON[3]
+	);	
+	IF H_TAPE[3].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.TAPE_HEATER_PID[3].P:=H_TAPE[3].PID_AUTO_TUNE_P;
+		GV_H.TAPE_HEATER_PID[3].I:=H_TAPE[3].PID_AUTO_TUNE_I;
+		GV_H.TAPE_HEATER_PID[3].D:=H_TAPE[3].PID_AUTO_TUNE_D;
+		GV.TAPE_HEATER_AUTO_TUNE_EN[3]:=FALSE;
+	END_IF
+//E35	IGS1 PID		
+	H_IGS[1](
+	ENABLE:= GV.AI.IGS_Temp1<50, 
+	AUTO_TUNE:= GV.IGS_HEATER_AUTO_TUNE_EN[1], 
+	AUTO_TUNE_OUTPUT:=GV.IGS_HEATER_AUTO_TUNE_OUTPUT[1], 
+	TEMP_SV:= GV.AO.IGS_Temp1_SV, 
+	TEMP_ACTUAL:= GV.AI.IGS_Temp1, 
+	TEMP_RATE:=1.5,
+	PID_P:= GV_H.IGS_HEATER_PID[1].P, 
+	PID_I:= GV_H.IGS_HEATER_PID[1].I, 
+	PID_D:= GV_H.IGS_HEATER_PID[1].D, 
+	PID_Dp:= GV_H.IGS_HEATER_PID[1].DP, 
+	PID_Feedforward:= GV_H.IGS_HEATER_PID[1].Feedforward,
+	PID_Output_Limit:= GV_H.IGS_HEATER_PID[1].Output_Limit,
+	SSR_ON=> GV.IGS_HEATER_SSR_ON[1]
+	);	
+	IF H_IGS[1].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.IGS_HEATER_PID[1].P:=H_IGS[1].PID_AUTO_TUNE_P;
+		GV_H.IGS_HEATER_PID[1].I:=H_IGS[1].PID_AUTO_TUNE_I;
+		GV_H.IGS_HEATER_PID[1].D:=H_IGS[1].PID_AUTO_TUNE_D;
+		GV.IGS_HEATER_AUTO_TUNE_EN[1]:=FALSE;
+	END_IF
+//E36	IGS2 PID	
+	IF 	GV.AI.IGS_Temp2>GV.AO.IGS_Temp2_SV+3 THEN 
+		H_IGS[2].PID_Feedforward:=0;
+		ELSE
+			H_IGS[2].PID_Feedforward:=GV_H.IGS_HEATER_PID[2].Feedforward;
+	
+	END_IF
+	H_IGS[2](
+	ENABLE:= GV.AI.IGS_Temp2<50, 
+	AUTO_TUNE:= GV.IGS_HEATER_AUTO_TUNE_EN[2], 
+	AUTO_TUNE_OUTPUT:=GV.IGS_HEATER_AUTO_TUNE_OUTPUT[2],
+	TEMP_SV:= GV.AO.IGS_Temp2_SV, 
+	TEMP_ACTUAL:= GV.AI.IGS_Temp2, 
+	TEMP_RATE:=1.5,
+	PID_P:= GV_H.IGS_HEATER_PID[2].P, 
+	PID_I:= GV_H.IGS_HEATER_PID[2].I, 
+	PID_D:= GV_H.IGS_HEATER_PID[2].D, 
+	PID_Dp:= GV_H.IGS_HEATER_PID[2].DP, 
+	PID_Feedforward:= GV_H.IGS_HEATER_PID[2].Feedforward,
+	PID_Output_Limit:= GV_H.IGS_HEATER_PID[2].Output_Limit,
+	SSR_ON=> GV.IGS_HEATER_SSR_ON[2]
+	);	
+	IF H_IGS[2].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.IGS_HEATER_PID[2].P:=H_IGS[2].PID_AUTO_TUNE_P;
+		GV_H.IGS_HEATER_PID[2].I:=H_IGS[2].PID_AUTO_TUNE_I;
+		GV_H.IGS_HEATER_PID[2].D:=H_IGS[2].PID_AUTO_TUNE_D;
+		GV.IGS_HEATER_AUTO_TUNE_EN[2]:=FALSE;
+	END_IF
+//FORELINE1 PID	SSR6	AV102	
+	H_FORELINE[1](
+	ENABLE:= GV.AI.AV102_Temp<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[1], 
+	AUTO_TUNE_OUTPUT:=GV.FORELINE_HEATER_AUTO_TUNE_OUTPUT[1],
+	TEMP_SV:= GV.AO.AV102_Temp_SV, 
+	TEMP_ACTUAL:= GV.AI.AV102_Temp, 
+	TEMP_RATE:=10,
+	PID_P:= GV_H.FORELINE_HEATER_PID[1].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[1].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[1].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[1].DP, 
+	PID_Feedforward:= GV_H.FORELINE_HEATER_PID[1].Feedforward,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[1].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[1]);
+	
+	IF H_FORELINE[1].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[1].P:=H_FORELINE[1].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[1].I:=H_FORELINE[1].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[1].D:=H_FORELINE[1].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[1]:=FALSE;
+	END_IF
+//FORELINE2 PID		SSR7	AV101
+	H_FORELINE[2](
+	ENABLE:= GV.AI.AV101_Temp<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[2], 
+	AUTO_TUNE_OUTPUT:=GV.FORELINE_HEATER_AUTO_TUNE_OUTPUT[2],
+	TEMP_SV:= GV.AO.AV101_Temp_SV, 
+	TEMP_ACTUAL:= GV.AI.AV101_Temp, 
+	TEMP_RATE:=10,
+	PID_P:= GV_H.FORELINE_HEATER_PID[2].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[2].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[2].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[2].DP, 
+	PID_Feedforward:= GV_H.FORELINE_HEATER_PID[2].Feedforward,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[2].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[2]);
+	
+	IF H_FORELINE[2].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[2].P:=H_FORELINE[2].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[2].I:=H_FORELINE[2].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[2].D:=H_FORELINE[2].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[2]:=FALSE;
+	END_IF
+//FORELINE3 PID		SSR8	AV106
+	H_FORELINE[3](
+	ENABLE:= GV.AI.AV106_Temp<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[3], 
+	AUTO_TUNE_OUTPUT:=GV.FORELINE_HEATER_AUTO_TUNE_OUTPUT[3],
+	TEMP_SV:= GV.AO.AV106_Temp_SV ,
+	TEMP_ACTUAL:= GV.AI.AV106_Temp, 
+	TEMP_RATE:=10,
+	PID_P:= GV_H.FORELINE_HEATER_PID[3].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[3].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[3].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[3].DP, 
+	PID_Feedforward:= GV_H.FORELINE_HEATER_PID[3].Feedforward,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[3].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[3]);
+	
+	IF H_FORELINE[3].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[3].P:=H_FORELINE[3].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[3].I:=H_FORELINE[3].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[3].D:=H_FORELINE[3].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[3]:=FALSE;
+	END_IF	
+//FORELINE4 PID		SSR9	BA101
+	H_FORELINE[4](
+	ENABLE:= GV.AI.BA01_Temp<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[4], 
+	AUTO_TUNE_OUTPUT:=GV.FORELINE_HEATER_AUTO_TUNE_OUTPUT[4],
+	TEMP_SV:= GV.AO.BA01_Temp_SV, 
+	TEMP_ACTUAL:= GV.AI.BA01_Temp, 
+	TEMP_RATE:=10,
+	PID_P:= GV_H.FORELINE_HEATER_PID[4].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[4].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[4].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[4].DP, 
+	PID_Feedforward:= GV_H.FORELINE_HEATER_PID[4].Feedforward,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[4].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[4]);
+	
+	IF H_FORELINE[4].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[4].P:=H_FORELINE[4].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[4].I:=H_FORELINE[4].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[4].D:=H_FORELINE[4].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[4]:=FALSE;
+	END_IF
+//FORELINE5 PID		SS10	VG103
+	H_FORELINE[5](
+	ENABLE:= GV.AI.VG103_Pipe_Temp<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[5], 
+	TEMP_SV:= GV.AO.VG103_Pipe_Temp_SV, 
+	TEMP_ACTUAL:= GV.AI.VG103_Pipe_Temp, 
+	TEMP_RATE:=10,
+	PID_P:= GV_H.FORELINE_HEATER_PID[5].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[5].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[5].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[5].DP, 
+	PID_Feedforward:= GV_H.FORELINE_HEATER_PID[5].Feedforward,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[5].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[5]);
+	
+	IF H_FORELINE[5].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[5].P:=H_FORELINE[5].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[5].I:=H_FORELINE[5].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[5].D:=H_FORELINE[5].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[5]:=FALSE;
+	END_IF
+//FORELINE6 PID		SSR11	EXHAUST1-6
+	H_FORELINE[6](
+	ENABLE:= GV.AI.Exhaust1_6_Temp<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[6], 
+	TEMP_SV:= GV.AO.Exhaust1_6_Temp_SV, 
+	TEMP_ACTUAL:= GV.AI.Exhaust1_6_Temp,
+	TEMP_RATE:=10, 
+	PID_P:= GV_H.FORELINE_HEATER_PID[6].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[6].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[6].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[6].DP, 
+	PID_Feedforward:= GV_H.FORELINE_HEATER_PID[6].Feedforward,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[6].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[6]);
+	
+	IF H_FORELINE[6].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[6].P:=H_FORELINE[6].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[6].I:=H_FORELINE[6].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[6].D:=H_FORELINE[6].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[6]:=FALSE;
+	END_IF
+//FORELINE7 PID		SSR12	EXHAUST7-8
+	H_FORELINE[7](
+	ENABLE:= GV.AI.Exhaust7_8_Temp<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[7], 
+	TEMP_SV:= GV.AO.Exhaust7_8_Temp_SV, 
+	TEMP_ACTUAL:= GV.AI.Exhaust7_8_Temp, 
+	TEMP_RATE:=10,
+	PID_P:= GV_H.FORELINE_HEATER_PID[7].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[7].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[7].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[7].DP, 
+	PID_Feedforward:= GV_H.FORELINE_HEATER_PID[7].Feedforward,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[7].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[7]);
+	
+	IF H_FORELINE[7].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[7].P:=H_FORELINE[7].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[7].I:=H_FORELINE[7].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[7].D:=H_FORELINE[7].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[7]:=FALSE;
+	END_IF
+//FORELINE8 PID		SSR13
+	H_FORELINE[8](
+	ENABLE:= GV.AI.VG101_Pipe_Temp<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[8], 
+	TEMP_SV:= GV.AO.VG101_Pipe_Temp_SV, 
+	TEMP_ACTUAL:= GV.AI.VG101_Pipe_Temp, 
+	TEMP_RATE:=10,
+	PID_P:= GV_H.FORELINE_HEATER_PID[8].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[8].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[8].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[8].DP, 
+	PID_Feedforward:= GV_H.FORELINE_HEATER_PID[8].Feedforward,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[8].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[8]);
+	
+	IF H_FORELINE[8].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[8].P:=H_FORELINE[8].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[8].I:=H_FORELINE[8].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[8].D:=H_FORELINE[8].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[8]:=FALSE;
+	END_IF
+(*	//FORELINE9 PID		
+	H_FORELINE[9](
+	ENABLE:= GV.AI.FORELINE_Temp9<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[9], 
+	TEMP_SV:= FORELINE_TEMP_SV[9], 
+	TEMP_ACTUAL:= GV.AI.FORELINE_Temp9, 
+	PID_P:= GV_H.FORELINE_HEATER_PID[9].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[9].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[9].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[9].DP, 
+	PID_Feedforward:= GV_H.FORELINE_HEATER_PID[9].Feedforward,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[9].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[9]);
+	
+	IF H_FORELINE[9].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[9].P:=H_FORELINE[9].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[9].I:=H_FORELINE[9].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[9].D:=H_FORELINE[9].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[9]:=FALSE;
+	END_IF
+	//FORELINE10 PID		
+	H_FORELINE[10](
+	ENABLE:= GV.AI.FORELINE_Temp10<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[10], 
+	TEMP_SV:= FORELINE_TEMP_SV[10], 
+	TEMP_ACTUAL:= GV.AI.FORELINE_Temp10, 
+	PID_P:= GV_H.FORELINE_HEATER_PID[10].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[10].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[10].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[10].DP, 
+	PID_Feedforward:= GV_H.FORELINE_HEATER_PID[10].Feedforward,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[10].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[10]);
+	
+	IF H_FORELINE[10].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[10].P:=H_FORELINE[10].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[10].I:=H_FORELINE[10].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[10].D:=H_FORELINE[10].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[10]:=FALSE;
+	END_IF
+	//FORELINE11 PID		
+	H_FORELINE[11](
+	ENABLE:= GV.AI.FORELINE_Temp11<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[11], 
+	TEMP_SV:= FORELINE_TEMP_SV[11], 
+	TEMP_ACTUAL:= GV.AI.FORELINE_Temp11, 
+	PID_P:= GV_H.FORELINE_HEATER_PID[11].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[11].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[11].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[11].DP, 
+	PID_Feedforward:= ,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[11].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[11]);
+	
+	IF H_FORELINE[11].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[11].P:=H_FORELINE[11].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[11].I:=H_FORELINE[11].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[11].D:=H_FORELINE[11].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[11]:=FALSE;
+	END_IF
+	//FORELINE12 PID		
+	H_FORELINE[12](
+	ENABLE:= GV.AI.FORELINE_Temp12<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[12], 
+	TEMP_SV:= FORELINE_TEMP_SV[12], 
+	TEMP_ACTUAL:= GV.AI.FORELINE_Temp12, 
+	PID_P:= GV_H.FORELINE_HEATER_PID[12].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[12].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[12].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[12].DP, 
+	PID_Feedforward:= ,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[12].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[12]);
+	
+	IF H_FORELINE[12].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[12].P:=H_FORELINE[12].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[12].I:=H_FORELINE[12].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[12].D:=H_FORELINE[12].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[12]:=FALSE;
+	END_IF
+	//FORELINE13 PID		
+	H_FORELINE[13](
+	ENABLE:= GV.AI.FORELINE_Temp13<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[13], 
+	TEMP_SV:= FORELINE_TEMP_SV[13], 
+	TEMP_ACTUAL:= GV.AI.FORELINE_Temp13, 
+	PID_P:= GV_H.FORELINE_HEATER_PID[13].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[13].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[13].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[13].DP, 
+	PID_Feedforward:= ,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[13].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[13]);
+	
+	IF H_FORELINE[13].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[13].P:=H_FORELINE[13].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[13].I:=H_FORELINE[13].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[13].D:=H_FORELINE[13].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[13]:=FALSE;
+	END_IF
+	//FORELINE14 PID		
+	H_FORELINE[14](
+	ENABLE:= GV.AI.FORELINE_Temp14<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[14], 
+	TEMP_SV:= FORELINE_TEMP_SV[14], 
+	TEMP_ACTUAL:= GV.AI.FORELINE_Temp14, 
+	PID_P:= GV_H.FORELINE_HEATER_PID[14].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[14].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[14].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[14].DP, 
+	PID_Feedforward:= ,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[14].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[14]);
+	
+	IF H_FORELINE[14].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[14].P:=H_FORELINE[14].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[14].I:=H_FORELINE[14].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[14].D:=H_FORELINE[14].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[14]:=FALSE;
+	END_IF
+	//FORELINE15 PID		
+	H_FORELINE[15](
+	ENABLE:= GV.AI.FORELINE_Temp15<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[15], 
+	TEMP_SV:= FORELINE_TEMP_SV[15], 
+	TEMP_ACTUAL:= GV.AI.FORELINE_Temp15, 
+	PID_P:= GV_H.FORELINE_HEATER_PID[15].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[15].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[15].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[15].DP, 
+	PID_Feedforward:= ,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[15].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[15]);
+	
+	IF H_FORELINE[15].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[15].P:=H_FORELINE[15].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[15].I:=H_FORELINE[15].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[15].D:=H_FORELINE[15].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[15]:=FALSE;
+	END_IF
+	//FORELINE16 PID		
+	H_FORELINE[16](
+	ENABLE:= GV.AI.FORELINE_Temp16<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[16], 
+	TEMP_SV:= FORELINE_TEMP_SV[16], 
+	TEMP_ACTUAL:= GV.AI.FORELINE_Temp16, 
+	PID_P:= GV_H.FORELINE_HEATER_PID[16].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[16].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[16].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[16].DP, 
+	PID_Feedforward:= ,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[16].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[16]);
+	
+	IF H_FORELINE[16].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[16].P:=H_FORELINE[16].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[16].I:=H_FORELINE[16].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[16].D:=H_FORELINE[16].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[16]:=FALSE;
+	END_IF
+	//FORELINE17 PID		
+	H_FORELINE[17](
+	ENABLE:= GV.AI.FORELINE_Temp17<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[17], 
+	TEMP_SV:= FORELINE_TEMP_SV[17], 
+	TEMP_ACTUAL:= GV.AI.FORELINE_Temp17, 
+	PID_P:= GV_H.FORELINE_HEATER_PID[17].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[17].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[17].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[17].DP, 
+	PID_Feedforward:= ,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[17].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[17]);
+	
+	IF H_FORELINE[17].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[17].P:=H_FORELINE[17].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[17].I:=H_FORELINE[17].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[17].D:=H_FORELINE[17].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[17]:=FALSE;
+	END_IF
+	//FORELINE18 PID		
+	H_FORELINE[18](
+	ENABLE:= GV.AI.FORELINE_Temp18<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[18], 
+	TEMP_SV:= FORELINE_TEMP_SV[18], 
+	TEMP_ACTUAL:= GV.AI.FORELINE_Temp18, 
+	PID_P:= GV_H.FORELINE_HEATER_PID[18].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[18].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[18].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[18].DP, 
+	PID_Feedforward:= ,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[18].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[18]);
+	
+	IF H_FORELINE[18].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[18].P:=H_FORELINE[18].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[18].I:=H_FORELINE[18].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[18].D:=H_FORELINE[18].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[18]:=FALSE;
+	END_IF
+	//FORELINE19 PID		
+	H_FORELINE[19](
+	ENABLE:= GV.AI.FORELINE_Temp19<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[19], 
+	TEMP_SV:= FORELINE_TEMP_SV[19], 
+	TEMP_ACTUAL:= GV.AI.FORELINE_Temp19, 
+	PID_P:= GV_H.FORELINE_HEATER_PID[19].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[19].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[19].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[19].DP, 
+	PID_Feedforward:= ,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[19].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[19]);
+	
+	IF H_FORELINE[19].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[19].P:=H_FORELINE[19].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[19].I:=H_FORELINE[19].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[19].D:=H_FORELINE[19].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[19]:=FALSE;
+	END_IF
+	//FORELINE20 PID		
+	H_FORELINE[20](
+	ENABLE:= GV.AI.FORELINE_Temp20<120, 
+	AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[20], 
+	TEMP_SV:= FORELINE_TEMP_SV[20], 
+	TEMP_ACTUAL:= GV.AI.FORELINE_Temp20, 
+	PID_P:= GV_H.FORELINE_HEATER_PID[20].P, 
+	PID_I:= GV_H.FORELINE_HEATER_PID[20].I, 
+	PID_D:= GV_H.FORELINE_HEATER_PID[20].D, 
+	PID_Dp:= GV_H.FORELINE_HEATER_PID[20].DP, 
+	PID_Feedforward:= ,
+	PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[20].Output_Limit,
+	SSR_ON=> GV.FORELINE_HEATER_SSR_ON[20]);
+	
+	IF H_FORELINE[20].PID_AUTO_TUNE_DONE
+		THEN
+		GV_H.FORELINE_HEATER_PID[20].P:=H_FORELINE[20].PID_AUTO_TUNE_P;
+		GV_H.FORELINE_HEATER_PID[20].I:=H_FORELINE[20].PID_AUTO_TUNE_I;
+		GV_H.FORELINE_HEATER_PID[20].D:=H_FORELINE[20].PID_AUTO_TUNE_D;
+		GV.FORELINE_HEATER_AUTO_TUNE_EN[20]:=FALSE;
+	END_IF
+	*)]]></ST>
+    </Implementation>
+    <LineIds Name="Temp">
+      <LineId Id="33" Count="6" />
+      <LineId Id="41" Count="5" />
+      <LineId Id="1023" Count="0" />
+      <LineId Id="47" Count="5" />
+      <LineId Id="935" Count="0" />
+      <LineId Id="54" Count="14" />
+      <LineId Id="1022" Count="0" />
+      <LineId Id="69" Count="10" />
+      <LineId Id="81" Count="6" />
+      <LineId Id="926" Count="0" />
+      <LineId Id="159" Count="5" />
+      <LineId Id="1021" Count="0" />
+      <LineId Id="165" Count="7" />
+      <LineId Id="938" Count="0" />
+      <LineId Id="174" Count="13" />
+      <LineId Id="1020" Count="0" />
+      <LineId Id="188" Count="6" />
+      <LineId Id="937" Count="0" />
+      <LineId Id="196" Count="13" />
+      <LineId Id="1019" Count="0" />
+      <LineId Id="210" Count="7" />
+      <LineId Id="219" Count="6" />
+      <LineId Id="338" Count="6" />
+      <LineId Id="346" Count="5" />
+      <LineId Id="1018" Count="0" />
+      <LineId Id="352" Count="5" />
+      <LineId Id="936" Count="0" />
+      <LineId Id="359" Count="14" />
+      <LineId Id="1037" Count="0" />
+      <LineId Id="374" Count="6" />
+      <LineId Id="939" Count="0" />
+      <LineId Id="382" Count="13" />
+      <LineId Id="1036" Count="0" />
+      <LineId Id="396" Count="6" />
+      <LineId Id="940" Count="0" />
+      <LineId Id="404" Count="6" />
+      <LineId Id="987" Count="6" />
+      <LineId Id="1035" Count="0" />
+      <LineId Id="994" Count="13" />
+      <LineId Id="986" Count="0" />
+      <LineId Id="456" Count="6" />
+      <LineId Id="1034" Count="0" />
+      <LineId Id="463" Count="6" />
+      <LineId Id="941" Count="0" />
+      <LineId Id="471" Count="7" />
+      <LineId Id="962" Count="1" />
+      <LineId Id="965" Count="2" />
+      <LineId Id="964" Count="0" />
+      <LineId Id="479" Count="5" />
+      <LineId Id="961" Count="0" />
+      <LineId Id="485" Count="6" />
+      <LineId Id="942" Count="0" />
+      <LineId Id="493" Count="13" />
+      <LineId Id="1038" Count="0" />
+      <LineId Id="507" Count="21" />
+      <LineId Id="1039" Count="0" />
+      <LineId Id="529" Count="21" />
+      <LineId Id="1040" Count="0" />
+      <LineId Id="551" Count="21" />
+      <LineId Id="1041" Count="0" />
+      <LineId Id="573" Count="20" />
+      <LineId Id="1042" Count="0" />
+      <LineId Id="594" Count="20" />
+      <LineId Id="1043" Count="0" />
+      <LineId Id="615" Count="20" />
+      <LineId Id="1044" Count="0" />
+      <LineId Id="636" Count="20" />
+      <LineId Id="1045" Count="0" />
+      <LineId Id="657" Count="265" />
+      <LineId Id="5" Count="0" />
+      <LineId Id="923" Count="0" />
+    </LineIds>
+  </POU>
+</TcPlcObject>

BIN
PLC/_CompileInfo/A9262DFD-2EE5-47C6-8583-BC7F4E7786A8.compileinfo


File diff suppressed because it is too large
+ 34 - 0
TrialLicense.tclrs