.

Release Notes: CODESYS SoftMotion 4.18.0.0

Key Issue Type Summary Resolution Note
SM-5781 Bug

Possible position jump when starting a master slave movement immediately after homing or changing the controller mode of the master axis

Fixed
SM-5777 Bug

Potentially wrong configuration information when using Kin_Wrist2 in a coupled kinematics

Fixed
SM-5765 Bug

SMC3_PersistPositionSingleturn: wrong position for finite axis after power on in certain cases

Cannot Reproduce [[GENERAL]]
Has been fixed with SM-5495
SM-5646 Bug

SMC_SmoothMerge: A G0 element should not be converted to a line after a merging block

Fixed
SM-5644 Bug

Errors in description of SMC3_PersistPosition and SMC3_PersistPositionSingleturn

Fixed
SM-5643 Bug

Jump in axis position after SMC3_ReinitDrive

Fixed
SM-5629 Bug

IDE freezes when editing a Cams tappet table and then switching to another tab

Fixed
SM-5613 Bug

Axis group: Jump in torque when a movement starts after a load has been attached while waiting

Fixed
SM-5611 Bug

SMC_GCodeViewer: the value of expressions of type STRING is not displayed

Fixed
SM-5587 Bug

SoftMotion: Cut & Paste of whole controller device adds unexpected object to device tree

Fixed
SM-5579 Improvement

New SoftMotion Driver for BoschRexroth CtrlXDrive SoE

Fixed
SM-5576 Bug

CNC,SMC_SmoothAddAxes: SMC_SAA_SMOOTHAREA_TOO_LARGE" when using G71-G70 commands with G75

Cannot Reproduce [[GENERAL]]
No Steps To Repeat => Cannot Reproduce
SM-5571 Improvement

SMC_MoveContinuousAbsolute, SMC_MoveContinuousRelative: Improve documentation for EndVelocityDirection = MC_DIRECTION.current

Fixed
SM-5570 Bug

BasicMotion: Some movement function blocks no longer log their instance path when an error occurs

Fixed
SM-5563 Bug

BasicMotion, Blending: No error is reported if the execution order is wrong

Fixed [[COMPATIBILITY_INFORMATION]]
If the execution order of the two movement FBs involved in the blending is wrong, the error code SMC_FB_WASNT_CALLED_DURING_MOTION (i.e. the second movement FB was not called after the first one was Done) is now reported.
In addition, the instance path of the movement FB that was not called is now logged.
SM-5561 Improvement

SMC_ETC_InterpolateAxisPosition: support for 32 Bit EtherCAT timestamps

Fixed [[GENERAL]]
There is a new function SMC_ETC_Timestamp_32bitTo64bit that converts a 32bit timestamp to a 64bit timestamp. The 64bit timestamp can be used as an input for SMC_ETC_InterpolateAxisPosition.
SM-5548 Bug

Cam Editor: it is not possible to enter integer values in scientific notation

Fixed
SM-5540 Bug

Cam Editor: the split container heights shrink when closing and reopen the cam editor

Fixed
SM-5538 Improvement

Disallow assignment of AXIS_REF_SM3 objects

Fixed [[COMPATIBILITY_INFORMATION]]
When instantiating SMC_Virtual_Axis, SMC_FreeEncoder, or SMC_Logical_Axis inside a function block, the compiler attribute 'no_assign' has to be added to this function block to avoid a warning.
SM-5534 Improvement

SM3_Drive_ETC_Beckhoff_EL70xx: device description for EL7037 is missing

Fixed
SM-5532 Bug

SMC_SmoothAddAxes might get stuck on G75

Fixed
SM-5531 Bug

SMC_FreeEncoder (and other encoder axes): Master/Slave FBs are not working with an encoder as the master

Fixed [[COMPATIBILITY_INFORMATION]]
The behavior of encoder axes such as FREE_ENCODER_REF has changed in case MC_Power is called on the encoder axis. (Calling MC_Power on an encoder axis is not necessary.)

Previously, function blocks like MC_CamIn, MC_GearIn, MC_GearInPos, or MC_Phasing used the set position of the encoder axis if MC_Power was called. If MC_Power was not called, they used the actual position. The set position was computed based on the actual position and velocity with a dead-time compensation.

