First bigger step to automation

- Aligned X and Y NC Axis with aligner camera coordination system
- Added robot plc jobs and feedback
- Began Meca500 robot interface
- Changed hotplate control to slow PWM
- PackML statemachine now starts in aborted state
- Fixed StateML start method
This commit is contained in:
2026-02-04 19:31:13 +01:00
parent 677c03d51d
commit c1850f780b
29 changed files with 1249 additions and 374 deletions

View File

@@ -4,12 +4,17 @@
<Declaration><![CDATA[FUNCTION_BLOCK FB_Etcher EXTENDS FB_PackMLGeneric
VAR_INPUT
xOpenDoor : BOOL;
xEnableVacuum : BOOL;
xOpenChuckClamp : BOOL;
xEjectChuck : BOOL;
xReleaseManualMode : BOOL;
xConfirmAlarms : BOOL;
stHMIInterface : ST_Etcher_HMIInterface;
END_VAR
VAR_OUTPUT
xDoorOpen : BOOL;
xChuckClampOpen : BOOL;
xVacuumEnabled : BOOL;
END_VAR
VAR
_fbValveDoor : FB_Valve('Door');
@@ -18,39 +23,39 @@ VAR
xHasOpenFeedback := TRUE,
timTimeoutOpen := T#5S,
timTimeoutClose := T#5S);
_stDoorHMIInterface : ST_HMI_VALVE_DATA;
_fbClampingLeft : FB_Valve('Clamping left');
_stValveClampingLeftCfg : ST_ValveConfig := (
_fbUnlockLeft : FB_Valve('Clamping left');
_stValveUnlockLeftCfg : ST_ValveConfig := (
xHasClosedFeedback := TRUE,
xHasOpenFeedback := TRUE,
timTimeoutOpen := T#5S,
timTimeoutClose := T#5S);
_stClampingLeftHMIInterface : ST_HMI_VALVE_DATA;
_fbClampingRight : FB_Valve('Clamping right');
_stValveClampingRightCfg : ST_ValveConfig := (
_fbUnlockRight : FB_Valve('Clamping right');
_stValveUnlockRightCfg : ST_ValveConfig := (
xHasClosedFeedback := TRUE,
xHasOpenFeedback := TRUE,
timTimeoutOpen := T#5S,
timTimeoutClose := T#5S);
_stClampingRightHMIInterface : ST_HMI_VALVE_DATA;
_fbClampingFront : FB_Valve('Clamping front');
_fbEjectFront : FB_Valve('Clamping front');
_stValveClampingFrontCfg : ST_ValveConfig := (
xHasClosedFeedback := TRUE,
xHasOpenFeedback := TRUE,
timTimeoutOpen := T#5S,
timTimeoutClose := T#5S);
_stClampingFrontHMIInterface : ST_HMI_VALVE_DATA;
_fbClampingBack : FB_Valve('Clamping back');
_stValveClampingBackCfg : ST_ValveConfig := (
_fbEjectBack : FB_Valve('Clamping back');
_stValveEjectBackCfg : ST_ValveConfig := (
xHasClosedFeedback := TRUE,
xHasOpenFeedback := TRUE,
timTimeoutOpen := T#5S,
timTimeoutClose := T#5S);
_stClampingBackHMIInterface : ST_HMI_VALVE_DATA;
_rtEjectChuckCmd : R_TRIG;
_tpEjectChuck : TP;
@@ -59,6 +64,8 @@ VAR
// Sensors
// =======
_xVacuumOk AT %I* : BOOL;
// Spinner vibration sensor
_xVibrationSensor AT %I* : BOOL;
@@ -66,7 +73,7 @@ VAR
// Actuators
// =========
_xDisableVacuum AT %Q* : BOOL;
END_VAR
]]></Declaration>
<Implementation>
@@ -77,7 +84,9 @@ _fbValveDoor(
stValveConfig:= _stValveDoorCfg,
xReleaseManualMode:= FALSE,
xConfirmAlarms:= xConfirmAlarms,
stHMIInterface:= _stDoorHMIInterface);
stHMIInterface:= stHMIInterface.stDoorHMIInterface);
xDoorOpen := _fbValveDoor.IsOpen;
// Chuck
_rtEjectChuckCmd(CLK := xEjectChuck);
@@ -87,40 +96,45 @@ ELSE
_tpEjectChuck(IN := FALSE);
END_IF
_fbClampingLeft(
_fbUnlockLeft(
xAutomaticOpen:= xOpenChuckClamp,
xReleaseErrors:= TRUE,
stValveConfig:= _stValveClampingLeftCfg,
xReleaseManualMode:= FALSE,
stValveConfig:= _stValveUnlockLeftCfg,
xReleaseManualMode:= xReleaseManualMode,
xConfirmAlarms:= xConfirmAlarms,
stHMIInterface:= _stClampingLeftHMIInterface);
stHMIInterface:= stHMIInterface.stUnlockLeftHMIInterface);
_fbClampingRight(
_fbUnlockRight(
xAutomaticOpen:= xOpenChuckClamp,
xReleaseErrors:= TRUE,
stValveConfig:= _stValveClampingRightCfg,
xReleaseManualMode:= FALSE,
stValveConfig:= _stValveUnlockRightCfg,
xReleaseManualMode:= xReleaseManualMode,
xConfirmAlarms:= xConfirmAlarms,
stHMIInterface:= _stClampingRightHMIInterface);
stHMIInterface:= stHMIInterface.stUnlockRightHMIInterface);
_fbClampingFront(
_fbEjectFront(
xAutomaticOpen:= _tpEjectChuck.Q,
xReleaseErrors:= TRUE,
stValveConfig:= _stValveClampingFrontCfg,
xReleaseManualMode:= FALSE,
xReleaseManualMode:= xReleaseManualMode,
xConfirmAlarms:= xConfirmAlarms,
stHMIInterface:= _stClampingFrontHMIInterface);
stHMIInterface:= stHMIInterface.stEjectFrontHMIInterface);
_fbClampingBack(
_fbEjectBack(
xAutomaticOpen:= _tpEjectChuck.Q,
xReleaseErrors:= TRUE,
stValveConfig:= _stValveClampingBackCfg,
xReleaseManualMode:= FALSE,
stValveConfig:= _stValveEjectBackCfg,
xReleaseManualMode:= xReleaseManualMode,
xConfirmAlarms:= xConfirmAlarms,
stHMIInterface:= _stClampingBackHMIInterface);
stHMIInterface:= stHMIInterface.stEjectBackHMIInterface);
_xDisableVacuum := (NOT xEnableVacuum);
// Call base sm
SUPER^();]]></ST>
SUPER^();
// Copy internal signals to output
xVacuumEnabled := _xVacuumOk;]]></ST>
</Implementation>
<Method Name="FB_Init" Id="{afcda70c-3e52-4a32-9ca9-670a6b854f24}">
<Declaration><![CDATA[//FB_Init is always available implicitly and it is used primarily for initialization.

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<DUT Name="ST_Etcher_HMIInterface" Id="{b42cab98-5a22-4703-a464-a4d1f5cdc177}">
<Declaration><![CDATA[TYPE ST_Etcher_HMIInterface :
STRUCT
stDoorHMIInterface : ST_HMI_VALVE_DATA;
stUnlockLeftHMIInterface : ST_HMI_VALVE_DATA;
stUnlockRightHMIInterface : ST_HMI_VALVE_DATA;
stEjectFrontHMIInterface : ST_HMI_VALVE_DATA;
stEjectBackHMIInterface : ST_HMI_VALVE_DATA;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<DUT Name="ST_Meca_JointSet" Id="{11c9caa0-793d-42a4-a6d6-9b5ea59d2923}">
<Declaration><![CDATA[{attribute 'pack_mode' := '1'}
TYPE ST_Meca_JointSet :
STRUCT
rSubIndex001 : REAL;
rSubIndex002 : REAL;
rSubIndex003 : REAL;
rSubIndex004 : REAL;
rSubIndex005 : REAL;
rSubIndex006 : REAL;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<DUT Name="ST_Meca_MotionStatus" Id="{5e335d40-97f1-424a-b3e3-1b2de304decf}">
<Declaration><![CDATA[{attribute 'pack_mode' := '1'}
TYPE ST_Meca_MotionStatus :
STRUCT
uiReachedCheckPointId : UINT;
uiDiscardedCheckpointId : UINT;
uiMoveID : UINT;
uiFIFOSpace : UINT;
bPaused : BIT;
bEOB : BIT;
bEOM : BIT;
bFIFOCleared : BIT;
PStop2 : BIT;
bExcessiveTorque : BIT;
uiOfflineProgramID : UINT;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<DUT Name="ST_Meca_RobotStatus" Id="{2543bfc1-49aa-4184-94d9-b32f02498fcc}">
<Declaration><![CDATA[{attribute 'pack_mode' := '1'}
TYPE ST_Meca_RobotStatus :
STRUCT
bBusy : BIT;
bActivated : BIT;
bHomed : BIT;
bSimActivated : BIT;
bBrakesEngaged : BIT;
bRecoveryMode : BIT;
bEStop : BIT;
bCollisionStatus : BIT;
bWorkZoneStatus : BIT;
uiError : UINT;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<POU Name="FB_Mecademics" Id="{c81cf0ae-3f01-4427-918b-0d3e1c93ae01}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_Mecademics
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[]]></ST>
</Implementation>
</POU>
</TcPlcObject>