Standard Use Cases
The SM3_Basic
library contains superordinate function blocks which do not interact with the drive over the standard set/actual value interface. These function blocks provide commands or change the settings of the drive by reading or writing the parameters of the instance of AXIS_REF_SM3
.
Reinitializing a drive
If you changed the drive parameters at runtime, then you need to reinitialize the drive. Example: Change the scaling factor or the modulo period of rotary drives. By calling the SMC3_ReinitDrive
function block with a rising edge at the Execute
input, the wCommuncationState
parameter of the drive is reset and the complete start process of the drive is repeated.
Important
The reinitialization has to wait until the axis reaches the required state SMC_COMSTATE_BASE_COM_INITIALIZATION
or higher. Otherwise the error will output SMC_RAG_ERROR_AXIS_NOT_INITIALIZED
.
If the communication of a subordinate fieldbus is interrupted, then explicit reinitialization is no longer necessary for CODESYS SoftMotion version 4.18.0.0 and higher. The axis is automatically reinitialized as soon as fieldbus communication is restored. Before version 4.18.0.0: After the communication of the fieldbus was interrupted, an explicit call of SMC3_ReinitDrive
was necessary (error with SMC_DI_GENERAL_COMMUNICATION_ERROR
) as soon as the fieldbus communication has been restored.
Tip
The old behavior can be restored by setting the AutoRestart
input of the SMC_AxisChangeSettings
function block to SMC_AXIS_AUTORESTART_MODE.OFF
.
Switching a drive on and off
The bRegulatorOn
and bDriveStart
parameters of the AXIS_REF_SM3
function block control the power level and deceleration of a drive. Access is made by means of the MC_Power
function block.
To release the output stage, you need to set the bRegulatorOn
parameter of the MC_Power
function block. The drive reports the current status of this process via the bRegulatorRealState
output. If it is supported by the drive, a bRegulatorOn
reset during the movement will immediately deactivate the torque. In this case, the function block reports an error and sets the axes to the errorstop
state.
The bDriveStart
variable determines whether or not the drive is permitted to move. The current state of this parameter is located in bDriveStartRealState
.
If it is supported by the drive, a bDriveStart
parameter reset decelerates the drive with the configured ramp ("QuickStop") during the motion. After that, the drive halts at the reached position as long as set in bRegulatorOn
. The axis remains in the stopping
state as long as the "QuickStop" mechanism is active (bDriveStart
input = FALSE). If the drive has been moved by a function block before, then now it will display CommandAborted
. This does not apply to the MC_Stop
function block which reports an error and sets the axes to the errorstop
state.
Handling mechanical brakes
If it is supported by the drive, the eBrakeControl
variable can be set or reset by means of the SMC3_BrakeControl
function block. Three different modes are possible.
SMC3_BrakeSetState
SMC_BRAKE_AUTO
: The state of the brake is controlled by the drive.SMC_BRAKE_OPEN
: The brake is open.SMC_BRAKE_CLOSE
: The brake is closed.
The bBrakeClosedRealState
variable reports the current status of the brake.
From the point of view of SoftMotion, the control, as well as the state of the mechanical brake, does not depend on the state of the drive or the running motion.
Changing the controller mode
With the SMC_SetControllerMode
function block, you can switch between the different controller modes. The byControllerMode
and byRealControllerMode
parameters from AXIS_REF_SM3
represent the desired mode and the current mode of the controller.
| SoftMotion does not send cyclic data to the drive. This makes it possible to control the drive in other ways. |
| Torque/force control |
| Velocity control |
| Position control |
After writing the byControllerMode
variables, the current mode is checked until it matches the desired controller mode.
The function block calculates the set values until the new mode is confirmed by the drive. As soon as the drive confirms the new mode, the bDone
output is set and SMC_SetControllerMode
no longer writes the set values. This must be done using other function blocks.
Example: The bDone
output is connected to the Execute
input of a function block, such as MC_MoveVelocity
, MC_MoveAbsolute
, or MC_Halt
. Otherwise the axis stops immediately after the mode is changed. Note that the dead time is used to calculate the set position. For more information, see the following: Actual Values, Set Values, and Dead Time.
Homing (drive-controlled)
In SoftMotion, there are two ways to reference a drive:
Referencing by a controller in the PLC: This referencing is performed by calling the
SMC_Homing
function block. The reference signal has to be part of the I/O mapping of the control unit. At the time of referencing, the drive remains in control mode "position control". In general, this method is not particularly accurate because detecting the position (when the reference switch is activated) is based on the current positions obtained by the drive. As a result, the accuracy is limited by the communication cycle.Referencing by a controller in the drive: The reference switch is wired to the drive. Its position is detected faster and with higher accuracy. During the drive-controlled reference path, the drive is in another control mode, in which the drive is controlled by internal processes and does not follow the set values of the control unit. When the reference path ends, the drive is reset to its original control mode.
The
MC_Home
function block starts the drive-controlled reference path by settingfReference
andbStartReference
. In addition, the state ofAXIS_REF_SM3
(wState
) is set tohoming
. When the drive passes to the reference path (meaning that it no longer follows the values specified by the control unit), the drive sets the parameter toTRUE
. To display the end of the reference path, the driver sets the values ofbStartReference
andbStartReferenceRealState
toFALSE
.
Latching
You can detect the position of an axis in many ways, depending on the drive functions which the drive supports:
The drive detects the axis position itself (integrated or by switching on an external sensor). Because the actual position is transferred by the drive itself, the transfer time of the signal is minimal and precise.
The current position of the axis is determined independently of the drive and transferred to the controller via an input. Occurring latency of the controller input and the application cycle make this method less precise.
When the position of the drive itself is transferred, it is processed directly in the application typically by the respective driver depending on the manufacturer. To determine the position of this kind of axis, you can use the
MC_TouchProbe
function block. It allows for the recording of the axis position to a configurable trigger and within a position window. If the position is not transferred by the drive, then it has to be passed to the device driver of the drive, for example for control.For more information, see the following: Position Control on the Controller with SM_Drive_PosControl