The new behavior is that the actual position is always used, regardless of whether MC_Power is called.
If dead-time compensation is required, a logical axis below the encoder axis can be used.

The axis state of an encoder axis now is always "standstill".

The set position of encoder axes should not be used.
SM-5530 Bug

SMC_FB_WASNT_CALLED_DURING_MOTION is reported for a slave axis when a super-imposed movement is commanded on the master axis

Fixed
SM-5526 Improvement

Axis group: Aborting in the direction of the current movement should work without reversal

Fixed
SM-5524 Improvement

Improve diagnostics of mapping editor

Fixed
SM-5521 Improvement

Create example project for ReadNCFile2 with token modifiers

Fixed
SM-5520 Improvement

Improve moving cam points in the cam graph editor

Fixed
SM-5515 Bug

MC_CamIn: SMC_CI_MASTER_OUT_OF_SCALE after using MC_SetPosition

Fixed
SM-5514 Improvement

SM3_Drive_ETC_Kollmorgen_AKD2G_AKD_MKD: update the Esi Data AKD2G-SPE-02-14-00-000.xml

Fixed [[GENERAL]]
devdescs have been integrated
SM-5513 Improvement

SM3_Drive_ETC_Mitsubishi_MelServo: update Esi data

Fixed [[GENERAL]]
devdescs have been integrated
SM-5512 Improvement

SM3_Drive_ETC_KeDrive_D3: update KEBA_D3xx.xml ESI data

Fixed [[GENERAL]]
devdescs have been integrated
SM-5507 Bug

SMC3_PersistPositionSingleturn: potentially wrong position for modulo axes after turning the drive off and on

Cannot Reproduce [[GENERAL]]
Fixed with SM-5495
SM-5505 Bug

SMC_ReadNCFile2 uses internal constant for input array sizes

Fixed
SM-5499 Bug

CamEditor: Segment and points might not be selectable in the Velocity/Acceleration/Jerk view in the cam graph tab

Fixed
SM-5495 Improvement

SMC3_PersistPositionSingleturn: allow encoder ranges that are not a power of 2

Fixed
SM-5490 Improvement

Create an example on how to use custom G-code functions

Fixed
SM-5487 Improvement

SMC_VisuCamEditor: Synchronization between bus and visu task

Fixed
SM-5485 Improvement

SMC_StartupDrive: Set the default value of MC_Power.Enable to FALSE

Fixed [[COMPATIBILITY_INFORMATION]]
The default value of the Enable input of the MC_Power instance in SMC_StartupDrive has been changed to FALSE (before TRUE).
SM-5477 Bug

Acyclic communication: acyclic commands are not aborted properly in certain scenarios

Fixed
SM-5476 Bug

Kin_Staubli_TX60_S1_R4: Wrong machine coordinate system origin

Fixed
SM-5474 Bug

CiA 402 based drivers: timeout for configuration phase can cause problem if many slaves are used

Fixed
SM-5473 Bug

SM3_Drive_ETC_SoE_Standard: timeout for configuration phase can cause problem if many slaves are used

Fixed
SM-5472 Improvement

CNC: allow for more than 512 subprograms, larger expressions in the G-Code, a deeper call nesting, and a larger number of local variables and subprogram parameters

Fixed
SM-5467 Bug

SM3_Drive_CAN_KEB_SD, SM3_Drive_ETC_Panasonic_MINAS_A6B: Wrong placeholder in Project Information

Fixed
SM-5465 Improvement

MC_TouchProbe: new output Active that indicates that rising edges on the trigger input are detected

Fixed
SM-5457 Improvement

MC_Home: reset mapping from user units to increments so that position 0 user units corresponds to 0 increments

Fixed [[COMPATIBILITY_INFORMATION]]
When executing MC_Home, the mapping from user units to increments will be reset so that after homing, 0 increments correspond to 0 user units. All possible offsets that stem from modulo handling, 32-bit overflow handling, or calling MC_SetPosition, are reset.
SM-5456 Bug

SM3_Drive_ETC_Yaskawa_Sigma7: limit switch handling not robust if digital inputs (60FD) are mapped or multi-axis devices are used

Fixed
SM-5454 Bug

Cam Editor: Jerk boundaries keep their values after switching from Poly7 to Poly5

Fixed
SM-5451 Bug

SM3_Drive_ETC_SoE_Standard: possible jump in set position at the start of SMC3_ReinitDrive for modulo axes

