163 lines
4.6 KiB
XML
163 lines
4.6 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.13">
|
|
<POU Name="CodeReader_MAIN_FB" Id="{ebc21b2c-3341-4cce-92b4-b610f9a91412}" SpecialFunc="None">
|
|
<Declaration><![CDATA[FUNCTION_BLOCK CodeReader_MAIN_FB EXTENDS Station_GENERAL_MAIN_FB IMPLEMENTS I_STATION_CMD_CALL
|
|
VAR_INPUT
|
|
bManualInput : BOOL;
|
|
|
|
ManualInput_LotID : T_MaxString;
|
|
ManualInput_SlotID : T_MaxString;
|
|
END_VAR
|
|
VAR_OUTPUT
|
|
Data : T_MaxString;
|
|
END_VAR]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[]]></ST>
|
|
</Implementation>
|
|
<Method Name="CloseInOut" Id="{98e834d3-3fd9-47dc-9bba-c6f0ac9c1607}">
|
|
<Declaration><![CDATA[METHOD CloseInOut : BOOL
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[Data := '';
|
|
CloseInOut := TRUE;]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="FB_Init" Id="{35b2e7ea-9b17-4288-a1e2-8ad0a9ea6ba7}">
|
|
<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[_VisuName := 'CODE';
|
|
_NoConfigFile := TRUE;
|
|
_SchedulerManagement := TRUE;]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="Initialization" Id="{ffa54c1b-5765-43b2-8c91-574c9be93f5e}">
|
|
<Declaration><![CDATA[METHOD Initialization : BOOL
|
|
VAR_INPUT
|
|
iStation : INT;
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[
|
|
|
|
InitializationExt(iStation);
|
|
|
|
iStationStatus.NoScan := TRUE;
|
|
iStationStatus.OnlyMoveToStation := TRUE;
|
|
iStationStatus.NoRecipe := TRUE;
|
|
|
|
iStationStatus.StationName := 'Code Reader';
|
|
RecipeStationName[iStation] := 'Code Reader';
|
|
iStationStatus.ErrorList := 'CODE_ErrorNr';]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="MAIN" Id="{f434c5f4-d993-4d4a-8406-28b10f61f92c}">
|
|
<Declaration><![CDATA[METHOD MAIN : BOOL
|
|
VAR_INPUT
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="Start" Id="{ff149edf-77e8-4f32-aa05-c132608a9600}">
|
|
<Declaration><![CDATA[METHOD Start : BOOL
|
|
VAR
|
|
fbFormat : FB_FormatString;
|
|
END_VAR
|
|
VAR_INST
|
|
|
|
Path : STRING;
|
|
CreateDir : FB_CreateDir;
|
|
|
|
Pos : INT;
|
|
Size : INT;
|
|
END_VAR]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[CASE _Step OF
|
|
0:
|
|
IF KeyenceCamera.DMC(iStationStatus.WaferInfo[0].Size ,Data := Data) THEN
|
|
IF LEN(Data) > 0 THEN
|
|
_Step := 10;
|
|
ELSE
|
|
ManualInput_LotID := '';
|
|
ManualInput_SlotID := '';
|
|
_Step := 15;
|
|
END_IF
|
|
END_IF
|
|
10:
|
|
Size := LEN(Data);
|
|
IF iStationStatus.Ist.Service OR Size = 0 THEN
|
|
_Step := 100;
|
|
ELSE
|
|
_Step := 20;
|
|
END_IF
|
|
15:
|
|
bManualInput := TRUE;
|
|
_Step := _Step +1;
|
|
16:
|
|
IF NOT bManualInput THEN
|
|
iStationStatus.WaferInfo[0].LotID := ManualInput_LotID;
|
|
iStationStatus.WaferInfo[0].SlotID := ManualInput_SlotID;
|
|
_Step := 21;
|
|
END_IF
|
|
20:
|
|
CASE CMD[FirstStation] OF
|
|
StartCMD:
|
|
;
|
|
ELSE
|
|
_Step := 100;
|
|
RETURN;
|
|
END_CASE
|
|
|
|
Pos := FIND(Data, '/');
|
|
IF Pos > 0 THEN
|
|
iStationStatus.WaferInfo[0].LotID := LEFT(Data, Pos - 1);
|
|
iStationStatus.WaferInfo[0].SlotID := DELETE(Data, Pos, 1);
|
|
_Step := _Step +1;;
|
|
ELSE
|
|
iStationStatus.WaferInfo[0].SlotID := Data;
|
|
_Step := 30;
|
|
END_IF
|
|
21:
|
|
Path := CONCAT(LOG_MAIN_PATH, iStationStatus.WaferInfo[0].LotStartTime);
|
|
Path := CONCAT(Path, '\');
|
|
Path := CONCAT(Path, iStationStatus.WaferInfo[0].LotID);
|
|
CreateDir(sPathName := Path, bExecute := TRUE);
|
|
_Step := _Step +1;
|
|
22:
|
|
IF CreateDir.bError OR NOT CreateDir.bBusy THEN
|
|
_Step := 30;
|
|
END_IF
|
|
CreateDir(bExecute := FALSE);
|
|
30:
|
|
Path := CONCAT(LOG_MAIN_PATH, iStationStatus.WaferInfo[0].LotStartTime);
|
|
Path := CONCAT(Path, '\');
|
|
Path := CONCAT(Path, iStationStatus.WaferInfo[0].LotID);
|
|
Path := CONCAT(Path, '\');
|
|
Path := CONCAT(Path, iStationStatus.WaferInfo[0].SlotID);
|
|
CreateDir(sPathName := Path, bExecute := TRUE);
|
|
_Step := _Step +1;
|
|
31:
|
|
IF CreateDir.bError THEN
|
|
_Step := 200;
|
|
ELSIF NOT CreateDir.bBusy THEN
|
|
_Step := 100;
|
|
END_IF
|
|
CreateDir(bExecute := FALSE);
|
|
100:
|
|
Start := TRUE;
|
|
_Step := 0;
|
|
END_CASE
|
|
]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
</POU>
|
|
</TcPlcObject> |