v3.4u3 to v3.4u4 Change Log (December 18, 2020)

New Functions

  1. Added support for the CC-Link IE TSN platform.

    1.1 Class B Certified 1.2 Supports IEEE 802.1AS and IEEE 1588v2 1.3 Communication speed 100Mbps/1Gbps 1.4 Accuracy: below 1us 1.5 Topology: line, star, line star mixed 1.6 Unicast / Broadcast

  2. Added support of Pdo Log by using the SetLog function of LogApi.

  3. Added StartAxisHM function overload with setting home offset parameter.

  4. Added mode (cyclicmode, ppmode) state to EcMasterInfo.

  5. Added API Log functions.

  6. Modified minimum acceleration time and deceleration time for time acceleration profiles (TimeAccTrapezoidal, TimeAccSCurve, TimeAccJerkRatio, TimeAccParabolic, TimeAccSin, TimeAccAdvancedS) from 1ms to 1e-6ms.

  7. Added encoderFeedbackVelocity, encoderCommandTrq, and encoderFeedbackTrq to data that can be logged with the CoreMotionLogInput class.

  8. Added encoderFeedbackVelocity, encoderCommandTrq, and encoderFeedbackTrq to data that can be logged to the memory log.

  9. Added SetWatchdog function overload that allows the device ID to be specified.

  10. Added StartTrqToPos, StartTrqToMov, StartTrqToVel, StartVelToPos, and StartVelToMov functions for dynamically changing the axis command mode without stopping (4 overloaded functions each).

  11. Added latchedFirstHomeSwitchEncoder home status to AxisHomeData class.

  12. Added ExecTimedStop functions for velocity mode axes to the Velocity class.

  13. Added functionality for two-dimensional pitch error compensation in which the “prevent catch up motion” option works even when multiple channels with the same compensation axis and reference axes are specified, as long as the areas in which the compensation applies do not overlap.

  14. Added interrupt statuses to EngineStatus.