Fixed [[GENERAL]]
Accident caused by RC-9734.
SM-5450 Bug

Cam Editor: Selecting cam points is not always possible at the top and bottom of a graph

Won't Fix [[GENERAL]]
Won't fix. Only half of the cam point at the top and bottom of the graph is displayed. However, it is possible to select and move the visible half of the cam point.
SM-5448 Improvement

SMC_SetCustomRampTypes: Deprecate custom ramp types

Fixed [[COMPATIBILITY_INFORMATION]]
The function block SMC_SetCustomRampTypes has been marked as obsolete. It will be removed in a future version. Please note that the functionality of custom ramp types had already been removed with SoftMotion 4.11.0.0.
SM-5441 Bug

MC_MoveAbsolute/Relative: Error SMC_MOVING_WITHOUT_ACTIVE_MOVEMENT reported when using trapezoid or sinsquare velocity profile and extremely high Deceleration

Fixed
SM-5436 Bug

Cam Editor: Sometimes changing the segment type does not work on the first try

Fixed
SM-5435 Bug

Cam Editor: Undo/Redo not working when changing the segment type in the cam table view

Fixed
SM-5434 Bug

SMC_Drive_ETC_Schneider_Lexium32: problems with limit switches with latest firmware

Fixed
SM-5432 Bug

SM3_Drive_ETC_SoE_Standard: MC_TouchProbe not working

Cannot Reproduce [[GENERAL]]
Fixed by SM-4902
SM-5431 Bug

SM3_Drive_ETC_SoE_Standard: bStartReferenceRealState is not TRUE during homing

Fixed
SM-5424 Improvement

AXIS_REF_SM3: automatically initialize the axis after it has been enabled using reconfigure

Fixed [[COMPATIBILITY_INFORMATION]]
With SoftMotion 4.18.0.0, the fact that the slave device is disabled during initialization of the SoftMotion axis no longer leads to an error. Instead, the initialization is stopped until the slave device is enabled. As soon as the device is enabled, the initialization of the SoftMotion axis resumes automatically. Using SMC3_ReinitDrive is no longer necessary after enabling the slave device.
SM-5423 Improvement

Create example for how to use SMC_DigitalForecast_HighPrecision

Fixed
SM-5422 Improvement

SMC_DigitalCamSwitch_HighPrecision: support forecast and subcycle accuracy

Fixed
SM-5420 Bug

MC_CamIn reports CommandAborted if the Master is already moving and updated after MC_CamIn

Fixed
SM-5419 Improvement

SMC_ETC_InterpolateAxisPosition: add time delay functionality

Fixed
SM-5418 Improvement

SM3_Drive_ETC_BRC_CtrlXDrive_SoE: update firmware to Bosch_Rexroth_AG_crtlX_DRIVE_EtherCAT_SoE_20240301

Fixed [[GENERAL]]
Drive has been integrated and ESI files have been updated
SM-5417 Improvement

SM3_Drive_ETC_BRC_CtrlXDrive_CoE: update firmware to Bosch_Rexroth_AG_crtlX_DRIVE_EtherCAT_CoE_20240301

Fixed [[GENERAL]]
devdescs have been integrated
SM-5409 Bug

Motion Devdescs: The motion devdescs are outdated and have no Devdiag instance.

Fixed [[COMPATIBILITY_INFORMATION]]
For some SoftMotion slave devices, a separate FB instance of the slave device called "<slave device name>_diag" was generated that had to be used for device diagnosis. After updating such devices to version >= 4.18.0.0, this separate FB instance is no longer generated. Instead, the FB instance called <slave device name> can be used for device diagnosis, too.
SM-5408 Bug

SMC_TRAFO_Polar, SMC_TRAFO_Scara2, SMC_TRAFO_Scara3: Invalid conversion from rad to degree

Fixed
SM-5405 Bug

MC_Reset aborts all movements even if there is no error to be reset

Fixed
SM-5404 Improvement

Document the trigger time more precisely

Fixed
SM-5402 Bug

AXIS_REF_SM3: SMC3_ReinitDrive not working if the slave device has been disabled at startup

Fixed [[GENERAL]]
With SoftMotion 4.18.0.0, it is no longer necessary to use SMC3_ReinitDrive after enabling a previously disabled slave device. See SM-5424.

