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>
<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">
<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>
<CLSID ClassFactory="TcPlc30">{08500001-0000-0000-F000-000000000064}</CLSID>
<Vars VarGrpType="2" AreaNo="1">

Binary file not shown.

View File

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