); IF EN_TRIG.Q OR NEXTSTEP_EN THEN i:=1; STEP_ERR:=FALSE; STEP_TIME_OUT:=FALSE; NEXTSTEP:=FALSE; TON_STEP_TIME_EN:=TRUE; END_IF; //STEP开始时赋值 IF ENABLE AND NOT STEP_TIME_DONE THEN //APC IF STEP_DATA.LstUnit.Pressure.PressureUnitMode = 'Pressure' THEN APC_PRESSURE:=STEP_DATA.LstUnit.Pressure.StartValue; APC_CONTROL_MODE:=5; ELSIF STEP_DATA.LstUnit.Pressure.PressureUnitMode = 'Position' THEN APC_POSITION:=STEP_DATA.LstUnit.Pressure.StartValue; APC_CONTROL_MODE:=2; END_IF IF STEP_DATA.LstUnit.Pressure.ToleranceMode = 'Value' THEN TOL_PRESSURE_VALUE_EN:=TRUE; TOL_PRESSURE_PERCENT_EN:=FALSE; ELSIF STEP_DATA.LstUnit.Pressure.ToleranceMode = 'Percent' THEN TOL_PRESSURE_VALUE_EN:=FALSE; TOL_PRESSURE_PERCENT_EN:=TRUE; END_IF //MFC IF STEP_DATA.LstUnit.GAS.ToleranceMode = 'Value' THEN TOL_MFC_VALUE_EN:=TRUE; TOL_MFC_PERCENT_EN:=FALSE; ELSIF STEP_DATA.LstUnit.GAS.ToleranceMode = 'Percent' THEN TOL_MFC_VALUE_EN:=FALSE; TOL_MFC_PERCENT_EN:=TRUE; END_IF MFC1_SV:=INT_TO_REAL(STEP_DATA.LstUnit.GAS.Gas1); MFC2_SV:=INT_TO_REAL(STEP_DATA.LstUnit.GAS.Gas2); MFC3_SV:=INT_TO_REAL(STEP_DATA.LstUnit.GAS.Gas3); MFC4_SV:=INT_TO_REAL(STEP_DATA.LstUnit.GAS.Gas4); MFC5_SV:=INT_TO_REAL(STEP_DATA.LstUnit.GAS.Gas5); MFC6_SV:=INT_TO_REAL(STEP_DATA.LstUnit.GAS.Gas6); MFC7_SV:=INT_TO_REAL(STEP_DATA.LstUnit.GAS.Gas7); MFC8_SV:=INT_TO_REAL(STEP_DATA.LstUnit.GAS.Gas8); MFC9_SV:=INT_TO_REAL(STEP_DATA.LstUnit.GAS.Gas9); //HEATER IF STEP_DATA.LstUnit.Heater.ToleranceMode = 'Value' THEN TOL_HEATER_VALUE_EN:=TRUE; TOL_HEATER_PERCENT_EN:=FALSE; ELSIF STEP_DATA.LstUnit.Heater.ToleranceMode = 'Percent' THEN TOL_HEATER_VALUE_EN:=FALSE; TOL_HEATER_PERCENT_EN:=TRUE; END_IF WALL_TEMP:=INT_TO_REAL(STEP_DATA.LstUnit.Heater.WallTemp); LID_TEMP:=INT_TO_REAL(STEP_DATA.LstUnit.Heater.LidTemp); STAGE_TEMP1:=INT_TO_REAL(STEP_DATA.LstUnit.Heater.StageTemp1); STAGE_TEMP2:=INT_TO_REAL(STEP_DATA.LstUnit.Heater.StageTemp2); STAGE_TEMP3:=INT_TO_REAL(STEP_DATA.LstUnit.Heater.StageTemp3); STAGE_TEMP4:=INT_TO_REAL(STEP_DATA.LstUnit.Heater.StageTemp4); END_IF; // Lifter GV.NDO.AV110 := STEP_DATA.Lifter_Up AND NOT STEP_DATA.Lifter_Down; GV.NDO.AV109 := FALSE; //取最小值 IF GV.AI.Chamber_Temp1<=GV.AI.Chamber_Temp2 AND GV.AI.Chamber_Temp1<=GV.AI.Chamber_Temp3 THEN CHAMBER_TEMP_MIN_VALUE:=GV.AI.Chamber_Temp1; ELSIF GV.AI.Chamber_Temp2<=GV.AI.Chamber_Temp1 AND GV.AI.Chamber_Temp2<=GV.AI.Chamber_Temp3 THEN CHAMBER_TEMP_MIN_VALUE:=GV.AI.Chamber_Temp2; ELSIF GV.AI.Chamber_Temp3<=GV.AI.Chamber_Temp2 AND GV.AI.Chamber_Temp3<=GV.AI.Chamber_Temp1 THEN CHAMBER_TEMP_MIN_VALUE:=GV.AI.Chamber_Temp3; END_IF //Tolerance TOL_PRESSURE_PERCENT( ENABLE:= TOL_PRESSURE_PERCENT.SV>0 AND ENABLE, STEP_TYPE:= STEP_DATA.Completion, STEP_TIME:= STEP_DATA.StepTime+STEP_DATA.AddTime, TOL_V:= TOL_PRESSURE_VALUE_EN, TOL_P:= TOL_PRESSURE_PERCENT_EN, SV:= STEP_DATA.LstUnit.Pressure.StartValue, PV:= GV.AI. APC.ACTUAL_PRESSURE, WARNING_RANGE:= STEP_DATA.LstUnit.Pressure.StartValueWarningRange, ALARM_RANGE:= STEP_DATA.LstUnit.Pressure.StartValueAlarmRange, DELAY_TIME:=STEP_DATA.LstUnit.Pressure.ToleranceDelayTime, RST := Alarm_RST, STABLE_TIME := PMStableTime, STU_WARNING=> PRESSURE_WARNING, STU_ALARM=> PRESSURE_ALARM, ); TOL_MFC1( ENABLE:= TOL_MFC1.SV>0 AND ENABLE, STEP_TYPE:= STEP_DATA.Completion, STEP_TIME:= STEP_DATA.StepTime+STEP_DATA.AddTime, TOL_V:= TOL_MFC_VALUE_EN, TOL_P:= TOL_MFC_PERCENT_EN, SV:= STEP_DATA.LstUnit.GAS.Gas1, PV:= GV.AI.MFC1_Flow, WARNING_RANGE:= STEP_DATA.LstUnit.GAS.Gas1WarningRange, ALARM_RANGE:= STEP_DATA.LstUnit.GAS.Gas1AlarmRange, DELAY_TIME:=STEP_DATA.LstUnit.GAS.ToleranceDelayTime, RST := Alarm_RST, STABLE_TIME := PMStableTime, STU_WARNING=> MFC1_WARNING, STU_ALARM=> MFC1_Alarm, ); (* TOL_MFC2( ENABLE:= TOL_MFC2.SV>0 AND ENABLE, STEP_TYPE:= STEP_DATA.Completion, STEP_TIME:= STEP_DATA.StepTime+STEP_DATA.AddTime, TOL_V:= TOL_MFC_VALUE_EN, TOL_P:= TOL_MFC_PERCENT_EN, SV:= STEP_DATA.LstUnit.GAS.Gas2, PV:= GV.AI.MFC2_Flow, WARNING_RANGE:= STEP_DATA.LstUnit.GAS.Gas2WarningRange, ALARM_RANGE:= STEP_DATA.LstUnit.GAS.Gas2AlarmRange, DELAY_TIME:=STEP_DATA.LstUnit.GAS.ToleranceDelayTime, RST := Alarm_RST, STABLE_TIME := PMStableTime, STU_WARNING=> MFC2_WARNING, STU_ALARM=> MFC2_Alarm, ); TOL_MFC3( ENABLE:= TOL_MFC3.SV>0 AND ENABLE, STEP_TYPE:= STEP_DATA.Completion, STEP_TIME:= STEP_DATA.StepTime+STEP_DATA.AddTime, TOL_V:= TOL_MFC_VALUE_EN, TOL_P:= TOL_MFC_PERCENT_EN, SV:= STEP_DATA.LstUnit.GAS.Gas3, PV:= GV.AI.MFC3_Flow, WARNING_RANGE:= STEP_DATA.LstUnit.GAS.Gas3WarningRange, ALARM_RANGE:= STEP_DATA.LstUnit.GAS.Gas3AlarmRange, DELAY_TIME:=STEP_DATA.LstUnit.GAS.ToleranceDelayTime, RST := Alarm_RST, STABLE_TIME := PMStableTime, STU_WARNING=> MFC3_WARNING, STU_ALARM=> MFC3_Alarm, ); TOL_MFC5( ENABLE:= TOL_MFC5.SV>0 AND ENABLE, STEP_TYPE:= STEP_DATA.Completion, STEP_TIME:= STEP_DATA.StepTime+STEP_DATA.AddTime, TOL_V:= TOL_MFC_VALUE_EN, TOL_P:= TOL_MFC_PERCENT_EN, SV:= STEP_DATA.LstUnit.GAS.Gas5, PV:= GV.AI.MFC5_Flow, WARNING_RANGE:= STEP_DATA.LstUnit.GAS.Gas5WarningRange, ALARM_RANGE:= STEP_DATA.LstUnit.GAS.Gas5AlarmRange, DELAY_TIME:=STEP_DATA.LstUnit.GAS.ToleranceDelayTime, RST := Alarm_RST, STABLE_TIME := PMStableTime, STU_WARNING=> MFC5_WARNING, STU_ALARM=> MFC5_Alarm, ); TOL_MFC6( ENABLE:= TOL_MFC6.SV>0 AND ENABLE, STEP_TYPE:= STEP_DATA.Completion, STEP_TIME:= STEP_DATA.StepTime+STEP_DATA.AddTime, TOL_V:= TOL_MFC_VALUE_EN, TOL_P:= TOL_MFC_PERCENT_EN, SV:= STEP_DATA.LstUnit.GAS.Gas6, PV:= GV.AI.MFC6_Flow, WARNING_RANGE:= STEP_DATA.LstUnit.GAS.Gas6WarningRange, ALARM_RANGE:= STEP_DATA.LstUnit.GAS.Gas6AlarmRange, DELAY_TIME:=STEP_DATA.LstUnit.GAS.ToleranceDelayTime, RST := Alarm_RST, STABLE_TIME := PMStableTime, STU_WARNING=> MFC6_WARNING, STU_ALARM=> MFC6_Alarm, ); TOL_MFC7( ENABLE:= TOL_MFC7.SV>0 AND ENABLE, STEP_TYPE:= STEP_DATA.Completion, STEP_TIME:= STEP_DATA.StepTime+STEP_DATA.AddTime, TOL_V:= TOL_MFC_VALUE_EN, TOL_P:= TOL_MFC_PERCENT_EN, SV:= STEP_DATA.LstUnit.GAS.Gas7, PV:= GV.AI.MFC7_Flow, WARNING_RANGE:= STEP_DATA.LstUnit.GAS.Gas7WarningRange, ALARM_RANGE:= STEP_DATA.LstUnit.GAS.Gas7AlarmRange, DELAY_TIME:=STEP_DATA.LstUnit.GAS.ToleranceDelayTime, RST := Alarm_RST, STABLE_TIME := PMStableTime, STU_WARNING=> MFC7_WARNING, STU_ALARM=> MFC7_Alarm, ); *) TOL_WALL_TEMP( ENABLE:= ENABLE, STEP_TYPE:= STEP_DATA.Completion, STEP_TIME:= STEP_DATA.StepTime+STEP_DATA.AddTime, TOL_V:= TOL_HEATER_VALUE_EN, TOL_P:= TOL_HEATER_PERCENT_EN, SV:= STEP_DATA.LstUnit.Heater.WallTemp, PV:= CHAMBER_TEMP_MIN_VALUE, WARNING_RANGE:= STEP_DATA.LstUnit.Heater.WallTempWaningRange, ALARM_RANGE:= STEP_DATA.LstUnit.Heater.WallTempAlarmRange, DELAY_TIME:=STEP_DATA.LstUnit.Heater.ToleranceDelayTime, RST := Alarm_RST, STABLE_TIME := PMStableTime, STU_WARNING=> WALL_TEMP_WARNING, STU_ALARM=> WALL_TEMP_Alarm, ); TOL_LID_TEMP( ENABLE:= ENABLE, STEP_TYPE:= STEP_DATA.Completion, STEP_TIME:= STEP_DATA.StepTime+STEP_DATA.AddTime, TOL_V:= TOL_HEATER_VALUE_EN, TOL_P:= TOL_HEATER_PERCENT_EN, SV:= STEP_DATA.LstUnit.Heater.LidTemp, PV:= GV.AI. Lid_Temp, WARNING_RANGE:= STEP_DATA.LstUnit.Heater.LidTempWaningRange, ALARM_RANGE:= STEP_DATA.LstUnit.Heater.LidTempAlarmRange, DELAY_TIME:=STEP_DATA.LstUnit.Heater.ToleranceDelayTime, RST := Alarm_RST, STABLE_TIME := PMStableTime, STU_WARNING=> LID_TEMP_WARNING, STU_ALARM=> LID_TEMP_Alarm, ); TOL_STAGE_TEMP1( ENABLE:= ENABLE, STEP_TYPE:= STEP_DATA.Completion, STEP_TIME:= STEP_DATA.StepTime+STEP_DATA.AddTime, TOL_V:= TOL_HEATER_VALUE_EN, TOL_P:= TOL_HEATER_PERCENT_EN, SV:= STEP_DATA.LstUnit.Heater.StageTemp1, PV:= GV.AI.Stage_Temp1, WARNING_RANGE:= STEP_DATA.LstUnit.Heater.StageTemp1WaningRange, ALARM_RANGE:= STEP_DATA.LstUnit.Heater.StageTemp1AlarmRange, DELAY_TIME:=STEP_DATA.LstUnit.Heater.ToleranceDelayTime, RST := Alarm_RST, STABLE_TIME := PMStableTime, STU_WARNING=> STAGE_TEMP1_WARNING, STU_ALARM=> STAGE_TEMP1_Alarm, ); TOL_STAGE_TEMP2( ENABLE:= ENABLE, STEP_TYPE:= STEP_DATA.Completion, STEP_TIME:= STEP_DATA.StepTime+STEP_DATA.AddTime, TOL_V:= TOL_HEATER_VALUE_EN, TOL_P:= TOL_HEATER_PERCENT_EN, SV:= STEP_DATA.LstUnit.Heater.StageTemp2, PV:= GV.AI.Stage_Temp2, WARNING_RANGE:= STEP_DATA.LstUnit.Heater.StageTemp2WaningRange, ALARM_RANGE:= STEP_DATA.LstUnit.Heater.StageTemp2AlarmRange, DELAY_TIME:=STEP_DATA.LstUnit.Heater.ToleranceDelayTime, RST := Alarm_RST, STABLE_TIME := PMStableTime, STU_WARNING=> STAGE_TEMP2_WARNING, STU_ALARM=> STAGE_TEMP2_Alarm, ); TOL_STAGE_TEMP3( ENABLE:= ENABLE, STEP_TYPE:= STEP_DATA.Completion, STEP_TIME:= STEP_DATA.StepTime+STEP_DATA.AddTime, TOL_V:= TOL_HEATER_VALUE_EN, TOL_P:= TOL_HEATER_PERCENT_EN, SV:= STEP_DATA.LstUnit.Heater.StageTEMP3, PV:= GV.AI.Stage_TEMP3, WARNING_RANGE:= STEP_DATA.LstUnit.Heater.StageTEMP3WaningRange, ALARM_RANGE:= STEP_DATA.LstUnit.Heater.StageTEMP3AlarmRange, DELAY_TIME:=STEP_DATA.LstUnit.Heater.ToleranceDelayTime, RST := Alarm_RST, STABLE_TIME := PMStableTime, STU_WARNING=> STAGE_TEMP3_WARNING, STU_ALARM=> STAGE_TEMP3_Alarm, ); TOL_STAGE_TEMP4( ENABLE:= ENABLE, STEP_TYPE:= STEP_DATA.Completion, STEP_TIME:= STEP_DATA.StepTime+STEP_DATA.AddTime, TOL_V:= TOL_HEATER_VALUE_EN, TOL_P:= TOL_HEATER_PERCENT_EN, SV:= STEP_DATA.LstUnit.Heater.StageTEMP4, PV:= GV.AI.Stage_TEMP4, WARNING_RANGE:= STEP_DATA.LstUnit.Heater.StageTEMP4WaningRange, ALARM_RANGE:= STEP_DATA.LstUnit.Heater.StageTEMP4AlarmRange, DELAY_TIME:=STEP_DATA.LstUnit.Heater.ToleranceDelayTime, RST := Alarm_RST, STABLE_TIME := PMStableTime, STU_WARNING=> STAGE_TEMP4_WARNING, STU_ALARM=> STAGE_TEMP4_Alarm, ); //ALRAM & WARNING WARNING_OCC:= PRESSURE_WARNING OR MFC1_WARNING OR MFC2_WARNING OR MFC3_WARNING OR MFC4_WARNING OR MFC5_WARNING OR MFC6_WARNING OR MFC7_WARNING OR MFC8_WARNING OR MFC9_WARNING OR WALL_TEMP_WARNING OR LID_TEMP_WARNING OR STAGE_TEMP1_WARNING OR STAGE_TEMP1_WARNING OR STAGE_TEMP2_WARNING OR STAGE_TEMP3_WARNING OR STAGE_TEMP4_WARNING; ALARM_OCC:= PRESSURE_ALARM OR MFC1_ALARM OR MFC2_ALARM OR MFC3_ALARM OR MFC4_ALARM OR MFC5_ALARM OR MFC6_ALARM OR MFC7_ALARM OR MFC8_ALARM OR MFC9_ALARM OR WALL_TEMP_ALARM OR LID_TEMP_ALARM OR STAGE_TEMP1_Alarm OR STAGE_TEMP1_ALARM OR STAGE_TEMP2_ALARM OR STAGE_TEMP3_ALARM OR STAGE_TEMP4_ALARM; //STABLE DONE TON_STABLE_PROCESS(IN:= ENABLE, PT:= INT_TO_TIME(PMStableTime)*1000, Q=> , ET=> ); STABLE_DONE:= TOL_PRESSURE_PERCENT.STABLE_DONE AND TOL_MFC1.STABLE_DONE AND TOL_MFC2.STABLE_DONE AND TOL_MFC3.STABLE_DONE AND TOL_MFC5.STABLE_DONE AND TOL_MFC6.STABLE_DONE AND TOL_MFC7.STABLE_DONE AND TOL_WALL_TEMP.STABLE_DONE AND TOL_LID_TEMP.STABLE_DONE AND TOL_STAGE_TEMP1.STABLE_DONE AND TOL_STAGE_TEMP2.STABLE_DONE AND TOL_STAGE_TEMP3.STABLE_DONE AND TOL_STAGE_TEMP4.STABLE_DONE AND TON_STABLE_PROCESS.Q; //STEP流程 CASE i OF 1: IF STEP_DATA.Completion='Stable' THEN i:= 10; ELSIF STEP_DATA.Completion='Time' THEN i:= 20; END_IF //STABLE 10: IF STABLE_DONE THEN i:=100; END_IF; //TIME 20: IF ALARM_OCC THEN i:=50; ELSE i:=21; END_IF; 21: IF STEP_TIME_DONE THEN i:= 100; ELSE i:= 20; END_IF; //ALARM CONDITION 50: STEP_ERR:=TRUE; TON_STEP_TIME_EN:=FALSE; //TIME OUT 51: STEP_TIME_OUT:=TRUE; TON_STEP_TIME_EN:=FALSE; //FINISHED 100: NEXTSTEP:=TRUE; TON_STEP_TIME_EN:=FALSE; END_CASE; //PROCESS TIME STEP_TIME(IN:= TON_STEP_TIME_EN, PT:= INT_TO_TIME(STEP_DATA.StepTime+STEP_DATA.AddTime)*1000, Q=> STEP_TIME_DONE, ET=> ); ]]>