3.6u3 -> 3.7 Release Note (EN)

3.6u3 -> 3.7 Release Note (EN)

Release Date.

Jun 29, 2026

Applicable WMX3 Version.

  • WMX3 3.7

Update List.


WMX3 Version

WMX3 Modules

Module.

Previous.

Latest.

Module.

Previous.

Latest.

WMX3Api

3.6.0.0

3.7.0.0

AdvancedMotion

3.6.0.3

3.7.0.0

ApiBuffer

3.6.1.0

3.7.0.0

Compensation

3.6.0.2

3.7.0.0

CoreMotion

3.6.2.0

3.7.0.0

CyclicBuffer

3.6.1.0

3.7.0.0

Event

3.6.0.3

3.7.0.0

IO

3.6.0.3

3.7.0.0

Log

3.6.1.0

3.7.0.0

PMMotion

3.6.0.2

3.7.0.0

UserMemory

3.6.0.2

3.7.0.0

EcPlatform

3.6.3.0

3.7.0.0

CCLinkPlatform

3.6.1.0

3.7.0.0

M4Platform

3.6.2.0

3.7.0.0

SimuPlatform

3.6.0.2

3.7.0.0

WMX3 Main Utility

Utility.

Previous.

Latest.

Utility.

Previous.

Latest.

Agent

5.3.3630.52264

6.0.3700.61561

EcConfigurator

5.3.3630.52131

6.1.3700.61321

MotionScope

5.3.3630.52245

6.4.3700.61403

NetConfigurator

5.3.3630.52381

6.1.3700.61311

WOS

5.3.3630.52401

6.1.3700.61801

WMX3 Sub Utility

Utility.

Previous.

Latest.

Utility.

Previous.

Latest.

WMX3Console

3.6.0.0

N/A

ConfigureNIC

1.0.0.2

DongleViewer

1.0.0.0

PacketAnalyzer

5.3.3630.52241

6.1.3700.60191

SimuConfigurator

1.0.0.0

WMX3Manager

1.0.0.0

N/A

wit

1.7.0

N/A

NOTE : The WMX3Console utility has been removed starting from version 3.7.

NOTE : WMX3Manager has been removed starting from version 3.7.

NOTE : wit (WMX Intuitive TUI tool) has been removed starting from version 3.7.


WMX3 Engine

Type.

Description.

Type.

Description.

