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 onIMotionController/MotionControllerthat 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 (false→CommAPI.SendReceiveover the sync flow;true→CommAPI.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 useARecStart[1]command syntax (firmware v2.3+); other controllers continue to useARecStartwithout index. - Refactored DataLogger and SlowLogger to route all communication through
CommAPIInterface.SendAndRecieve()instead of directly callingCommAPI.SendReceive(). This ensures consistent behavior whenAAMotionConfig.UseAsyncCommTransportis 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 getAACommServerNetConsole. 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 viaARPTools.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:
NullReferenceExceptioninTcpClient.EndConnectwhen scanning IPs with no controller (disposed socket from danglingConnectAsynctask) - Removed
TcpPortReachableprivate 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 toISingleAxis/SingleAxis, exposing Identity[62] bit 0x10 (ControllerIdentityFeature_02.LockSrcZero_Supported). WhenlockSource = 0is passed to the three multi-step homing methods on an unsupported controller,NotSupportedExceptionis thrown. - Added
ControllerIdentityFeature_02.IDENTITY_NEW_FEATURES_2_LOCKSRC_ZERO_SUPPORTED = 0x00000010constant. - 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. PopulatesHomingDefas 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. PopulatesHomingDefas 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. PopulatesHomingDefas 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
FastReadCacheclass inShared/FastReadCache.csfor 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,RefreshErrorfor 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.
- New
Changed
AAMotionConfignow exposesFastReadEnabled(global on/off switch) andFastReadCacheRefreshIntervalMs(default 1ms).MotionControllernow exposesFastReadCacheproperty,EnableFastReadCache(),DisableFastReadCache(),RegisterCacheKeywords(),RefreshCacheNow(), andGetCacheAgeMs().CommAPIInterface.HandleSingleValueAccessedandHandleArrayValueAccessednow check the cache first when enabled, falling back to controller reads.InitializeFastReadCacheIfEnabled()is automatically called after successfulConnect()— registers A/B/C axes' common keywords (Pos,MotionStat,InTargetStat) andAInPort[1-4], then enables the cache ifAAMotionConfig.FastReadEnabledis true.
Added
- Added
CommAPIproperty onMotionControllerto expose the underlyingAAComm.CommAPIinstance 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 keywordARecStat(no array index); other controllers continue to useARecStat[1].
[8.2.1] - 2026-01-14
Added
- Added
GetDataRecordingCapacitymethod to DataLogger API for querying the maximum recording capacity of the controller.
Changed
- Improved auto-reconnect logic in
IsConnectedproperty:- 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.cswrapping AACommRecDataservices. DataLoggerConfigurationto configure duration (sec), gap (ms), parameters list, and trigger position.DataLoggerTriggerto configure trigger type, source, value, mask and optional max value (for range triggers).DataLoggerResult/DataLoggerVectorcontainers exposing recorded data, time vector, CAN codes and user units.- High-level helper methods:
ConfigureDataLogger,StartDataRecording,StopDataRecording,ForceDataLoggerTrigger,WaitForDataRecordingToEnd,UploadDataLoggerData, and one-shotRecordData.
- New partial implementation in
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
ControllerKeywordFilterclass and all firmware version-based filtering rules - Keyword availability is now determined directly from the controller's
AAboutresponse, 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
KeywordRegistryconstructor by removingcontrollerTypeandfirmwareVersionparameters - Removed firmware version reading from
AIdentity[26-28]during connection (no longer needed)
- Removed
Removed
- Removed
ControllerKeywordFilterclass 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
ICiGroupAxisinterface andCiGroupAxisimplementation 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.
- Read-only properties:
[8.0.7] - 2026-01-06
Changed
IsCNCCompletednow supports AGM800's GroupB (AxisRef.B). For GroupB, it reads{axis}CNCBStatus[10]instead ofCNCAStatus[10].ControllerTypeenum values now referenceProductTypesconstants 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
KeywordFilterRulesfor all keyword filtering rules (controller type and firmware version dependent) - Automatic firmware version detection from
AIdentity[26-30]during connection:AIdentity[26]= Major versionAIdentity[27]= Minor versionAIdentity[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,MapTableEkeywords 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
- Unified configuration dictionary
Changed
- Refactored keyword filtering system to use unified configuration:
- Consolidated all keyword filtering rules (always-skip and version-dependent) into a single
KeywordFilterRulesdictionary - Removed separate
ControllerBlacklistdictionary in favor of unified configuration - Improved maintainability: all filtering rules are now in one place with clear version requirements
- Consolidated all keyword filtering rules (always-skip and version-dependent) into a single
- Enhanced
KeywordRegistryto 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
EventPulseResnow reports the correct value (previously always 0).
Added
- Added
CommutatedandIsCommutatedAPIs.
[8.0.3] - 2025-12-17
Fixed
- Fixed vector motion
Beginbehavior inSingleAxis.Vector*helpers to only send oneBegincommand 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:ScanControllerquickly probes a subnet for reachable controllers and returns their IP addresses.ScanControllerDetailedreturns fullConnectionDataentries for discovered controllers using parallel probing.
[8.0.1] - 2025-12-02
Added
- Added global communication transport switch
AAMotionConfig.UseAsyncCommTransportto control how AAMotion sends commands to AAComm:false(default): Legacy synchronous mode usingCommAPI.SendReceivewith internal locking for thread safety.true: Asynchronous queue-based mode usingCommAPI.Sendplus per-call wait handles for high-concurrency scenarios.
- Added
SendViaAsyncQueueimplementation inCommAPIInterfaceto wrap AAComm's asyncSendAPI into a synchronous-style call at AAMotion level.
Changed
- Centralized communication error handling in
CommAPIInterfacevia unifiedErrorHandlers(AACommEventArgs status)helper:- All synchronous and asynchronous send paths now route errors through a single handler.
MotionController.SendCommandStringandSendBulkCommandStringrely onCommAPIInterface.ErrorOccurredinstead 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.
- Synchronous mode uses an internal lock to serialize access to
[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
LoggerOnproperty to enable/disable slow logger (1 = enabled, 0 = disabled) - Added
LoggerGapproperty to set sampling interval (16 samples per group, approximately 1.0 ms per group) - Added
LoggerParamsarray property to configure up to 40 logger parameters (1-40, organized in 8 groups) - Added
LoggerFullModproperty to control FIFO full mode (0 = pause logging, 1 = overwrite oldest data) - Added
LoggerStatusarray property to monitor logger status and statistics - Added
LoggerAboutarray 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
SlowLoggerParameterstruct for strongly-typed parameter description - Supports
eKeywordenum values
- Added
LoggerUpload()method to upload slow logger data from the controller - Added
SlowLoggerParameterstruct 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
eKeywordenum and string keyword names
- Added
[7.6.1] - 2025-11-17
Added
- Added
EnumPropertyHelperstatic 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 MotionReasonGetStatRegDes()- Get description for StatReg (bit flag enum)GetHomingStatDes()- Get description for HomingStatGetInTargetStatDes()- Get description for InTargetStatGetConFltDes()- Get description for ConFltGetEncTypeDes()- Get description for EncTypeGetMotionModeDes()- Get description for MotionModeGetMapTypeDes()- Get description for MapTypeGetOperationModeDes()- Get description for OperationModeGetMotorOnDes()- Get description for MotorOnGetInjectTypeDes()- 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.resxresource file using unified naming convention:{EnumName}_{EnumValue}
- Added
[7.6.0] - 2025-10-31
Added
- Added global configuration class
AAMotionConfigwithUseNativeDataTypesproperty to control data type behaviorUseNativeDataTypes = false(default): Backward compatibility mode - float parameters return int (rounded), long parameters return int if within int rangeUseNativeDataTypes = true: Native type mode - returns real float/double/long values with full precision
- Added
ParameterMetadataCacheclass for caching parameter type information to improve performance - Added
ParameterTypeConverterstatic class to centralize type conversion logic for controller parameters - Added unified
AASmartArrayWrapperclass 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.csto centralizedParameterTypeConverterclass - 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
GetSmartValueandSetSmartValuemethods inNode.csto use centralizedParameterTypeConverter - Improved code organization in
PropertyTypeSystem.cswith better method grouping and formatting - Enhanced backward compatibility: old code expecting int types continues to work without modification
- Optimized
KeywordMappingsinitialization inConnect()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
KeyNotFoundExceptionwhenKeywordMappingswas 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.