SMC_SetControllerMode (FB)ΒΆ
FUNCTION_BLOCK SMC_SetControllerMode
This function block, if supported by the drive, can be used to switch to another controller mode.
Preconditions:
The axis must support the desired controller mode. In order to check this, see the documentation inside the corresponding SoftMotion driver library.
- The needed cyclic I/O data (e.g. for torque mode: set torque object)
must be mapped.
The axis must not be in the state
errorstop
,stopping
orhoming
when this function block is called. If it is in one of these states, the errorSMC_SCM_AXIS_IN_WRONG_STATE
will be reported.
Behavior when active:
This function block sets the
byControllerMode
(command value of operation mode) parameter of the axis and waits until the parameterbyRealControllerMode
(actual value of operation mode) reflects this value.If this does not happen during 1000 cycles, the function block will abort with an error.
When switching from a lower level to a higher level control mode (e.g. torque -> velocity, torque->position, velocity->position), the function block calculates the set values of the higher level signal. E.g. when switching from torque mode to position mode, the function block uses the actual position of the axis and adds an expected position distance, that compensates the time lag between actual and set values depending on the actual velocity and the dead time in cycles (
Axis.fSetActTimeLagCycles
). The dead time depends on the system (controller hardware, field bus, drive) and may need to be adjusted.
What function blocks have to be called after SMC_SetControllerMode
reports bDone
?
As soon as byRealControllerMode
reflects byControllerMode
, the
function block sets its Done
output and stops any action.
This means that the application program is immediately responsible for
calculating the correct set values beginning with this cycle.
E.g. an axis was torque controlled and shall be switched to position
control. The axis was still moving when the function block
SMC_SetControllerMode
was started.
During the switching time, the function block calculates the proper
values for the set position.
But as soon as it sets Done
, no function block continues to provide
set values and the axis would stop immediately and report an error.
Therefore e.g. a function block MC_Halt, MC_MoveVelocity, or
MC_MoveAbsolute could be triggered by the Done
output of
SMC_ControllerMode
and take over the control of the axis.
- InOut:
Scope
Name
Type
Initial
Comment
Inout
Axis
Input
bExecute
BOOL
Starts changing the controlling mode.
nControllerMode
SMC_position
Output
bDone
BOOL
TRUE
: Mode switching has been done.bBusy
BOOL
TRUE
: FB is not idle.bError
BOOL
TRUE
: Error has occured within function block.nErrorID
SMC_ERROR
Error identification