Changed gripper calculation and AlarmRaising

This commit is contained in:
2026-02-16 21:50:56 +01:00
parent 0c40092d8f
commit 20b5d5df08
4 changed files with 67 additions and 10 deletions

View File

@@ -2,7 +2,7 @@
<TcModuleClass> <TcModuleClass>
<DataTypes> <DataTypes>
<DataType> <DataType>
<Name GUID="{41663E72-28F8-4E92-AC1A-8F6F55BA9D6D}">KukaRobot</Name> <Name GUID="{ED26FE12-E1DA-401E-9C9B-E08D7B3D666D}">KukaRobot</Name>
<DisplayName TxtId=""><![CDATA[NewEventClass_DisplayText]]></DisplayName> <DisplayName TxtId=""><![CDATA[NewEventClass_DisplayText]]></DisplayName>
<EventId> <EventId>
<Name Id="1">NotInExtMode</Name> <Name Id="1">NotInExtMode</Name>
@@ -134,6 +134,16 @@
<DisplayName TxtId=""><![CDATA[Implausible gripper signals]]></DisplayName> <DisplayName TxtId=""><![CDATA[Implausible gripper signals]]></DisplayName>
<Severity>Error</Severity> <Severity>Error</Severity>
</EventId> </EventId>
<EventId>
<Name Id="27">WrongParamsReadBack</Name>
<DisplayName TxtId=""><![CDATA[Robot did not correctly mirrored back job parameter]]></DisplayName>
<Severity>Error</Severity>
</EventId>
<EventId>
<Name Id="28">WrongJobReadBack</Name>
<DisplayName TxtId=""><![CDATA[Robot mirrored wrong job command]]></DisplayName>
<Severity>Error</Severity>
</EventId>
<Hides> <Hides>
<Hide GUID="{456A0777-3241-483C-B513-164C5A2791FC}"/> <Hide GUID="{456A0777-3241-483C-B513-164C5A2791FC}"/>
<Hide GUID="{8667E78C-B458-4844-A8FF-6F6F9FAB3AD8}"/> <Hide GUID="{8667E78C-B458-4844-A8FF-6F6F9FAB3AD8}"/>
@@ -161,6 +171,8 @@
<Hide GUID="{29E3A83B-DAF1-4873-919F-E7C8F007ACAD}"/> <Hide GUID="{29E3A83B-DAF1-4873-919F-E7C8F007ACAD}"/>
<Hide GUID="{FA039875-23CD-4325-8CA9-B14FADA92FFA}"/> <Hide GUID="{FA039875-23CD-4325-8CA9-B14FADA92FFA}"/>
<Hide GUID="{96196A41-758B-4248-8C31-DA1C8BC623CC}"/> <Hide GUID="{96196A41-758B-4248-8C31-DA1C8BC623CC}"/>
<Hide GUID="{41663E72-28F8-4E92-AC1A-8F6F55BA9D6D}"/>
<Hide GUID="{8C191398-5220-493F-BC5D-8F1AA729AA0D}"/>
</Hides> </Hides>
</DataType> </DataType>
<DataType> <DataType>

View File

