v3.4u4 to v3.4u5 Change Log (July 19, 2021)

Utility and Installer Changes

  1. Changed the name of EcPacketAnalyzer to PacketAnalyzer, and modified it to also be able to capture packets of networks other than EtherCAT that use general-purpose NICs. Renamed EcFilter_CLRLib to NicFilter_CLRLib.

  2. Fixed issue in which a blue screen occurs when RTX64 Runtime is installed on Windows 10 with feature version 2004 or later with the WMX3 installer.

  3. Fixed issue in which multiple windows can pop up without limit when the [Custom] button and [Function list] button are pressed repeatedly on EcConfigurator.

  4. Fixed issue in which PDOs not handled by WMX3 were not filtered when loading PDO entries from an ESI file on EcConfigurator.

  5. Fixed issue in which text is cut off when the number of digits displayed on the progress indicator is 3 digits on EcConfigurator.

  6. Fixed issue in which radio buttons for selecting the source of servo parameters, both [Slave] and [ESI] buttons can be checked on EcConfigurator.

  7. Fixed issue in which some buttons are enabled even when the content did not exist on EcConfigurator.

  8. Fixed issue in which an exception error occurs due to the axis mapping operation of the multi-axis servo when creating the network_def on EcConfigurator.

  9. Added capture time for PacketAnalyzer.

  10. Fixed issue in which the color of the HomeError LED display was inappropriate on PMMotionController.

  11. Fixed issue in which the axis map of the network definition could be improperly set on CCLinkConfigurator.

  12. Fixed issue in which the check of “PDO Object List” is not displayed when CUI file is read on CCLinkConfigurator.

  13. Fixed issue in which the CUI editor screen displayed incorrectly when certain actions are performed on CCLinkConfigurator.

  14. Added feature to read the network definition file on CCLinkConfigurator.

  15. WOS (WMX3 Operation Station) is newly included as an integrated utility from this version onwards (only for WMX3 64-bit; WMX3 32-bit is not supported). This utility contains many features of existing tools. In the future, some utilities will be replaced by this utility.

New Functions

  1. Added AxisCmdMode event input type to CoreMotionEventInput.

  2. Added OpState and AxisCmdMode conditions to ApiBufferCondition.

  3. The ApiLogToString function of each module have been updated to support more detailed printouts for most functions.

  4. Added overloads of the PrintToFile and PrintToFileIfExist functions for the C++ library that take buffer and buffer size arguments instead of format. This allows strings of greater than 1024 characters to be printed.

  5. Modified PrintToFile and PrintToFileIfExist functions for the .NET library to eliminate the 1024 character limit for the input strings.

  6. Modified the prevent catch up motion option for 2D pitch error compensation to support up to four channels with three reference axes in the following configuration:

    Channel 1: Compensation Axis: X Reference Axis: X and Y (order does not matter)

    Channel 2: Compensation Axis: Y Reference Axis: X and Y (same order as Channel 1)

    Channel 3: Compensation Axis: X Reference Axis: X and Z (order does not matter)

    Channel 4: Compensation Axis: Z Reference Axis: X and Z (same order as Channel 3)

  7. Modified the log and memory log functions to be able to log encoderCmdTrq for position mode and velocity mode axes, encoderCmdVel for position mode and torque mode axes, cmdVel for torque mode axes, and cmdTrq for position mode and velocity mode axes. This data is useful when dynamically changing command modes with functions such as StartPosToVel, when multiple types of commands are received by the servo.

  8. Added axisCommandMode and axisCommandModeFeedback to the data that can be logged with the log function or the memory log function.

  9. Added StartPosToRampTimeTrq, StartPosToRampRateTrq, StartVelToRampTimeTrq, and StartVelToRampRateTrq functions. These functions will dynamically switch an axis executing a position command to a torque command. The command torque will change from the feedback torque at the time of the switch to the new value at the specified rate or over the specified time.

  10. Added vibrationPosMin, vibrationPosMax, vibrationPosAvg, vibrationVelMin, vibrationVelMax, vibrationVelAvg, vibrationTrqMin, vibrationTrqMax, and vibrationTrqAvg statuses to measure the vibration of axes while they are stationary. Added ClearVibrationStatus function clear these statuses.

  11. Added timestamp member to ApiLogInfo. Added TimestampToString function.

  12. Added axisCommandModeFeedback status.

  13. Added FollowMotion command to path interpolation with look ahead.

  14. Added PPStartDelay setting for PP mode. This setting is set in ec_network.def.