Specs Changes

  1. Modified specifications for the particular motion profile that is generated when all of the following are true:

    • The prohibit overtravel parameter is disabled (by default, this parameter is enabled).

    • The motion profile starts with a nonzero velocity (the motion profile is an override or the initial velocity is specified).

    • The target position is close enough that the axis would pass the target position even if it starts decelerating immediately.

    In the above case, previously, the axis decelerated as much as possible until it reached the target position and then suddenly stopped. In this version, the initial velocity of the axis will be decreased so that the axis reaches the end velocity and the target position at the same time if it starts to decelerate immediately. This makes the profile the same as the profile that is generated when the prohibit overtravel parameter is enabled.

  2. Renamed several C++ Builder libraries to be more consistent with the C++ libraries, as follows.

    • AdvancedMotion.lib/AdvancedMotion.a -> AdvancedMotionApi.lib/AdvancedMotionApi.a

    • CyclicBuffer.lib/CyclicBuffer.a -> CyclicBufferApi.lib/CyclicBufferApi.a

    • Event.lib/Event.a -> EventApi.lib/EventApi.a

    • Log.lib/Log.a -> LogApi.lib/LogApi.a

    • IO.lib/IO.a -> IOApi.lib/IOApi.a

    • UserMemory.lib/UserMemory.a -> UserMemoryApi.lib/UserMemoryApi.a

  3. Added ID for the PMMotion module to the ModuleId enumerator.

  4. Modified the constructors for the LogApiLogInput class as follows.

    • The default value of the LogApiLogInput.type member is LogInputType::CycleCounter (0) instead of LogInputType::Time (1).

    • The constructor with an argument to set the LogApiLogInput.type member (LogApiLogInput(int type)) has the argument type changed from int to LogInputType.

  5. Removed the unused HomeState::Other member of the HomeState enumerator.

  6. Modified encoderCommandPos, encoderFeedbackPos, and encoderCommandVelocity data that is logged with the CoreMotionLogInput class to be saved to the log file as signed integers instead of unsigned integers (to match the type of the encoderCommand and encoderFeedback data obtained with the GetStatus function).

  7. Modified encoderCommandPos, encoderFeedbackPos, and encoderCommandVelocity data that is logged to the memory log with the MemoryLogData class to have type int instead of unsigned int (to match the type of the encoderCommand and encoderFeedback data obtained with the GetStatus function).

  8. The profileAccMilliseconds, profileCruiseMilliseconds, and profileDecMilliseconds statuses no longer support Jog commands and Velocity commands as these statuses were not well defined for Jog commands and Velocity commands. Instead, use the profileTotalMilliseconds status, which always returns the total time taken to transition to the target velocity.

  9. Modified error routine for gantry homing in which if the slave axis is desynchronized (for example, if the slave axis servo is turned off), the master axis suddenly stopped and remained in HomeState::Cancel until homing is aborted. Now, the master axis will decelerate to a stop at the fastHomingVelocity and then change to Idle operation state after stopping.

  10. Removed the PMAxisControl() constructor from the PMAxisControl class, as it had no use.

  11. Renamed the SetLog(unsigned int channel, unsigned int moduleId, void *data, unsigned int dataSize) function to SetCustomLog to clarify that the purpose of this function is to implement a customized log feature.

  12. Modified the profileTargetPos status to return 0 for velocity mode and torque mode axes.

  13. Modified specifications for stopping two-dimensional pitch error compensation. When two-dimensional pitch error compensation is stopped, all other two-dimensional pitch error compensation channels for which the stopped axis is the reference axis are also stopped, to prevent sudden movement in the axes to which compensation is applied.

  14. Modified specifications for Stop, ExecQuickStop, ExecTimedStop, and StopTrq functions for multiple axes in the Motion, Velocity, and Torque classes. If any axes are in invalid state (in servo off state or not in the correct command mode), an error is returned but the remaining axes are still stopped.

  15. Fixed issue in which the profileAccMilliseconds member of the CoreMotionAxisStatus class was not capitalized in the .NET CLR library.

  16. Modified the waitTimeMilliseconds parameter for the StartEngine, RestartEngine, StopEngine, and CreateDevice functions to improve the accuracy in the actual maximum wait time.

