Fixed AxisPTP Busy and Done outputs

- Busy and Done outputs of FB_AxisPTP should now be correct
 - Also fixed same cycle new command possibility on FB_AxisPTP
This commit is contained in:
2026-03-13 13:42:09 +01:00
parent b769dbc3fe
commit a3f5aee81c
3 changed files with 49 additions and 13 deletions

View File

@@ -136,7 +136,7 @@
</System> </System>
<Plc> <Plc>
<Project GUID="{4E62D9E7-436C-457D-8DC4-82D2FEF91C96}" Name="BasicComponents" PrjFilePath="BasicComponents\BasicComponents.plcproj" TmcFilePath="BasicComponents\BasicComponents.tmc" ReloadTmc="true" AmsPort="851" FileArchiveSettings="#x000e" CopyTmcToTarget="true" CopyTpyToTarget="false" SymbolicMapping="true"> <Project GUID="{4E62D9E7-436C-457D-8DC4-82D2FEF91C96}" Name="BasicComponents" PrjFilePath="BasicComponents\BasicComponents.plcproj" TmcFilePath="BasicComponents\BasicComponents.tmc" ReloadTmc="true" AmsPort="851" FileArchiveSettings="#x000e" CopyTmcToTarget="true" CopyTpyToTarget="false" SymbolicMapping="true">
<Instance Id="#x08502000" TcSmClass="TComPlcObjDef" KeepUnrestoredLinks="2" TmcHash="{63E07965-E818-C034-FD63-DBA12806D3FA}" TmcPath="BasicComponents\BasicComponents.tmc"> <Instance Id="#x08502000" TcSmClass="TComPlcObjDef" KeepUnrestoredLinks="2" TmcHash="{CC57F9F8-FD4D-8A3D-E8DE-220E6C379AE4}" TmcPath="BasicComponents\BasicComponents.tmc">
<Name>BasicComponents Instance</Name> <Name>BasicComponents Instance</Name>
<CLSID ClassFactory="TcPlc30">{08500001-0000-0000-F000-000000000064}</CLSID> <CLSID ClassFactory="TcPlc30">{08500001-0000-0000-F000-000000000064}</CLSID>
<Vars VarGrpType="2" AreaNo="1"> <Vars VarGrpType="2" AreaNo="1">

Binary file not shown.

View File