Specs Changes

  1. The SetCommandPos, SetFeedbackPos, and SetCommandPosToFeedbackPos functions have been modified to be blocking and not return until the end of the communication cycle in which the operation starts if the “Wait Until Motion Start” parameter is enabled. This prevents the issue in which calling SetCommandPos and then immediately starting a motion command caused the SetCommandPos operation to be executed after the first cycle of the motion command has completed.

  2. Renamed the ApiLogInfo::LogType enumerator class to ApiLogType and moved the definition outside the ApiLogInfo class for the C++ library to match the .NET library.

  3. Changed the type of the deviceExcluded, moduleExcluded, and moduleResp members of the ApiLogOptions class from unsigned char to bool to match the .NET library.

  4. Slightly adjusted error string of the BufferTooSmall error code that is returned by the ErrorToString function from “The buffer is too small for the specified size.” to “The buffer is too small.”

  5. Modified the PrintToServerConsole, PrintToFile, and PrintToFileIfExist functions to return the BufferTooSmall error and abort the operation if the specified string is more than 1024 characters. Previously, no error was returned but only 1024 characters were printed.

  6. Modified SetPitchErrorCompensation, EnablePitchErrorCompensation, DisablePitchErrorCompensation, Set2DPitchErrorCompensation, Enable2DPitchErrorCompensation, and Disable2DPitchErrorCompensation to block until the end of the cycle in which pitch error compensation has been successfully enabled or disabled (SetPitchErrorCompensation and Set2DPitchErrorCompensation will not block if not enabling pitch error compensation).

  7. Modified SetPitchErrorCompensation, EnablePitchErrorCompensation, DisablePitchErrorCompensation, Set2DPitchErrorCompensation, Enable2DPitchErrorCompensation, and Disable2DPitchErrorCompensation to return the CompensationAxisNotPosMode or ReferenceAxisNotPosMode error if the compensation axis or reference axis is not in Position mode.

  8. Modified Disable2DPitchErrorCompensation to disable all channels with a reference axis that is the same as the compensation axis or one of the reference axes of the specified channel. Previously, all channels with a reference axis that is the same as the compensation axis of the specified channels were disabled instead.

  9. Modified StartPosToJog and StartMovToJog functions to transition from the position command to the jog command 1 cycle earlier. Previously, the transition to the jog command occurred 1 cycle after the trigger condition was satisfied.

  10. Modified the EqualPos, EqualVelocity, and EqualTrq trigger events and events so that if the tolerance option is set to 0 (and the enableTolerance option is set), the trigger event or event always triggers when the trigger axis moves past the trigger position. Previously, the specifications were that the event never triggers, but the event actually triggered sometimes and did not trigger sometimes due to an issue.

  11. Modified the EqualVelocity, GreaterVelocity, and LessVelocity trigger events and events so that if the trigger axis is a Position mode axis and the useFeedback option is set to 0, the velocity command is calculated from the difference in the position command between this cycle and the last cycle. Previously, the velocity command was calculated differently for each motion command.

  12. Modified StartRecordBufferChannel to not return the InvalidQueue error when memory has not been allocated to the API buffer channel with CreateApiBuffer. The InvalidQueue error is returned when adding an API function to an API buffer for which memory has not been allocated. The StartRecordBufferChannel has been modified to be non-blocking.

  13. Modified SetSyncMasterSlave, SetSyncCombine, and SetSyncGearRatio in which sync control is newly started to block until the end of the next communication cycle if the API Wait Until Motion Start parameter of the slave is set to enabled.

  14. Increased max pdo read/write size to 8 bytes.

  15. Modified the error that is returned by the Motion::Wait function when the time out period elapses, from ErrorCode::WaitForDeviceEventTimeout to CoreMotionErrorCode::WaitTimeout. This error was changed from CoreMotionErrorCode::WaitTimeout to ErrorCode::WaitForDeviceEventTimeout in v3.4, so this update reverts the change (only the returned error code is reverted).

  16. Changed the name of the CoreMotionEventInputType type member of the CoreMotionEventInput class from type to inputFunction in the PythonAPI library to match the C++ library.

  17. Modified the JerkRatioFixedVelocityT and JerkRatioFixedVelocityS profile types to generate the profile using the specified acceleration as the average acceleration (previously, the profile was generated using the specified acceleration as the maximum acceleration).

  18. Modified the OverridePos, OverrideVel, and other OverrideXXX functions to override two-velocity profiles using two-velocity profiles (previously, the profile was overridden with a non-two-velocity counterpart such as the Trapezoidal profile).

  19. Increased the number of 2D pitch error compensation channels (max2dPitchErrorCompChannel) from 5 to 32. The performance of 2D pitch error compensation processing has been improved to allow this increase in number of channels.