Bug Fixes

  1. Fixed the issue in which mode NONE cannot be set by ecApi::Ecat::SetAxisMode.

  2. Fixed the issue in which reach target and following error status is not updated in PV and TQ mode.

  3. Fixed to reset related PM mode flags if it is not in supported mode.

  4. Fixed issue in which if the prohibit overtravel parameter is disabled (by default, this parameter is enabled) and an override profile is generated with a nonzero end velocity and certain specific parameters, the profile generation failed and the axis suddenly moved to the target position. (Example: Execute a Trapezoidal profile with target=5000, vel=50000, acc/dec=500000, end vel=500, and override after 100ms with the exact same profile parameters.)

  5. Fixed issue in which one or more arguments were not checked for null inputs for the following functions.

    • SetEvent: pEventInput and pEventOutput arguments were not checked

    • GetUserMemoryAddress: pptr argument was not checked

    • GetInAnalogDataChar, GetInAnalogDataUChar, GetInAnalogDataShort, GetInAnalogDataUShort, GetInAnalogDataInt, GetInAnalogDataUInt, GetOutAnalogDataChar, GetOutAnalogDataUChar, GetOutAnalogDataShort, GetOutAnalogDataUShort, GetOutAnalogDataInt, GetOutAnalogDataUInt: pAnalogData was not checked

    • SetLog(unsigned int channel, LogInput* input): input argument was not checked

  6. Fixed issue for the SetLogFilePath and GetLogFilePath functions in which the DeviceIsNull error was not returned when called before creating a device.

  7. Fixed issue for the GetEvent and GetEventModuleId functions in which an ArgumentIsNull error is returned when the id argument is out of range. This has been fixed to return the ArgumentOutOfRange error.

  8. Fixed issue for the SetMBytes, GetMBytes, SetMBytesEx, and GetMBytesEx functions in which the size and addr argument ranges were not checked properly. A size of 0 could be specified to GetMBytesEx and SetMBytesEx functions without returning an error. With certain invalid values of addr, a buffer overflow error could occur in the engine (e.g. addr=0xFFFFFFFF and size=2) (this issue was introduced in WMX3 v3.4.1).

  9. Fixed the SetOutBytes, SetOutBits, SetOutBytesEx, SetOutBitsEx, SetInitialOutBytes, SetMBytes, SetMBits, SetMBytesEx, and SetMBitsEx functions in the .NET library to return the ArgumentOutOfRange error instead of generating an exception when arrays of size 0 are passed to their arguments.

  10. Fixed the GetInBytes, GetOutBytes, GetInBytesEx, GetOutBytesEx, GetInitialOutBytes, GetInitialOutBytesInterruptId, GetMBytes, and GetMBytesEx functions in the .NET library to return the IOAddressOutOfRange or UserMemoryAddressOutOfRange error instead of generating an exception when 0 is passed to the size argument.

  11. Fixed issue in which IO addresses greater than 4095 could not be logged using the log functions.

  12. Fixed issue for the time acceleration profiles (TimeAccTrapezoidal, TimeAccSCurve, TimeAccJerkRatio, TimeAccParabolic, TimeAccSin, TimeAccAdvancedS) in which if the acceleration calculated by [velocity / accTime] or [velocity / decTime] (accTime and decTime are converted from millisecond units to seconds) exceeds 2^40-1 = 1,099,511,627,775 units/s^2, the profile failed to generate and the axis did not move.

  13. Fixed issue for the time acceleration profiles (TimeAccTrapezoidal, TimeAccSCurve, TimeAccJerkRatio, TimeAccParabolic, TimeAccSin, TimeAccAdvancedS) in which specifying a decTime of 0 (stop in 1 cycle) for the StartVel function, and then stopping the axis with the Velocity::Stop function caused the axis to decelerate from 1 unit/s or -1 unit/s over 10 seconds.

  14. Fixed issue in which the encoderCommandPos and encoderFeedbackPos data that is logged with the CoreMotionLogInput class stored subdecimal digits in the log file.

  15. Fixed issue in which the profileRemainingMilliseconds and profileCompletedMilliseconds statuses did not update when executing Jog or Velocity commands.

  16. Fixed issue for RemainingTime, RemainingDistance, CompletedTime, CompletedDistance, SameTimeCompletion, StaggeredTimeCompletion, StaggeredDistanceCompletion, and DistanceToTarget trigger motion, API buffer wait conditions, and events, in which if the trigger axis is paused with the Pause function while executing a linear interpolation, circular interpolation, or helical interpolation, the trigger condition could be satisfied at an unpredictable timing. Now, if the trigger axis is paused with the Pause function while executing a linear interpolation, circular interpolation, or helical interpolation, the trigger condition will not be satisfied until the trigger axis is resumed with the Resume function.

  17. Fixed issue for variable buffer size PVT and path interpolation added in v3.4u3 in which the additional points could not be specified as an array when called from the .NET CLR library.

  18. Fixed issue for Mechanical End, Mechanical End HS, and Mechanical End LS home types in which the axis accelerated to the homing velocity immediately after starting homing when homing for the second or subsequent times.

  19. Fixed issue in which executing a trigger motion from rest with a nonzero starting velocity, pausing the trigger motion before the trigger condition is satisfied, and then stopping the axis caused the axis to decelerate to a stop from the starting velocity.

  20. Fixed issue in which executing a trigger motion from rest and then pausing the trigger motion before the trigger condition is satisfied caused the axis to execute one cycle of the trigger motion.

  21. Fixed issue for the PSO function in which if the minDurationMilliseconds parameter is nonzero, the activeDataIndex status was updated every cycle of the minimum duration, even when not at the trigger position, causing the value to not match the index of the last triggered position.