Initial
This commit is contained in:
388
PLC/3 Hotplate/POUs/HOTPLATE_MAIN_FB.TcPOU
Normal file
388
PLC/3 Hotplate/POUs/HOTPLATE_MAIN_FB.TcPOU
Normal file
@@ -0,0 +1,388 @@
|
||||
<?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>
|
||||
66
PLC/3 Hotplate/POUs/Peripherie/HOTPLATE_IO_FB.TcPOU
Normal file
66
PLC/3 Hotplate/POUs/Peripherie/HOTPLATE_IO_FB.TcPOU
Normal file
@@ -0,0 +1,66 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.11">
|
||||
<POU Name="HOTPLATE_IO_FB" Id="{d6c2e60e-7c3f-4ac6-8faa-8ca468e62db4}" SpecialFunc="None">
|
||||
<Declaration><![CDATA[FUNCTION_BLOCK HOTPLATE_IO_FB EXTENDS Station_GENERAL_IO_FB
|
||||
VAR_INPUT
|
||||
// bOutN2 : BOOL;
|
||||
// bOutVacuum : BOOL;
|
||||
// bOutVacOut : BOOL;
|
||||
// bOutShutter : BOOL;
|
||||
END_VAR
|
||||
|
||||
VAR_OUTPUT
|
||||
// bInVacuum : BOOL;
|
||||
// bInShutterOpen : BOOL;
|
||||
bInReferenceSensor : BOOL;
|
||||
bInOverTemp AT %I* : BOOL;
|
||||
// CANStatus AT %I* : USINT;
|
||||
rInCurrentTemperature : LREAL;
|
||||
InCurrentTemperature AT %I* : INT;
|
||||
END_VAR
|
||||
|
||||
VAR
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[//MediaCheck();
|
||||
(*
|
||||
IF bInReferenceSensor THEN
|
||||
iStationStatus.Ist.PrepIn := FALSE;
|
||||
iStationStatus.Ist.PrepOut := FALSE;
|
||||
END_IF
|
||||
*)
|
||||
|
||||
CASE iStationStatus.StationType OF
|
||||
TypeHotplate:
|
||||
rInCurrentTemperature := HOTPLATE_TempRegler.rOutCurrentTemperature;
|
||||
TypeCoolplate:
|
||||
rInCurrentTemperature := InCurrentTemperature;
|
||||
rInCurrentTemperature := rInCurrentTemperature/10;
|
||||
END_CASE]]></ST>
|
||||
</Implementation>
|
||||
<Method Name="Initialization" Id="{5ae12870-9b1c-4b8f-b9d4-34f9d7c40b29}">
|
||||
<Declaration><![CDATA[METHOD Initialization : BOOL
|
||||
VAR_INPUT
|
||||
iStation : INT;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[InitializationExt(iStation);]]></ST>
|
||||
</Implementation>
|
||||
</Method>
|
||||
<Action Name="MediaCheck" Id="{4b47197f-6cb4-4618-90a2-57a8f30babe6}">
|
||||
<Implementation>
|
||||
<ST><![CDATA[CASE iStationStatus.StationType OF
|
||||
TypeHotplate:
|
||||
AlarmSend(iStation, HOTPLATE_ErrorNr.eOverTemp, FALSE, eReportType.Warning, sAvailableResponse.Ok, NOT bInOverTemp);
|
||||
END_CASE
|
||||
|
||||
DelayTimer(IN := TRUE AND InAktorspannung, PT := T#5S);
|
||||
IF NOT DelayTimer.Q THEN
|
||||
RETURN;
|
||||
END_IF]]></ST>
|
||||
</Implementation>
|
||||
</Action>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
Reference in New Issue
Block a user