Aligner ======= - Fixed Aligner during resetting with library update to 1.3.4 - Added Vacuum valve to HMI Etcher ====== - Added Vacuum valve to HMI TrayFeeder ========== - Fixed a bug in protocoll parsing - Added automatic reconnect tries to protocoll handler - Added buttons to hmi interface for tray feeding and unloading
280 lines
6.7 KiB
XML
280 lines
6.7 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<TcPlcObject Version="1.1.0.1">
|
|
<POU Name="FB_TrayFeederParser" Id="{d60acdcf-8e59-48d2-93a2-171510b93e18}" SpecialFunc="None">
|
|
<Declaration><![CDATA[FUNCTION_BLOCK FB_TrayFeederParser
|
|
VAR_INPUT
|
|
END_VAR
|
|
VAR_OUTPUT
|
|
END_VAR
|
|
VAR
|
|
_stStatus : ST_TrayFeederStatus;
|
|
END_VAR
|
|
VAR CONSTANT
|
|
MAX_PARAMS : UINT := 10;
|
|
|
|
PARAMS_SEP : STRING(1) := ';';
|
|
VALUE_SEP : STRING(1) := '=';
|
|
END_VAR]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[]]></ST>
|
|
</Implementation>
|
|
<Method Name="M_EvenSystParams" Id="{29bd9922-3af8-4120-835a-1d02226f2809}">
|
|
<Declaration><![CDATA[METHOD PRIVATE M_EvenSystParams
|
|
VAR_INPUT
|
|
sParam : STRING(30);
|
|
END_VAR
|
|
VAR
|
|
_sParamName : STRING(15);
|
|
_sParamValue : STRING(15);
|
|
|
|
_xSplitOk : BOOL;
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[_xSplitOk := FindAndSplit(
|
|
pSeparator := ADR(VALUE_SEP), pSrcString := ADR(sParam),
|
|
pLeftString := ADR(_sParamName), nLeftSize := SIZEOF(_sParamName),
|
|
pRightString := ADR(_sParamValue), nRightSize := SIZEOF(_sParamValue),
|
|
bSearchFromRight := FALSE);
|
|
|
|
IF _xSplitOk THEN
|
|
// Check for parameter names
|
|
IF 'Door' = _sParamName THEN
|
|
IF 'Opened' = _sParamValue THEN
|
|
_stStatus.xDoorOpen := TRUE;
|
|
ELSIF 'Closed' = _sParamValue THEN
|
|
_stStatus.xDoorOpen := FALSE;
|
|
END_IF
|
|
END_IF
|
|
END_IF]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="M_NoteSystParams" Id="{d4055987-9814-4c22-8525-7aafb690c294}">
|
|
<Declaration><![CDATA[METHOD PRIVATE M_NoteSystParams
|
|
VAR_INPUT
|
|
sParam : STRING(30);
|
|
END_VAR
|
|
VAR
|
|
_sParamName : STRING(15);
|
|
_sParamValue : STRING(15);
|
|
|
|
_xSplitOk : BOOL;
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[_xSplitOk := FindAndSplit(
|
|
pSeparator := ADR(VALUE_SEP), pSrcString := ADR(sParam),
|
|
pLeftString := ADR(_sParamName), nLeftSize := SIZEOF(_sParamName),
|
|
pRightString := ADR(_sParamValue), nRightSize := SIZEOF(_sParamValue),
|
|
bSearchFromRight := FALSE);
|
|
|
|
IF _xSplitOk THEN
|
|
// Check for parameter names
|
|
IF 'InpStack' = _sParamName THEN
|
|
IF 'Empty' = _sParamValue THEN
|
|
_stStatus.eStateInputStack := E_TFInputStackState.EMTPY;
|
|
ELSIF 'NoMaga' = _sParamValue THEN
|
|
_stStatus.eStateInputStack := E_TFInputStackState.NO_MAGAZINE;
|
|
ELSIF 'AlmEmpty' = _sParamValue THEN
|
|
_stStatus.eStateInputStack := E_TFInputStackState.ALMOST_EMPTY;
|
|
ELSE
|
|
_stStatus.eStateInputStack := E_TFInputStackState.UNDEFINED;
|
|
END_IF
|
|
ELSIF 'Opera' = _sParamName THEN
|
|
IF 'Busy' = _sParamValue THEN
|
|
_stStatus.eState := E_TrayFeederState.BUSY;
|
|
END_IF
|
|
END_IF
|
|
END_IF]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="M_ParseCmd" Id="{093187fd-e820-430f-868b-5e3643bdddf4}">
|
|
<Declaration><![CDATA[METHOD M_ParseCmd
|
|
VAR_INPUT
|
|
sResponse : STRING(255);
|
|
END_VAR
|
|
VAR
|
|
_iLength : INT;
|
|
_sGAF : STRING(9);
|
|
_sParams : STRING(255);
|
|
_sParam : STRING(20);
|
|
_sParamName : STRING(10);
|
|
_sValue : STRING(10);
|
|
|
|
_xSplitResult : BOOL;
|
|
|
|
_uiCounter : UINT;
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[// Get group and function
|
|
_sGAF := MID(sResponse, 9, 2);
|
|
|
|
// Get length
|
|
_iLength := LEN(sResponse);
|
|
|
|
IF 'STAT-FEED' = _sGAF THEN
|
|
// Get parameter string
|
|
_sParams := MID(sResponse, LEN(sResponse) - 11, 12);
|
|
|
|
FOR _uiCounter := 0 TO MAX_PARAMS DO
|
|
_xSplitResult := FindAndSplit(
|
|
pSeparator := ADR(PARAMS_SEP), pSrcString := ADR(_sParams),
|
|
pLeftString := ADR(_sParam), nLeftSize := SIZEOF(_sParam),
|
|
pRightString := ADR(_sParams), nRightSize := SIZEOF(_sParams),
|
|
bSearchFromRight := FALSE);
|
|
|
|
IF _xSplitResult THEN
|
|
M_StatFeedParams(_sParam);
|
|
ELSE
|
|
EXIT;
|
|
END_IF
|
|
END_FOR
|
|
RETURN;
|
|
END_IF
|
|
|
|
IF 'EVEN-SYST' = _sGAF THEN
|
|
// Get parameter string
|
|
_sParams := MID(sResponse, LEN(sResponse) - 11, 12);
|
|
|
|
FOR _uiCounter := 0 TO MAX_PARAMS DO
|
|
_xSplitResult := FindAndSplit(
|
|
pSeparator := ADR(PARAMS_SEP), pSrcString := ADR(_sParams),
|
|
pLeftString := ADR(_sParam), nLeftSize := SIZEOF(_sParam),
|
|
pRightString := ADR(_sParams), nRightSize := SIZEOF(_sParams),
|
|
bSearchFromRight := FALSE);
|
|
|
|
IF _xSplitResult THEN
|
|
M_EvenSystParams(_sParam);
|
|
END_IF
|
|
END_FOR
|
|
END_IF
|
|
|
|
IF 'EVEN-INIT' = _sGAF THEN
|
|
RETURN;
|
|
END_IF
|
|
|
|
IF 'EVEN-BUTT' = _sGAF THEN
|
|
RETURN;
|
|
END_IF
|
|
|
|
IF 'EVEN-CONV' = _sGAF THEN
|
|
RETURN;
|
|
END_IF
|
|
|
|
IF 'EVEN-ELEV' = _sGAF THEN
|
|
RETURN;
|
|
END_IF
|
|
|
|
IF 'NOTE-SYST' = _sGAF THEN
|
|
RETURN;
|
|
END_IF
|
|
|
|
IF 'NOTE-CONN' = _sGAF THEN
|
|
RETURN;
|
|
END_IF
|
|
|
|
IF 'NOTE-ELEV' = _sGAF THEN
|
|
RETURN;
|
|
END_IF
|
|
|
|
IF 'INVA-SYST' = _sGAF THEN
|
|
RETURN;
|
|
END_IF
|
|
|
|
IF 'INVA-CONV' = _sGAF THEN
|
|
RETURN;
|
|
END_IF
|
|
|
|
IF 'INVA-ELEV' = _sGAF THEN
|
|
RETURN;
|
|
END_IF
|
|
|
|
IF 'INVA-COMM' = _sGAF THEN
|
|
RETURN;
|
|
END_IF
|
|
|
|
IF 'ERRO-ELEV' = _sGAF THEN
|
|
RETURN;
|
|
END_IF
|
|
|
|
IF 'ERRO-CONV' = _sGAF THEN
|
|
RETURN;
|
|
END_IF
|
|
|
|
IF 'ERRO-STAC' = _sGAF THEN
|
|
RETURN;
|
|
END_IF
|
|
|
|
IF 'ERRO-SYST' = _sGAF THEN
|
|
RETURN;
|
|
END_IF
|
|
|
|
IF 'ERRO-INIT' = _sGAF THEN
|
|
RETURN;
|
|
END_IF
|
|
|
|
IF 'ERRO-FATA' = _sGAF THEN
|
|
RETURN;
|
|
END_IF
|
|
|
|
IF 'ERRO-DISP' = _sGAF THEN
|
|
RETURN;
|
|
END_IF]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Method Name="M_StatFeedParams" Id="{0f709e96-deb5-41d4-a649-6a94f81e2861}">
|
|
<Declaration><![CDATA[METHOD PRIVATE M_StatFeedParams
|
|
VAR_INPUT
|
|
sParam : STRING(30);
|
|
END_VAR
|
|
VAR
|
|
_sParamName : STRING(15);
|
|
_sParamValue : STRING(15);
|
|
|
|
_xSplitOk : BOOL;
|
|
END_VAR]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[_xSplitOk := FindAndSplit(
|
|
pSeparator := ADR(VALUE_SEP), pSrcString := ADR(sParam),
|
|
pLeftString := ADR(_sParamName), nLeftSize := SIZEOF(_sParamName),
|
|
pRightString := ADR(_sParamValue), nRightSize := SIZEOF(_sParamValue),
|
|
bSearchFromRight := FALSE);
|
|
|
|
IF _xSplitOk THEN
|
|
// Check for parameter names
|
|
IF 'Feeder' = _sParamName THEN
|
|
IF 'LoadPos' = _sParamValue THEN
|
|
_stStatus.eState := E_TrayFeederState.LOAD_POS;
|
|
ELSIF 'FeedPos' = _sParamValue THEN
|
|
_stStatus.eState := E_TrayFeederState.FEED_POS;
|
|
ELSIF 'Busy' = _sParamValue THEN
|
|
_stStatus.eState := E_TrayFeederState.BUSY;
|
|
ELSIF 'Hold' = _sParamValue THEN
|
|
_stStatus.eState := E_TrayFeederState.HOLD;
|
|
END_IF
|
|
ELSIF 'PickRdy' = _sParamName THEN
|
|
IF 'True' = _sParamValue THEN
|
|
_stStatus.xInPickPosition := TRUE;
|
|
ELSIF 'False' = _sParamValue THEN
|
|
_stStatus.xInPickPosition := FALSE;
|
|
END_IF
|
|
ELSIF 'TrayNbr' = _sParamName THEN
|
|
_stStatus.uiActTray := STRING_TO_UINT(_sParamValue);
|
|
END_IF
|
|
END_IF]]></ST>
|
|
</Implementation>
|
|
</Method>
|
|
<Property Name="P_Status" Id="{20979751-d4c1-49d9-b10b-c37404f0389d}">
|
|
<Declaration><![CDATA[PROPERTY P_Status : ST_TrayFeederStatus]]></Declaration>
|
|
<Get Name="Get" Id="{fd6a9782-a339-4e31-8a2f-e1b1d771cedb}">
|
|
<Declaration><![CDATA[VAR
|
|
END_VAR
|
|
]]></Declaration>
|
|
<Implementation>
|
|
<ST><![CDATA[P_Status := _stStatus;]]></ST>
|
|
</Implementation>
|
|
</Get>
|
|
</Property>
|
|
</POU>
|
|
</TcPlcObject> |