@@ -88,6 +88,11 @@ VAR
_fbAlarmOperatorSafetyNotOk : FB_AlarmMessage(stEventEntry := TC_EVENTS.KukaRobot.OperatorSafetyNotOk, xWithConfirmation := FALSE); _fbAlarmOperatorSafetyNotOk : FB_AlarmMessage(stEventEntry := TC_EVENTS.KukaRobot.OperatorSafetyNotOk, xWithConfirmation := FALSE);
_fbAlarmRobotErrorResetTimeout : FB_AlarmMessage(stEventEntry := TC_EVENTS.KukaRobot.ErrorResetTimeout, xWithConfirmation := TRUE); _fbAlarmRobotErrorResetTimeout : FB_AlarmMessage(stEventEntry := TC_EVENTS.KukaRobot.ErrorResetTimeout, xWithConfirmation := TRUE);
_fbAlarmDrivesEnableTimeout : FB_AlarmMessage(stEventEntry := TC_EVENTS.KukaRobot.DrivesEnableTimeout, xWithConfirmation := TRUE); _fbAlarmDrivesEnableTimeout : FB_AlarmMessage(stEventEntry := TC_EVENTS.KukaRobot.DrivesEnableTimeout, xWithConfirmation := TRUE);
_fbAlarmWrongJobMirrored : FB_AlarmMessage(stEventEntry := TC_EVENTS.KukaRobot.WrongJobReadBack, xWithConfirmation := TRUE);
_fbAlarmWrongParamMirrored : FB_AlarmMessage(stEventEntry := TC_EVENTS.KukaRobot.WrongParamsReadBack, xWithConfirmation := TRUE);
END_VAR
VAR RETAIN
byCurrentGripper : BYTE := 2;
END_VAR END_VAR
]]></Declaration> ]]></Declaration>
<Implementation> <Implementation>
@@ -126,6 +131,16 @@ _fbAlarmRobotErrorResetTimeout(
xRelease:= xReleaseAlarms, xRelease:= xReleaseAlarms,
xAcknowledge:= xConfirmAlarms); xAcknowledge:= xConfirmAlarms);
// Handled by M_Starting
_fbAlarmWrongParamMirrored(
xRelease:= xReleaseAlarms,
xAcknowledge:= xConfirmAlarms);
// Handled by M_Starting
_fbAlarmWrongJobMirrored(
xRelease:= xReleaseAlarms,
xAcknowledge:= xConfirmAlarms);
// ======================= // =======================
// Check if robot is ready // Check if robot is ready
@@ -214,6 +229,16 @@ stJobs.wJobNrForRobot := E_KukaRobot_JobNumberRobot.NO_JOB;
stJobs.wFinishedJobNrFromPlc := E_KukaRobot_JobNumerPLC.NO_JOB;]]></ST> stJobs.wFinishedJobNrFromPlc := E_KukaRobot_JobNumerPLC.NO_JOB;]]></ST>
</Implementation> </Implementation>
</Method> </Method>
<Method Name="M_CalcGripperNr" Id="{282207f3-bc23-43ae-a217-8c6b456b1a5f}">
<Declaration><![CDATA[METHOD PRIVATE M_CalcGripperNr : BYTE
VAR_INPUT
byGripperSide : BYTE;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[M_CalcGripperNr := (byCurrentGripper - 1) + byGripperSide;]]></ST>
</Implementation>
</Method>
<Method Name="M_Clearing" Id="{e6152288-8c7d-4b38-bfbc-4f861d76ccc5}" FolderPath="StateMachine\"> <Method Name="M_Clearing" Id="{e6152288-8c7d-4b38-bfbc-4f861d76ccc5}" FolderPath="StateMachine\">
<Declaration><![CDATA[METHOD PROTECTED M_Clearing <Declaration><![CDATA[METHOD PROTECTED M_Clearing
VAR_INST VAR_INST
@@ -373,7 +398,7 @@ CASE _iSSM OF
// Timeout drives ready // Timeout drives ready
IF _tonTimeout.Q THEN IF _tonTimeout.Q THEN
stCtrl.bEnableAxes := 0; stCtrl.bEnableAxes := 0;
_fbAlarmDrivesEnableTimeout.xRelease := TRUE; _fbAlarmDrivesEnableTimeout.M_OneShot();
_tonTimeout(IN := FALSE); _tonTimeout(IN := FALSE);
_eCmd := E_PackMLCmd.ABORT; _eCmd := E_PackMLCmd.ABORT;
END_IF END_IF
@@ -392,7 +417,7 @@ CASE _iSSM OF
// Timeout reset errors // Timeout reset errors
IF _tonTimeout.Q THEN IF _tonTimeout.Q THEN
_fbAlarmRobotErrorResetTimeout.xRelease := TRUE; _fbAlarmRobotErrorResetTimeout.M_OneShot();
_tonTimeout(IN := FALSE); _tonTimeout(IN := FALSE);
_eCmd := E_PackMLCmd.ABORT; _eCmd := E_PackMLCmd.ABORT;
END_IF END_IF
@@ -420,6 +445,9 @@ END_CASE]]></ST>
</Method> </Method>
<Method Name="M_Starting" Id="{011f85d8-1225-4288-876f-918df6e4f235}" FolderPath="StateMachine\"> <Method Name="M_Starting" Id="{011f85d8-1225-4288-876f-918df6e4f235}" FolderPath="StateMachine\">
<Declaration><![CDATA[METHOD PROTECTED M_Starting <Declaration><![CDATA[METHOD PROTECTED M_Starting
VAR
_byGripperSideNrCalc : BYTE;
END_VAR
VAR_INST VAR_INST
_tonTimeout : TON; _tonTimeout : TON;
END_VAR]]></Declaration> END_VAR]]></Declaration>
@@ -427,9 +455,11 @@ END_VAR]]></Declaration>
<ST><![CDATA[CASE _iSSM OF <ST><![CDATA[CASE _iSSM OF
// Check job parameters // Check job parameters
0: 0:
IF (_stJobParams.byGripperNumber > 4) // Wrong gripper number _byGripperSideNrCalc := M_CalcGripperNr(_stJobParams.byGripperNumber);
IF (_stJobParams.byGripperNumber > 3) // Wrong gripper number
//OR (_stJobParams.byChuckNumber < 1) OR (_stJobParams.byChuckNumber > 6) // Wrong chuck number //OR (_stJobParams.byChuckNumber < 1) OR (_stJobParams.byChuckNumber > 6) // Wrong chuck number
OR (_stJobParams.byGripperSide < 1) OR (_stJobParams.byGripperSide > 6) // Wrong gripper side OR (_byGripperSideNrCalc < 1) OR (_byGripperSideNrCalc > 6) // Wrong gripper side
THEN THEN
_eCmd := E_PackMLCmd.ABORT; _eCmd := E_PackMLCmd.ABORT;
ELSE ELSE
@@ -474,9 +504,6 @@ END_VAR]]></Declaration>
// Chuck for etcher to load // Chuck for etcher to load
abyToolsAndPositions[1] := stJobParams.byChuckNumber; abyToolsAndPositions[1] := stJobParams.byChuckNumber;
// Write robot job number
stJobs.wJobNrForRobot := DINT_TO_WORD(_stJobParams.eJob);
// Safety reset timout fb // Safety reset timout fb
_tonTimeout(IN := FALSE); _tonTimeout(IN := FALSE);
@@ -484,17 +511,29 @@ END_VAR]]></Declaration>
// Check mirrored values // Check mirrored values
15: 15:
_tonTimeout(IN := TRUE, PT := T#5S);
IF abyMirrorToolsAndPositions[0] = stJobParams.byGripperNumber IF abyMirrorToolsAndPositions[0] = stJobParams.byGripperNumber
AND abyMirrorToolsAndPositions[1] = stJobParams.byChuckNumber AND abyMirrorToolsAndPositions[1] = stJobParams.byChuckNumber
AND abyMirrorToolsAndPositions[2] = stJobParams.byPlaceOnHotplate AND abyMirrorToolsAndPositions[2] = stJobParams.byPlaceOnHotplate
AND abyMirrorToolsAndPositions[3] = stJobParams.byPlaceOnCoolPlate AND abyMirrorToolsAndPositions[3] = stJobParams.byPlaceOnCoolPlate
THEN THEN
_tonTimeout(IN := FALSE);
_iSSM := 20; _iSSM := 20;
END_IF END_IF
IF _tonTimeout.Q THEN
_tonTimeout(IN := FALSE);
_fbAlarmWrongParamMirrored.M_OneShot();
_eCmd := E_PackMLCmd.STOP;
END_IF
// Wait for robot program start // Wait for robot program start
20: 20:
_tonTimeout(IN := TRUE, PT := T#15S); // Write robot job number
stJobs.wJobNrForRobot := DINT_TO_WORD(_stJobParams.eJob);
_tonTimeout(IN := TRUE, PT := T#5S);
// If job number is read back correct, go to next state // If job number is read back correct, go to next state
IF awJobStatesFromRobot[0] = stJobs.wJobNrForRobot THEN IF awJobStatesFromRobot[0] = stJobs.wJobNrForRobot THEN
@@ -506,6 +545,7 @@ END_VAR]]></Declaration>
// Timeout occured // Timeout occured
IF _tonTimeout.Q THEN IF _tonTimeout.Q THEN
_tonTimeout(IN := FALSE); _tonTimeout(IN := FALSE);
_fbAlarmWrongJobMirrored.M_OneShot();
_eCmd := E_PackMLCmd.ABORT; _eCmd := E_PackMLCmd.ABORT;
END_IF END_IF

View File

@@ -16,7 +16,7 @@ STRUCT
rThickness : REAL := 2.7; rThickness : REAL := 2.7;
// Gripper side (1 or 2) // Gripper side (1 or 2)
byGripperSide : BYTE := 3; byGripperSide : BYTE := 1;
// Scan QR Code during pickup from loading station // Scan QR Code during pickup from loading station
xScanQRCode : BOOL; xScanQRCode : BOOL;

View File

@@ -311,6 +311,11 @@
<SubType>Content</SubType> <SubType>Content</SubType>
</None> </None>
</ItemGroup> </ItemGroup>
<ItemGroup>
<PlaceholderResolution Include="BaseComponents">
<Resolution>BaseComponents, * (Heisig GmbH)</Resolution>
</PlaceholderResolution>
</ItemGroup>
<ProjectExtensions> <ProjectExtensions>
<PlcProjectOptions> <PlcProjectOptions>
<XmlArchive> <XmlArchive>