Temp.TcPOU 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
  3. <POU Name="Temp" Id="{8e4146c5-83e0-483d-9024-7c58de37e9e4}" SpecialFunc="None">
  4. <Declaration><![CDATA[PROGRAM Temp
  5. VAR
  6. H_LID :ARRAY[1..10] OF Temp_controller;
  7. H_CHAMBER :ARRAY[1..10] OF Temp_controller;
  8. H_PEN_VALVE :Temp_controller;
  9. H_GATE_VALVE :Temp_controller;
  10. H_IGS :ARRAY[1..10] OF Temp_controller;
  11. H_TAPE :ARRAY[1..10] OF Temp_controller;
  12. H_FORELINE :ARRAY[1..20] OF Temp_controller;
  13. H_STAGE :ARRAY[1..10] OF Temp_controller;
  14. END_VAR
  15. ]]></Declaration>
  16. <Implementation>
  17. <ST><![CDATA[//E01 PEN_VALVE PID
  18. IF GV.AI.APC_Temp-GV.AO.APC_Temp_SV<3
  19. THEN
  20. H_PEN_VALVE.PID_Feedforward:=GV_H.PEN_VALVE_HEATER_PID.Feedforward;
  21. ELSE
  22. H_PEN_VALVE.PID_Feedforward:=0;
  23. END_IF
  24. H_PEN_VALVE(
  25. ENABLE:= GV.AI.APC_Temp<110,
  26. AUTO_TUNE:= GV.PEN_VALVE_HEATER_AUTO_TUNE_EN,
  27. AUTO_TUNE_OUTPUT:=GV.PEN_VALVE_HEATER_AUTO_TUNE_OUTPUT,
  28. TEMP_SV:= GV.AO.APC_Temp_SV,
  29. TEMP_ACTUAL:= GV.AI.APC_Temp,
  30. TEMP_RATE:=5,
  31. PID_P:= GV_H.PEN_VALVE_HEATER_PID.P,
  32. PID_I:= GV_H.PEN_VALVE_HEATER_PID.I,
  33. PID_D:= GV_H.PEN_VALVE_HEATER_PID.D,
  34. PID_Dp:= GV_H.PEN_VALVE_HEATER_PID.DP,
  35. PID_Output_Limit:= GV_H.PEN_VALVE_HEATER_PID.Output_Limit,
  36. SSR_ON=> GV.PEN_VALVE_HEATER_SSR_ON
  37. );
  38. IF H_PEN_VALVE.PID_AUTO_TUNE_DONE
  39. THEN
  40. GV_H.PEN_VALVE_HEATER_PID.P:=H_PEN_VALVE.PID_AUTO_TUNE_P;
  41. GV_H.PEN_VALVE_HEATER_PID.I:=H_PEN_VALVE.PID_AUTO_TUNE_I;
  42. GV_H.PEN_VALVE_HEATER_PID.D:=H_PEN_VALVE.PID_AUTO_TUNE_D;
  43. GV.PEN_VALVE_HEATER_AUTO_TUNE_EN:=FALSE;
  44. END_IF
  45. //E02 LID1 PID
  46. H_LID[1](
  47. ENABLE:= GV.AI.Lid_Temp<100,
  48. AUTO_TUNE:= GV.LID_HEATER_AUTO_TUNE_EN[1],
  49. AUTO_TUNE_OUTPUT:=GV.LID_HEATER_AUTO_TUNE_OUTPUT[1],
  50. TEMP_SV:= GV.AO.LID_Temp_SV,
  51. TEMP_ACTUAL:= GV.AI.Lid_Temp,
  52. TEMP_RATE:=5,
  53. PID_P:= GV_H.LID_HEATER_PID[1].P,
  54. PID_I:= GV_H.LID_HEATER_PID[1].I,
  55. PID_D:= GV_H.LID_HEATER_PID[1].D,
  56. PID_Dp:= GV_H.LID_HEATER_PID[1].DP,
  57. PID_Feedforward:= GV_H.LID_HEATER_PID[1].Feedforward,
  58. PID_Output_Limit:= GV_H.LID_HEATER_PID[1].Output_Limit,
  59. SSR_ON=> GV.LID_HEATER_SSR_ON[1],
  60. SSR_ON=> GV.LID_HEATER_SSR_ON[2],
  61. SSR_ON=> GV.LID_HEATER_SSR_ON[3],
  62. SSR_ON=> GV.LID_HEATER_SSR_ON[4]
  63. );
  64. IF H_LID[1].PID_AUTO_TUNE_DONE
  65. THEN
  66. GV_H.LID_HEATER_PID[1].P:=H_LID[1].PID_AUTO_TUNE_P;
  67. GV_H.LID_HEATER_PID[1].I:=H_LID[1].PID_AUTO_TUNE_I;
  68. GV_H.LID_HEATER_PID[1].D:=H_LID[1].PID_AUTO_TUNE_D;
  69. GV.LID_HEATER_AUTO_TUNE_EN[1]:=FALSE;
  70. END_IF
  71. //E06 CHAMBER1 PID
  72. H_CHAMBER[1](
  73. ENABLE:= GV.AI.CHAMBER_Temp1<100,
  74. AUTO_TUNE:= GV.CHAMBER_HEATER_AUTO_TUNE_EN[1],
  75. AUTO_TUNE_OUTPUT:=GV.CHAMBER_HEATER_AUTO_TUNE_OUTPUT[1],
  76. TEMP_SV:= GV.AO.Chamber_Temp1_SV,
  77. TEMP_ACTUAL:= GV.AI.CHAMBER_Temp1,
  78. TEMP_RATE:=5,
  79. PID_P:= GV_H.CHAMBER_HEATER_PID[1].P,
  80. PID_I:= GV_H.CHAMBER_HEATER_PID[1].I,
  81. PID_D:= GV_H.CHAMBER_HEATER_PID[1].D,
  82. PID_Dp:= GV_H.CHAMBER_HEATER_PID[1].DP,
  83. PID_Feedforward:= GV_H.CHAMBER_HEATER_PID[1].Feedforward,
  84. PID_Output_Limit:= GV_H.CHAMBER_HEATER_PID[1].Output_Limit,
  85. SSR_ON=> GV.CHAMBER_HEATER_SSR_ON[1]
  86. );
  87. IF H_CHAMBER[1].PID_AUTO_TUNE_DONE
  88. THEN
  89. GV_H.CHAMBER_HEATER_PID[1].P:=H_CHAMBER[1].PID_AUTO_TUNE_P;
  90. GV_H.CHAMBER_HEATER_PID[1].I:=H_CHAMBER[1].PID_AUTO_TUNE_I;
  91. GV_H.CHAMBER_HEATER_PID[1].D:=H_CHAMBER[1].PID_AUTO_TUNE_D;
  92. GV.CHAMBER_HEATER_AUTO_TUNE_EN[1]:=FALSE;
  93. END_IF
  94. //E07 CHAMBER2 PID
  95. H_CHAMBER[2](
  96. ENABLE:= GV.AI.CHAMBER_Temp2<100,
  97. AUTO_TUNE:= GV.CHAMBER_HEATER_AUTO_TUNE_EN[2],
  98. AUTO_TUNE_OUTPUT:=GV.CHAMBER_HEATER_AUTO_TUNE_OUTPUT[2],
  99. TEMP_SV:= GV.AO.Chamber_Temp2_SV,
  100. TEMP_ACTUAL:= GV.AI.CHAMBER_Temp2,
  101. TEMP_RATE:=5,
  102. PID_P:= GV_H.CHAMBER_HEATER_PID[2].P,
  103. PID_I:= GV_H.CHAMBER_HEATER_PID[2].I,
  104. PID_D:= GV_H.CHAMBER_HEATER_PID[2].D,
  105. PID_Dp:= GV_H.CHAMBER_HEATER_PID[2].DP,
  106. PID_Feedforward:= GV_H.CHAMBER_HEATER_PID[2].Feedforward,
  107. PID_Output_Limit:= GV_H.CHAMBER_HEATER_PID[2].Output_Limit,
  108. SSR_ON=> GV.CHAMBER_HEATER_SSR_ON[2]
  109. );
  110. IF H_CHAMBER[2].PID_AUTO_TUNE_DONE
  111. THEN
  112. GV_H.CHAMBER_HEATER_PID[2].P:=H_CHAMBER[2].PID_AUTO_TUNE_P;
  113. GV_H.CHAMBER_HEATER_PID[2].I:=H_CHAMBER[2].PID_AUTO_TUNE_I;
  114. GV_H.CHAMBER_HEATER_PID[2].D:=H_CHAMBER[2].PID_AUTO_TUNE_D;
  115. GV.CHAMBER_HEATER_AUTO_TUNE_EN[2]:=FALSE;
  116. END_IF
  117. (*
  118. //E08 CHAMBER3 PID
  119. H_CHAMBER[3](
  120. ENABLE:= GV.AI.CHAMBER_Temp3<100,
  121. AUTO_TUNE:= GV.CHAMBER_HEATER_AUTO_TUNE_EN[3],
  122. AUTO_TUNE_OUTPUT:=GV.CHAMBER_HEATER_AUTO_TUNE_OUTPUT[3],
  123. TEMP_SV:= GV.AO.Chamber_Temp3_SV,
  124. TEMP_ACTUAL:= GV.AI.Chamber_Temp3,
  125. PID_P:= GV_H.CHAMBER_HEATER_PID[3].P,
  126. PID_I:= GV_H.CHAMBER_HEATER_PID[3].I,
  127. PID_D:= GV_H.CHAMBER_HEATER_PID[3].D,
  128. PID_Dp:= GV_H.CHAMBER_HEATER_PID[3].DP,
  129. PID_Feedforward:= GV_H.CHAMBER_HEATER_PID[3].Feedforward,
  130. PID_Output_Limit:= GV_H.CHAMBER_HEATER_PID[3].Output_Limit,
  131. SSR_ON=> GV.CHAMBER_HEATER_SSR_ON[4]
  132. );
  133. IF H_CHAMBER[3].PID_AUTO_TUNE_DONE
  134. THEN
  135. GV_H.CHAMBER_HEATER_PID[3].P:=H_CHAMBER[3].PID_AUTO_TUNE_P;
  136. GV_H.CHAMBER_HEATER_PID[3].I:=H_CHAMBER[3].PID_AUTO_TUNE_I;
  137. GV_H.CHAMBER_HEATER_PID[3].D:=H_CHAMBER[3].PID_AUTO_TUNE_D;
  138. GV.CHAMBER_HEATER_AUTO_TUNE_EN[3]:=FALSE;
  139. END_IF
  140. //E18 GATE VALVE PID
  141. IF ABS(GV.AI.GATE_VALVE_Temp-GV.AO.Gate_Valve_Temp_SV)<5
  142. THEN
  143. H_GATE_VALVE.PID_Feedforward:=GV_H.GATE_VALVE_HEATER_PID.Feedforward;
  144. ELSE
  145. H_GATE_VALVE.PID_Feedforward:=0;
  146. END_IF
  147. H_GATE_VALVE(
  148. ENABLE:= GV.AI.GATE_VALVE_Temp<100,
  149. AUTO_TUNE:= GV.GATE_VALVE_HEATER_AUTO_TUNE_EN,
  150. AUTO_TUNE_OUTPUT:=GV.GATE_VALVE_HEATER_AUTO_TUNE_OUTPUT,
  151. TEMP_SV:= GV.AO.Gate_Valve_Temp_SV,
  152. TEMP_ACTUAL:= GV.AI.GATE_VALVE_Temp,
  153. PID_P:= GV_H.GATE_VALVE_HEATER_PID.P,
  154. PID_I:= GV_H.GATE_VALVE_HEATER_PID.I,
  155. PID_D:= GV_H.GATE_VALVE_HEATER_PID.D,
  156. PID_Dp:= GV_H.GATE_VALVE_HEATER_PID.DP,
  157. PID_Output_Limit:= GV_H.GATE_VALVE_HEATER_PID.Output_Limit,
  158. SSR_ON=> GV.GATE_VALVE_SSR_ON
  159. );
  160. IF H_GATE_VALVE.PID_AUTO_TUNE_DONE
  161. THEN
  162. GV_H.GATE_VALVE_HEATER_PID.P:=H_GATE_VALVE.PID_AUTO_TUNE_P;
  163. GV_H.GATE_VALVE_HEATER_PID.I:=H_GATE_VALVE.PID_AUTO_TUNE_I;
  164. GV_H.GATE_VALVE_HEATER_PID.D:=H_GATE_VALVE.PID_AUTO_TUNE_D;
  165. GV.GATE_VALVE_HEATER_AUTO_TUNE_EN:=FALSE;
  166. END_IF
  167. //E31 TAPE1 PID
  168. H_TAPE[1](
  169. ENABLE:= GV.AI.TAPE_Temp1<120,
  170. AUTO_TUNE:= GV.TAPE_HEATER_AUTO_TUNE_EN[1],
  171. AUTO_TUNE_OUTPUT:=GV.TAPE_HEATER_AUTO_TUNE_OUTPUT[1],
  172. TEMP_SV:= GV.AO.Tape_Temp1_SV,
  173. TEMP_ACTUAL:= GV.AI.TAPE_Temp1,
  174. PID_P:= GV_H.TAPE_HEATER_PID[1].P,
  175. PID_I:= GV_H.TAPE_HEATER_PID[1].I,
  176. PID_D:= GV_H.TAPE_HEATER_PID[1].D,
  177. PID_Dp:= GV_H.TAPE_HEATER_PID[1].DP,
  178. PID_Feedforward:= ,
  179. PID_Output_Limit:= GV_H.TAPE_HEATER_PID[1].Output_Limit,
  180. SSR_ON=> GV.TAPE_HEATER_SSR_ON[1]
  181. );
  182. IF H_TAPE[1].PID_AUTO_TUNE_DONE
  183. THEN
  184. GV_H.TAPE_HEATER_PID[1].P:=H_TAPE[1].PID_AUTO_TUNE_P;
  185. GV_H.TAPE_HEATER_PID[1].I:=H_TAPE[1].PID_AUTO_TUNE_I;
  186. GV_H.TAPE_HEATER_PID[1].D:=H_TAPE[1].PID_AUTO_TUNE_D;
  187. GV.TAPE_HEATER_AUTO_TUNE_EN[1]:=FALSE;
  188. END_IF
  189. //E32 TAPE2 PID
  190. H_TAPE[2](
  191. ENABLE:= GV.AI.TAPE_Temp2<120,
  192. AUTO_TUNE:= GV.TAPE_HEATER_AUTO_TUNE_EN[2],
  193. AUTO_TUNE_OUTPUT:=GV.TAPE_HEATER_AUTO_TUNE_OUTPUT[2],
  194. TEMP_SV:= GV.AO.Tape_Temp2_SV,
  195. TEMP_ACTUAL:= GV.AI.TAPE_Temp2,
  196. PID_P:= GV_H.TAPE_HEATER_PID[2].P,
  197. PID_I:= GV_H.TAPE_HEATER_PID[2].I,
  198. PID_D:= GV_H.TAPE_HEATER_PID[2].D,
  199. PID_Dp:= GV_H.TAPE_HEATER_PID[2].DP,
  200. PID_Feedforward:= ,
  201. PID_Output_Limit:= GV_H.TAPE_HEATER_PID[2].Output_Limit,
  202. SSR_ON=> GV.TAPE_HEATER_SSR_ON[2]
  203. );
  204. IF H_TAPE[2].PID_AUTO_TUNE_DONE
  205. THEN
  206. GV_H.TAPE_HEATER_PID[2].P:=H_TAPE[2].PID_AUTO_TUNE_P;
  207. GV_H.TAPE_HEATER_PID[2].I:=H_TAPE[2].PID_AUTO_TUNE_I;
  208. GV_H.TAPE_HEATER_PID[2].D:=H_TAPE[2].PID_AUTO_TUNE_D;
  209. GV.TAPE_HEATER_AUTO_TUNE_EN[2]:=FALSE;
  210. END_IF
  211. //E35 IGS1 PID
  212. H_IGS[1](
  213. ENABLE:= GV.AI.IGS_Temp1<50,
  214. AUTO_TUNE:= GV.IGS_HEATER_AUTO_TUNE_EN[1],
  215. AUTO_TUNE_OUTPUT:=GV.IGS_HEATER_AUTO_TUNE_OUTPUT[1],
  216. TEMP_SV:= GV.AO.IGS_Temp1_SV,
  217. TEMP_ACTUAL:= GV.AI.IGS_Temp1,
  218. PID_P:= GV_H.IGS_HEATER_PID[1].P,
  219. PID_I:= GV_H.IGS_HEATER_PID[1].I,
  220. PID_D:= GV_H.IGS_HEATER_PID[1].D,
  221. PID_Dp:= GV_H.IGS_HEATER_PID[1].DP,
  222. PID_Feedforward:= GV_H.IGS_HEATER_PID[1].Feedforward,
  223. PID_Output_Limit:= GV_H.IGS_HEATER_PID[1].Output_Limit,
  224. SSR_ON=> GV.IGS_HEATER_SSR_ON[1]
  225. );
  226. IF H_IGS[1].PID_AUTO_TUNE_DONE
  227. THEN
  228. GV_H.IGS_HEATER_PID[1].P:=H_IGS[1].PID_AUTO_TUNE_P;
  229. GV_H.IGS_HEATER_PID[1].I:=H_IGS[1].PID_AUTO_TUNE_I;
  230. GV_H.IGS_HEATER_PID[1].D:=H_IGS[1].PID_AUTO_TUNE_D;
  231. GV.IGS_HEATER_AUTO_TUNE_EN[1]:=FALSE;
  232. END_IF
  233. //E36 IGS2 PID
  234. IF GV.AI.IGS_Temp2>GV.AO.IGS_Temp2_SV+3 THEN
  235. H_IGS[2].PID_Feedforward:=0;
  236. ELSE
  237. H_IGS[2].PID_Feedforward:=GV_H.IGS_HEATER_PID[2].Feedforward;
  238. END_IF
  239. H_IGS[2](
  240. ENABLE:= GV.AI.IGS_Temp2<50,
  241. AUTO_TUNE:= GV.IGS_HEATER_AUTO_TUNE_EN[2],
  242. AUTO_TUNE_OUTPUT:=GV.IGS_HEATER_AUTO_TUNE_OUTPUT[2],
  243. TEMP_SV:= GV.AO.IGS_Temp2_SV,
  244. TEMP_ACTUAL:= GV.AI.IGS_Temp2,
  245. TEMP_RATE:=10,
  246. PID_P:= GV_H.IGS_HEATER_PID[2].P,
  247. PID_I:= GV_H.IGS_HEATER_PID[2].I,
  248. PID_D:= GV_H.IGS_HEATER_PID[2].D,
  249. PID_Dp:= GV_H.IGS_HEATER_PID[2].DP,
  250. PID_Feedforward:= ,
  251. PID_Output_Limit:= GV_H.IGS_HEATER_PID[2].Output_Limit,
  252. SSR_ON=> GV.IGS_HEATER_SSR_ON[2]
  253. );
  254. IF H_IGS[2].PID_AUTO_TUNE_DONE
  255. THEN
  256. GV_H.IGS_HEATER_PID[2].P:=H_IGS[2].PID_AUTO_TUNE_P;
  257. GV_H.IGS_HEATER_PID[2].I:=H_IGS[2].PID_AUTO_TUNE_I;
  258. GV_H.IGS_HEATER_PID[2].D:=H_IGS[2].PID_AUTO_TUNE_D;
  259. GV.IGS_HEATER_AUTO_TUNE_EN[2]:=FALSE;
  260. END_IF
  261. *)
  262. //FORELINE1 PID SSR7 AV105
  263. H_FORELINE[1](
  264. ENABLE:= GV.AI.AV105_Temp<120,
  265. AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[1],
  266. AUTO_TUNE_OUTPUT:=GV.FORELINE_HEATER_AUTO_TUNE_OUTPUT[1],
  267. TEMP_SV:= GV.AO.AV105_Temp_SV,
  268. TEMP_ACTUAL:= GV.AI.AV105_Temp,
  269. TEMP_RATE:=10,
  270. PID_P:= GV_H.FORELINE_HEATER_PID[1].P,
  271. PID_I:= GV_H.FORELINE_HEATER_PID[1].I,
  272. PID_D:= GV_H.FORELINE_HEATER_PID[1].D,
  273. PID_Dp:= GV_H.FORELINE_HEATER_PID[1].DP,
  274. PID_Feedforward:= GV_H.FORELINE_HEATER_PID[1].Feedforward,
  275. PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[1].Output_Limit,
  276. SSR_ON=> GV.FORELINE_HEATER_SSR_ON[1]);
  277. IF H_FORELINE[1].PID_AUTO_TUNE_DONE
  278. THEN
  279. GV_H.FORELINE_HEATER_PID[1].P:=H_FORELINE[1].PID_AUTO_TUNE_P;
  280. GV_H.FORELINE_HEATER_PID[1].I:=H_FORELINE[1].PID_AUTO_TUNE_I;
  281. GV_H.FORELINE_HEATER_PID[1].D:=H_FORELINE[1].PID_AUTO_TUNE_D;
  282. GV.FORELINE_HEATER_AUTO_TUNE_EN[1]:=FALSE;
  283. END_IF
  284. //FORELINE2 PID SSR8 AV104
  285. H_FORELINE[2](
  286. ENABLE:= GV.AI.AV104_Temp<120,
  287. AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[2],
  288. AUTO_TUNE_OUTPUT:=GV.FORELINE_HEATER_AUTO_TUNE_OUTPUT[2],
  289. TEMP_SV:= GV.AO.AV104_Temp_SV,
  290. TEMP_ACTUAL:= GV.AI.AV104_Temp,
  291. TEMP_RATE:=10,
  292. PID_P:= GV_H.FORELINE_HEATER_PID[2].P,
  293. PID_I:= GV_H.FORELINE_HEATER_PID[2].I,
  294. PID_D:= GV_H.FORELINE_HEATER_PID[2].D,
  295. PID_Dp:= GV_H.FORELINE_HEATER_PID[2].DP,
  296. PID_Feedforward:= GV_H.FORELINE_HEATER_PID[2].Feedforward,
  297. PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[2].Output_Limit,
  298. SSR_ON=> GV.FORELINE_HEATER_SSR_ON[2]);
  299. IF H_FORELINE[2].PID_AUTO_TUNE_DONE
  300. THEN
  301. GV_H.FORELINE_HEATER_PID[2].P:=H_FORELINE[2].PID_AUTO_TUNE_P;
  302. GV_H.FORELINE_HEATER_PID[2].I:=H_FORELINE[2].PID_AUTO_TUNE_I;
  303. GV_H.FORELINE_HEATER_PID[2].D:=H_FORELINE[2].PID_AUTO_TUNE_D;
  304. GV.FORELINE_HEATER_AUTO_TUNE_EN[2]:=FALSE;
  305. END_IF
  306. //FORELINE3 PID SSR9 AV102
  307. IF GV.AI.AV102_Temp<GV.AO.AV102_Temp_SV+1
  308. THEN
  309. GV_H.FORELINE_HEATER_PID[3].Feedforward:=0;
  310. ELSE
  311. GV_H.FORELINE_HEATER_PID[3].Feedforward:=0;
  312. END_IF
  313. H_FORELINE[3](
  314. ENABLE:= GV.AI.AV102_Temp<120,
  315. AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[3],
  316. AUTO_TUNE_OUTPUT:=GV.FORELINE_HEATER_AUTO_TUNE_OUTPUT[3],
  317. TEMP_SV:= GV.AO.AV102_Temp_SV,
  318. TEMP_ACTUAL:= GV.AI.AV102_Temp,
  319. TEMP_RATE:=10,
  320. PID_P:= GV_H.FORELINE_HEATER_PID[3].P,
  321. PID_I:= GV_H.FORELINE_HEATER_PID[3].I,
  322. PID_D:= GV_H.FORELINE_HEATER_PID[3].D,
  323. PID_Dp:= GV_H.FORELINE_HEATER_PID[3].DP,
  324. PID_Feedforward:= GV_H.FORELINE_HEATER_PID[3].Feedforward,
  325. PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[3].Output_Limit,
  326. SSR_ON=> GV.FORELINE_HEATER_SSR_ON[3]);
  327. IF H_FORELINE[3].PID_AUTO_TUNE_DONE
  328. THEN
  329. GV_H.FORELINE_HEATER_PID[3].P:=H_FORELINE[3].PID_AUTO_TUNE_P;
  330. GV_H.FORELINE_HEATER_PID[3].I:=H_FORELINE[3].PID_AUTO_TUNE_I;
  331. GV_H.FORELINE_HEATER_PID[3].D:=H_FORELINE[3].PID_AUTO_TUNE_D;
  332. GV.FORELINE_HEATER_AUTO_TUNE_EN[3]:=FALSE;
  333. END_IF
  334. //FORELINE4 PID SSR10 AV101
  335. H_FORELINE[4](
  336. ENABLE:= GV.AI.AV101_Temp<120,
  337. AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[4],
  338. AUTO_TUNE_OUTPUT:=GV.FORELINE_HEATER_AUTO_TUNE_OUTPUT[4],
  339. TEMP_SV:= GV.AO.AV101_Temp_SV,
  340. TEMP_ACTUAL:= GV.AI.AV101_Temp,
  341. TEMP_RATE:=10,
  342. PID_P:= GV_H.FORELINE_HEATER_PID[4].P,
  343. PID_I:= GV_H.FORELINE_HEATER_PID[4].I,
  344. PID_D:= GV_H.FORELINE_HEATER_PID[4].D,
  345. PID_Dp:= GV_H.FORELINE_HEATER_PID[4].DP,
  346. PID_Feedforward:= GV_H.FORELINE_HEATER_PID[4].Feedforward,
  347. PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[4].Output_Limit,
  348. SSR_ON=> GV.FORELINE_HEATER_SSR_ON[4]);
  349. IF H_FORELINE[4].PID_AUTO_TUNE_DONE
  350. THEN
  351. GV_H.FORELINE_HEATER_PID[4].P:=H_FORELINE[4].PID_AUTO_TUNE_P;
  352. GV_H.FORELINE_HEATER_PID[4].I:=H_FORELINE[4].PID_AUTO_TUNE_I;
  353. GV_H.FORELINE_HEATER_PID[4].D:=H_FORELINE[4].PID_AUTO_TUNE_D;
  354. GV.FORELINE_HEATER_AUTO_TUNE_EN[4]:=FALSE;
  355. END_IF
  356. //FORELINE5 PID SS11 Exh1-3
  357. H_FORELINE[5](
  358. ENABLE:= GV.AI.Exhaust1_3_Temp<120,
  359. AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[5],
  360. AUTO_TUNE_OUTPUT:=GV.FORELINE_HEATER_AUTO_TUNE_OUTPUT[5],
  361. TEMP_SV:= GV.AO.Exhaust1_3_Temp_SV ,
  362. TEMP_ACTUAL:= GV.AI.Exhaust1_3_Temp,
  363. TEMP_RATE:=10,
  364. PID_P:= GV_H.FORELINE_HEATER_PID[5].P,
  365. PID_I:= GV_H.FORELINE_HEATER_PID[5].I,
  366. PID_D:= GV_H.FORELINE_HEATER_PID[5].D,
  367. PID_Dp:= GV_H.FORELINE_HEATER_PID[5].DP,
  368. PID_Feedforward:= GV_H.FORELINE_HEATER_PID[5].Feedforward,
  369. PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[5].Output_Limit,
  370. SSR_ON=> GV.FORELINE_HEATER_SSR_ON[5]);
  371. IF H_FORELINE[5].PID_AUTO_TUNE_DONE
  372. THEN
  373. GV_H.FORELINE_HEATER_PID[5].P:=H_FORELINE[5].PID_AUTO_TUNE_P;
  374. GV_H.FORELINE_HEATER_PID[5].I:=H_FORELINE[5].PID_AUTO_TUNE_I;
  375. GV_H.FORELINE_HEATER_PID[5].D:=H_FORELINE[5].PID_AUTO_TUNE_D;
  376. GV.FORELINE_HEATER_AUTO_TUNE_EN[5]:=FALSE;
  377. END_IF
  378. //FORELINE6 PID SS12 Exh4-7
  379. H_FORELINE[6](
  380. ENABLE:= GV.AI.Exhaust4_7_Temp<120,
  381. AUTO_TUNE:= GV.FORELINE_HEATER_AUTO_TUNE_EN[6],
  382. TEMP_SV:= GV.AO.Exhaust4_7_Temp_SV,
  383. TEMP_ACTUAL:= GV.AI.Exhaust4_7_Temp,
  384. TEMP_RATE:=10,
  385. PID_P:= GV_H.FORELINE_HEATER_PID[6].P,
  386. PID_I:= GV_H.FORELINE_HEATER_PID[6].I,
  387. PID_D:= GV_H.FORELINE_HEATER_PID[6].D,
  388. PID_Dp:= GV_H.FORELINE_HEATER_PID[6].DP,
  389. PID_Feedforward:= GV_H.FORELINE_HEATER_PID[6].Feedforward,
  390. PID_Output_Limit:= GV_H.FORELINE_HEATER_PID[6].Output_Limit,
  391. SSR_ON=> GV.FORELINE_HEATER_SSR_ON[6]);
  392. IF H_FORELINE[6].PID_AUTO_TUNE_DONE
  393. THEN
  394. GV_H.FORELINE_HEATER_PID[6].P:=H_FORELINE[6].PID_AUTO_TUNE_P;
  395. GV_H.FORELINE_HEATER_PID[6].I:=H_FORELINE[6].PID_AUTO_TUNE_I;
  396. GV_H.FORELINE_HEATER_PID[6].D:=H_FORELINE[6].PID_AUTO_TUNE_D;
  397. GV.FORELINE_HEATER_AUTO_TUNE_EN[6]:=FALSE;
  398. END_IF
  399. //H-STAGE1
  400. H_STAGE[1](
  401. ENABLE:= GV.AI.Stage_Temp1<250 AND PM.NDI.Lid_Closed,
  402. AUTO_TUNE:= GV.STAGE_HEATER_AUTO_TUNE_EN[1],
  403. TEMP_SV:= GV.AO.Stage_Temp1_SV,
  404. TEMP_ACTUAL:= GV.AI.Stage_Temp1,
  405. TEMP_RATE:=10,
  406. PID_P:= GV_H.STAGE_HEATER_PID[1].P,
  407. PID_I:= GV_H.STAGE_HEATER_PID[1].I,
  408. PID_D:= GV_H.STAGE_HEATER_PID[1].D,
  409. PID_Dp:= GV_H.STAGE_HEATER_PID[1].DP,
  410. PID_Feedforward:= GV_H.STAGE_HEATER_PID[1].Feedforward,
  411. PID_Output_Limit:= GV_H.STAGE_HEATER_PID[1].Output_Limit,
  412. SCR_OUT=> GV.STAGE_HEATER_SCR_OUTPUT[1]);
  413. IF H_STAGE[1].PID_AUTO_TUNE_DONE
  414. THEN
  415. GV_H.STAGE_HEATER_PID[1].P:=H_STAGE[1].PID_AUTO_TUNE_P;
  416. GV_H.STAGE_HEATER_PID[1].I:=H_STAGE[1].PID_AUTO_TUNE_I;
  417. GV_H.STAGE_HEATER_PID[1].D:=H_STAGE[1].PID_AUTO_TUNE_D;
  418. GV.STAGE_HEATER_AUTO_TUNE_EN[1]:=FALSE;
  419. END_IF
  420. //H-STAGE2
  421. H_STAGE[2](
  422. ENABLE:= GV.AI.Stage_Temp2<250 AND PM.NDI.Lid_Closed,
  423. AUTO_TUNE:= GV.STAGE_HEATER_AUTO_TUNE_EN[2],
  424. TEMP_SV:= GV.AO.Stage_Temp2_SV,
  425. TEMP_ACTUAL:= GV.AI.Stage_Temp2,
  426. TEMP_RATE:=10,
  427. PID_P:= GV_H.STAGE_HEATER_PID[2].P,
  428. PID_I:= GV_H.STAGE_HEATER_PID[2].I,
  429. PID_D:= GV_H.STAGE_HEATER_PID[2].D,
  430. PID_Dp:= GV_H.STAGE_HEATER_PID[2].DP,
  431. PID_Feedforward:= GV_H.STAGE_HEATER_PID[2].Feedforward,
  432. PID_Output_Limit:= GV_H.STAGE_HEATER_PID[2].Output_Limit,
  433. SCR_OUT=> GV.STAGE_HEATER_SCR_OUTPUT[2]);
  434. IF H_STAGE[2].PID_AUTO_TUNE_DONE
  435. THEN
  436. GV_H.STAGE_HEATER_PID[2].P:=H_STAGE[2].PID_AUTO_TUNE_P;
  437. GV_H.STAGE_HEATER_PID[2].I:=H_STAGE[2].PID_AUTO_TUNE_I;
  438. GV_H.STAGE_HEATER_PID[2].D:=H_STAGE[2].PID_AUTO_TUNE_D;
  439. GV.STAGE_HEATER_AUTO_TUNE_EN[2]:=FALSE;
  440. END_IF
  441. //H-STAGE3
  442. H_STAGE[3](
  443. ENABLE:= GV.AI.Stage_Temp3<250 AND PM.NDI.Lid_Closed,
  444. AUTO_TUNE:= GV.STAGE_HEATER_AUTO_TUNE_EN[3],
  445. TEMP_SV:= GV.AO.Stage_Temp3_SV,
  446. TEMP_ACTUAL:= GV.AI.Stage_Temp3,
  447. TEMP_RATE:=10,
  448. PID_P:= GV_H.STAGE_HEATER_PID[3].P,
  449. PID_I:= GV_H.STAGE_HEATER_PID[3].I,
  450. PID_D:= GV_H.STAGE_HEATER_PID[3].D,
  451. PID_Dp:= GV_H.STAGE_HEATER_PID[3].DP,
  452. PID_Feedforward:= GV_H.STAGE_HEATER_PID[3].Feedforward,
  453. PID_Output_Limit:= GV_H.STAGE_HEATER_PID[3].Output_Limit,
  454. SCR_OUT=> GV.STAGE_HEATER_SCR_OUTPUT[3]);
  455. IF H_STAGE[3].PID_AUTO_TUNE_DONE
  456. THEN
  457. GV_H.STAGE_HEATER_PID[3].P:=H_STAGE[3].PID_AUTO_TUNE_P;
  458. GV_H.STAGE_HEATER_PID[3].I:=H_STAGE[3].PID_AUTO_TUNE_I;
  459. GV_H.STAGE_HEATER_PID[3].D:=H_STAGE[3].PID_AUTO_TUNE_D;
  460. GV.STAGE_HEATER_AUTO_TUNE_EN[3]:=FALSE;
  461. END_IF
  462. //H-STAGE4
  463. H_STAGE[4](
  464. ENABLE:= GV.AI.Stage_Temp4<250 AND PM.NDI.Lid_Closed,
  465. AUTO_TUNE:= GV.STAGE_HEATER_AUTO_TUNE_EN[4],
  466. TEMP_SV:= GV.AO.Stage_Temp4_SV,
  467. TEMP_ACTUAL:= GV.AI.Stage_Temp4,
  468. TEMP_RATE:=10,
  469. PID_P:= GV_H.STAGE_HEATER_PID[4].P,
  470. PID_I:= GV_H.STAGE_HEATER_PID[4].I,
  471. PID_D:= GV_H.STAGE_HEATER_PID[4].D,
  472. PID_Dp:= GV_H.STAGE_HEATER_PID[4].DP,
  473. PID_Feedforward:= GV_H.STAGE_HEATER_PID[4].Feedforward,
  474. PID_Output_Limit:= GV_H.STAGE_HEATER_PID[4].Output_Limit,
  475. SCR_OUT=> GV.STAGE_HEATER_SCR_OUTPUT[4]);
  476. IF H_STAGE[4].PID_AUTO_TUNE_DONE
  477. THEN
  478. GV_H.STAGE_HEATER_PID[4].P:=H_STAGE[4].PID_AUTO_TUNE_P;
  479. GV_H.STAGE_HEATER_PID[4].I:=H_STAGE[4].PID_AUTO_TUNE_I;
  480. GV_H.STAGE_HEATER_PID[4].D:=H_STAGE[4].PID_AUTO_TUNE_D;
  481. GV.STAGE_HEATER_AUTO_TUNE_EN[4]:=FALSE;
  482. END_IF]]></ST>
  483. </Implementation>
  484. <LineIds Name="Temp">
  485. <LineId Id="33" Count="6" />
  486. <LineId Id="41" Count="5" />
  487. <LineId Id="1162" Count="0" />
  488. <LineId Id="47" Count="5" />
  489. <LineId Id="935" Count="0" />
  490. <LineId Id="54" Count="14" />
  491. <LineId Id="1163" Count="0" />
  492. <LineId Id="69" Count="10" />
  493. <LineId Id="81" Count="6" />
  494. <LineId Id="926" Count="0" />
  495. <LineId Id="159" Count="5" />
  496. <LineId Id="1164" Count="0" />
  497. <LineId Id="165" Count="6" />
  498. <LineId Id="938" Count="0" />
  499. <LineId Id="174" Count="13" />
  500. <LineId Id="1165" Count="0" />
  501. <LineId Id="188" Count="6" />
  502. <LineId Id="937" Count="0" />
  503. <LineId Id="196" Count="6" />
  504. <LineId Id="1150" Count="0" />
  505. <LineId Id="203" Count="14" />
  506. <LineId Id="219" Count="6" />
  507. <LineId Id="1087" Count="0" />
  508. <LineId Id="338" Count="6" />
  509. <LineId Id="346" Count="11" />
  510. <LineId Id="936" Count="0" />
  511. <LineId Id="359" Count="21" />
  512. <LineId Id="939" Count="0" />
  513. <LineId Id="382" Count="20" />
  514. <LineId Id="940" Count="0" />
  515. <LineId Id="404" Count="6" />
  516. <LineId Id="456" Count="13" />
  517. <LineId Id="941" Count="0" />
  518. <LineId Id="471" Count="7" />
  519. <LineId Id="962" Count="1" />
  520. <LineId Id="965" Count="2" />
  521. <LineId Id="964" Count="0" />
  522. <LineId Id="479" Count="5" />
  523. <LineId Id="961" Count="0" />
  524. <LineId Id="485" Count="6" />
  525. <LineId Id="942" Count="0" />
  526. <LineId Id="493" Count="6" />
  527. <LineId Id="1086" Count="0" />
  528. <LineId Id="500" Count="6" />
  529. <LineId Id="1166" Count="0" />
  530. <LineId Id="507" Count="21" />
  531. <LineId Id="1167" Count="0" />
  532. <LineId Id="529" Count="15" />
  533. <LineId Id="1222" Count="1" />
  534. <LineId Id="1225" Count="2" />
  535. <LineId Id="1224" Count="0" />
  536. <LineId Id="1110" Count="5" />
  537. <LineId Id="1168" Count="0" />
  538. <LineId Id="1116" Count="13" />
  539. <LineId Id="565" Count="1" />
  540. <LineId Id="1130" Count="2" />
  541. <LineId Id="1149" Count="0" />
  542. <LineId Id="1133" Count="1" />
  543. <LineId Id="1169" Count="0" />
  544. <LineId Id="1135" Count="13" />
  545. <LineId Id="587" Count="1" />
  546. <LineId Id="1089" Count="5" />
  547. <LineId Id="1170" Count="0" />
  548. <LineId Id="1095" Count="13" />
  549. <LineId Id="1088" Count="0" />
  550. <LineId Id="609" Count="5" />
  551. <LineId Id="1171" Count="0" />
  552. <LineId Id="615" Count="14" />
  553. <LineId Id="988" Count="0" />
  554. <LineId Id="990" Count="4" />
  555. <LineId Id="1172" Count="0" />
  556. <LineId Id="995" Count="6" />
  557. <LineId Id="1178" Count="0" />
  558. <LineId Id="1003" Count="5" />
  559. <LineId Id="989" Count="0" />
  560. <LineId Id="1009" Count="0" />
  561. <LineId Id="1011" Count="5" />
  562. <LineId Id="1173" Count="0" />
  563. <LineId Id="1017" Count="6" />
  564. <LineId Id="1181" Count="0" />
  565. <LineId Id="1180" Count="0" />
  566. <LineId Id="1025" Count="5" />
  567. <LineId Id="1010" Count="0" />
  568. <LineId Id="1031" Count="0" />
  569. <LineId Id="1033" Count="5" />
  570. <LineId Id="1174" Count="0" />
  571. <LineId Id="1039" Count="6" />
  572. <LineId Id="1183" Count="0" />
  573. <LineId Id="1046" Count="6" />
  574. <LineId Id="1032" Count="0" />
  575. <LineId Id="1053" Count="0" />
  576. <LineId Id="1055" Count="5" />
  577. <LineId Id="1175" Count="0" />
  578. <LineId Id="1061" Count="6" />
  579. <LineId Id="1185" Count="0" />
  580. <LineId Id="1068" Count="6" />
  581. <LineId Id="1054" Count="0" />
  582. </LineIds>
  583. </POU>
  584. </TcPlcObject>