Relinked everything with HAL and Execute pattern

- Switched to BaseConponents V2.0
This commit is contained in:
2026-03-19 19:40:01 +01:00
parent b515ca8588
commit eb2317ad91
25 changed files with 3558 additions and 2721 deletions

View File

@@ -12,17 +12,13 @@ VAR_OUTPUT
xVacuumEnabled : BOOL;
END_VAR
VAR_IN_OUT
stIO : ST_Aligner_IO;
stHMIInterface : ST_HMI_Aligner;
END_VAR
VAR
_fbValveVacuum : FB_Valve('Vacuum');
_stValveVacuumConfig : ST_ValveConfig;
xVacuumOk AT %I* : BOOL;
diXOffset AT %I* : DINT;
diYOffset AT %I* : DINT;
_fbXAxis : FB_AxisPTP;
_fbYAxis : FB_AxisPTP;
@@ -40,7 +36,8 @@ END_VAR
lrAcceleration:= 0,
lrDecelleration:= 0,
lrJerk:= 0,
xConfirmAlarms:= xConfirmAlarms);
xConfirmAlarms:= xConfirmAlarms,
stIO := stIO.stAxisX);
_fbYAxis(
xInvertCalibrationCam:= FALSE,
@@ -51,7 +48,8 @@ _fbYAxis(
lrAcceleration:= 0,
lrDecelleration:= 0,
lrJerk:= 0,
xConfirmAlarms:= xConfirmAlarms);
xConfirmAlarms:= xConfirmAlarms,
stIO := stIO.stAxisY);
_fbValveVacuum(
xAutomaticOpen:= xEnableVacuum,
@@ -59,7 +57,8 @@ _fbValveVacuum(
stValveConfig:= _stValveVacuumConfig,
xReleaseManualMode:= _xReleaseManualMode,
xConfirmAlarms:= xConfirmAlarms,
stHMIInterface:= stHMIInterface.stVacuumValve);
stHMIInterface:= stHMIInterface.stVacuumValve,
stIO := stIO.stValveVacuum);
// =============================
@@ -70,7 +69,7 @@ SUPER^(stPackMLHMIInterface := stHMIInterface.stStationCmds);
_rtExecute(CLK:= xExecute, Q=> _xStartAlign);
// Handle enable disable vacuum command
xVacuumEnabled := xVacuumOk;]]></ST>
xVacuumEnabled := stIO.i_xVacuumOk;]]></ST>
</Implementation>
<Method Name="FB_init" Id="{5048e086-25a4-4fbb-bf29-7a016bcf2277}">
<Declaration><![CDATA[//FB_Init is always available implicitly and it is used primarily for initialization.
@@ -114,23 +113,64 @@ VAR_INST
_uiRuns : UINT;
_tonWait : TON;
_xAxisXMoved : BOOL;
_xAxisYMoved : BOOL;
END_VAR]]></Declaration>
<Implementation>
<ST><![CDATA[CASE _iSSM OF
// Start first alignment
// Calculate delta to move
0:
_deltaX := DINT_TO_REAL(diXOffset) * -0.001;
_deltaY := ((DINT_TO_REAL(diYOffset) * 0.001) - 37.5) * -1;
// Middle of camera is X = 0 AND Y = 37.5
_deltaX := DINT_TO_REAL(stIO.i_diXOffset) * -0.001;
_deltaY := ((DINT_TO_REAL(stIO.i_diYOffset) * 0.001) - 37.5) * -1;
IF (ABS(_deltaX) < 10.0) AND (ABS(_deltaY) < 10.0) AND (NOT _fbXAxis.xError) AND (NOT _fbYAxis.xError) THEN
_fbXAxis.M_MoveRel(lrRelDist := _deltaX);
_fbYAxis.M_MoveRel(lrRelDist := _deltaY);
_xAxisXMoved := FALSE;
_xAxisYMoved := FALSE;
_iSSM := 10;
END_IF
// Start axis movement
5:
// Start X-Axis movement
IF (NOT _xAxisXMoved) THEN
CASE _fbXAxis.M_MoveRel(lrRelDist := _deltaX) OF
E_CmdResult.ACCEPTED:
_xAxisXMoved := TRUE;
E_CmdResult.BUSY:
;
E_CmdResult.REJECTED,
E_CmdResult.ERROR:
M_CmdAbort();
END_CASE
END_IF
// Start Y-Axis movement
IF (NOT _xAxisYMoved) THEN
CASE _fbYAxis.M_MoveRel(lrRelDist := _deltaY) OF
E_CmdResult.ACCEPTED:
_xAxisYMoved := TRUE;
E_CmdResult.BUSY:
;
E_CmdResult.REJECTED,
E_CmdResult.ERROR:
M_CmdAbort();
END_CASE
END_IF
// Wait for all axes to be started
IF _xAxisXMoved AND _xAxisYMoved THEN
_iSSM := 10;
END_IF
// Wait for axis movements to be done
10:
IF (NOT _fbXAxis.xBusy) AND (NOT _fbYAxis.xBusy) THEN
IF _fbXAxis.xDone AND _fbYAxis.xDone THEN
_uiRuns := _uiRuns + 1;
// Do alignment twice because of backlash in aligner station
@@ -141,7 +181,7 @@ END_VAR]]></Declaration>
END_IF
END_IF
// Wait 1 second to stabelise reading
// Wait some time to stabelize reading
20:
_tonWait(IN := TRUE, PT := T#2S);
IF _tonWait.Q THEN
@@ -157,44 +197,132 @@ END_CASE]]></ST>
</Method>
<Method Name="M_Resetting" Id="{015c2bf3-1e45-46dd-93fe-a1f154bfd906}">
<Declaration><![CDATA[METHOD PROTECTED M_Resetting
VAR
_xFailed : BOOL;
VAR_INST
_xAxisXEnabled : BOOL;
_xAxisYEnabled : BOOL;
_xAxisXHomed : BOOL;
_xAxisYHomed : BOOL;
_xAxisXMoved : BOOL;
_xAxisYMoved : BOOL;
END_VAR]]></Declaration>
<Implementation>
<ST><![CDATA[CASE _iSSM OF
// Reset axis flags
0:
// Enable axes
_fbXAxis.xEnable := TRUE;
_fbYAxis.xEnable := TRUE;
_xAxisXEnabled := FALSE;
_xAxisYEnabled := FALSE;
_xAxisXHomed := FALSE;
_xAxisYHomed := FALSE;
_xAxisXMoved := FALSE;
_xAxisYMoved := FALSE;
IF _fbXAxis.xEnabled AND _fbYAxis.xEnabled THEN
IF (NOT _fbXAxis.xHomed) THEN
IF (NOT _fbXAxis.M_Homing(lrHomingPosition := BC.Tc2_MC2.DEFAULT_HOME_POSITION)) THEN
_xFailed := TRUE;
END_IF
END_IF
IF (NOT _fbYAxis.xHomed) THEN
IF (NOT _fbYAxis.M_Homing(lrHomingPosition := BC.Tc2_MC2.DEFAULT_HOME_POSITION)) THEN
_xFailed := TRUE;
END_IF
END_IF
_iSSM := 5;
IF (NOT _xFailed) THEN
_iSSM := 10;
ELSE
M_CmdAbort();
END_IF
// Enable axes
5:
// Enable X-Axis
IF (NOT _xAxisXEnabled) THEN
CASE _fbXAxis.M_Enable() OF
E_CmdResult.ACCEPTED:
_xAxisXEnabled := TRUE;
E_CmdResult.BUSY:
;
E_CmdResult.REJECTED,
E_CmdResult.ERROR:
M_CmdAbort();
END_CASE
END_IF
10:
// Home axes
// Enable Y-Axis
IF (NOT _xAxisYEnabled) THEN
CASE _fbYAxis.M_Enable() OF
E_CmdResult.ACCEPTED:
_xAxisYEnabled := TRUE;
E_CmdResult.BUSY:
;
E_CmdResult.REJECTED,
E_CmdResult.ERROR:
M_CmdAbort();
END_CASE
END_IF
// Check if both could be enabled
IF _xAxisXEnabled AND _xAxisYEnabled THEN
_iSSM := 10;
END_IF
// Wait for axes to be enabled
6:
IF _fbXAxis.xDone AND _fbYAxis.xDone THEN
IF (NOT _fbXAxis.M_MoveAbs(0.0)) OR (NOT _fbYAxis.M_MoveAbs(0.0)) THEN
M_CmdAbort();
END_IF
_iSSM := 10;
END_IF
IF _fbXAxis.xError OR _fbYAxis.xError THEN
M_CmdAbort();
END_IF
// Check axis homed state
7:
IF _fbXAxis.xHomed THEN
_xAxisXHomed := TRUE;
END_IF
IF _fbYAxis.xHomed THEN
_xAxisYHomed := TRUE;
END_IF
_iSSM := 10;
// Check if both axes are homed
10:
// Home X-Axis
IF (NOT _xAxisXHomed) AND (NOT _fbXAxis.xHomed) THEN
CASE _fbXAxis.M_Homing() OF
E_CmdResult.ACCEPTED:
_xAxisXHomed := TRUE;
E_CmdResult.BUSY:
;
E_CmdResult.REJECTED,
E_CmdResult.ERROR:
M_CmdAbort();
END_CASE
END_IF
// Home Y-Axis
IF (NOT _xAxisYHomed) AND (NOT _fbYAxis.xHomed) THEN
CASE _fbYAxis.M_Homing() OF
E_CmdResult.ACCEPTED:
_xAxisYHomed := TRUE;
E_CmdResult.BUSY:
;
E_CmdResult.REJECTED,
E_CmdResult.ERROR:
M_CmdAbort();
END_CASE
END_IF
IF _xAxisYHomed AND _xAxisYHomed THEN
// Goto wait for homing state
_iSSM := 15;
ELSIF _fbXAxis.xHomed AND _fbYAxis.xHomed THEN
// Goto move to 0 state
_iSSM := 20;
END_IF
// Wait for homing to be done
15:
IF (_fbXAxis.xDone OR _fbXAxis.xHomed) AND (_fbYAxis.xDone OR _fbYAxis.xHomed) THEN
_iSSM := 20;
END_IF
@@ -202,7 +330,44 @@ END_VAR]]></Declaration>
M_CmdAbort();
END_IF
// Start moving to position 0,0
20:
// Enable X-Axis
IF (NOT _xAxisXMoved) THEN
CASE _fbXAxis.M_MoveAbs(lrTargetPos := 0.0) OF
E_CmdResult.ACCEPTED:
_xAxisXMoved := TRUE;
E_CmdResult.BUSY:
;
E_CmdResult.REJECTED,
E_CmdResult.ERROR:
M_CmdAbort();
END_CASE
END_IF
// Enable Y-Axis
IF (NOT _xAxisYMoved) THEN
CASE _fbYAxis.M_MoveAbs(lrTargetPos := 0.0) OF
E_CmdResult.ACCEPTED:
_xAxisYMoved := TRUE;
E_CmdResult.BUSY:
;
E_CmdResult.REJECTED,
E_CmdResult.ERROR:
M_CmdAbort();
END_CASE
END_IF
// Check if both could be enabled
IF _xAxisXMoved AND _xAxisYMoved THEN
_iSSM := 25;
END_IF
25:
// Move to 0 position
IF _fbXAxis.xDone AND _fbYAxis.xDone THEN
M_StateComplete();