New Features
NEW

  1. Added StartClosedLoopTo* and Start*ToClosedLoop functions for comprehensive closed-loop transition control (position, velocity, torque for single/multi-axis).

  2. Added the Ramp class for rate-based and time-based configurations to support ClosedLoop setpoint ramping.

  3. Added rampRate to ClosedLoopPIDParam and closedLoopSetpoint to CoreMotionAxisStatus.

  4. Added ClosedLoopOptions supporting per-call overrides of PID gains, PID parameters, feedback/feedforward data sources, and ramp. Fields are tracked via bitmask so that 0 is a valid override value, and HasAny*Override helpers are provided for category-level inspection.

  5. Added a limitCompensation parameter to SyncParam to cap the maximum velocity offset that can be applied during synchronization compensation.

  6. Added the GetCumulativeBlockCount function to retrieve the block count that can be used to identify API calls in API buffer error logs. Unlike ApiBuffer::GetStatus, this function is synchronized with API buffer processing and is guaranteed to always return the latest block number even when called immediately after adding an API call to the API buffer.

  7. Refactored the E-CAM API to a master-slave channel architecture. Added ECAMMasterData, ECAMSlaveData, and related options classes. Added SetECAMMaster, SetECAMSlave, GetECAMMaster, and GetECAMSlave functions to configure master and slave channels independently.

  8. Added ClearECAMMaster and ClearECAMSlave functions for explicit E-CAM channel cleanup with cascaded deletion support. Clearing a master channel automatically clears all dependent slave channels.

  9. Added StartDynamicPos, StartDynamicMov, StartDynamicLinearIntplPos, StartDynamicLinearIntplMov, SetDynamicPos, GetDynamicPos functions along with their overloaded variants. When called from within an API buffer, these functions allow the motion target value to be dynamically changed before execution.

  10. Added the Max Torque Limit Ramp feature. This feature prevents sudden position jumps when the maximum torque limit is applied immediately during rapid acceleration, by applying the torque limit gradually (ramp) for smooth control. Added SetMaxTrqLimitRampRate, GetMaxTrqLimitRampRate, SetMaxTrqLimitRampEnable, and GetMaxTrqLimitRampEnable functions. Added enableMaxTrqLimitRamp, maxTrqLimitRampRate, and posFErrorInstantMaxTrqLimitThreshold parameters to AxisParam.

  11. Added the Keep Mech End Torque Limit feature. This feature allows the low torque limit value used during mechanical end detection to be maintained even after detection is complete. The default value is true, automatically maintaining a safe torque limit after mechanical end detection. Added the keepMechEndTorqueLimit parameter to HomeParam. Supported in all mechanical end detection modes (MechEnd, MechEndHS, MechEndLS).

  12. Added the Motion Slowdown Factor feature. This is a time-scaling feature that uniformly adjusts the speed of all motion operations per interrupt cycle. All motions can be uniformly decelerated without modifying individual motion profile parameters. The slowdown factor acts as a time divider: factor=1 is normal speed, factor=2 is half speed, factor=N is 1/N speed. Added SetMotionSlowdownParam and GetMotionSlowdownParam functions.

  13. Added several function pointers with the "Rt" suffix to the CoreMotion Pub API (available in WMX3 SDK). These functions do not cause blocking and can be safely called within a cyclic process: startHomeSingleAxisRt, startHomeMultiAxisRt, startPosRt, startLinearIntplPosRt, startCircularIntplPosRt, decStopSingleAxisRt, execQuickStopSingleAxisRt. Also added getAPIAxisLockNoWait, getAPIVirtAxisLockNoWait, and getAPIMiscLockNoWait function pointers for acquiring API locks without blocking.

  14. Extended the status information provided via CE_AXIS_STATUS_PUB in the CoreMotion Pub API (available in WMX3 SDK).

  15. Changed CCLinkPlatform so that when UserDef=1, the slave list is configured as defined in cclink_network.def. User-defined slave IDs and slave order are always applied to CCLinkMasterInfo. As a result of this change, the HaltOnNetworkDiff parameter has been removed and SetSlaveViewMode has been added.

  16. Added packetLoss and packetDelayed to CCLink statistics information.

  17. Extended timestamps for data log and memory log functions. Added "system time (epoch time)" to the available timestamp set. Data log now outputs all three timestamps (cycle counter, time elapsed since engine start, and system time) to the log file (changed from the previous behavior of selecting only one). Memory log now returns all three timestamps (changed from the previous behavior of returning only the cycle counter). Added the cycleCounterOnly option to the LogChannelOptions class. The LogApiLogInput and LogApiLogOutput classes have been removed as timestamp selection is no longer necessary.

  18. Added the cumulativeBlockCount member to the ApiBufferStatus class. This status represents the total number of blocks added to the buffer since the API buffer was last cleared.

  19. Added the canRewind member to the ApiBufferStatus class. This allows users to check whether Rewind can be executed on an API buffer channel before actually calling it.

  20. Added the Linux OS - Preempt RT version, which shares the same API interface as the Windows OS - RTX version, to the product lineup. The following API and class specifications have been updated accordingly: return type of all C++ API functions long __stdcallint __stdcall, SleepAtEngine argument type unsigned longunsigned int, StartEngine argument type DWORD_PTRlong long, RestartEngine argument type DWORD_PTRlong long, DeviceStatistics::sumApiTime type LARGE_INTEGERlong long, DeviceStatistics::sumRtTime type LARGE_INTEGERlong long, DeviceStatistics::sumFuncProcTime type LARGE_INTEGERlong long.

  21. Added memory log buffer expansion capability. Added the bufferExpandFactor field to MemoryLogOptions to allow the ring buffer per channel to be expanded beyond its default size. The effective buffer size is maxMemLogBufferSize multiplied by bufferExpandFactor. Range: 1 to maxMemLogExpandFactor. Default is 1 (preserves existing behavior). Set via SetMemoryLogOption and read via GetMemoryLogOption. If SetMemoryLogOption is called with a different factor for a channel in Open + IDLE state, the per-module ring buffer is immediately reallocated and preserved samples are discarded.

  22. Added the ClosedLoopFeedforwardParam axis parameter and the corresponding closedLoopFeedforward log/status fields. The feedforward data source (analog data or axis data) provides additional contribution to the servo output command independently of the PID controller. Added a new closedLoopFeedforward boolean to CoreMotionAxisLogInput to enable feedforward output logging. The corresponding double value is exposed in CoreMotionAxisLogOutput and CoreMotionAxisStatus to observe the feedforward contribution.

  23. Added Max Motor Speed Unit Numerator and Max Motor Speed Unit Denominator parameters to the CoreMotion module. These parameters allow the Max Motor Speed value to be converted to the unit expected by the servo driver before transmission. The value transmitted to the driver is calculated as "Max Motor Speed × Numerator / Denominator". Using the default value of 1 applies no conversion, behaving identically to previous versions. Added single-axis APIs SetMaxMotorSpeed Unit and GetMaxMotorSpeedUnit to directly update the conversion ratio without going through SetAxisParam.

  24. Added gain as a multiplicative scale applied before offset/saturation to feedback and feedforward axis data sources (gain * ReadAxisData() + offset clamped to [min, max]). Per-call overrides are set via SetFeedbackAxisGain / SetFeedforwardAxisGain. The convenience setters SetFeedbackAxisData / SetFeedforwardAxisData now accept a default gain of 1.0. Specifying a gain of 0 for an active axis data source is rejected by validation.

  25. Added Monitor mode, virtual slave, and I/O extension support to EtherCAT (EcPlatform), and restructured the EcPlatform log model.

