MAIN.TcPOU 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  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 AND GV.NDI.GV1_CLOSE;
  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 := UI.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. *)
  172. //LID HEATER
  173. GV.AO.LID_Temp_SV := PROCESS.LID_TEMP;
  174. //CHAMBER HEATER
  175. GV.AO. Chamber_Temp1_SV :=
  176. GV.AO. Chamber_Temp2_SV :=
  177. GV.AO. Chamber_Temp3_SV := PROCESS.WALL_TEMP;
  178. //STAGE
  179. GV.AO.Stage_Temp1_SV := PROCESS.STAGE_TEMP1;
  180. GV.AO.Stage_Temp1_SV := PROCESS.STAGE_TEMP2;
  181. GV.AO.Stage_Temp1_SV := PROCESS.STAGE_TEMP3;
  182. GV.AO.Stage_Temp1_SV := PROCESS.STAGE_TEMP4;
  183. //************************TOLERANCE 赋值****************
  184. //************************VALVE动作****************
  185. GV.NDO.AV1 := FALSE ;// ( GV.AO.MFC1_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC1 AND GV_IL.AV1_EN ;
  186. GV.NDO.AV2 := ( GV.AO.MFC1_Flow_Setpoint>0 ) AND NOT PM.INFO.Alarm.TOLERANCE_MFC1 AND GV_IL.AV2_EN ;
  187. GV.NDO.AV3 := FALSE ;//( GV.AO.MFC1_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC1 AND GV_IL.AV3_EN ;
  188. GV.NDO.AV4 := FALSE ;// ( GV.AO.MFC2_Flow_Setpoint>0 ) AND PM.INFO.Alarm.TOLERANCE_MFC2 AND GV_IL.AV4_EN ;
  189. GV.NDO.AV5 := ( GV.AO.MFC1_Flow_Setpoint>0 ) AND NOT PM.INFO.Alarm.TOLERANCE_MFC1 AND GV_IL.AV5_EN ;
  190. GV.NDO.AV26 := ( GV.AO.MFC1_Flow_Setpoint>0 ) AND NOT PM.INFO.Alarm.TOLERANCE_MFC1 AND GV_IL.AV26_EN ;
  191. END_IF
  192. //TOL ALRM&WARNING
  193. PM.INFO.Alarm.TOLERANCE_PRESSURE := PROCESS.PRESSURE_ALARM;
  194. PM.INFO.Alarm.TOLERANCE_MFC1 := PROCESS.MFC1_Alarm;
  195. PM.INFO.Alarm.TOLERANCE_WALL_TEMP := PROCESS.WALL_TEMP_Alarm;
  196. PM.INFO.Alarm.TOLERANCE_LID_TEMP := PROCESS.LID_TEMP_Alarm;
  197. PM.INFO.Alarm.TOLERANCE_STAGE_TEMP1 := PROCESS.STAGE_TEMP1_Alarm;
  198. PM.INFO.Alarm.TOLERANCE_STAGE_TEMP2 := PROCESS.STAGE_TEMP2_Alarm;
  199. PM.INFO.Alarm.TOLERANCE_STAGE_TEMP3 := PROCESS.STAGE_TEMP3_Alarm;
  200. PM.INFO.Alarm.TOLERANCE_STAGE_TEMP4 := PROCESS.STAGE_TEMP4_Alarm;
  201. PM.INFO.Warning.TOLERANCE_PRESSURE := PROCESS.PRESSURE_WARNING;
  202. PM.INFO.Warning.TOLERANCE_MFC1 := PROCESS.MFC1_WARNING;
  203. PM.INFO.Warning.TOLERANCE_WALL_TEMP := PROCESS.WALL_TEMP_WARNING;
  204. PM.INFO.Warning.TOLERANCE_LID_TEMP := PROCESS.LID_TEMP_WARNING;
  205. PM.INFO.Warning.TOLERANCE_STAGE_TEMP1 := PROCESS.STAGE_TEMP1_WARNING;
  206. PM.INFO.Warning.TOLERANCE_STAGE_TEMP2 := PROCESS.STAGE_TEMP2_WARNING;
  207. PM.INFO.Warning.TOLERANCE_STAGE_TEMP3 := PROCESS.STAGE_TEMP3_WARNING;
  208. PM.INFO.Warning.TOLERANCE_STAGE_TEMP4 := PROCESS.STAGE_TEMP4_WARNING;
  209. ]]></ST>
  210. </Implementation>
  211. <LineIds Name="MAIN">
  212. <LineId Id="4397" Count="155" />
  213. <LineId Id="4705" Count="3" />
  214. <LineId Id="4704" Count="0" />
  215. <LineId Id="4554" Count="20" />
  216. <LineId Id="4653" Count="2" />
  217. <LineId Id="4576" Count="9" />
  218. <LineId Id="4606" Count="0" />
  219. <LineId Id="4619" Count="4" />
  220. <LineId Id="4632" Count="4" />
  221. <LineId Id="4656" Count="1" />
  222. <LineId Id="4637" Count="1" />
  223. <LineId Id="4647" Count="4" />
  224. <LineId Id="4658" Count="0" />
  225. <LineId Id="4652" Count="0" />
  226. <LineId Id="686" Count="0" />
  227. </LineIds>
  228. </POU>
  229. </TcPlcObject>