MAIN.TcPOU 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  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="{cb8452ac-9ed0-449b-9151-d931368f6d28}" 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. //STAGE
  178. GV.AO.Stage_Temp1_SV := PROCESS.STAGE_TEMP1;
  179. GV.AO.Stage_Temp1_SV := PROCESS.STAGE_TEMP2;
  180. GV.AO.Stage_Temp1_SV := PROCESS.STAGE_TEMP3;
  181. GV.AO.Stage_Temp1_SV := PROCESS.STAGE_TEMP4;
  182. //************************TOLERANCE 赋值****************
  183. //************************VALVE动作****************
  184. GV.NDO.AV1 := FALSE ;// ( GV.AO.MFC1_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC1 AND GV_IL.AV1_EN ;
  185. GV.NDO.AV2 := ( GV.AO.MFC1_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC1 AND GV_IL.AV2_EN ;
  186. GV.NDO.AV3 := FALSE ;//( GV.AO.MFC1_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC1 AND GV_IL.AV3_EN ;
  187. GV.NDO.AV4 := FALSE ;// ( GV.AO.MFC2_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC2 AND GV_IL.AV4_EN ;
  188. GV.NDO.AV5 := ( GV.AO.MFC1_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC1 AND GV_IL.AV5_EN ;
  189. GV.NDO.AV6 := FALSE ;// ( GV.AO.MFC2_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC2 AND GV_IL.AV6_EN ;
  190. GV.NDO.AV7 := FALSE ;// ( GV.AO.MFC3_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC3 AND GV_IL.AV7_EN ;
  191. GV.NDO.AV8 := FALSE ;// ( GV.AO.MFC3_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC3 AND GV_IL.AV8_EN ;
  192. GV.NDO.AV9 := FALSE ;// ( GV.AO.MFC3_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC3 AND GV_IL.AV9_EN ;
  193. GV.NDO.AV10 := FALSE ;// ( ) AND AND GV_IL.AV10_EN ;
  194. GV.NDO.AV11 := FALSE ;// ( ) AND AND GV_IL.AV11_EN ;
  195. GV.NDO.AV12 := FALSE ;// ( ) AND AND GV_IL.AV12_EN ;
  196. GV.NDO.AV13 := FALSE ;// ( ) AND AND GV_IL.AV13_EN ;
  197. GV.NDO.AV14 := FALSE ;// ( GV.AO.MFC5_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC5 AND GV_IL.AV14_EN ;
  198. GV.NDO.AV15 := FALSE ;// ( GV.AO.MFC5_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC5 AND GV_IL.AV15_EN ;
  199. GV.NDO.AV16 := FALSE ;// ( GV.AO.MFC5_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC5 AND GV_IL.AV16_EN ;
  200. GV.NDO.AV17 := FALSE ;// ( ) AND AND GV_IL.AV17_EN ;
  201. GV.NDO.AV18 := FALSE ;// ( ) AND AND GV_IL.AV18_EN ;
  202. GV.NDO.AV19 := FALSE ;// ( ) AND AND GV_IL.AV19_EN ;
  203. GV.NDO.AV20 := FALSE ;// ( GV.AO.MFC6_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC6 AND GV_IL.AV20_EN ;
  204. GV.NDO.AV21 := FALSE ;// ( GV.AO.MFC6_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC6 AND GV_IL.AV21_EN ;
  205. GV.NDO.AV22 := FALSE ;// ( GV.AO.MFC6_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC6 AND GV_IL.AV22_EN ;
  206. GV.NDO.AV23 := FALSE ;// ( GV.AO.MFC7_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC7 AND GV_IL.AV23_EN ;
  207. GV.NDO.AV24 := FALSE ;// ( GV.AO.MFC7_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC7 AND GV_IL.AV24_EN ;
  208. GV.NDO.AV25 := FALSE ;// ( GV.AO.MFC7_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC7 AND GV_IL.AV25_EN ;
  209. GV.NDO.AV26 := ( GV.AO.MFC1_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC1 AND GV_IL.AV26_EN ;
  210. (* (
  211. (( GV.AO.MFC1_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC1)
  212. OR (( GV.AO.MFC2_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC2)
  213. OR (( GV.AO.MFC3_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC3)
  214. )
  215. AND GV_IL.AV26_EN ;*)
  216. GV.NDO.AV27 := FALSE ;(* (
  217. (( GV.AO.MFC5_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC5)
  218. OR (( GV.AO.MFC6_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC6)
  219. OR (( GV.AO.MFC7_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC7)
  220. )
  221. AND GV_IL.AV27_EN ;*)
  222. END_IF
  223. //TOL ALRM&WARNING
  224. PM.INFO.Alarm.TOLERANCE_PRESSURE := NOT PROCESS.PRESSURE_ALARM;
  225. PM.INFO.Alarm.TOLERANCE_MFC1 := NOT PROCESS.MFC1_Alarm;
  226. PM.INFO.Alarm.TOLERANCE_MFC2 := NOT PROCESS.MFC2_Alarm;
  227. PM.INFO.Alarm.TOLERANCE_MFC3 := NOT PROCESS.MFC3_Alarm;
  228. PM.INFO.Alarm.TOLERANCE_MFC4 := NOT PROCESS.MFC4_Alarm;
  229. PM.INFO.Alarm.TOLERANCE_MFC5 := NOT PROCESS.MFC5_Alarm;
  230. PM.INFO.Alarm.TOLERANCE_MFC6 := NOT PROCESS.MFC6_Alarm;
  231. PM.INFO.Alarm.TOLERANCE_MFC7 := NOT PROCESS.MFC7_Alarm;
  232. PM.INFO.Alarm.TOLERANCE_MFC8 := NOT PROCESS.MFC8_Alarm;
  233. PM.INFO.Alarm.TOLERANCE_MFC9 := NOT PROCESS.MFC9_Alarm;
  234. PM.INFO.Alarm.TOLERANCE_WALL_TEMP := NOT PROCESS.WALL_TEMP_Alarm;
  235. PM.INFO.Alarm.TOLERANCE_LID_TEMP := NOT PROCESS.LID_TEMP_Alarm;
  236. PM.INFO.Alarm.TOLERANCE_STAGE_TEMP1 := NOT PROCESS.STAGE_TEMP1_Alarm;
  237. PM.INFO.Alarm.TOLERANCE_STAGE_TEMP2 := NOT PROCESS.STAGE_TEMP2_Alarm;
  238. PM.INFO.Alarm.TOLERANCE_STAGE_TEMP3 := NOT PROCESS.STAGE_TEMP3_Alarm;
  239. PM.INFO.Alarm.TOLERANCE_STAGE_TEMP4 := NOT PROCESS.STAGE_TEMP4_Alarm;
  240. PM.INFO.Warning.TOLERANCE_PRESSURE := NOT PROCESS.PRESSURE_WARNING;
  241. PM.INFO.Warning.TOLERANCE_MFC1 := NOT PROCESS.MFC1_WARNING;
  242. PM.INFO.Warning.TOLERANCE_MFC2 := NOT PROCESS.MFC2_WARNING;
  243. PM.INFO.Warning.TOLERANCE_MFC3 := NOT PROCESS.MFC3_WARNING;
  244. PM.INFO.Warning.TOLERANCE_MFC4 := NOT PROCESS.MFC4_WARNING;
  245. PM.INFO.Warning.TOLERANCE_MFC5 := NOT PROCESS.MFC5_WARNING;
  246. PM.INFO.Warning.TOLERANCE_MFC6 := NOT PROCESS.MFC6_WARNING;
  247. PM.INFO.Warning.TOLERANCE_MFC7 := NOT PROCESS.MFC7_WARNING;
  248. PM.INFO.Warning.TOLERANCE_MFC8 := NOT PROCESS.MFC8_WARNING;
  249. PM.INFO.Warning.TOLERANCE_MFC9 := NOT PROCESS.MFC9_WARNING;
  250. PM.INFO.Warning.TOLERANCE_WALL_TEMP := NOT PROCESS.WALL_TEMP_WARNING;
  251. PM.INFO.Warning.TOLERANCE_LID_TEMP := NOT PROCESS.LID_TEMP_WARNING;
  252. PM.INFO.Warning.TOLERANCE_STAGE_TEMP1 := NOT PROCESS.STAGE_TEMP1_WARNING;
  253. PM.INFO.Warning.TOLERANCE_STAGE_TEMP2 := NOT PROCESS.STAGE_TEMP2_WARNING;
  254. PM.INFO.Warning.TOLERANCE_STAGE_TEMP3 := NOT PROCESS.STAGE_TEMP3_WARNING;
  255. PM.INFO.Warning.TOLERANCE_STAGE_TEMP4 := NOT PROCESS.STAGE_TEMP4_WARNING;
  256. ]]></ST>
  257. </Implementation>
  258. <LineIds Name="MAIN">
  259. <LineId Id="4397" Count="155" />
  260. <LineId Id="4705" Count="3" />
  261. <LineId Id="4704" Count="0" />
  262. <LineId Id="4554" Count="20" />
  263. <LineId Id="4653" Count="2" />
  264. <LineId Id="4576" Count="30" />
  265. <LineId Id="4681" Count="0" />
  266. <LineId Id="4607" Count="29" />
  267. <LineId Id="4656" Count="1" />
  268. <LineId Id="4637" Count="14" />
  269. <LineId Id="4658" Count="0" />
  270. <LineId Id="4652" Count="0" />
  271. <LineId Id="686" Count="0" />
  272. </LineIds>
  273. </POU>
  274. </TcPlcObject>