Bug Fixes

  1. Fixed issue in which ECAM did not move the slave axis position when the master axis is a single turn axis and it is moved with a position command (e.g. StartPos) with the target position outside the single turn encoder range and the master axis moves outside the single turn encoder range.

  2. Fixed issue for the JerkLimitedSCurve and AdvancedS profiles in which the acceleration is not calculated correctly when used for FastBlending or Smoothing type interpolation override commands. For the JerkLimitedSCurve profile, the acceleration was twice the specified maximum acceleration as long as the specified maximum acceleration jerk is not exceeded. For the AdvancedS profile, the acceleration was between 0.5 and 1 times the specified average acceleration, depending on the jerk ratio.

  3. Fixed issue in which the SimulatePosAtTime function for linear interpolation crashes the engine for certain inputs.

  4. Fixed issue in which the CoreMotion and AdvancedMotion wait functions and “Wait Until Motion Start” parameter were synchronized to just the first interrupt during multi-cycle operation. API functions processed by the second interrupt could wait longer than necessary before returning if the first interrupt has a longer cycle time than the second interrupt. When the “Wait Until Motion Start” parameter is enabled, motion functions processed by the second interrupt could time out and return before the motion starts if the cycle time of the second interrupt is more than 8 times longer than the cycle time of the first interrupt.

  5. Fixed issue with SetPSOIntervalData when used with the LessThan comparison type in which the returned activeDataIndex status was one less than the correct value, and the evaluation was performed as “less than” instead of “less than or equals” to match the behavior of the MoreThan comparison type. The specifications have been clarified in the user manual.

  6. Fixed issue in which the Point member of the PathIntplWithRotationCommand was initialized to array size MaxPathIntplAppendPoints(512) for the .NET library instead of MaxPathIntplWithRotationAppendPoints(1024). Calling the AddPathIntplWithRotationCommand function from the .NET library with more than 512 points caused an array index out of range exception.

  7. Fixed issue in which a moving average time exceeding the maximum of 120 seconds could be specified when the moving average time of a position command using the TrapezoidalMAT profile is directly set by disabling the Enable Global Moving Average Time Milliseconds parameter.

  8. Fixed issue in which overriding an acceleration time profile (such as TimeAccTrapezoidal) with a non-acceleration time profile (such as Trapezoidal) caused the non-acceleration profile to incorrectly interpret the specified acceleration as the acceleration time.

  9. Fixed issue in which in the simulator platform library, if the WMX3Api object passed to the constructor has not created a device when instantiating the Simu class, then “Set” functions such as SetInBit had no effect even if a device is later created. If this issue occurs, when another Simu class is instantiated, previously called “Set” functions immediately have an effect.

  10. Fixed 2D pitch error compensation issue in which the offset could be calculated incorrectly if the number of 2D pitch error compensation pitch points is 1 and the edgeDropoffDistance is nonzero.

  11. Fixed issue in which the motionCompleteFlag was not set correctly under the following cases:

    • The StartPVT (with the PVTCommand argument), StartPT, StartVT, StartAT, and SetConstantLinearVel functions did not set the motionCompleteFlag to 0 when starting.

    • Linear interpolations, circular interpolations, helical interpolations, path interpolations, 3D path interpolations, and path interpolations with rotation that are paused near the end of the motion such that the axis stops at exactly the target position will not set motionCompleteFlag to 1 when resumed.

    • Linear interpolation overrides and circular interpolation overrides did not set the motionCompleteFlag to 1 depending on the timings at which the original interpolation and the override interpolation complete.

  12. Fixed issue for the .NET library in which the GetPSOData and GetPlannedVelOverrideData caused a memory leak when the function returns an error. This issue only affects the .NET library.

  13. Fixed issue for the .NET library in which the overloaded StartPVT, StartPT, StartVT, StartAT, StartPathIntplPos, StartPathIntplMov, StartPathIntpl3DPos, and StartPathIntpl3DMov functions with the additional commands argument added in WMX3 v3.4u3 caused a large memory leak when one or more additional commands are specified. This issue only affects the .NET library.

  14. Fixed issue in which turning the servo off while backlash compensation, pitch error compensation, or 2D pitch error compensation is enabled caused the home position to change. This issue occurs in WMX3 v3.3u5 and later.

  15. Fixed issue for the .NET library in which the Set2DPitchErrorCompensation and Get2DPitchErrorCompensation functions used a large amount of stack space, using up a large amount of the 4MB C# stack.

  16. Fixed issue in which disabling pitch error compensation or 2D pitch error compensation, and then enabling it again before the next communication cycle caused the command position of the compensation axis to suddenly change by the compensation amount.

  17. Fixed issue for the prevent catch up motion option of 2D pitch error compensation in which the calculated initial command position was sometimes not the best possible solution. When this issue occurs, the axis could move by up to 1 pulse (not 1 user unit) when enabling 2D pitch error compensation even if a better initial command position exists.

  18. Fixed issue for the prevent catch up motion option of 2D pitch error compensation in which if the edge dropoff distance is 0 and the axis is more than the pitch interval away from the edge, the catch up motion could not be prevented when compensation is enabled.

  19. Fixed issue for the prevent catch up motion option of 2D pitch error compensation in which if the pitch origin index is equal to 0 or the pitch count minus 1 and the axis is at the pitch origin plus or minus approximately the pitch offset at the pitch origin, the catch up motion could not be prevented when compensation is enabled.

  20. Fixed issue for StartPosToVel, StartVelToPos, StartPosToTrq, StartTrqToPos, StartVelToTrq, and StartTrqToVel in which performance was suboptimal on some servos due to the command of the previous mode not being calculated correctly during the mode transition.

  21. Fixed issue for the EqualPos, EqualVelocity, and EqualTrq trigger events and events in which if the tolerance option is set to 0 (and the enableTolerance option is set), the trigger event or event sometimes triggered and sometimes did not trigger when the trigger axis moves past the trigger position. The specifications have been changed so that if the tolerance is 0, the trigger event or event will always trigger instead of never trigger.

  22. Fixed issue for the EqualVelocity, GreaterVelocity, and LessVelocity trigger events and events in which if the trigger axis is a Position mode axis and the useFeedback option is set to 0, some motion commands such as 3D circular interpolation were unable to calculate the velocity command.

  23. Fixed issue for the ApiLogToString function in which errors that are defined in specific modules were printed as Unknown Error (unless the module that defines the error is CoreMotion or AdvancedMotion).

  24. Fixed issue in which the auxiliary axes of a ThroughAndEnd3DCircularWithAuxiliary command for path interpolation with look ahead did not interpolate along the circular motion as intended.

  25. Fixed issue in which the collection process of processTimeRatio of statistical information was improper in simulator platform and CCLink platform.

  26. Fixed issue in which communication with Class A slaves was unstable in CCLink platform.

  27. Fixed issue in which communication with slaves whose port number is not 2 fails in CCLink platform.

  28. Fixed issue in which some slaves failed to communicate for the first time after power-on in CCLink platform.

  29. Fixed issue in which the IO mapping of newly entered slaves was reversed from the connection order in CCLink platform.

  30. Fixed issue in which the PM motion axis with an index of 128 or more is not servo off when communication is stopped in CCLink platform.

  31. Fixed issue in which an exception was raised when a non-Marshallable object was passed to the SlmpSend function that specifies an object in CCLink platform .NET library.

  32. Fixed issue in which the error code is not stored in the argument errCode when the return value of the SDODownload function without a callback function as an argument is an error in CCLink platform library.

  33. Fixed issue in which 3ms could not be specified for the communication cycle in simulator platform.

  34. Fixed issue for Get2DPitchErrorCompensation in which the returned values of pitchValueData at indices greater than or equal to pitchCount contained undefined data (pitchValueData[x][y] contained undefined data at x >= pitchCount[0] and y >=pitchCount[1]).

  35. Fixed issue for the ClearHomeDoneOnCommStop parameter in which setting this parameter to disabled did not prevent the Home Done status from being cleared on communication stop for EtherCAT servo axes.

  36. Fixed issue in which the user memory was not cleared when restarting the engine with RestartEngine or StopEngine and StartEngine.

  37. Fixed issue for .NET library in which the LogMData member of the MemoryLogDatas class of the Log module was inaccessible.

  38. Fixed issue for the prevent catch up motion option of 2D pitch error compensation in which the encoder command position changed for one cycle after enabling compensation when applying compensation to 2 axes with 2 channels.

  39. Fixed ApiLogToString printing the incorrect data for a few functions such as GetOutBytes and GetInBytes.

  40. Fixed issue in which the SimulatePos, SimulateLinearIntplPos, SimulatePosAtTime, SimulatePosAtTime, SimulateTimeAtPos, and SimulateTimeAtDist functions did not simulate the profile correctly when using the ParabolicVelocity profile.