MAIN.TcPOU 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
  3. <POU Name="MAIN" Id="{cd684302-3d87-4339-8cb1-2eaa0223f5ad}" SpecialFunc="None">
  4. <Declaration><![CDATA[PROGRAM MAIN
  5. VAR
  6. ENABLE:BOOL;
  7. //RECIPE
  8. PROCESS:PROCESS;
  9. PROCESS_EN:BOOL;
  10. PROCESS_RUN:BOOL;
  11. PROCESS_STOP:BOOL;
  12. P_NO:INT;
  13. CYCLE_EN:BOOL;
  14. CYCLE_NUM:INT;
  15. CYCLE_START_STEP_NO:INT;
  16. STEP_NO:INT;
  17. NEXTSTEP_EN:BOOL;
  18. UPS:FB_S_UPS_BAPI;
  19. END_VAR
  20. ]]></Declaration>
  21. <Implementation>
  22. <ST><![CDATA[//UPS
  23. UPS(
  24. sNetID:= ,
  25. iPLCPort:= 851,
  26. tTimeout:= ,
  27. eUpsMode:= eSUPS_WrPersistData_shutdown,
  28. ePersistentMode:= ,
  29. tRecoverTime:= T#10S,
  30. bPowerFailDetect=> ,
  31. eState=> ,
  32. nCapacity=> ,
  33. bBusy=> ,
  34. bError=> ,
  35. nErrID=> );
  36. //******************************IO*********************************
  37. IO_EXCHANGE();
  38. //*****************************CONFIGURATION***********************
  39. IL();
  40. //*****************************INTERLOCK***************************
  41. Temp();
  42. //*****************************PROCESS*****************************
  43. PROCESS_RUN:=GV.Process_Start AND NOT GV.ALARM_OCC;
  44. PROCESS_STOP:=GV.Process_Stop OR GV.ALARM_OCC;
  45. //PROCESS ENABLE
  46. IF PROCESS_RUN AND NOT PROCESS_EN
  47. THEN
  48. CYCLE_NUM := 0;
  49. STEP_NO:=1;
  50. P_NO:=1;
  51. PM.ProcessFeedBack.ProcessFinished:=FALSE;
  52. END_IF
  53. IF PROCESS_RUN AND NOT PROCESS_EN
  54. THEN
  55. PROCESS_EN:=TRUE;
  56. END_IF;
  57. IF PROCESS_STOP
  58. THEN
  59. CYCLE_NUM:=0;
  60. CYCLE_EN:=FALSE;
  61. PROCESS_EN:=FALSE;
  62. PROCESS_RUN:=FALSE;
  63. END_IF;
  64. IF NOT PM.ProcessFeedBack.ProcessFinished
  65. THEN
  66. PM.ProcessFeedBack.CurrentStepNo:=STEP_NO;
  67. ELSE
  68. PM.ProcessFeedBack.CurrentStepNo:=STEP_NO-1;
  69. END_IF
  70. IF PROCESS_EN
  71. THEN
  72. PM.ProcessFeedBack.ProcessStart:=TRUE;
  73. PM.ProcessFeedBack.CurrentStepstart:=TRUE;
  74. ELSE
  75. PM.ProcessFeedBack.ProcessStart:=FALSE;
  76. PM.ProcessFeedBack.CurrentStepstart:=FALSE;
  77. END_IF
  78. IF GV.Step_Num<STEP_NO
  79. THEN
  80. PM.ProcessFeedBack.ProcessFinished:=TRUE;
  81. END_IF
  82. IF GV.ALARM_OCC
  83. THEN
  84. PROCESS_EN:=FALSE;
  85. END_IF
  86. IF STEP_NO<1 OR STEP_NO >100
  87. THEN
  88. STEP_NO:=1;
  89. END_IF
  90. //CYCLE初始化
  91. IF GV.SetpArray[STEP_NO].CycleStart AND CYCLE_EN=FALSE
  92. THEN
  93. CYCLE_EN := TRUE;
  94. CYCLE_START_STEP_NO := STEP_NO;
  95. CYCLE_NUM := GV.SetpArray[STEP_NO].CycleNumber;
  96. END_IF;
  97. //STEP
  98. PROCESS(
  99. ENABLE := PROCESS_EN,
  100. NEXTSTEP_EN := NEXTSTEP_EN,
  101. Alarm_RST := UI.Warning_And_Alarm_RST,
  102. PMStableTime := GV.PMConfig.PMStableTime,
  103. STEP_DATA := GV.SetpArray[STEP_NO],
  104. );
  105. //PROCESS FLOW
  106. CASE P_NO OF
  107. 1: IF NOT PROCESS_EN
  108. THEN
  109. P_NO:=100;
  110. ELSE
  111. P_NO:=2;
  112. END_IF;
  113. NEXTSTEP_EN:=FALSE;
  114. 2: IF PROCESS.NEXTSTEP
  115. THEN
  116. PM.ProcessFeedBack.CurrentStepFinished:=TRUE;
  117. PM.ProcessFeedBack.CurrentStepstart:=FALSE;
  118. P_NO:=3;
  119. END_IF;
  120. 3: IF CYCLE_EN
  121. THEN
  122. P_NO:=10;
  123. ELSE
  124. P_NO:=20;
  125. END_IF
  126. 10: IF GV.SetpArray[STEP_NO].CycleEnd
  127. THEN
  128. P_NO:=11;
  129. ELSE
  130. P_NO:=20;
  131. END_IF;
  132. 11: IF CYCLE_NUM=0
  133. THEN
  134. P_NO:=20;
  135. CYCLE_EN:=FALSE;
  136. ELSE
  137. CYCLE_NUM:=CYCLE_NUM-1;
  138. P_NO:=21;
  139. END_IF;
  140. 20: STEP_NO:=STEP_NO+1;
  141. NEXTSTEP_EN:=TRUE;
  142. P_NO:=1;
  143. PM.ProcessFeedBack.CurrentStepstart:=TRUE;
  144. PM.ProcessFeedBack.CurrentStepFinished:=FALSE;
  145. 21: STEP_NO:=CYCLE_START_STEP_NO;
  146. NEXTSTEP_EN:=TRUE;
  147. P_NO:=1;
  148. 100:;
  149. END_CASE;
  150. IF PROCESS_EN
  151. THEN
  152. //******************工艺参数赋值***************
  153. //APC
  154. GV. AO. APC.TARGET_PRESSURE := PROCESS.APC_PRESSURE;
  155. GV. AO. APC.TARGET_POSITION := PROCESS.APC_POSITION;
  156. IF GV_IL.APC_EN THEN
  157. GV.AO. APC. Control_Mode := PROCESS.APC_CONTROL_MODE ;
  158. ELSE
  159. GV.AO. APC. Control_Mode := 3 ;
  160. END_IF
  161. //MFC
  162. GV.AO.MFC1_Flow_Setpoint := PROCESS.MFC1_SV;
  163. GV.AO.MFC2_Flow_Setpoint := PROCESS.MFC2_SV;
  164. GV.AO.MFC3_Flow_Setpoint := PROCESS.MFC3_SV;
  165. GV.AO.MFC4_Flow_Setpoint := PROCESS.MFC4_SV;
  166. GV.AO.MFC5_Flow_Setpoint := PROCESS.MFC5_SV;
  167. GV.AO.MFC6_Flow_Setpoint := PROCESS.MFC6_SV;
  168. GV.AO.MFC7_Flow_Setpoint := PROCESS.MFC7_SV;
  169. // GV.AO.MFC8_Flow_Setpoint := PROCESS.MFC8_SV;
  170. // GV.AO.MFC9_Flow_Setpoint := PROCESS.MFC9_SV;
  171. //LID HEATER
  172. GV.AO.LID_Temp_SV := PROCESS.LID_TEMP;
  173. //CHAMBER HEATER
  174. GV.AO. Chamber_Temp1_SV :=
  175. GV.AO. Chamber_Temp2_SV :=
  176. GV.AO. Chamber_Temp3_SV := PROCESS.WALL_TEMP;
  177. //CHILLER
  178. // GV. CHILLER2_TEMP_SV := PROCESS.STAGE_EDGE_TEMP; //CHILLER1
  179. // GV. CHILLER1_TEMP_SV := PROCESS.STAGE_EDGE_TEMP; //CHILLER2
  180. //************************TOLERANCE 赋值****************
  181. //************************VALVE动作****************
  182. GV.NDO.AV1 := FALSE ;// ( GV.AO.MFC1_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC1 AND GV_IL.AV1_EN ;
  183. GV.NDO.AV2 := ( GV.AO.MFC1_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC1 AND GV_IL.AV2_EN ;
  184. GV.NDO.AV3 := ( GV.AO.MFC1_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC1 AND GV_IL.AV3_EN ;
  185. GV.NDO.AV4 := FALSE ;// ( GV.AO.MFC2_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC2 AND GV_IL.AV4_EN ;
  186. GV.NDO.AV5 := ( GV.AO.MFC2_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC2 AND GV_IL.AV5_EN ;
  187. GV.NDO.AV6 := ( GV.AO.MFC2_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC2 AND GV_IL.AV6_EN ;
  188. GV.NDO.AV7 := FALSE ;// ( GV.AO.MFC3_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC3 AND GV_IL.AV7_EN ;
  189. GV.NDO.AV8 := ( GV.AO.MFC3_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC3 AND GV_IL.AV8_EN ;
  190. GV.NDO.AV9 := ( GV.AO.MFC3_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC3 AND GV_IL.AV9_EN ;
  191. GV.NDO.AV10 := FALSE ;// ( ) AND AND GV_IL.AV10_EN ;
  192. GV.NDO.AV11 := FALSE ;// ( ) AND AND GV_IL.AV11_EN ;
  193. GV.NDO.AV12 := FALSE ;// ( ) AND AND GV_IL.AV12_EN ;
  194. GV.NDO.AV13 := FALSE ;// ( ) AND AND GV_IL.AV13_EN ;
  195. GV.NDO.AV14 := FALSE ;// ( GV.AO.MFC5_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC5 AND GV_IL.AV14_EN ;
  196. GV.NDO.AV15 := ( GV.AO.MFC5_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC5 AND GV_IL.AV15_EN ;
  197. GV.NDO.AV16 := ( GV.AO.MFC5_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC5 AND GV_IL.AV16_EN ;
  198. GV.NDO.AV17 := FALSE ;// ( ) AND AND GV_IL.AV17_EN ;
  199. GV.NDO.AV18 := FALSE ;// ( ) AND AND GV_IL.AV18_EN ;
  200. GV.NDO.AV19 := FALSE ;// ( ) AND AND GV_IL.AV19_EN ;
  201. GV.NDO.AV20 := FALSE ;// ( GV.AO.MFC6_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC6 AND GV_IL.AV20_EN ;
  202. GV.NDO.AV21 := ( GV.AO.MFC6_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC6 AND GV_IL.AV21_EN ;
  203. GV.NDO.AV22 := ( GV.AO.MFC6_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC6 AND GV_IL.AV22_EN ;
  204. GV.NDO.AV23 := FALSE ;// ( GV.AO.MFC7_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC7 AND GV_IL.AV23_EN ;
  205. GV.NDO.AV24 := ( GV.AO.MFC7_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC7 AND GV_IL.AV24_EN ;
  206. GV.NDO.AV25 := ( GV.AO.MFC7_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC7 AND GV_IL.AV25_EN ;
  207. GV.NDO.AV26 := (
  208. (( GV.AO.MFC1_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC1)
  209. OR (( GV.AO.MFC2_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC2)
  210. OR (( GV.AO.MFC3_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC3)
  211. )
  212. AND GV_IL.AV26_EN ;
  213. GV.NDO.AV27 := (
  214. (( GV.AO.MFC5_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC5)
  215. OR (( GV.AO.MFC6_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC6)
  216. OR (( GV.AO.MFC7_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC7)
  217. )
  218. AND GV_IL.AV27_EN ;
  219. END_IF
  220. //TOL ALRM&WARNING
  221. PM.INFO.Alarm.TOLERANCE_PRESSURE := NOT PROCESS.PRESSURE_ALARM;
  222. PM.INFO.Alarm.TOLERANCE_MFC1 := NOT PROCESS.MFC1_Alarm;
  223. PM.INFO.Alarm.TOLERANCE_MFC2 := NOT PROCESS.MFC2_Alarm;
  224. PM.INFO.Alarm.TOLERANCE_MFC3 := NOT PROCESS.MFC3_Alarm;
  225. PM.INFO.Alarm.TOLERANCE_MFC4 := NOT PROCESS.MFC4_Alarm;
  226. PM.INFO.Alarm.TOLERANCE_MFC5 := NOT PROCESS.MFC5_Alarm;
  227. PM.INFO.Alarm.TOLERANCE_MFC6 := NOT PROCESS.MFC6_Alarm;
  228. PM.INFO.Alarm.TOLERANCE_MFC7 := NOT PROCESS.MFC7_Alarm;
  229. PM.INFO.Alarm.TOLERANCE_MFC8 := NOT PROCESS.MFC8_Alarm;
  230. PM.INFO.Alarm.TOLERANCE_MFC9 := NOT PROCESS.MFC9_Alarm;
  231. PM.INFO.Alarm.TOLERANCE_WALL_TEMP := NOT PROCESS.WALL_TEMP_Alarm;
  232. PM.INFO.Alarm.TOLERANCE_LID_TEMP := NOT PROCESS.LID_TEMP_Alarm;
  233. PM.INFO.Alarm.TOLERANCE_STAGE_EDGE_TEMP := NOT PROCESS.STAGE_EDGE_TEMP_Alarm;
  234. PM.INFO.Alarm.TOLERANCE_STAGE_CENTER_TEMP := NOT PROCESS.STAGE_CENTER_TEMP_ALARM;
  235. PM.INFO.Warning.TOLERANCE_PRESSURE := NOT PROCESS.PRESSURE_WARNING;
  236. PM.INFO.Warning.TOLERANCE_MFC1 := NOT PROCESS.MFC1_WARNING;
  237. PM.INFO.Warning.TOLERANCE_MFC2 := NOT PROCESS.MFC2_WARNING;
  238. PM.INFO.Warning.TOLERANCE_MFC3 := NOT PROCESS.MFC3_WARNING;
  239. PM.INFO.Warning.TOLERANCE_MFC4 := NOT PROCESS.MFC4_WARNING;
  240. PM.INFO.Warning.TOLERANCE_MFC5 := NOT PROCESS.MFC5_WARNING;
  241. PM.INFO.Warning.TOLERANCE_MFC6 := NOT PROCESS.MFC6_WARNING;
  242. PM.INFO.Warning.TOLERANCE_MFC7 := NOT PROCESS.MFC7_WARNING;
  243. PM.INFO.Warning.TOLERANCE_MFC8 := NOT PROCESS.MFC8_WARNING;
  244. PM.INFO.Warning.TOLERANCE_MFC9 := NOT PROCESS.MFC9_WARNING;
  245. PM.INFO.Warning.TOLERANCE_WALL_TEMP := NOT PROCESS.WALL_TEMP_WARNING;
  246. PM.INFO.Warning.TOLERANCE_LID_TEMP := NOT PROCESS.LID_TEMP_WARNING;
  247. PM.INFO.Warning.TOLERANCE_STAGE_EDGE_TEMP := NOT PROCESS.STAGE_EDGE_TEMP_WARNING;
  248. PM.INFO.Warning.TOLERANCE_STAGE_CENTER_TEMP := NOT PROCESS.STAGE_CENTER_TEMP_WARNING;
  249. ]]></ST>
  250. </Implementation>
  251. <LineIds Name="MAIN">
  252. <LineId Id="4090" Count="28" />
  253. <LineId Id="4397" Count="1" />
  254. <LineId Id="4401" Count="2" />
  255. <LineId Id="4400" Count="0" />
  256. <LineId Id="4399" Count="0" />
  257. <LineId Id="4424" Count="3" />
  258. <LineId Id="4432" Count="0" />
  259. <LineId Id="4428" Count="1" />
  260. <LineId Id="4552" Count="0" />
  261. <LineId Id="4551" Count="0" />
  262. <LineId Id="4430" Count="1" />
  263. <LineId Id="4423" Count="0" />
  264. <LineId Id="4433" Count="0" />
  265. <LineId Id="4522" Count="0" />
  266. <LineId Id="4524" Count="2" />
  267. <LineId Id="4523" Count="0" />
  268. <LineId Id="4528" Count="0" />
  269. <LineId Id="4405" Count="1" />
  270. <LineId Id="4408" Count="0" />
  271. <LineId Id="4417" Count="0" />
  272. <LineId Id="4409" Count="1" />
  273. <LineId Id="4434" Count="0" />
  274. <LineId Id="4411" Count="0" />
  275. <LineId Id="4128" Count="2" />
  276. <LineId Id="4132" Count="1" />
  277. <LineId Id="4321" Count="1" />
  278. <LineId Id="4324" Count="1" />
  279. <LineId Id="4323" Count="0" />
  280. <LineId Id="4139" Count="10" />
  281. <LineId Id="4435" Count="0" />
  282. <LineId Id="4151" Count="6" />
  283. <LineId Id="4396" Count="0" />
  284. <LineId Id="4158" Count="10" />
  285. <LineId Id="4395" Count="0" />
  286. <LineId Id="4169" Count="2" />
  287. <LineId Id="4414" Count="0" />
  288. <LineId Id="4416" Count="0" />
  289. <LineId Id="4174" Count="1" />
  290. <LineId Id="4360" Count="2" />
  291. <LineId Id="4365" Count="1" />
  292. <LineId Id="4364" Count="0" />
  293. <LineId Id="4363" Count="0" />
  294. <LineId Id="4176" Count="10" />
  295. <LineId Id="4370" Count="0" />
  296. <LineId Id="4187" Count="1" />
  297. <LineId Id="4369" Count="0" />
  298. <LineId Id="4189" Count="3" />
  299. <LineId Id="4393" Count="0" />
  300. <LineId Id="4415" Count="0" />
  301. <LineId Id="4193" Count="3" />
  302. <LineId Id="4394" Count="0" />
  303. <LineId Id="4198" Count="10" />
  304. <LineId Id="4576" Count="3" />
  305. <LineId Id="4575" Count="0" />
  306. <LineId Id="4210" Count="18" />
  307. <LineId Id="4230" Count="4" />
  308. <LineId Id="4492" Count="0" />
  309. <LineId Id="4293" Count="0" />
  310. <LineId Id="4292" Count="0" />
  311. <LineId Id="4294" Count="25" />
  312. <LineId Id="4353" Count="0" />
  313. <LineId Id="4350" Count="1" />
  314. <LineId Id="4354" Count="0" />
  315. <LineId Id="4352" Count="0" />
  316. <LineId Id="4320" Count="0" />
  317. <LineId Id="4356" Count="2" />
  318. <LineId Id="4355" Count="0" />
  319. <LineId Id="4359" Count="0" />
  320. <LineId Id="4291" Count="0" />
  321. <LineId Id="4264" Count="1" />
  322. <LineId Id="4521" Count="0" />
  323. <LineId Id="4266" Count="0" />
  324. <LineId Id="4493" Count="27" />
  325. <LineId Id="4267" Count="1" />
  326. <LineId Id="686" Count="0" />
  327. </LineIds>
  328. </POU>
  329. </TcPlcObject>