); 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_EDGE_TEMP:= STEP_DATA.LstUnit.Heater.StageEdgeTemp*10; STAGE_CENTER_TEMP:= STEP_DATA.LstUnit.Heater.StageCenterTemp*10; 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 IF GV.AI.Stage_Temp1<=GV.AI.Stage_Temp3 THEN STAGE_EDGE_TEMP_MIN_VALUE:=GV.AI.Stage_Temp1; ELSE STAGE_EDGE_TEMP_MIN_VALUE:=GV.AI.Stage_Temp3; END_IF IF GV.AI.Stage_Temp2<=GV.AI.Stage_Temp4 THEN STAGE_CENTER_TEMP_MIN_VALUE:=GV.AI.Stage_Temp2; ELSE STAGE_CENTER_TEMP_MIN_VALUE:=GV.AI.Stage_Temp4; 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_PERCENT( ENABLE:= TOL_MFC1_PERCENT.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_PERCENT( ENABLE:= TOL_MFC2_PERCENT.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_PERCENT( ENABLE:= TOL_MFC3_PERCENT.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_PERCENT( ENABLE:= TOL_MFC5_PERCENT.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_PERCENT( ENABLE:= TOL_MFC6_PERCENT.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_PERCENT( ENABLE:= TOL_MFC7_PERCENT.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_PERCENT( 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_PERCENT( 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_EDGE_TEMP_PERCENT( 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.StageEdgeTemp, PV:= STAGE_EDGE_TEMP_MIN_VALUE, WARNING_RANGE:= STEP_DATA.LstUnit.Heater.StageEdgeTempWaningRange, ALARM_RANGE:= STEP_DATA.LstUnit.Heater.StageEdgeTempAlarmRange, DELAY_TIME:=STEP_DATA.LstUnit.Heater.ToleranceDelayTime, RST := Alarm_RST, STABLE_TIME := PMStableTime, STU_WARNING=> STAGE_EDGE_TEMP_WARNING, STU_ALARM=> STAGE_EDGE_TEMP_Alarm, ); TOL_STAGE_CENTER_TEMP_PERCENT( 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.StageCenterTemp, PV:= STAGE_CENTER_TEMP_MIN_VALUE, WARNING_RANGE:= STEP_DATA.LstUnit.Heater.StageCenterTempWaningRange, ALARM_RANGE:= STEP_DATA.LstUnit.Heater.StageCenterTempAlarmRange, DELAY_TIME:=STEP_DATA.LstUnit.Heater.ToleranceDelayTime, RST := Alarm_RST, STABLE_TIME := PMStableTime, STU_WARNING=> STAGE_CENTER_TEMP_WARNING, STU_ALARM=> STAGE_CENTER_TEMP_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_EDGE_TEMP_WARNING OR STAGE_CENTER_TEMP_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_EDGE_TEMP_ALARM OR STAGE_CENTER_TEMP_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_PERCENT.STABLE_DONE AND TOL_MFC2_PERCENT.STABLE_DONE AND TOL_MFC3_PERCENT.STABLE_DONE AND TOL_MFC5_PERCENT.STABLE_DONE AND TOL_MFC6_PERCENT.STABLE_DONE AND TOL_MFC7_PERCENT.STABLE_DONE AND TOL_WALL_TEMP_PERCENT.STABLE_DONE AND TOL_LID_TEMP_PERCENT.STABLE_DONE AND TOL_STAGE_EDGE_TEMP_PERCENT.STABLE_DONE AND TOL_STAGE_CENTER_TEMP_PERCENT.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=> ); ]]>