In particular, if the slave device was disabled at startup, it now suffices to enable the slave device. The SoftMotion axis will automatically reinitialize.
SM-5399 Bug

Kin_Bipod_Rotary: AxesToCartesian might return without setting outputs

Fixed
SM-5396 Bug

AXIS_REF_ETC_BASE_SM3, AXIS_REF_CAN_SM3: rework resetting errors during startup

Fixed [[COMPATIBILITY_INFORMATION]]
MC_Reset now waits until an ongoing error reaction of the SoftMotion axis is finished before switching from errorstop to standstill and returning Done. This means that the axis will first decelerate to standstill before the reset finishes.
SM-5393 Bug

SM3_Drive_ETC_Yaskawa_Sigma7: MC_Home may fail due to limited range of home offset (0x607C:00)

Fixed
SM-5392 Improvement

Update example projects to SM 4.18.0.0

Fixed
SM-5391 Bug

SMC_NCInterpreter with SMC_GCodeViewer: DYNCALL sentences might be displayed more than once in the SMC_GCodeViewer

Fixed
SM-5389 Bug

Exception when using MC_MoveAbsolute

Fixed
SM-5386 Bug

SMC_SmoothMerge: Missing variable initialization leads to failed merge attempts

Fixed
SM-5373 Improvement

Remove outdated and redundant CHM-based Online Help from AddOn package

Fixed
SM-5371 Bug

SMC_CamRegister: The dead time compensation is not correctly converted to cam units

Cannot Reproduce [[GENERAL]]
Fixed with SM-5013.
SM-5367 Bug

SMC_SmoothMerge: When changing direction a spline with infinite curvature can be created

Fixed
SM-5359 Epic

Cam Improvements step 2

Fixed [[GENERAL]]
* Segment types Modified Sine and Inclined Sine are now supported.
* There are new visualization elements SMC_Visu_CamEditor and SMC_Visu_CamDisplayer that allow displaying and editing cams with the new segment types from a visualization.
SM-5357 Bug

SMC_DisplayNCCallStack: the main program name is wrong

Fixed
SM-5356 Bug

Cam-Editor: Compile format "XYVA": changing an existing cam segment to Poly7 does not change compile format to "generic segments"

Fixed
SM-5355 Bug

SMC_ControlAxisByPos: Position jump if bAvoidGaps is set and active and the iStatus is changed to IPO_INIT or IPO_UNKNOWN

Fixed
SM-5349 Improvement

AXIS_REF_SM3: consider bus bandwidth when converting from user units to increments

Fixed [[COMPATIBILITY_INFORMATION-OEM]]
The internal variable AXIS_REF_SM3.dwBusBandwidth has been removed. A new internal variable AXIS_REF_SM3.usiBusBitWidth has been added. Applications using public POUs are not affected by the change.
SM-5346 Bug

SMC_SmoothPath/SMC_RoundPath and SMC_ToolRadiusCorr cannot be used together, as both use the D-word

Fixed
SM-5344 Bug

SMC_SolveTwoRotJoints: Fix typo in documentation

Fixed
SM-5339 Epic

Robotics: Improved logging step 2

Fixed [[GENERAL]]
* An axis group now logs additional information for some common error codes.
* It is now possible to enable logging detailed information messages for movements and other commands an axis group performs.
SM-5280 Improvement

Generic CiA 402 driver (EtherCAT and CAN): add support for bit 2,3 and 10,11 of touch probe function

Fixed
SM-5263 Bug

SMC_CamRegister: EndOfProfile evaluation is not correct

Cannot Reproduce [[GENERAL]]
Fixed with SM-5013.
SM-5218 Bug

MC_MoveAdditive, MC_SetPosition: MC_MoveAdditive moves to the wrong position if MC_SetPosition is called while the preceding movement is active

Fixed
SM-5207 Bug

AXIS_REF_POSCONTROL: No error is reported when the dead time compensation exceeds 20 cycles

Fixed [[COMPATIBILITY_INFORMATION]]
The dead time (parameter D) has an allowed range of [1..20] cycles.
Before SoftMotion version 4.18.0.0, the dead time was implicitly limited to this range.
Starting with SoftMotion version 4.18.0.0, an error is reported, both in the editor and by axis during runtime, if the dead time is outside the allowed range.
SM-5201 Bug