Spec Changes
IMP

  1. Renamed the class from Command to ClosedLoopCommand. Also renamed the APIs from StartController to StartClosedLoop and from StopController to StopClosedLoop.

  2. Changed so that calling SetCommandPos and SetFeedbackPos at the same timing now returns an error. Due to the nature of these two functions, calling them at the same timing can cause issues.

  3. For synchronization compensation, only slave axis parameters are used, not master axis parameters. This applies to synchronization gain, synchronization width, and compensation limit parameters.

  4. Changed the default value of the Limit Switch Type (LS Type) parameter from None to Dec. This is to minimize position error when the limit switch is released.

  5. Clarified the conditional behavior of API buffer control functions Execute, Halt, Clear, and Rewind. When called on a channel that is currently in recording state, these functions return the AlreadyRecordingForSpecifiedChannel error. When called on a channel that is not recording, they are either recorded to the API buffer if another channel is recording, or executed immediately if recording is not active.

  6. Added a blockIndex parameter (default 0) to the Rewind function to enable rewinding to a specified block index. This allows partial re-execution from a specified position within the buffer contents. Added the RewindBlockIndexOutOfRange error code returned when the specified block index exceeds the current block count.

  7. Renamed multi-channel API buffer functions from ExecuteMultipleChannel, HaltMultipleChannel, ClearMultipleChannel, RewindMultipleChannel to overloaded Execute, Halt, Clear, Rewind functions using the ApiBufferChannelSelection parameter.

  8. Renamed error code NotGateNodeHasChildren to NotGateNodeInvalidChildCount.

  9. Changed the second parameter of FlowIf (multi-condition overload) from ApiBufferCondition* to ApiBufferMultiCondition* to allow multi-condition trees to be used in wait clauses as well. Existing code passing ApiBufferCondition* as the second argument must be updated.

  10. Added a Wait function overload with the ApiBufferMultiCondition parameter for multi-condition tree wait logic using logical gate nodes (AND, OR, XOR, NOT).

  11. Added new error codes XorGateNodeInvalidChildCount and InvalidConditionType.

  12. Inserted the RewindBlockIndexOutOfRange error code at position 0x12006, shifting the integer values of subsequent error codes by 1 (e.g., AlreadyRecordingForSpecifiedChannel changed from 73734 to 73735). Users who have hardcoded error code values in log parsers or diagnostic tools must update accordingly.

  13. Standardized the naming convention of Closed-Loop API member functions from camelCase to PascalCase. Ramp (e.g., fromRateFromRate, fromTimeFromTime), ClosedLoopOptions (e.g., setRampSetRamp, setControlOutputOffsetSetControlOutputOffset), ClosedLoopCommand (e.g., setTriggerSetTrigger, setOptionsSetOptions). The PIDGain wrapper class has been removed. Use SetPIDGain or field-specific setters (SetProportionalGain, SetIntegralGain, SetDerivativeGain) instead.

  14. Consolidated torque command classes into a single TrqCommand class using the builder pattern. The following v3.6 classes have been removed: TriggerTrqCommand, RampTimeTrqCommand, TriggerRampTimeTrqCommand, RampRateTrqCommand, TriggerRampRateTrqCommand. Use the SetTrigger, SetRamp, SetRampRate, SetRampTime, SetMaxMotorSpeed, and Clear methods of the consolidated TrqCommand instead. The 60 StartTrq / StartPosToTrq / StartVelToTrq overload declarations have been consolidated into 6 unified signatures with TriggerEvents* pTriggerEvents = NULL as the last parameter.

    For multi-axis overloads, all commands in a batch must share the same trigger configuration. If configurations do not match, InvalidTriggerArgument is returned. Trigger conditions can be specified via either the command object's SetTrigger method or the pTriggerEvents parameter. Specifying both returns InvalidTriggerArgument. The following v3.6 functions have been replaced by the consolidated functions:

    1. StartRampTimeTrq, StartRampRateTrqStartTrq (use SetRamp);

    2. StartPosToRampTimeTrq, StartPosToRampRateTrqStartPosToTrq (use SetRamp);

    3. StartVelToRampTimeTrq, StartVelToRampRateTrqStartVelToTrq (use SetRamp).

  15. Changed the torque ramp time unit from interrupt cycle count (unsigned int) to seconds (double). In v3.6, ramp time was specified in interrupt cycle count via rampCycleTime. In v3.7, ramp time is specified in seconds via Ramp::FromTime. To convert existing v3.6 values: timeSeconds = rampCycleTime * interruptPeriod_ms / 1000.0 (interruptPeriod_ms is the interrupt period in milliseconds). For example, if the interrupt period is 1 ms and the v3.6 ramp cycle time is 500 cycles, the v3.7 equivalent is 500 * 1 / 1000.0 = 0.5 seconds.

  16. Moved torque limit and max motor speed setting functions from the Torque and Velocity classes to the Config class. These are axis-level parameters that affect all motion modes. The following functions have been moved:

  17. Renamed the SyncGroup member allowAmpErrorServoOn to allowServoOnDuringAmpError.

  18. Converted unsigned char fields with boolean semantics to bool across all module API headers (CoreMotion, AdvancedMotion, Event, IO, Log, ApiBuffer, UserMemory, WMX3Api, CCLink). Fields representing true/false states (e.g., enable, invert, clockwise, suspend) have been changed to bool. Fields used as sign multiplication operators (e.g., rotationalAxisPolarity, localCenterOfRotationDirection, axisPolarity, axisCoordinateFlip) remain as char. All user code must be recompiled with the new headers.

  19. Changed the WMX3APIFUNC return type from long to int. On Windows/MSVC, both long and int are 32-bit, so there is no ABI change. User code that explicitly stores return values as long must be updated to int.

  20. Changed the SleepAtEngine parameter type from unsigned long to unsigned int. On Windows/MSVC, both types are 32-bit, so there is no ABI change.

  21. Removed the :long underlying type specifier from CLR enum class declarations. On Windows/MSVC, long (32-bit) is the same as the default int (32-bit), so there is no change to the .NET metadata type (System.Int32).

  22. Standardized abbreviation casing in public API identifiers of E-CAM, Closed-Loop PID, I/O, and Simulator modules to comply with C++ abbreviation naming conventions (abbreviations in PascalCase identifiers are always fully uppercase; in camelCase identifiers, fully uppercase in middle or end positions). This is a mechanical identifier rename with no behavioral change, but all user code must be updated to the new names and recompiled.

  23. Changed the epoch (reference time) represented by the timestamp member of ApiLogInfo.

  24. Consolidated velocity command classes into a single VelCommand class using the builder pattern. The following v3.6 classes have been removed: TimedVelCommand, TriggerVelCommand, TriggerTimedVelCommand. Use the SetTrigger, SetRunTime, SetMaxTrqLimit, and Clear methods of the consolidated VelCommand instead. The 32 StartVel / StartPosToVel / StartTrqToVel overload declarations have been consolidated into 6 unified signatures. For multi-axis StartVel, all commands in a batch must share the same trigger configuration. If configurations do not match, InvalidTriggerArgument is returned. Trigger conditions can be specified via either the command object's SetTrigger method or the pTriggerEvents parameter. Specifying both returns InvalidTriggerArgument.