Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.


[UNRELEASED]

[10.?.?] - 2026-??-??


[10.0.0] - 2026-05-25

Added

  • EnsureAACommServerRunning(): New method on IMotionController / MotionController that ensures the AACommServer is running and ready to accept connections. Launches the server if not already running, with proper path resolution.

Deprecated

  • AAMotionConfig.UseAsyncCommTransport: in AAComm 13.0.0 both flag values produce equivalent observable transport behavior for callers using a single path serially (falseCommAPI.SendReceive over the sync flow; trueCommAPI.Send + an internal wait-handle over the async flow — see issue #32 history). The flag is therefore a no-op for typical usage and will be removed in a future release.

Changed

  • DataLogger StartDataRecording: AGD155 and AGD155-EC now use ARecStart[1] command syntax (firmware v2.3+); other controllers continue to use ARecStart without index.
  • Refactored DataLogger and SlowLogger to route all communication through CommAPIInterface.SendAndRecieve() instead of directly calling CommAPI.SendReceive(). This ensures consistent behavior when AAMotionConfig.UseAsyncCommTransport is enabled (async) or disabled (sync).

[9.1.1] - 2026-04-17

Changed

  • Packaging: picks up AAComm 12.1.1 sidecar change. AACommServer sidecar is now selected by consumer OS rather than TFM: Windows consumers (net48 or net8.0) get the WPF AACommServer.exe; non-Windows net8.0 consumers get AACommServerNetConsole. AAMotion consumers inherit this transitively — no code or reference changes required.

[9.1.0] - 2026-04-15

Fixed

  • ScanController / ScanControllerDetailed: Replaced unreliable TCP probe (TcpPortReachable) with ARP-based discovery via ARPTools.GetSubnetActiveIPs. This uses the same multi-NIC ARP scan as PCSuite's Discover Connections, ensuring controllers on all Ethernet interfaces are reliably found.
    • Fixes: random discovery failures with multiple NICs on the same subnet (OS routing picked one interface only)
    • Fixes: NullReferenceException in TcpClient.EndConnect when scanning IPs with no controller (disposed socket from dangling ConnectAsync task)
    • Removed TcpPortReachable private method (no longer needed)

[9.0.0] - 2026-04-03

Changed

  • Decoupled nuget from direct AAComm dependency: AAComm is now resolved via nuget

[8.4.1] - 2026-03-27

Added

  • Added LockSrcZeroSupported() method to ISingleAxis / SingleAxis, exposing Identity[62] bit 0x10 (ControllerIdentityFeature_02.LockSrcZero_Supported). When lockSource = 0 is passed to the three multi-step homing methods on an unsupported controller, NotSupportedException is thrown.
  • Added ControllerIdentityFeature_02.IDENTITY_NEW_FEATURES_2_LOCKSRC_ZERO_SUPPORTED = 0x00000010 constant.
  • Added three extended multi-step homing methods to ISingleAxis / SingleAxis:
    • HomeToHardStopThenIndex — motor on → arm Lock → hard stop on high following error → jog to hardware index → move to Locked position → disarm Lock → wait → set position → end. Accel/emer decel auto-computed (×10 and ×100 of velocity); all timeouts fixed at 15000 ms. Populates HomingDef as PCSuite step types 8, 14, 10, 15, 16, 14, 7, 6, 0.
    • HomeToIndex — motor on → arm Lock → jog to hardware index → move to Locked position → disarm Lock → wait → set position → end. Accel/emer decel auto-computed; all timeouts fixed at 15000 ms. Populates HomingDef as PCSuite step types 8, 14, 15, 16, 14, 7, 6, 0.
    • HomeToLimitThenIndex — motor on → arm Lock → jog to limit switch → jog to hardware index → move to Locked position → disarm Lock → wait → set position → end. Accel/emer decel auto-computed; all timeouts fixed at 15000 ms. Populates HomingDef as PCSuite step types 8, 14, 1, 15, 16, 14, 7, 6, 0.

[8.4.0] - 2026-03-25

Added

  • Added FastReadCache high-performance cached read mechanism:
    • New FastReadCache class in Shared/FastReadCache.cs for low-latency parameter reads.
    • Supports caching both single-value keywords (e.g., Speed, Pos, MotionStat) and array elements (e.g., AInPort[1]).
    • Uses a background timer to batch-refresh all registered values via bulk commands at configurable intervals (default 1ms).
    • Built-in events: RefreshStarted, RefreshCompleted, RefreshError for monitoring.
    • Methods: Enable() / Disable() to activate/deactivate, RegisterKeywords() / RegisterArrayElements() to specify what to cache, GetCachedValue() / GetCachedArrayValue() to read, RefreshNow() for forced refresh, GetCacheAgeMs() to check staleness.

Changed

  • AAMotionConfig now exposes FastReadEnabled (global on/off switch) and FastReadCacheRefreshIntervalMs (default 1ms).
  • MotionController now exposes FastReadCache property, EnableFastReadCache(), DisableFastReadCache(), RegisterCacheKeywords(), RefreshCacheNow(), and GetCacheAgeMs().
  • CommAPIInterface.HandleSingleValueAccessed and HandleArrayValueAccessed now check the cache first when enabled, falling back to controller reads.
  • InitializeFastReadCacheIfEnabled() is automatically called after successful Connect() — registers A/B/C axes' common keywords ( Pos, MotionStat, InTargetStat) and AInPort[1-4], then enables the cache if AAMotionConfig.FastReadEnabled is true.

Added

  • Added CommAPI property on MotionController to expose the underlying AAComm.CommAPI instance for direct low-level communication with maximum performance.

[8.3.0] - 2026-03-17

-AACommServer + API: Ethernet packet sniffer for debugging communication issues - Auto-captures traffic on Ethernet channel open/close - Session snapshots saved to Error/User/Marked folders on disconnect - UI: status indicator, statistics, enable checkbox, mark capture button - Ring buffer with configurable retention policies


[8.2.2] - 2026-02-26

Added

  • Added GenerateCsvFile(DataLoggerResult result, string filePath = null) in DataLogger API to export recorded data to a CSV file:
    • Accepts a directory path or full file path; uses current directory when path is null or empty.
    • Generates timestamped file name when a directory is specified.
    • Writes UTF-8 with BOM for correct Chinese display in Excel.
    • Includes metadata (export time, record length, gap, parameter count, data point count), parameter information (name, CAN code, user units), data rows, and statistics (Min, Max, Average).

Changed

  • DataLogger GetDataRecordingStatus: AGD155 and AGD155-EC now use keyword ARecStat (no array index); other controllers continue to use ARecStat[1].

[8.2.1] - 2026-01-14

Added

  • Added GetDataRecordingCapacity method to DataLogger API for querying the maximum recording capacity of the controller.

Changed

  • Improved auto-reconnect logic in IsConnected property:
    • Enhanced reconnection mechanism to continuously retry when connection is lost
    • Added thread-safe reconnection with lock mechanism to prevent multiple threads from triggering reconnection simultaneously
    • Improved state tracking to ensure reconnection attempts continue even after initial failure
    • Reconnection will retry every 2 seconds if connection remains lost, up to 4 attempts per cycle

[8.2.0] - 2026-01-10

Added

  • Added DataLogger high-speed recording API on MotionController:
    • New partial implementation in Shared/DataLogger.cs wrapping AAComm RecData services.
    • DataLoggerConfiguration to configure duration (sec), gap (ms), parameters list, and trigger position.
    • DataLoggerTrigger to configure trigger type, source, value, mask and optional max value (for range triggers).
    • DataLoggerResult / DataLoggerVector containers exposing recorded data, time vector, CAN codes and user units.
    • High-level helper methods: ConfigureDataLogger, StartDataRecording, StopDataRecording, ForceDataLoggerTrigger, WaitForDataRecordingToEnd, UploadDataLoggerData, and one-shot RecordData.

Changed

  • Improved XML documentation for DataLogger trigger parameters with clearer English/Chinese descriptions to match PCSuite terminology (持续时间, 间隔, 触发器, 掩码, 最大触发值, 触发时刻).

[8.1.1] - 2026-01-09

Changed

  • Keyword filtering now relies solely on MessagesContainer (from AAbout command) instead of ControllerKeywordFilter
    • Removed ControllerKeywordFilter class and all firmware version-based filtering rules
    • Keyword availability is now determined directly from the controller's AAbout response, which contains the authoritative list of supported keywords
    • This approach automatically supports any firmware version without requiring manual filter rule updates
    • Keywords are filtered based on what the controller actually reports, ensuring perfect compatibility with any firmware version
    • Simplified KeywordRegistry constructor by removing controllerType and firmwareVersion parameters
    • Removed firmware version reading from AIdentity[26-28] during connection (no longer needed)

Removed

  • Removed ControllerKeywordFilter class and all keyword filtering rules
  • Removed firmware version detection code from CommAPIInterface.Connect() method

[8.1.0] - 2026-01-07

Change

  • Exclude the keywords of the CNCB group (except AGM800).

[8.0.9] - 2026-01-06

Fixed

  • Corrected CNC buffer clear routing so GroupA and GroupB send to their own CNC groups.

[8.0.8] - 2026-01-06

Added

  • Added CNCB (CNC Group B) keyword properties to ICiGroupAxis interface and CiGroupAxis implementation for AGM800 controller:
    • Read-only properties: CNCBSpeed, CNCBAccel, CNCBDecel, CNCBJerk, CNCBEndSpeed, CNCBAbsTrgt, CNCBPosRef, CNCBdPosRef, CNCBStatus , CNCBVel
    • Read/Write properties: CNCBEmrgDec, CNCBPercents , CNCBSpeedPer , CNCBPause
    • These properties allow full access to CNCB parameters and status, enabling complete control and monitoring of CNC Group B operations on AGM800 controllers.

[8.0.7] - 2026-01-06

Changed

  • IsCNCCompleted now supports AGM800's GroupB (AxisRef.B). For GroupB, it reads {axis}CNCBStatus[10] instead of CNCAStatus[10].
  • ControllerType enum values now reference ProductTypes constants to eliminate duplicate definitions and ensure single source of truth for product type IDs.

[8.0.6] - 2026-01-04

Added

  • Added CNC Begin(AxisRef axisRef) method to specify the axis for CNC operations.

[8.0.5] - 2026-01-04

Added

  • Added firmware version-based keyword filtering system in ControllerKeywordFilter:
    • Unified configuration dictionary KeywordFilterRules for all keyword filtering rules (controller type and firmware version dependent)
    • Automatic firmware version detection from AIdentity[26-30] during connection:
      • AIdentity[26] = Major version
      • AIdentity[27] = Minor version
      • AIdentity[28] = Patch version
      • Combined version format: Major * 1000 + Minor * 100 + Patch (e.g., 3.0.42.0.0 → 3042)
    • Support for firmware version-dependent keyword filtering:
      • Keywords can be configured to require a minimum firmware version
      • If firmware version is unknown, version-dependent keywords are skipped by default (safe default)
    • AGD301 controller: MapTableB, MapTableC, MapTableD, MapTableE keywords now require firmware version >= 3042 (3.0.42.0.0)
      • These keywords are automatically skipped for AGD301 controllers with firmware version < 3042
      • These keywords are available for AGD301 controllers with firmware version >= 3042

Changed

  • Refactored keyword filtering system to use unified configuration:
    • Consolidated all keyword filtering rules (always-skip and version-dependent) into a single KeywordFilterRules dictionary
    • Removed separate ControllerBlacklist dictionary in favor of unified configuration
    • Improved maintainability: all filtering rules are now in one place with clear version requirements
  • Enhanced KeywordRegistry to accept firmware version parameter for dynamic keyword filtering
  • Improved CommAPIInterface.Connect() method to read and parse firmware version from controller during connection

Fixed

  • Fixed keyword filtering to properly handle firmware version-dependent keywords for different controller types
  • Improved keyword availability detection based on actual controller firmware version

[8.0.4] - 2025-12-22

Fixed

  • EventPulseRes now reports the correct value (previously always 0).

Added

  • Added Commutated and IsCommutated APIs.

[8.0.3] - 2025-12-17

Fixed

  • Fixed vector motion Begin behavior in SingleAxis.Vector* helpers to only send one Begin command for the currently selected axis, ensuring correct behavior when multiple member axes participate in a vector move.

[8.0.2] - 2025-12-12

Added

  • Added controller discovery helpers in AAMotionAPI:
    • ScanController quickly probes a subnet for reachable controllers and returns their IP addresses.
    • ScanControllerDetailed returns full ConnectionData entries for discovered controllers using parallel probing.

[8.0.1] - 2025-12-02

Added

  • Added global communication transport switch AAMotionConfig.UseAsyncCommTransport to control how AAMotion sends commands to AAComm:
    • false (default): Legacy synchronous mode using CommAPI.SendReceive with internal locking for thread safety.
    • true: Asynchronous queue-based mode using CommAPI.Send plus per-call wait handles for high-concurrency scenarios.
  • Added SendViaAsyncQueue implementation in CommAPIInterface to wrap AAComm's async Send API into a synchronous-style call at AAMotion level.

Changed

  • Centralized communication error handling in CommAPIInterface via unified ErrorHandlers(AACommEventArgs status) helper:
    • All synchronous and asynchronous send paths now route errors through a single handler.
    • MotionController.SendCommandString and SendBulkCommandString rely on CommAPIInterface.ErrorOccurred instead of duplicating error formatting logic.
  • Improved thread-safety and debuggability of communication:
    • Synchronous mode uses an internal lock to serialize access to SendReceive, preventing "SendReceive is in progress" errors under multi-threading.
    • Asynchronous mode avoids mixing AAComm's synchronous and asynchronous APIs while still providing a synchronous programming model to AAMotion callers.

[8.0.0] - 2025-12-01

Added

  • Deprecate .NET 4.0 target framework. The minimum supported .NET framework is now 4.8

[7.6.2] - 2025-11-25

Added

  • Added SlowLogger functionality for data logging and monitoring
    • Added LoggerOn property to enable/disable slow logger (1 = enabled, 0 = disabled)
    • Added LoggerGap property to set sampling interval (16 samples per group, approximately 1.0 ms per group)
    • Added LoggerParams array property to configure up to 40 logger parameters (1-40, organized in 8 groups)
    • Added LoggerFullMod property to control FIFO full mode (0 = pause logging, 1 = overwrite oldest data)
    • Added LoggerStatus array property to monitor logger status and statistics
    • Added LoggerAbout array property to get controller slow logger metadata
    • Added convenience properties: LoggerFreeSpace, LoggerState, LoggerPushedPackets, LoggerLostPackets
    • Added ConfigureSlowLogger() method to configure logger parameters in one call with flexible parameter specification:
      • Supports string parameters (e.g., "CPos", "AVel[2]", "Pos")
      • Supports int CAN codes (direct assignment)
      • Supports SlowLoggerParameter struct for strongly-typed parameter description
      • Supports eKeyword enum values
    • Added LoggerUpload() method to upload slow logger data from the controller
    • Added SlowLoggerParameter struct for strongly-typed logger parameter specification (Axis/Keyword/Array index)
    • Added GetKeywordCANCode() method overloads to get CAN codes for keywords:
      • Base CAN code retrieval (without axis/array index)
      • Complete CAN code retrieval (with axis and optional array index)
      • Support for both eKeyword enum and string keyword names

[7.6.1] - 2025-11-17

Added

  • Added EnumPropertyHelper static class to provide enumeration value description functionality
    • Added GetDescription() extension method for all enum types to automatically retrieve friendly descriptions from resource files
    • Added description retrieval methods for specific enumeration types:
      • GetMotionStatDes() - Get description for MotionStat (bit flag enum)
      • GetMotionReasonDes() - Get description for MotionReason
      • GetStatRegDes() - Get description for StatReg (bit flag enum)
      • GetHomingStatDes() - Get description for HomingStat
      • GetInTargetStatDes() - Get description for InTargetStat
      • GetConFltDes() - Get description for ConFlt
      • GetEncTypeDes() - Get description for EncType
      • GetMotionModeDes() - Get description for MotionMode
      • GetMapTypeDes() - Get description for MapType
      • GetOperationModeDes() - Get description for OperationMode
      • GetMotorOnDes() - Get description for MotorOn
      • GetInjectTypeDes() - Get description for InjectType
    • Support for both bit flag enums and regular enums with automatic description combination for multiple set bits
    • Automatic fallback to "Unknown" descriptions when enum values are invalid or not found in resource files
    • All descriptions are retrieved from Descriptions.resx resource file using unified naming convention: {EnumName}_{EnumValue}

[7.6.0] - 2025-10-31

Added

  • Added global configuration class AAMotionConfig with UseNativeDataTypes property to control data type behavior
    • UseNativeDataTypes = false (default): Backward compatibility mode - float parameters return int (rounded), long parameters return int if within int range
    • UseNativeDataTypes = true: Native type mode - returns real float/double/long values with full precision
  • Added ParameterMetadataCache class for caching parameter type information to improve performance
  • Added ParameterTypeConverter static class to centralize type conversion logic for controller parameters
  • Added unified AASmartArrayWrapper class to automatically handle type conversion for array properties (int/float/double/long)
  • Added support for native float, double, and long data types with automatic type detection and conversion

Changed

  • Refactored parameter type conversion logic from SingleAxis.cs to centralized ParameterTypeConverter class
  • Enhanced array wrapper system to automatically detect and handle int/float/double/long types based on parameter metadata
  • Improved type conversion performance by caching parameter metadata on connection initialization
  • Refactored GetSmartValue and SetSmartValue methods in Node.cs to use centralized ParameterTypeConverter
  • Improved code organization in PropertyTypeSystem.cs with better method grouping and formatting
  • Enhanced backward compatibility: old code expecting int types continues to work without modification
  • Optimized KeywordMappings initialization in Connect() method to handle controller type detection failures gracefully

Fixed

  • Fixed type conversion errors when accessing float/double/long parameters in old code that expects int types
  • Fixed KeyNotFoundException when KeywordMappings was not initialized due to controller connection failures
  • Fixed missing error handling for controller type detection during connection

[7.5.5] - 2025-9-24

Changed

  • Add the retry reconnection mechanism. Method: TryReconnect()
  • Add the automatic connection mechanism. In the Connect() method, add the parameter enableAutoReconnect to enable/disable the automatic reconnection mechanism.
  • AGM800 supports linear and ARC movements for all axes.

[7.5.4] - 2025-9-12

Changed

  • Add CNC attributes :CNCASpeed, CNCAAccel, CNCADecel, CNCAJerk
  • Add ECAM attributes: ECAMStart, ECAMStartCyc, ECAMEndCyc, ECAMEnd, ECAMGap, ECAMCycles, ECAMMasterIni, ECAMCycCount, ECAMInterp, ECAMMaster, StopECAM, ECAMTableNum
  • Increase the setting for communication timeout
  • Enhance ECAM functions

[7.5.3] - 2025-08-26

Changed

  • Added a check for relative motion to disallow zero distance.
  • Added IO_B for AGD20.

[7.5.2] - 2025-08-08

Changed

  • Change "Commutated" to "AutoPhase". Change "IsCommutated" to "IsAutoPhase"
  • Add the keywords CNCAEncFactNu, CNCAEncFactDn, CNCASpeedPer, CNCAEndSegMod,AccelFact
  • Add methods BulkCommandParser and BulkCommandParserInt

[7.5.1] - 2025-08-04

Changed

  • Add WriteGenData and ReadGenData to read and write GenData
  • A dynamic keyword shielding mechanism based on controller type has been implemented, which has enhanced the system's compatibility and maintainability.
  • Initialization and connection exception information optimization

Fixed

  • The issue of the AGD101-EC controller connection failure has been resolved.

[7.4.12] - 2025-07-30

Changed

  • Add the keyword "EventPulseRes"
  • Override MoveAbs to achieve position override

[7.4.11] - 2025-07-22

Changed

  • Add methods SetEventTableBeginIndex, SetEventTableEndIndex, SetEventTableSelect, and SetEventTableValue to be compatible with older versions of PEG
  • Modify the return type of ClearConFlt to be bool

[7.4.10] - 2025-07-18

Changed

  • Add method RunCNCProgramFromFile (use the CNC file generated by PCSuite to perform interpolation movement)
  • Add method IsCNCCompleted (determine whether the CNC movement has been completed)

[7.4.9] - 2025-07-17

Changed

  • Add the MotorOn and InjectType enumeration types along with the English descriptions of the parameters.
  • Added methods MoveAbsAndWait, MoveAbsRepetitiveAndWait, MoveRelAndWait, MoveRelRepetitiveAndWait. Return true after movement and positioning.

[7.4.8] - 2025-07-04

Changed

  • Add enumeration types and English descriptions for parameters to enhance usability.
  • After the vector motion parameters are configured, the "Begin" command is automatically sent.


[7.4.7] - 2025-06-26

Fixed

  • Modify the array length of HomingDef.

[7.4.6] - 2025-06-16

Changed

  • The AAValueArray array starts from index 1.
  • Add the keywords MapTableB, MapTableC, MapTableD, and MapTableE.

[7.4.5] - 2025-06-11

Changed

  • Add the method ClearConFlt() to clear ConFlt.
  • Add the methods GetDOutPort and GetDInPort to obtain the IO status of the specified bit.

[7.4.4] - 2025-06-05

Changed

  • Add annotations to methods and attributes.

[7.4.3] - 2025-06-03

Changed

  • Add method and attribute annotations.

Fixed

  • Add the minimum axis judgment of the VectorLinear method of Vector.

[7.4.2] - 2025-05-30

Changed

  • Change IsHomed to IsHoming and determine whether the return to home is complete.

[7.4.1] - 2025-05-29

Changed

  • Add Home() to set HomingOn=1.

[7.4.0] - 2025-05-29

Changed

  • Add the Vector function.

[7.3.13] - 2025-05-23

Changed

  • OpenAACommServer increases the return value ConnectResult.

[7.3.12] - 2025-05-23

Changed

  • The Amotion API of CiGroup adds operations on GroupB.

[7.3.11] - 2025-05-21

Changed

  • The MoveRel and MoveAbs of the AAMotionAPI add MotionController (different controller instances can be used).

[7.3.10] - 2025-05-20

Changed

  • Commutation success added judgment 200: Not required, 300/400: Successfully completed (using Hall), 500: Successfully completed (parameters have been modified).
  • Adding a judgment to return to zero completes IsHoming().

[7.3.9] - 2025-05-06

Changed

  • Add GroupB to AGM800.

[7.3.8] - 2025-04-24

Changed

  • Add force control function.
  • Add attributes "RptMode", "RptCycles", and "RptCounter".

[7.3.7] - 2025-04-16

Changed

  • Added axis properties CurrDir, RevPLim, FwdPLim, MaxPosErr, MaxVelErr.

[7.3.6] - 2025-04-03

Changed

  • Adapt to AAComm.StartAACommServer() return type change from 'string' to 'ConnectResult'.

[7.3.5] - 2025-04-03

Changed

  • PEG and Lock do not need to specify an axis when using an axis object.

[7.3.4] - 2025-03-27

Changed

  • Increase the Commutate method commutate and determine whether commutation is complete.

[7.3.3] - 2025-03-27

Changed

  • The fourth parameter of SetMotionProfile is double.

[7.3.2] - 2025-03-21

Changed

  • Add the SetLock method to set the Lock function.

Fixed

  • Delete the attribute array VecPosFDef. This attribute is not in the dictionary.
  • Make four connection attempts while making a connection in AAmotion.

[7.3.1] - 2025-03-20

Changed

  • Repair Group can set the specified bit of the specified axis.
  • Add PEG methods, SetSingleEventPEG and SetEventFixedGapPEG.
  • Maintain the AAMotionAPI and do not need to specify an axis when using Group.

[7.3.0] - 2025-03-18

Changed

  • Implement AAValueArray's foreach method.
  • Add and implement the Java language call AAMotion project. AAMotionJava.

Fixed

  • Fixed VecPosFDef attribute being AAValueArray.
  • Adds the undefined attribute int UserPWMDiv. AAValueArray MapTable. int EventOn.

[7.2.4] - 2025-03-05

Changed

  • Add the method CiGroupDOutSetBit, CiGroupDOutClearBit, CiGroupDOutToggleBit. When using CNCGroup, can set, clear, and switch the specified axis (AAMotionAPI also add).
  • AAValueArray CNCAStatus, added to the registry.

Fixed

  • Fixed the return value error of MotionReason, ForceCmdValVecArcDir, VecSpeed, VecType, LoggerFullMod.

[7.2.3] - 2025-02-18

Changed

  • Add Home(filepath) to return to zero based on the zeroback file.

Fixed

  • Fix the Group API method using GetGroup.

[7.2.2] - 2025-02-12

Changed

  • Add the noAck parameter of Connect.
  • Deleted the directory "\AAMotion\Implementations\Central_I\Core".
  • Update yaml.net nuget version to 16.3.0.

[7.2.1] - 2025-02-11

Fixed

  • Fix AAMotion MoveAbs by adding Begin().
  • Fix MoveAbs() of AAMotionAPI; MoveAbs is called instead of MoveRel.

Changed

  • Improve the AAMotionAPI and add the API of IGroupAxis, ICiSlave, ICiGroupAxis and IGroupAxis interfaces.

[7.2.0] - 2025-02-10

Changed

  • Add the bit operation of Group on IO output (GroupDOutSetBit, GroupDOutClearBit, GroupDOutToggleBit).

[7.1.0] - 2025-02-07

Changed

  • Increase the usage methods of the keywords, ProgHalt, ProgRun, AutoExec, ProgHaltAll and ProgReset.
  • Reload connect and add the port number.

[7.0.5] - 2025-01-16

Fixed

  • If connection fail due to FwInfoMismatch, retry connection with ForceAboutData set to true.

[7.0.4] - 2025-01-16

Changed

  • Reduce AAMotionAPI overloading: use methods with optional parameters.
  • Add the calling method of the AAMotionAPI.

[7.0.3] - 2025-01-09

Fixed

  • Add a timeout mechanism to the initialization loop in the CommAPIInterface constructor to prevent infinite waiting. Set the maximum wait time to 3 seconds (30 ticks of 100ms).

[7.0.2] - 2025-01-09

Fixed

  • Make sure the dictionary's life cycle is permanent.

[7.0.1] - 2025-01-08

Fixed

  • Include controller parameters eKeyword.cs file.

[7.0.0] - 2024-12-30

⚠️ Major Release

  • Introduction of AAMotionAPI, a functional programming style API interface for users more familiar with C++ style programming. This interface is incomplete.
  • AAMotion infrastructural level has been cleaned and redesigned:
    • There are no more status updates.
    • There are no more settings updates.
    • There is a new type called AAValueArray which functions exactly like an array.
    • All keywords are now accessible as a property.
    • Some keywords are more like functions, in which case they are exposed via the API as methods.
    • Hooking onto errors is now done via EventOccurred action in MotionController class.
    • Documentations have currently all been removed, due to a large effort to clean the code base and remove code bloat, unify and to standardize the code style. Since there is now a direct link to keywords of the controller, it may be better to centralize efforts in documentations first.
    • All design considerations are in an effort to speed up the performance of the API usage, as well as to simplify the overall design. It is now extremely straightforward to add support for new keywords.

[6.0.4] - 2024-11-20

Fixed

  • Fixed indexing bug for ForceCurr_SetForceCmdSource() and ForceCurr_SetCurrCmdSource() methods.

[6.0.3] - 2024-07-01

Fixed

  • Setting and Querying the MotorOn keyword in PCSuite is 20 seconds, so here we do the same thing at the communicator interface.

[6.0.2] - 2024-06-16

Fixed

  • .NET 4.0 YamlDotNet reference 4.2.2.

[6.0.1] - 2024-05-31

Fixed

  • Set motion mode when MoveAbs is called.

[6.0.0] - 2024-05-08

Added

  • Reference AAComm 7.0.0.

[5.13.0] - 2023-12-20

Added

  • Added support for interpreting user program variable names via AdaptUserProgMessage.

[5.12.3] - 2023-11-30

Fixed

  • AllStatInterpreter now supports 12 axes to compliment changes in 5.10.0.
  • VectorMotion Pause Continue Fix, Added Enum for Vector Motion.

[5.12.2] - 2023-11-27

Changed

  • AACommServer: Allow "retrying" socket init. upon process start.

[5.12.1] - 2023-11-22

Changed

  • Added support for on-the-fly target/speed/accel change for MoveAbs().

[5.12.0] - 2023-10-31

Changed

  • Add .net 6.0 and 7.0 targets. (nuget 5.11.0 is wrongly built and deprecated).

[5.11.0] - 2023-09-08

Fixed

  • Fix the errcode of 'FailAboutData' when connecting.

[5.10.0] - 2023-08-04

Fixed

  • AllStatUpdate to query for all 12 axes (instead of 8) such that the auxiliary ports will be updated too.

[5.9.0] - 2023-08-03

Fixed

  • AllStatUpdate to include AGD155_EC_ID as well.

[5.8.0] - 2023-04-13

Fixed

  • CRITICAL! AAComm RecUpload and "continuous" messages related bug.

[5.7.0] - 2023-04-13

Fixed

  • Add YamlDotNet nuget dependency.

[5.6.10] - 2023-04-13

Changed

  • Add vector motion methods.

[5.6.9] - 2023-01-12

Changed

  • Added gcode analysis methods.

[5.6.8] - 2023-01-12

Changed

  • Added methods to cigroup-axis class to do 6-axes linear motion and write doutport value related to axis to buffer.

[5.6.6] - 2023-01-12

Changed

  • Move params and methods of event class to single axis class.

[5.6.5] - 2023-01-12

Changed

  • Added params of gantry.

[5.6.4] - 2023-01-12

Changed

  • Added params and methods of error map.

[5.6.3] - 2023-01-12

Changed

  • Added params of userpwm.

[5.6.2] - 2023-01-12

Changed

  • Added params and methods of group9(userparam).

[5.6.1] - 2023-01-11

Changed

  • Added params and methods of position lock.

[5.6.0] - 2023-01-03

Added

  • Added override for Home method to do homing based on sequence stored in memory.

[5.5.0] - 2022-08-17

Changed

  • Communicator interface, AllStat Instantiation is cleaned to used feature_1 integer directly.

[5.5.0] - 2022-08-03

Added

  • All the Move commands in Single axis motion is now updated to include speed, accel, decel parameters.

[5.4.13] - 2022-08-03

Changed

  • MotionStat is added to the end of each Move Command. This should eliminate the timing issue that we experienced with the Taiwan customer.

[5.4.12] - 2022-08-03

Fixed

  • Removing MotorCurrent, Fixing MotorCurr and CurrRef Statuses in ISingleAxis.

[5.4.11] - 2021-10-04

Changed

  • Modify all Properties related to Force/Current/Position Mode Switch feature to be based on InternalProperies.

[5.4.10] - 2021-09-13

Changed

  • If packet number in a SlowLogger UpLoad is zero, jump to next UpLoad without processing.

[5.4.9] - 2021-09-10

Changed

  • Slow logger API StopSlowLogData: check the ID of the packet that was last logged, remove unwanted packet ID and contents from the main log list.

[5.4.8] - 2021-09-09

Added

  • Slow logger API functions: StartSLowLogProcess and StopSlowLogData.

[5.4.7] - 2021-09-07

Fixed

  • BuffTime and BuffPos command format must be array type.

[5.4.6] - 2021-09-06

Added

  • Add properties and methods for Spline buffer motion in CiSingleAxis.

[5.4.5] - 2021-08-04

Fixed

  • HomeToLimitThenIndex, Jog to index - 4, the first parameter is speed, argu 1.

[5.4.4] - 2021-06-30

Changed

  • Turn on AGMotion.
  • Open the CloseAACommServer API to the user.

[5.4.3] - 2021-06-08

Changed

  • Hide AGMotion for interim version release.

[5.4.3] - 2021-05-24

Changed

  • Do some Clearance works.

[5.4.3] - 2021-05-23

Added

  • Add Force/Current/Position Mode Switch feature.

[5.4.2] - 2021-05-20

Added

  • Add new AGMotion feature.

Changed

  • Eliminate all compilation Warnings.
  • AGMotion as an individual namespace.

[5.4.1] - 2021-05-12

Fixed

  • Default set time out as 2 seconds when send out packet.

[5.4.0] - 2021-04-16

Added

  • Add an option to set time out when send out packet, convenient for the user to debug for breakpoint.

[5.3.2] - 2021-03-24

Fixed

  • Corrected tag for CNC Arc Motion.

[5.3.1] - 2021-03-04

Fixed

  • Fix the bug on AIO Output Readback value incorrect.

[5.2.10] - 2021-02-17

Changed

  • Move VBus, VLogic, PwrTemp, MotorTemp into IMotionController to be used for all controller class.

[5.2.9] - 2021-02-17

Changed

  • Extend AGM400 Axes, IO, GroupAxis, PositionEventEx, full range from A to F.
  • Extend AGM800 Axes, IO, GroupAxis, PositionEventEx, full range from A to L.

[5.2.8] - 2020-10-29

Changed

  • AllStat for different controllers.

[5.2.7] - 2020-09-29

Changed

  • Change 4.6.2 target frameworks to 4.8 (remove redundancy).

[5.2.6] - 2020-09-29

Fixed

  • Updated calls to GetAllAxisStat within Group.cs.

[5.2.5] - 2020-09-19

Added

  • And multiple target frameworks support: .net 4, 4.6, 4.6.2.

[5.1.5] - 2020-09-18

Changed

  • Updated definitions and bug fixes for CNC Motion.

[5.1.4] - 2020-09-18

Changed

  • Call GetAllAxisStat using a new parameter to decide if AllStatAxisData group 10 is included.
  • Add DInPortHigh in AllStatAxisData group 10.
  • Add BoardTemp in AllStatAxisData group 10.
  • Clearance in IOMoudle.cs.

[5.1.3] - 2020-09-17

Changed

  • Array Type parameter index start from 1 for AAMotion user.
  • Rename and add elements in enum ControllerType.

Fixed

  • Instantiate eEventSetting dictionary for read.

[5.1.2] - 2020-09-16

Added

  • Add BiDirConfig feature.

[5.1.1] - 2020-09-15

Changed

  • Rename Class AG100 to AGD155.
  • Rename Class MAS02 to AGM800.
  • Rename Class MAS01 to AGM400.
  • Rename Class AG300 to AGC300.
  • Rename Class AGD301 to AGC301.

Added

  • Add DInLogHigh feature.

[5.1.0] - 2020-09-10

Added

  • Add AGD301 class.
  • Add TimerHandler in TimerEvent for internal debug from AAMotion user source code program.

Changed

  • Change the commands of GetAllSettingsDIOAG300, GetAllSettingsAIOAG300 to dynamic contents, initialize them in the CommandList and rebuild later dynamically.

Fixed

  • Dynamic Command fix the AGD301 system down after connection.
  • Add eIOSetting.DInMode in UpdatePropertyListIOSettingArray.
  • NumOfAOut for output array-type keywords.

[5.0.1] - 2020-09-09

Fixed

  • FIX nuget package.

[5.0.0] - 2020-09-09

Changed

  • Merge from 4.21.8.
  • ParseDIOSettings, ParseAIOSettings don't trigger event to write into Array-Type IO variables.

[4.21.8] - 2020-09-04

Changed

  • Replace PosEvent with PosEvent_A, PosEvent_B, PosEvent_C in AG300 class.

[4.21.7] - 2020-09-04

Fixed

  • Take CiStatus from AllStat returning data structure.

[4.21.6] - 2020-08-31

Fixed

  • Make AllStat "Continuous" message type.

[4.21.5] - 2020-08-27

Fixed

  • Increase Axis to L.

[4.21.4] - 2020-08-27

Added

  • Add CiStatus feature (Modified). Temporarily use .PropertyList[Axis].CiSlaveSettingsArray[eCiSlaveSetting.CiStatus][1] to replace .PropertyList[Axis].Statuses.CiStatus_1.

[4.21.3] - 2020-08-27

Added

  • Add CiStatus feature.
  • Temporarily disable CiSlaveRefreshRequired since AllStat[255] cannot work set.
  • Increase the AxisRef to Axis K.
  • Define GetAllCiAxisStat to replace GetAllAxisStatExtended1.
  • Add CiIdentity, CiStatus into eCiSlaveSetting.

[4.21.2] - 2020-08-06

Added

  • Optimize Array Properties Access.
  • Add new command GetAllSettingDIOCiMaster, GetAllSettingAIOCiMaster.

[4.21.1] - 2020-07-24

Added

  • Add MAS02 (AGM800) class, initial version.

[4.20.1] - 2020-06-30

Added

  • Add AG100 class, initial version.

[4.19.2] - 2020-06-30

Changed

  • Rename the property arrayStorage.

Fixed

  • Refresh takes after the communication OK with the controller.
  • VBus, VLogic, PwrTemp, MotorTemp updated valid only after the communication OK with the controller.

[4.19.1] - 2020-06-26

Changed

  • Set a flag called "AxisInternalPropertyUpdatedFromController" to true after the connection is OK, which prevent intermittently read PropertyList after connection but InternalProperty have not been updated.

[4.19.0] - 2020-06-23

Changed

  • Optimize the IO array properties update event handler.
  • Property read must occur after connected, otherwise default as "unreasonable" values.

[4.18.0] - 2020-06-19

Added

  • Replace the Set methods on "Array-Like" IO Features with direct "Array" format Read/Write Properties. These are DInMode, DOutMode, DOutSelect, AInFilt, AInOffSet, AInDB, AInGain, AInMode, AOutOffset, AOutShifts, AOutMode, AOutPort.

[4.17.0] - 2020-06-17

Added

  • Add dynamic allocation array size of Digital and Analogue input/output Mode, Filt, Offset, DB, Gain.

[4.16.0] - 2020-06-12

Changed

  • Upgraded AAComm DLL is upgraded from v3.0.0.2 to v3.0.0.18.

[4.15.0] - 2020-04-30

Added

  • AOutPort has additional option to change to openloop mode.

Changed

  • Clean up namespaces to use only one AAMotion namespace.

[4.13.1] - 2019-01-10

Fixed

  • Put back bulk command method which was removed in v4.12.0.

[4.13.0] - 2019-01-07

Added

  • MultiController.MoveAbs/MoveRel: Basic (Cross-controller) Multi-axis Synchronized PTP Method.

[4.12.1] - 2019-01-06

Changed

  • Changed [UpdateInternalStatus()] to type boolean.

[4.12.0] - 2019-12-30

Added

  • New method [UpdateInternalStatus()] on all MotionControllers which allow user to explicitly update internal status.

[4.11.0] - 2019-10-17

Added

  • New Homing method, which can take in sequence file .hseq file which is created from PCSuite.

[4.10.2] - 2019-10-13

Fixed

  • Edited summary of SendBulkCommandString method.

[4.10.1] - 2019-10-10

Fixed

  • Differentiated between internal and external bulk messaging.

[4.10.0] - 2019-10-10

Added

  • Support for bulk messaging.

[4.9.0] - 2019-08-26

Added

  • Support PositionEvents from AG300 Controller.

[4.8.0] - 2019-08-26

Added

  • LinearAbsolute: Generic CNC Method.
  • MultiSegmentOn: Multi-segment Option.

[4.7.0] - 2019-08-26

Added

  • Added InTargetTol, Added InTargetTime Keywords.
  • Added Arc functions in Group Axis to include Additional Cycles Input Parameter.

Fixed

  • Arc functions in Group axis was missing 1 parameter.

[4.6.0] - 2019-08-26

Changed

  • AAComm is now taken from nuget package.

[4.5.0] - 2019-08-26

Added

  • AllStat: Extension to be backward compatible and for supported MotorTemp.

[4.4.0] - 2019-08-26

Added

  • Controller has new constructor overload to allow configurable internal update rate.

[4.3.0] - 2019-08-26

Changed

  • Whenever motion method is called from either SingleAxis or GroupAxis, AllStat command is called immediately afterwards to update the statuses of the internal variables.

Planned features for next release

  • AOutPort - OpenLoop mode need to support changing to different Axis (or maybe not, maybe we will modify infrastructure so there will be no more need to support this feature in the future).
  • QC all the documentation.
  • Change Id and Iq according to the change in firmware version v1.3.0.
  • WPF support to all the properties to provide data binding functionality.
  • Updating status for all axes independent of what controller type is instantiated.
  • New options to homing method to home to hardstop.
  • Make it possible to load homing sequence file from PCSuite directly into AAMotion so that homing will be able to perform the exact steps defined by homing sequence file.
  • Update IGroup status property to link to eCncStatusParams enum in ParamCommon.cs.
  • Clean up code, clean references and namespaces (position events etc).
  • Deprecate PositionEvent.