SMC_TrackSetValues and SMC_TrackAxis don't support override on the controlled axis

Fixed [[COMPATIBILITY_INFORMATION]]
SMC_TrackSetValues and SMC_TrackAxis now support an override on the controlled axis. The override will be applied to the Velocity, Acceleration, Deceleration, and Jerk inputs of the function blocks.

Existing applications where one of the two function blocks was used on an axis that had an active override will now behave differently.
SM-5153 Improvement

SM3_Robotics_Visu: Remove reference to CAA Behaviour Model

Fixed
SM-5113 Improvement

Improve usability of the cam editor

Duplicate [[General]]
Duplicates SM-3529 and SM-5454
SM-5109 Bug

CNC-Editor: Warning C0564 with compile mode SMC_CNC_REF and variables in G-Code

Fixed
SM-5079 Bug

Software position lag error reaction does not work

Fixed
SM-5045 Bug

SM3_Drive_ETC_BRC_CtrlXDrive_CoE: jump in position if maximum travel range in drive is not 2^32

Fixed
SM-5006 Bug

SMC_Interpolator: The output vecActTangent is not updated after switching from IPO_INIT to IPO_CONSTANT

Fixed
SM-4966 Bug

SMC_GEOINFO: Fix wrong comment of piStartPos

Fixed
SM-4951 Bug

SM3_Depictor: SMC_Depictor_Bipod_Arm: invalid expressions

Fixed
SM-4950 Bug

SMC_SmoothPath,SMC_RoundPath: bExecute=FALSE does not reset the outputs when an error has occured

Fixed
SM-4928 Bug

Nanotec PD4C: actual velocity differs considerably from the set velocity

Fixed
SM-4926 Bug

MC_GearIn: possible verlocity overshoot when using ramp type quadratic smooth

Cannot Reproduce [[GENERAL]]
Issue cannot be reproduced anymore. It was fixed with SM-4977.
SM-4920 Bug

CNC Editor: Wrong error message for Ellipse (G8, G9) with invalid value of R

Fixed
SM-4780 Improvement

SM3_Drive_ETC_SoE_Standard: use the same fair mechanism for acyclic communication as used for CoE

Fixed
SM-4697 Improvement

Beckhoff EL7201: Add the steps to configure the motor parameters in the drive documentation

Fixed
SM-4624 Bug

AutoMoveGantry Tracking: Path deviation too high caused by wrong planner time

Fixed
SM-4493 Bug

Robotics: if more than 16 axis groups are used in the same task, no planning calls are done

Fixed
SM-4155 Bug

SMC_GCodeViewer does not work with sub programs

Fixed [[COMPATIBILITY_INFORMATION]]
The input SMC_GCodeViewer.iActObjectSourceNo has been replaced by the new input interpolatedObjectId.
All CNC applications using SMC_GCodeViewer need to be adapted to assign the new input instead of the old one.
A new output SMC_Interpolator.actObjectId has been added.
Existing calls of the form
gcodeViewer(...
iActObjectSourceNo := interpolator.iActObjectSourceNo, ...)
have to be changed to
gcodeViewer(...
interpolatedObjectId:= interpolator.actObjectId, ...).
SM-4060 Improvement

AcyclicCom: The SDO should be reset directly during a reinit of the drive

Duplicate [[GENERAL]]
Duplicates SM-5477
SM-3973 Bug

SMC_NCInterpreter/SMC_Decoder: bAppend=TRUE is not working correctly

Fixed [[COMPATIBILITY_INFORMATION]]
The function blocks SMC_NCInterpreter and SMC_NCDecoder now return the new error SMC_CNC_APPEND_ON_FIRST_RISING_EDGE if bAppend = TRUE on the first rising edge of bExecute.
In previous versions, this usage was not handled correctly and would lead to incomplete initialization.
SM-3529 Bug

Cam Editor: Unintentional change of segment type (Line, Poly5) in Cam table

Fixed
SM-3378 Improvement

Softmotion Ethercat drives: Not all drives' ETCSlave can be reached via device diagnostic

Duplicate [[GENERAL]]
Duplicates SM-5409
SM-3213 Bug

SM3_Drive_ETC_SoE_Standard: Wrong use of AXIS_REF_ETC_SM3 leads to compile errors

Fixed
SM-2865 Improvement