@@ -212,9 +212,6 @@ IF _fbHalt.Error THEN
_xError := TRUE; _xError := TRUE;
END_IF END_IF
// Can the axis perform a new move command
_xCanExecNewCmd := (NOT _xBusy) AND _fbPower.Status AND (NOT _xError);
// ==================== // ====================
// Handle state machine // Handle state machine
// ==================== // ====================
@@ -224,6 +221,7 @@ CASE _eState OF
IF xEnable THEN IF xEnable THEN
_xEnable := TRUE; _xEnable := TRUE;
_xBusy := TRUE; _xBusy := TRUE;
_xDone := FALSE;
_eState := E_AXIS_PTP_STATE.WAIT_FOR_ENABLE; _eState := E_AXIS_PTP_STATE.WAIT_FOR_ENABLE;
END_IF END_IF
@@ -248,18 +246,15 @@ CASE _eState OF
E_AXIS_PTP_STATE.ENABLED: E_AXIS_PTP_STATE.ENABLED:
_xDone := FALSE;
IF _xExecuteMoveAbs THEN IF _xExecuteMoveAbs THEN
_xExecuteMoveAbs := FALSE; _xExecuteMoveAbs := FALSE;
_xBusy := TRUE;
_xStartMoveAbsolute := TRUE; _xStartMoveAbsolute := TRUE;
_eState := E_AXIS_PTP_STATE.MOVING_ABSOLUTE; _eState := E_AXIS_PTP_STATE.MOVING_ABSOLUTE;
END_IF END_IF
IF _xExecuteMoveRel THEN IF _xExecuteMoveRel THEN
_xExecuteMoveRel := FALSE; _xExecuteMoveRel := FALSE;
_xBusy := TRUE;
_xStartMoveRelative := TRUE; _xStartMoveRelative := TRUE;
_eState := E_AXIS_PTP_STATE.MOVING_RELATIVE; _eState := E_AXIS_PTP_STATE.MOVING_RELATIVE;
END_IF END_IF
@@ -267,27 +262,25 @@ CASE _eState OF
IF _xExecuteHoming THEN IF _xExecuteHoming THEN
_xExecuteHoming := FALSE; _xExecuteHoming := FALSE;
_xStartHomeing := TRUE; _xStartHomeing := TRUE;
_xBusy := TRUE;
_eState := E_AXIS_PTP_STATE.HOMING; _eState := E_AXIS_PTP_STATE.HOMING;
END_IF END_IF
IF _xExecuteMoveVelocity THEN IF _xExecuteMoveVelocity THEN
_xExecuteMoveVelocity := FALSE; _xExecuteMoveVelocity := FALSE;
_xStartMoveVelocity := TRUE; _xStartMoveVelocity := TRUE;
_xBusy := TRUE;
_eState := E_AXIS_PTP_STATE.MOVING_VELOCITY; _eState := E_AXIS_PTP_STATE.MOVING_VELOCITY;
END_IF END_IF
IF _xExecuteMoveModulo THEN IF _xExecuteMoveModulo THEN
_xExecuteMoveModulo := FALSE; _xExecuteMoveModulo := FALSE;
_xStartMoveModulo := TRUE; _xStartMoveModulo := TRUE;
_xBusy := TRUE;
_eState := E_AXIS_PTP_STATE.MOVING_MODULO; _eState := E_AXIS_PTP_STATE.MOVING_MODULO;
END_IF END_IF
IF (NOT xEnable) AND (NOT _xError) THEN IF (NOT xEnable) AND (NOT _xError) THEN
_xEnable := FALSE; _xEnable := FALSE;
_xBusy := TRUE; _xBusy := TRUE;
_xDone := FALSE;
_eState := E_AXIS_PTP_STATE.WAIT_FOR_DISABLE; _eState := E_AXIS_PTP_STATE.WAIT_FOR_DISABLE;
END_IF END_IF
@@ -452,6 +445,8 @@ CASE _eState OF
_xError := TRUE; _xError := TRUE;
END_CASE END_CASE
// Can the axis perform a new move command
_xCanExecNewCmd := (NOT _xBusy) AND _fbPower.Status AND (NOT _xError);
// Copy internal buffers to outputs // Copy internal buffers to outputs
xEnabled := _fbPower.Status; xEnabled := _fbPower.Status;
@@ -469,6 +464,10 @@ END_VAR]]></Declaration>
<Implementation> <Implementation>
<ST><![CDATA[IF _xBusy THEN <ST><![CDATA[IF _xBusy THEN
_xExecuteHalt := TRUE; _xExecuteHalt := TRUE;
_xDone := FALSE;
xDone := FALSE;
_xBusy := TRUE;
xBusy := TRUE;
END_IF]]></ST> END_IF]]></ST>
</Implementation> </Implementation>
</Method> </Method>
@@ -480,10 +479,17 @@ VAR_INPUT
END_VAR]]></Declaration> END_VAR]]></Declaration>
<Implementation> <Implementation>
<ST><![CDATA[IF _xCanExecNewCmd THEN <ST><![CDATA[IF _xCanExecNewCmd THEN
_xBusy := TRUE; _xCanExecNewCmd := FALSE;
_lrHomingPos := lrHomingPosition; _lrHomingPos := lrHomingPosition;
_eHomingMode := eHomingMode; _eHomingMode := eHomingMode;
_xExecuteHoming := TRUE; _xExecuteHoming := TRUE;
_xDone := FALSE;
xDone := FALSE;
_xBusy := TRUE;
xBusy := TRUE;
M_Homing := TRUE; M_Homing := TRUE;
ELSE ELSE
M_Homing := FALSE; M_Homing := FALSE;
@@ -497,9 +503,16 @@ VAR_INPUT
END_VAR]]></Declaration> END_VAR]]></Declaration>
<Implementation> <Implementation>
<ST><![CDATA[IF _xCanExecNewCmd THEN <ST><![CDATA[IF _xCanExecNewCmd THEN
_xBusy := TRUE; _xCanExecNewCmd := FALSE;
_lrTargetPosition := lrTargetPos; _lrTargetPosition := lrTargetPos;
_xExecuteMoveAbs := TRUE; _xExecuteMoveAbs := TRUE;
_xDone := FALSE;
xDone := FALSE;
_xBusy := TRUE;
xBusy := TRUE;
M_MoveAbs := TRUE; M_MoveAbs := TRUE;
ELSE ELSE
M_MoveAbs := FALSE; M_MoveAbs := FALSE;
@@ -515,10 +528,17 @@ VAR_INPUT
END_VAR]]></Declaration> END_VAR]]></Declaration>
<Implementation> <Implementation>
<ST><![CDATA[IF _xCanExecNewCmd THEN <ST><![CDATA[IF _xCanExecNewCmd THEN
_xBusy := TRUE; _xCanExecNewCmd := FALSE;
_lrTargetPosition := lrTargetPos; _lrTargetPosition := lrTargetPos;
_eMoveDirection := eMoveDirection; _eMoveDirection := eMoveDirection;
_xExecuteMoveModulo := TRUE; _xExecuteMoveModulo := TRUE;
_xDone := FALSE;
xDone := FALSE;
_xBusy := TRUE;
xBusy := TRUE;
M_MoveModulo := TRUE; M_MoveModulo := TRUE;
ELSE ELSE
M_MoveModulo := FALSE; M_MoveModulo := FALSE;
@@ -532,9 +552,17 @@ VAR_INPUT
END_VAR]]></Declaration> END_VAR]]></Declaration>
<Implementation> <Implementation>
<ST><![CDATA[IF _xCanExecNewCmd THEN <ST><![CDATA[IF _xCanExecNewCmd THEN
_xCanExecNewCmd := FALSE;
_xBusy := TRUE; _xBusy := TRUE;
_lrRelativeDistance := lrRelDist; _lrRelativeDistance := lrRelDist;
_xExecuteMoveRel:= TRUE; _xExecuteMoveRel:= TRUE;
_xDone := FALSE;
xDone := FALSE;
_xBusy := TRUE;
xBusy := TRUE;
M_MoveRel := TRUE; M_MoveRel := TRUE;
ELSE ELSE
M_MoveRel := FALSE; M_MoveRel := FALSE;
@@ -549,9 +577,17 @@ END_VAR
]]></Declaration> ]]></Declaration>
<Implementation> <Implementation>
<ST><![CDATA[IF _xCanExecNewCmd THEN <ST><![CDATA[IF _xCanExecNewCmd THEN
_xCanExecNewCmd := FALSE;
_xBusy := TRUE; _xBusy := TRUE;
_xExecuteMoveVelocity := TRUE; _xExecuteMoveVelocity := TRUE;
_eMoveDirection := eDirection; _eMoveDirection := eDirection;
_xDone := FALSE;
xDone := FALSE;
_xBusy := TRUE;
xBusy := TRUE;
M_MoveVelocity := TRUE; M_MoveVelocity := TRUE;
ELSE ELSE
M_MoveVelocity := FALSE; M_MoveVelocity := FALSE;