388 lines
11 KiB
XML
388 lines
11 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
|
|
<POU Name="HOTPLATE_MAIN_FB" Id="{c78ec278-b64d-47fd-8edf-a8957521762d}" SpecialFunc="None">
|
|
<Declaration><![CDATA[FUNCTION_BLOCK HOTPLATE_MAIN_FB EXTENDS Station_GENERAL_MAIN_FB IMPLEMENTS I_STATION_CMD_CALL
|
|
VAR
|
|
LastWaferSize : INT;
|
|
|
|
Recipe : sHotplateRecipe;
|
|
RecipeLoad : sHotplateRecipe;
|
|
RecipeRead : sHotplateRecipe;
|
|
|
|
ITempController : I_TempController;
|
|
Config : sHotplateConfig;
|
|
ConfigOld : sHotplateConfig;
|
|
|
|
IO : HOTPLATE_IO_FB;
|
|
END_VAR
|
|
VAR CONSTANT
|
|
StepRecipeStart : INT := 10;
|
|
StepEnd : INT := 30;
|
|
END_VAR
|
|
|
|
VAR PERSISTENT
|
|
// RecipeStandby : sHotplateRecipe;
|
|
END_VAR
|
|
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[]]></ST>
|
|
</Implementation>
|
|
<Folder Name="Start" Id="{4247ae12-9fcc-487a-9107-b49d8dda3a45}" />
|
|
<Method Name="CheckFlow" Id="{6e64097a-8642-404f-b16f-da3d4219c0e1}">
|
|
<Declaration><![CDATA[METHOD CheckFlow : BOOL
|
|
VAR_INPUT
|
|
Step : REFERENCE TO INT;
|
|
END_VAR
|
|
VAR
|
|
i : USINT;
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[CASE Step OF
|
|
0:
|
|
IF CheckRecipe() THEN
|
|
Step := 10;
|
|
END_IF
|
|
10:
|
|
ITempController.Enable := TRUE;
|
|
ITempController.TargetTemperature := RecipeRead.TEMPERATURE;
|
|
ITempController.Tolerance := RecipeRead.TOL;
|
|
Step := Step +1;
|
|
11:
|
|
IF ITempController.TemperatureInRange() THEN
|
|
Step := 20;
|
|
ELSE
|
|
Step := 110;
|
|
END_IF
|
|
20:
|
|
Step := 100;
|
|
100:
|
|
iStationStatus.Ist.ReadyForFlow := TRUE;
|
|
iStationStatus.Soll.CheckFlow := FALSE;
|
|
Step := 0;
|
|
110:
|
|
iStationStatus.Ist.ReadyForFlow := FALSE;
|
|
iStationStatus.Soll.CheckFlow := FALSE;
|
|
Step := 0;
|
|
END_CASE]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="CloseInOut" Id="{39f7b1c5-23cb-433f-b4a7-a51dba02cb4d}">
|
|
<Declaration><![CDATA[METHOD CloseInOut : BOOL
|
|
VAR
|
|
PutFinished : INT;
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[CASE _Step OF
|
|
0:
|
|
CASE iCMD OF
|
|
CloseInCMD:
|
|
IF iStationStatus.Ist.Service THEN
|
|
_Step := 50;
|
|
ELSE
|
|
_Step := 20;
|
|
END_IF
|
|
CloseOutCMD:
|
|
_Step := 50;
|
|
END_CASE
|
|
20:
|
|
IF LoadAutoRecipe() THEN
|
|
_Step := 30;
|
|
END_IF
|
|
30:
|
|
IF ITempController.TuneDone THEN
|
|
ITempController.TargetTemperature := Recipe.TEMPERATURE;
|
|
ITempController.Tolerance := Recipe.TOL;
|
|
ITempController.Enable := TRUE;
|
|
_Step := _Step +1;
|
|
ELSE
|
|
AlarmSend(iStation:=iStation,MsgId := HOTPLATE_ErrorNr.eNotTuned,TRUE, eReportType.Error, sAvailableResponse.Ok, FALSE);
|
|
iStationStatus.Soll.Stop := TRUE;
|
|
END_IF
|
|
31:
|
|
IF ITempController.TemperatureInRange(IO.rInCurrentTemperature) THEN
|
|
_Step := 50;
|
|
ELSE
|
|
iStationStatus.Error := TRUE;
|
|
iStationStatus.ErrorIndex := AlarmSend(iStation,MsgId := HOTPLATE_ErrorNr.wTempOutOfRange,TRUE, eReportType.Warning, sAvailableResponse.AbortRetryIgnore, FALSE);
|
|
iStationStatus.StepRetry := 0;
|
|
iStationStatus.StepIgnore := 50;
|
|
END_IF
|
|
50:
|
|
_Step := 0;
|
|
CloseInOut := TRUE;
|
|
END_CASE
|
|
]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="FB_Init" Id="{b968b8f2-f4f9-458c-8813-95ad7cbb84a1}">
|
|
<Declaration><![CDATA[//FB_Init is always available implicitly and it is used primarily for initialization.
|
|
//The return value is not evaluated. For a specific influence, you can also declare the
|
|
//methods explicitly and provide additional code there with the standard initialization
|
|
//code. You can evaluate the return value.
|
|
METHOD FB_Init: BOOL
|
|
VAR_INPUT
|
|
bInitRetains: BOOL; // TRUE: the retain variables are initialized (reset warm / reset cold)
|
|
bInCopyCode: BOOL; // TRUE: the instance will be copied to the copy code afterward (online change)
|
|
END_VAR]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[_DataLogger := TRUE;
|
|
_VisuName := 'HOTPLATE';
|
|
_SchedulerManagement := TRUE;
|
|
_PersistentProductCheck := TRUE;]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="INIT" Id="{4952b82a-4af8-498c-b722-b63bbc5d8fac}">
|
|
<Declaration><![CDATA[METHOD INIT : BOOL
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[CASE _Step OF
|
|
0:
|
|
IF ITempController.TuneDone AND iStation = iStationStatus.StationType THEN
|
|
ITempController.Enable := TRUE;
|
|
ITempController.TargetTemperature := Config.StandbyTemperature;
|
|
ITempController.Tolerance := 1;
|
|
END_IF
|
|
_Step := 100;
|
|
100:
|
|
iStationStatus.WaferInfo[0].Number := 0;
|
|
INIT := TRUE;
|
|
_Step := 0;
|
|
END_CASE
|
|
|
|
]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="Initialization" Id="{b32867f8-293a-4086-b86a-990b6cf2530c}">
|
|
<Declaration><![CDATA[METHOD Initialization : BOOL
|
|
VAR_INPUT
|
|
iStation : INT;
|
|
END_VAR
|
|
VAR
|
|
Index : INT;
|
|
IndexString : STRING;
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[
|
|
InitializationExt(iStation);
|
|
|
|
IO.Initialization(iStation);
|
|
|
|
iStationStatus.NoScan := TRUE;
|
|
iStationStatus.RecipeOnlyHeader := TRUE;
|
|
iStationStatus.NoProductCheck := TRUE;
|
|
_PersistentProductCheck := TRUE;
|
|
|
|
CASE StationsStatus[iStation].StationType OF
|
|
TypeHotplate:
|
|
iStationStatus.StandbyAvailable := TRUE;
|
|
iStationStatus.StationName := CONCAT('HP ', StationIndex);
|
|
RecipeStationName[iStation] := 'Hotplate';
|
|
TypeCoolplate:
|
|
iStationStatus.StationName := CONCAT('CP ', StationIndex);
|
|
RecipeStationName[iStation] := 'Coolplate';
|
|
END_CASE
|
|
|
|
iStationStatus.ErrorList := 'HOTPLATE_ErrorNr';
|
|
|
|
CASE StationsStatus[iStation].StationType OF
|
|
TypeHotplate:
|
|
ConfigManagement.Initialization(ADR(Config), ADR(ConfigOld), SIZEOF(Config), 'sHotplateConfig', CONCAT('HP', StationIndex));
|
|
TypeCoolplate:
|
|
ConfigManagement.Initialization(ADR(Config), ADR(ConfigOld), SIZEOF(Config), 'sHotplateConfig', CONCAT('CP', StationIndex));
|
|
END_CASE
|
|
ConfigPlausibility REF= Config.ConfigPlausibility;
|
|
|
|
RecipeManagement.Initialization(
|
|
iStation,
|
|
ADR(RecipeLoad),
|
|
ADR(HOTPLATE_RECIPE_EDITE),
|
|
ADR(HOTPLATE_RECIPE_EMPTY),
|
|
ADR(RecipeRead),
|
|
ADR(Recipe),
|
|
SIZEOF(sHotplateRecipe),
|
|
'sHotplateRecipe',
|
|
0
|
|
);
|
|
|
|
CASE iStationStatus.StationType OF
|
|
TypeHotplate:
|
|
ITempController := HOTPLATE_TempRegler;
|
|
IF iStation = iStationStatus.StationType THEN
|
|
HOTPLATE_TempRegler.Config REF= Config.Temperature;
|
|
HOTPLATE_TempRegler.rInTuneTargetTemperature := 100;
|
|
HOTPLATE_TempRegler.tTaskCycleTime := T#2MS;
|
|
HOTPLATE_TempRegler.rInMinTemperature := 20;
|
|
HOTPLATE_TempRegler.rInMaxTemperature := 200;
|
|
END_IF
|
|
TypeCoolplate:
|
|
CP_Chiller.ErrorIndex_SystemError := HOTPLATE_ErrorNr.eSMCChillerHasError;
|
|
ITempController := CP_Chiller;
|
|
IF iStation = iStationStatus.StationType THEN
|
|
CP_Chiller.rInOffset REF= Config.ChillerOffset;
|
|
CP_Chiller.rInMinTemperature := 15;
|
|
CP_Chiller.rInMaxTemperature := 25;
|
|
CP_Chiller.Initialization(iStation);
|
|
END_IF
|
|
END_CASE
|
|
|
|
CASE iStationStatus.StationType OF
|
|
TypeHotplate:
|
|
DataLogger.format := '%0.1f;$N';
|
|
DataLogger.Data[1].Name := 'Temperature(°C)';
|
|
DataLogger.Data[1].Value REF= HOTPLATE_TempRegler.rOutCurrentTemperature;
|
|
DataLogger.Data[1].Tolerence := 0.1;
|
|
TypeCoolplate:
|
|
DataLogger.format := '%0.1f;$N';
|
|
DataLogger.Data[1].Name := 'Temperature(°C)';
|
|
DataLogger.Data[1].Value REF= CP_Chiller.rOutCurrentTemperature;
|
|
DataLogger.Data[1].Tolerence := 0.1;
|
|
END_CASE
|
|
|
|
]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="MAIN" Id="{f78004a7-fcc3-472f-b8ab-8046ac0b7dbc}">
|
|
<Declaration><![CDATA[METHOD MAIN : BOOL
|
|
VAR_INPUT
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><;
|
|
|
|
IO();]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="MEDIA" Id="{7d4623df-11d4-48d9-97c1-d30644acbda3}">
|
|
<Declaration><![CDATA[METHOD MEDIA : BOOL
|
|
VAR_INPUT
|
|
TargetMedia : UDINT;
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="PrepInOut" Id="{971aa2e3-c7e0-4fc2-b1f4-2d84b7964afa}">
|
|
<Declaration><![CDATA[METHOD PrepInOut : BOOL]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[PrepInOut := TRUE;]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="RCPAddStep" Id="{b7c1a6d2-7f1e-4b5f-baea-66c9c04d1a99}">
|
|
<Declaration><![CDATA[METHOD RCPAddStep : BOOL
|
|
VAR_INPUT
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="RCPStepRemove" Id="{12dc1bbd-d248-4ed7-8d80-c7c9393f5657}">
|
|
<Declaration><![CDATA[METHOD RCPStepRemove : BOOL
|
|
VAR_INPUT
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="Rezeptendebedingungen" Id="{635772dd-4211-483b-9ee7-724b850e54e7}" FolderPath="Start\">
|
|
<Declaration><![CDATA[METHOD Rezeptendebedingungen : BOOL
|
|
VAR_INPUT
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[CurrentStep :=CurrentStep +1;
|
|
IF CurrentStep > Recipe.STEP_COUNT THEN (*Rezeptende*)
|
|
Step := Step +1;
|
|
ELSE
|
|
Step := StepRecipeStart;
|
|
END_IF
|
|
]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="Standby" Id="{9755c23b-2bd8-4df2-aaf7-28f7bcabe18d}">
|
|
<Declaration><![CDATA[METHOD Standby : BOOL
|
|
VAR_INPUT
|
|
bStart : BOOL;
|
|
Step : REFERENCE TO INT;
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[CASE Step OF
|
|
0:
|
|
StandbyTimer(IN := bStart, PT := UDINT_TO_TIME(StandbyDelay[iStation]*1000));
|
|
IF StandbyTimer.Q THEN
|
|
StandbyTimer(IN := FALSE);
|
|
Step := 10;
|
|
END_IF
|
|
10:
|
|
// ITempController.TargetTemperature := RecipeStandby.TEMPERATURE;
|
|
ITempController.Enable := TRUE;
|
|
Step := 0;
|
|
END_CASE]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="Start" Id="{e3c6a83a-c923-40da-b9fb-1bd1106a7265}">
|
|
<Declaration><![CDATA[METHOD Start : BOOL
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[CASE _Step OF
|
|
0:
|
|
_Step := StepRecipeStart;
|
|
StepRecipeStart:
|
|
IF StepEndCondition() THEN
|
|
_Step := 100;
|
|
END_IF
|
|
100:
|
|
_Step := 0;
|
|
Start := TRUE;
|
|
END_CASE
|
|
]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="StepEndCondition" Id="{b30d2d50-6cad-421e-b323-ed892cd3437e}" FolderPath="Start\">
|
|
<Declaration><![CDATA[METHOD StepEndCondition : BOOL
|
|
VAR_INPUT
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[StepTimer(IN := TRUE, PT := LREAL_TO_TIME(Recipe.StepTime*1000));
|
|
IF StepTimer.Q THEN
|
|
StepEndCondition := TRUE;
|
|
StepTimer(IN := FALSE);
|
|
END_IF]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="ToVisu" Id="{eb1703d7-45ab-4508-99e9-1bdfc8585af7}">
|
|
<Declaration><![CDATA[METHOD ToVisu : BOOL
|
|
VAR_INPUT
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[VisuHotplateAutoRecipe REF= Recipe;
|
|
VisuHPTrend REF= HOTPLATE_TemperatureTrend[iStation];
|
|
VisuHotplateConfig REF= HOTPLATE_MAIN[iStationStatus.StationType].Config;
|
|
|
|
CASE iStationStatus.StationType OF
|
|
TypeHotplate:
|
|
VisuIITempController := HOTPLATE_TempRegler;
|
|
TypeCoolplate:
|
|
VisuIITempController := CP_Chiller;
|
|
END_CASE
|
|
]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
</POU>
|
|
</TcPlcObject> |