CNC-Visu SMC_PathCopierFile: Improve FB to support large CNC files

Fixed
SM-2702 Improvement

SoftMotion base driver: automatic restart after fieldbus slave goes back to operational

Fixed [[COMPATIBILITY_INFORMATION]]
With CODESYS SoftMotion 4.18.0.0, the behavior of SoftMotion axes after a loss of communication to the servo drive has changed.
Now, an automatic reinitialization is performed as soon as the communication is established again. Before, an explicit call to SMC3_ReinitDrive had to be performed.
An example for a loss of communication is that the cable to one of the drives is unplugged.
The function block SMC_AxisChangeSettings can be used to restore the old behavior, setting the parameter bAutoRestart to FALSE.
SM-2510 Bug

MC_CamIn: Behavior of slave defective, every second time a jump to 0 instead of 180 occurs

Won't Fix [[GENERAL]]
The behavior of MC_CamIn is correct and as intended. Here is a detailed breakdown what happens:
* The cam table starts at master position 0 and slave position 180 and ends at master position 360 and slave position 360.
* The slave axis is a modulo axis with period 360.
* The master moves in positive direction.
* The MC_CamTableSelect is called with Periodic = TRUE.
* The slave follows the cam table until the end of the cam is reached at master position 360, slave position 360.
* Since Periodic is set to TRUE, execution of the cam table is restarted from the current position.
* The start of the cam table is implicitly offset by 180 on the slave axis to avoid a jump in the slave position (the cam slave position starts at 180, but the current slave position is 360)
* Since the modulo period of the slave is 360, the slave position wraps to 0.
SM-2441 Improvement

The SDO timeout for SoftMotion Light axes should be configurable

Fixed
SM-2216 Bug

MC_MoveSuperImposed: Jump in position if MC_MoveSuperImposed is restarted while active and there is no underlying movement

Cannot Reproduce [[GENERAL]]
Fixed with SM-5089
SM-1976 Epic

Robotics: more detailed error context

Duplicate [[GENERAL]]
Duplicates SM-5339
SM-1838 Bug

SMC_ReadNCFile2 'bBusy' Bit active after error

Duplicate [[GENERAL]]
Duplicates SM-1957.
SM-1517 Improvement

Add simple kinematic transformation (from SM3_Transformation) to example applications

Duplicate [[GENERAL]]
Duplicates SM-2326.
SM-1154 Improvement

All drives: quadratic velocity mode should be the default

Fixed
SM-518 Bug

SMC_AvoidLoop: wrong behavior in certain case

Won't Fix [[GENERAL]]
Fixed by SM-1176 and SM-5257.

To avoid the first problem, please replace SMC_ToolCorr by SMC_ToolRadiusCorr. To avoid the second problem, either turn off loop avoidance with G60 before the last movement that closes the loop. Or configure a precision (e.g. of 0.001 units) in the input SMC_ReadNCFile2.dPrecision. (For offline use in the CNC editor, the precision can be set in the CNC properties.)
SM-515 Improvement

Axis group: CP-Algorithm should support different values for maximum acceleration and deceleration

Fixed [[COMPATIBILITY_INFORMATION]]
Before SoftMotion 4.18.0.0 it was not possible to have different values for the Acceleration and Deceleration limits:
* The minimum of the configured Acceleration/Deceleration was used for both the path Acceleration and Deceleration of Continuous Path movements (MC_MoveLinear.../MC_MoveCircular...).
* The configured Acceleration was used both for the axis Acceleration and Deceleration limit. The Deceleration was ignored.

Starting with SoftMotion 4.18.0.0, different values for Acceleration and Deceleration are supported, both for path and axis limits.

Applications that were created before SoftMotion 4.18.0.0 may behave differently after an update to SoftMotion 4.18.0.0 if they have movements with different values for Acceleration and Deceleration.
SM-123 Improvement

SM: CNC: generate FB that allows to define a path with strings

Duplicate [[GENERAL]]
Already implemented in SoftMotion 4.12.0.0 with SM-3681
SM-117 Bug

In some cases, a value is read by SDO although the underlying object is mapped by PDO (e.g. MC_ReadActualTorque)

Fixed
SM-109 Improvement

Use namespace to access elements of CAADeviceDiagnosis library

Duplicate [[GENERAL]]
Duplicates SM-5005.