v3.4u2 to v3.4u3 Change Log (August 4, 2020)
Utility and Installer Changes
Updated WMX3 Console as follows.
Modified toolbar for ease of use.
Fixed WMX3 Console axis numbers under the Control menu.
Added user offset options to Log window and Axis Position display window.
Modified interface of Sync Group window.
Modified unlicensed axes to be displayed as UNLIC instead of OFFLN while communicating.
Added Parabolic Velocity profile type selection to single/multiple axis positioning and jog windows.
Fixed issue in which jerk ratio values were rounded to 0 or 1 when saving and loading.
Fixed issue in which certain values such as acceleration time were reset to the default value when saving and loading.
Changed the default value of acceleration time, deceleration time, and run time from 1ms to 1000ms.
Performance Improvements
Base memory usage has been decreased from approximately 173.2MB to 136.4MB (measured while running the Simulator platform).
Cyclic execution time has been improved by approximately 8.7% on the Simulator platform when all axes are in Idle state (average 34.65us to 31.65us).
New Functions
Added the FastBlending circular interpolation override type.
Added waitingForTrigger status to CoreMotionAxisStatus. This status is set to 1 if the axis is waiting for the trigger condition of a trigger motion.
Added DistanceToTarget type trigger motion, event, and API buffer condition. This condition is similar to RemainingDistance, but checks the linear distance from the current position to the target position, disregarding the motion path, single turn wraparound, etc.
Added InPos event type to CoreMotionEventInput.
Added InPos, PosSET, DelayedPosSET, and CommandDistributedEnd API buffer conditions.
Added user offset statuses and log options. The user offset can be changed when developing a custom User RTDLL.
Added GreaterIOBytes, EqualIOBytes, and LessIOBytes event input types to the IO module. Added GreaterMBytes, EqualMBytes, and LessMBytes event input types to the UserMemory module.
Modified the PVT function to support user specified buffer sizes. Added CreatePVTBuffer, FreePVTBuffer, GetPVTBufferPoints, and GetPVTBytesPerPoint functions to support this. Added optional arguments to StartPVT, StartPVT (Interpolation), StartPT, StartVT, and StartAT functions to allow any number of points to be specified. If the PVT function is executed without creating a buffer, a default size buffer is automatically created, allowing existing code to run without any modifications.
Modified the path interpolation function to support user specified buffer sizes. Added CreatePathIntplBuffer, FreePathIntplBuffer, GetPathIntplBufferPoints, and GetPathIntplBytesPerPoint functions to support this. Added optional arguments to StartPathIntplPos, StartPathIntplMov, StartPathIntpl3DPos, and StartPathIntpl3DMov functions to allow any number of segments to be specified. If the path interpolation function is executed without creating a buffer, a default size buffer is automatically created, allowing existing code to run without any modifications.
Added the ParabolicVelocity profile type. The velocity is parabolic for this profile type.
Added support of PV and TQ operation for cyclic mode axes.
Added CopyCmdIfNoFbPdo EtherCAT master option.
Specs Changes
Removed restriction that sync control slave axes must have the same values for the single turn mode and single turn encoder count parameters as the master axis (including sync control using sync groups).
Removed restriction that the master and slave axes of combine sync (sync control with two masters axes) do not support single turn mode.
Modified sync group to always generate a catch up error if the CatchUp startup type is specified but the master or slave axis is a single turn axis (as the catch up distance cannot be properly calculated for single turn axes).
Changed specifications for when sync group errors are cleared. Previously, errors were cleared on servo on (if the servo on/off synchronization option is enabled), when the sync group is enabled, and when sync group parameters were changed. Errors will be cleared only when the added ClearSyncGroupError function is called.
The Home Done status of SyncGroupStatus will only return 1 when gantry homing is completed using every axis in the sync group. Previously, this status returned 1 even if only the master axis was homed and the slave axes were in servo off state.
Changed the minimum distance between the starting point, end point, and center point of circular interpolation from 1 user unit to 1e-6 user units.
Changed the order of statuses in CoreMotionAxisStatus.
Removed the reserved TrqLimit item from the HomeType enumerator class.
Modified the SetSyncGroup function (for sync group control) to return an error if the CatchUp startup type is specified but the CatchUpVelocity or CatchUpAcc is out of range.
Modified the EnableSyncGroup function to not return the PreviousSettingsBeingApplied error and be able to enable the sync group if called immediately after calling SetSyncGroup.
Fixed inconsistency in the profile statuses (such as ProfileRemainingMilliseconds) for axes executing trigger motion. For override trigger motion, the profile status for the overridden motion is returned until the trigger condition is satisfied. For non-override trigger motion, 0 is returned for the profile status until the trigger condition is satisfied. The following are specifically changed compared to before:
Previously, axes executing single axis override trigger motion returned 0 for the profile statuses.
Previously, axes executing interpolation override trigger motion returned the profile status of the override motion even before the trigger condition is satisfied.
Modified catch up motion of sync groups such that the slave axis follows the motion of the master axis even during the catch up motion. Previously, if the master axis moved during the catch up motion, the catch up motion was executed again.
Modified default value of the circular interpolation override type from Blending to FastBlending.
StartPVT, StartPT, StartVT, StartAT, StartPathIntplPos, StartPathIntplMov, StartPathIntpl3DPos, and StartPathIntpl3DMov will require less buffer space when executed from the API buffer if the number of points is less than the maximum.
StartHome will return an error if the signals required for homing are not available (the signals required for homing are determined from the home parameters). For example, if the home type is Z-Pulse, StartHome will return an error if the Z-pulse signal is unavailable.
The StartLinearIntplPos, StartLinearIntplMov, Motion::Pause, Motion::Resume, StartHome, Home::Continue, Home::Cancel, Stop, ExecQuickStop, ExecTimedStop, and Wait functions for multiple axes will return an error if the specified axis count is 0.
The maxPathInterpolatePoints, maxPvtPoints, and maxPvtInterpolatePoints constants have been renamed to maxPathInterpolateAppendPoints, maxPvtAppendPoints, and maxPvtInterpolateAppendPoints.
Added the “WMX3_” prefix to macro constants at the beginning of the C++ header files. For example, #ifndef CORE_MOTION_API_H #define CORE_MOTION_API_H in CoreMotionApi.h has been changed to #ifndef WMX3_CORE_MOTION_API_H #define WMX3_CORE_MOTION_API_H.
Pause/Resume functions can now be used while the axis is executing a linear interpolation override or circular interpolation override.
Modified circular interpolation overrides to replace the circular interpolation with a linear interpolation when possible if the circular interpolation could not be generated due to the radius being too small or too large.
Modified FastBlending type linear interpolation overrides and circular interpolation overrides to start the override motion one cycle earlier. FastBlending type interpolation overrides that are executed with trigger motion also start motion one cycle earlier.
SetInterruptId, GetInterruptId, SetDeviceWaitEvent, ResetDeviceWaitEvent, and WaitForDeviceWaitEvent functions can now be called from the .NET library.
The following .NET library class members have been renamed to match the name in the C++ library:
CyclicBufferMultiAxisCommands.Command has been renamed to Cmd
ApiBufferWatch.WatchTriggerRoutineApiBufferChannel has been renamed to WatchTriggerRoutineChannel
CoreMotionEventInput.InputFunctionArguments_OpState.State has been renamed to OpState
PlannedVelocityStatus.ActiveVelocityCmd has been renamed to ActiveVelocityCommand
Removed the maxDataChannelInstances constant from the CoreMotion module, as it overlapped with the maxDevices constant in the WMX3 library.
Modified the TimeAccTrapezoidal, TimeAccSCurve, TimeAccJerkRatio, TimeAccParabolic, TimeAccSin, and TimeAccAdvancedS profile types for velocity and jog commands. Previously, the acceleration/deceleration was set to the target velocity divided by the acceleration/deceleration time and did not consider the current velocity. Now, the axis accelerates or decelerates from the current velocity to the target velocity in the specified acceleration or deceleration time.
Renamed the MotionFinished member of the WaitConditionType enumerator class in the CoreMotion module to AxisIdle for consistency with the ApiBufferConditionType enumerator class.
Reordered the Event member of the ApiBufferConditionType enumerator class and the WaitConditionType enumerator class in order for the two enumerator classes to have a similar order of members.
Renamed the PrintToRTXServer function in the WMX3Api class to PrintToServerConsole.
Removed the Max3DPathInterpolatePoints constant from the .NET library. This constant was removed from the C++ library in WMX3 v3.4.
Renamed the StartProcessLock error in the .NET library to StartProcessLockError to match the error name in the C++ library. Similarly, renamed StartProcessWaitEvent to StartProcessWaitEventFailed and WaitDeviceEventTimeout to WaitForDeviceEventTimeout in the .NET library.
Modified the StartRecordBufferChannel function to return an error if it is called again while recording to the specified API buffer channel. StartRecordBufferChannel can still be called specifying a different API buffer channel. Modified the EndRecordBufferChannel function to return an error if it is called while not recording API functions.
Changed error code name SlaveStatusBelowPreop to SlaveStateBelowPreop.
Changed the message level at which the NIC driver message is printed during startup from “Warning” (or above) to “Setting” (or above).
Changed some error codes related to platform (SetOutputBytes, GetInputBytes, and GetOutputBytes functions return the ArgumentOutOfRange error instead of the IOAddressOutOfRange error if the specified size is out of range, or causes the I/O address range to go out of range).
Modified spline functions to have a minimum time between points of 1 microsecond and a minimum distance between points of 1e-6 user units. Repeated points with the exact same positions are ignored, and do not generate these errors. These errors are checked after applying the sample multiplier, meaning that increasing the sample multiplier too high on some spline inputs could cause these errors to appear.
Bug Fixes
Fixed issue for Blending type linear interpolation override in which if the Stop function is called, the axis suddenly moved to the target position.
Fixed issue for sync control and sync group control for single turn axes in which if the gear ratios of the slave axis and master axis are different, or if a sync gear ratio is applied, the slave suddenly moved when the master axis wraps around the single turn encoder count.
Fixed issue for gantry homing in which if the “Home Position” parameter of the master axis and slave axis are different, the slave axis suddenly moved at the end of homing.
Fixed issue in which homing a single turn sync axis with a sync gear ratio applied and the “Gantry Homing Retain Sync Offset” parameter enabled caused the slave axis to suddenly move at the end of homing.
Fixed issue for the SetCommandPos and SetFeedbackPos functions in which the axis suddenly moved when called for a sync master or slave axis with a gear ratio difference between the master and slave axes or when a sync gear ratio is applied. Similarly, fixed issue in which the axis suddenly moved when these functions are called for a slave axis that is a single turn axis.
Fixed issue for sync group in which an error was returned if the master and slave axes have different gear ratios.
Fixed issue for sync group in which the sync error tolerance was not correctly calculated if there is a sync gear ratio or sync phase offset applied, or if the “Home Position” parameter is different for the master and slave axes.
Fixed issue for sync group issue in which an AxisError occurred when enabling a sync group after an InterruptError occurs.
Fixed issue for sync group in which the servo could turn on and off repeatedly when turning on a sync group axis after an sync axis error occurs.
Fixed issue in which if the Round Position Command After Homing parameter is enabled, the home position changed at the end of homing.
Fixed issue in which the RemainingTime, RemainingDist, CompletedTime, CompletedDist, SameTimeCompletion, StaggeredTimeCompletion, and StaggeredDistCompletion trigger motion and events could be triggered at incorrect timings if the trigger axis is executing an interpolation override.
Fixed issue in which there was a timing that the StartHome function fails to start homing if two or more RTX cores are used.
Fixed issue in which the SetSyncGearRatio function with a masterAxis argument did not check if the masterAxis argument is out of range if the commanded axis is in neither Idle or Sync operation state.
Fixed issue for .NET library in which the UserMemoryLogInput class of the UserMemory module was inaccessible.
Fixed issue in which the SameTimeCompletion, StaggeredTimeCompletion, and StaggeredDistanceCompletion interpolation override trigger motion triggered before the motion is complete if the interpolation override type is Blending.
Fixed issue in which interpolation override trigger motion did not start if the trigger axis is set to itself and the trigger condition is not satisfied by the end of the original motion.
Fixed issue for .NET library in which functions might return a DeviceIsNull error if the CloseDevice function is not called by the WMX3Api object after all WMX3 API functions have been called, due to the garbage collector regarding the WMX3Api object as unused and releasing it prematurely.
Fixed issue in which null device checks were missing from some platform API functions.
Fixed issue in which a spline command could be started for a spline channel that is already executing a spline command. In this case, the original spline command continued to execute using the parameters for the new spline command.
Fixed issue in which calling the Stop function twice caused the axis to stop using the Quick Stop Deceleration.
Fixed issue for the TrapezoidalMAT profile type in which if an override is executed when the acceleration is nonzero and less than 1e-12 user units per second^2, the override motion was canceled.
Fixed issue in which if ErrorToString is called with a specified size of 0 and an invalid buffer address, an invalid memory access occurred.
Fixed issue in which the delayTime parameter of the delayMBit event in the UserMemoryEventInput class was ignored and the wait time was always zero.
Fixed issue from WMX3 v3.3u7 in which splines with a sampleMultiplier greater than 1 did not move to the correct target position.
Fixed issue for the TrapezoidalMAT profile in which if the end velocity is not zero, the prohibit overtravel parameter is set to disabled, and neither a trapezoidal or wedge-shaped profile could be generated, the axis sometimes did not move.
Fixed issue in which if the API functions in the platform module are executed through the API buffer and return an error, the error code stored in the ApiBufferStatus.errorLog did not correspond to the error codes defined in the ErrorCode enumerator (or any enumerator classes that extend the ErrorCode enumerator).
Fixed issue in which some Unicode characters, including Chinese, Japanese, and Korean characters, were not displayed correctly when passed to the PrintToRTXServer(const wchar_t) function.
Fixed issue in which if API functions in the Platform module libraries are called though the API buffer and the function returns an error, some error codes were stored as incorrect values in the API buffer error log.
Fixed issue in which I/O module format log (analog I/O log) data was not output to the log file if only analog inputs or only analog outputs are specified to IoLogInput.
Fixed issue for I/O module format log where the log file header line label and bit offset would be set to the format type of the output instead of the input.
Fixed issue in which the command position was not used to determine the home position even when the OpenLoopHoming parameter is set to enabled.
Fixed issue which occurs for certain servos in which the servo alarm could be reset automatically after being reset once.
Fixed issue in which an command position became incorrect if the time between points for spline commands is 0. As mentioned under “Specs Changes”, the minimum time between points for spline commands is changed to 1 microsecond.
Fixed issue in which instantiating the IoLogInput class from the .NET library caused an error.
Fixed issue in which the ByteAddress[0] value of TriggerEvent.Input_AndIOBit in the .NET library was not applied.