Repository navigation
Releases
Software/aacomm.cli/v1.0.1
aacomm.cli 1.0.1
The aacomm.cli command line tool for Windows x64, built with AAComm 15.0.0. Self-contained: no .NET install is needed. Unzip it and start with cheat-sheet.md.
Changed
- Built with AAComm 15.0.0.
Fixed
- A
sessionwhose link drops after a server timeout ends at the next line withsession ended: the link to the controller dropped, instead of refusing that line as an unrecognized mnemonic ofproduct -1. - A server timeout's row no longer garbles the terminal: the reply prints without the stray carriage return that made
<- ERRORoverwrite it.
Verify this download. SHA256SUMS.txt.asc is a detached OpenPGP signature over SHA256SUMS.txt. The key, its fingerprint and the steps: https://github.com/akribis-agito/Agito-Releases#verification
Software/aacomm.cli/v1.0.0
aacomm.cli 1.0.0
The aacomm.cli command line tool for Windows x64, built with AAComm 15.0.0. Self-contained: no .NET install is needed. Unzip it and start with cheat-sheet.md.
Added
aacomm.cliis published: a self-contained win-x64 zip on Agito-Releases,Software/aacomm.cli/v<ver>, on its own version line; this one is built with AAComm 15.0.0. It needs no .NET install. Its help text starts with its version and the AAComm it was built with, as inaacomm.cli 1.0.0 (AAComm 15.0.0). It starts theAACommServerNativein itsaacommserver\folder when no AACommServer is running, and leaves a running one in place.- A firmware simulator is a target like a controller:
--sim-exe <firmware_sim>in place of--ipon every verb that connects. The simulator lives for one run, so work that needs state runs in onesessionorbatch.flash,fault,params-uploadandparams-downloadrefuse a simulator. --sim-memory <folder>keeps what a simulator saves to flash, such as anASaved parameter or a downloaded user program, so the next run against the same folder boots with it.- A
--sim-exerun refuses an AACommServer older than the tool's AAComm, exit1. An older server, such as an installed older PCSuite's, runs the simulator by other rules and ignores--sim-memory; close or update that PCSuite and run again. batchandsessiontakesleep <ms>andwait <message> <op> <value> [timeout <s>]lines. Awaitreads the message every 50 ms until the comparison holds, and fails its line like anERRat the timeout (30 s by default).- A
sessionanswers a line that fails, anERR, a timed-outwaitor a failed record or array write, and reads the next one. It exits2at the end if any line failed.--stop-on-errorends it at the first failed line instead, for a piped script. A dropped link ends it, with a line on stderr. - A text row that shows an error reply also shows what it means, as in
PC Suite: ERR 23: Trying to assign value to a read only parameter. The--jsonreplystays verbatim. record-armandrecord-uploadrecord over the CLI's own connection, so they work on any target, a simulator included, and assessionandbatchlines: arm, move, wait and upload on one connection.userprog-compile <out.cupb2> <source.pup2> [<source>...] [<project.puj2>]compiles a user program against the connected controller's own message table and writes<out>.cupb2and<out>.cup2, ready foruserprog-write. It compiles with the PCSuite IDE's compiler switches: the.puj2's when one is given, else a new IDE project's defaults.
Verify this download. SHA256SUMS.txt.asc is a detached OpenPGP signature over SHA256SUMS.txt. The key, its fingerprint and the steps: https://github.com/akribis-agito/Agito-Releases#verification
Software/PCSuite/v19.1.1
Bundled content: Released: Firmware/v5.2.0, FPGA/v5.4.2; sims Firmware/v5.3.0-rc7
PCSuite 19.1.1 (Agito)
Fix
- Setup: the Welcome page no longer cuts off its last lines, which 19.1.0 still did
- Akribis-Mentor shows "Connecting to Akribis-Mentor…" while it connects, instead of a black screen
- Akribis-Mentor has a Sign out button when you are signed in with your Microsoft account
Verify this download. SHA256SUMS.txt.asc is a detached OpenPGP signature over SHA256SUMS.txt. The key, its fingerprint and the steps: https://github.com/akribis-agito/Agito-Releases#verification
Software/PCSuite/v19.1.0
Bundled content: Released: Firmware/v5.2.0, FPGA/v5.4.2; sims Firmware/v5.3.0-rc7
PCSuite 19.1.0 (Agito)
Feature
- Terminal: an EtherCAT
SDO(0x603F,0x00)read, on any axis, shows the CiA402 error code with its standard meaning. - The firmware and FPGA release catalogue shows a progress bar while it loads releases or fetches an image.
- Draw: State Machine transitions have smaller arrowheads, and their priority is a round badge on the line that stays clear of the state's name and ID.
- Draw: the Blocks Explorer search now finds blocks in every category the current page accepts, not only the selected one
- Installer: every PCSuite installer carries its products' firmware, FPGA images and keyword docs, so the offline catalogue works without an internet connection.
- Installer: Agito PCSuite installs a firmware simulator for every product variant, so a simulation connection works without downloading one first.
- Tune/Phasing: the page is rebuilt as Phasing setup and Phasing status; each search is ticked on its own tab, and only the rows the chosen source and method use are shown
- Tune/Phasing: a new Status log keeps a timestamped account of every run - its settings, statuses, jumps, search interval and result - and saves it to a text file
- Tune/Phasing: a new Motor display draws the magnets and the commutation angle during a run, and the interval a minimal-motion search still has to choose from where the firmware reports it
- Tune/Phasing: an absolute-encoder or Hall source now searches and adopts the result in one press; the source is switched for the search and restored afterwards
- Tune/Phasing: an open-loop search and a closed-loop Hall measurement can run together as one two-stage sequence, and the sequence a run will take is shown before it starts
- Tune/Phasing: the Status log follows auto Vbus learning and reports the step voltage it found, or why it stopped
- Tune/Phasing: after a jump-to-detent search the Status log gives the pitch deviation, and the bidirectional error and curve-fit residual where that learning ran
- Tune/Phasing: on firmware that supports it, "Learn amplitude" finds the step voltage for a target current during phasing; older firmware keeps the Estimate button
- Tune/Phasing: the commutation source "User-defined electrical angle" (ComtMode[1] = 7) and its phasing angle are available on firmware that supports ComtMode[33]
- Preferences: the "Show engineering release candidates" switch is always shown, and on its own lists firmware and FPGA release candidates in the download catalogue.
Fix
- Ultra Precision Mode: disconnecting while a Disturbance Rejection or Repeated Motion run is starting no longer leaves the page disabled after you reconnect.
- Draw: a download refused at the unlock, or while sending the program or its parameters, now says the Draw schemes were left idle and that the Draw program must be downloaded again.
- Advanced Feedforward: Write to Controller writes the final tested gains and checks every value read back, and Restore Original reports any value the controller reads back differently.
- A simulation download no longer fails when OneDrive manages Documents; an old version folder still in use is left behind with a warning.
- Draw: a download the controller refuses while preparing, after a scheme was set idle, now says the schemes were left idle and that the Draw program must be downloaded again.
- Draw: Compile now refuses a State Machine where two transitions out of one state share a priority, and names the state, the priority and both transitions.
- Draw: the Properties block of a State Machine page now explains its settings instead of showing placeholder text
- Draw: saving the Options window no longer logs "User type changed" when the user type stayed the same
- Draw: turning Show Blocks ID on or off in the Options window now updates the ID labels of the blocks already on every page
- Draw: a new State Machine transition is named T, then T_1, T_2, instead of StateMachineLink; saved transitions keep their names
- Draw: a State Machine transition from a state back to itself is drawn as a loop above the state, not a short stub.
- Akribis-Mentor: opening the page no longer pops up the Microsoft sign-in; when you are not signed in it shows a Sign in button, and PCSuite remembers your sign-in after a restart.
- Akribis-Mentor: signing in with your Akribis account through Windows no longer fails.
- Draw: a State Machine transition whose start is dragged to a state that already uses its priority now takes that state's lowest free priority.
- Ultra Precision Mode: losing the connection during a Constant Velocity run or comparison no longer leaves the page disabled after you reconnect.
- Draw: a copied State Machine or Subsystem block pastes again; the paste no longer does nothing.
- Draw: transitions pasted inside a State Machine keep their condition, code and priority, and double-clicking one no longer closes PCSuite.
- Draw: a pasted State Machine block draws its transitions with the same anchors and curves as the copied one.
- "Keep 1:1 aspect ratio" starts unchecked on every chart, and a chart whose X axis turns logarithmic unchecks it; it can still be turned on.
- Identification now runs with User Units on instead of failing with "PC Suite: ERR 14", and it keeps the safety limits and the plant gain in counts.
- Setup: the Welcome page shows its whole text, including the last line, instead of cutting off the bottom
- The PTP Kinetics page's pre-cruise and jerk fields show a description in their tooltips, not only the parameter name and range.
- In Chinese, every jerk setting, tooltip and message now says 加加速度 instead of 抖动, which means vibration.
- Tune/Phasing: a drive that reports no PWM full scale leaves the step voltage empty instead of an infinite number, and Start refuses a search that needs it, saying why
- Tune/Phasing: the Hall measurement refuses to start with zero pole pairs, encoder resolution or motion speed, instead of moving towards an infinite target
- Tune/Phasing: unticking the open-loop search of an absolute-encoder or Hall source stops Apply from writing the search parameters the run no longer uses
- Tune/Phasing: on a CI master, disconnecting during Apply or Start no longer makes the next connection write a zero step voltage and leave the page half refreshed
- Tune/Phasing: the step-voltage Estimate window reads the status and result where firmware 5.3.0-rc1 and later puts them, instead of timing out or showing a status code as the result
- Tune/Phasing: a phasing start the drive refuses (for example ERR 55) is shown at once and ends the run, instead of a 90 s timeout that blamed the firmware
- Tune/Phasing: over RS-232 and CAN, a Cancel, page exit or axis switch just before phasing starts no longer lets the trigger follow and the axis move
- Tune/Phasing: when the drive refuses to restore the commutation source after a search, or the link drops mid-search, the log names the source to set back
- Tune/Phasing: the step-voltage notice after a Hall table write no longer holds up the drive's replies while it is open; the download still waits for the answer
- Tune/Phasing: on firmware before 5.3.0-rc2 the motor display says the live phasing view is not supported, instead of animating an angle the search does not use
- Tune/Phasing: the Hall measurement no longer puts the angle of a Hall state whose edge sits at 0 degrees up to half a turn away when the passes see that edge either side of zero
- Tune/Phasing: closing the step-voltage Estimate window during its pass turns the motor off and puts the commutation source back; if the drive refuses, the message names the source to set back
- Tune/Phasing: a step-voltage Estimate whose start the drive refuses says so in its window at once, instead of timing out 20 s later
- Tune/Phasing: answering the step-voltage notice after the link was lost no longer starts a download that reported invalid parameters
- Tune/Phasing: a Cancel just as the open-loop search ends no longer lets the closed-loop Hall measurement start moving the motor
- Tune/Phasing: the search band shows on a new run even when the drive still reports the interval of the run before
- Tune/Phasing: on firmware before 5.3.0-rc2 the motor display places the magnets after a successful run
- Statuses: the status tabs sit on a light band with a line under it, so the tabs and their LEDs read as separate areas.
Maintenance
- Tune/Phasing: the previous Auto-Phasing page is replaced; its Direction tab is part of System settings, and its Halls Adjust tab is the closed-loop Hall measurement
- Tune/Phasing: the Motor Learn tab is retired
- Tune/Phasing: Start refuses a current-domain amplitude (ComtMode[28]) outside 10% to 100% of ContCL, which the previous page sent unchecked
- Tune/Phasing: "Minimal jumps" is no longer in the source list; choose "Minimal motion" on the Open-loop search tab, which writes the same source
- Tune/Phasing: with an absolute-encoder or Hall source and a search ticked, the run switches ComtMode[1] to the search source and restores it afterwards
- Tune/Phasing: the page no longer remembers its last tab or the Show config choice; it opens on its defaults with the configuration shown
- Tune/Phasing: the Hall measurement writes the measured Hall table to the drive as a step of the run and phases with it; the previous page waited for Apply
- Tune/Phasing: the Hall table and Hall measurement are offered for the Hall sources only; the special encoder with Halls switching (ComtMode[1] = 3) no longer shows them
- Tune/Phasing: the Hall wiring, special-encoder wiring and first-motor-on notes are in the info cards of their source and mode, instead of always-visible red text
- Tune/Phasing: minimal motion in the current domain writes ComtMode[27] and ComtMode[28] on firmware that has them; the previous page did not
- Tune/Phasing: learni...
Software/PCSuite/v19.0.0
PCSuite 19.0.0 (Agito)
Feature
- Discrete I/O (AGM800, AGM800-EC): a fast output can be set to the main or auxiliary encoder index when the remote unit supports it.
- Statuses: a controller fault shows its ConFlt number next to its text in the status bar, the axis fault tooltips and the Machine axis status.
- Setup now shows the PCSuite End-User License Agreement, and installs third-party-notices.txt, with a Start-menu shortcut, listing every third-party component, its license and where to get its source
- Setup no longer installs the Kvaser CAN driver. It offers to open Kvaser's driver download page instead
- Terminal: an EtherCAT
SDO(0x241F,0x00)read shows the ConFlt fault code with its description. - Manage Connections: the Simulation panel shows whether the Draw compiler the simulator needs is installed, and can download and install it.
- The Algorithms Statuses window lists the Complementary Filter (CompFiltOn), with a link to Force Control
- The release notes are a formatted page, ReleaseNotes.html in the install folder, in place of readme.txt, and setup offers to open it in your browser
- Position events: load, arm and abort ordered hardware event tables of up to 2048 entries, with offline CSV and diagnostics, on firmware that supports them; the legacy event modes remain.
- PIV feedforward: the directional friction parameters can be edited separately on controllers with the consolidated friction interface, and snapshots keep them all.
- Help: the assistant is named Akribis-Mentor and has a robot-face MNTR menu icon in English and Chinese.
- Configure motor writes the selected motor's simulator parameters when the connection is added or updated; saved parameter files and user programs are kept on reconnect.
- Manage Connections: Download… lists the published simulations not yet installed for the selected controller type, and installs the one you pick after verifying it
- Manage versions: each installed simulation shows its product, firmware version, build date and source, and Import takes the release zip directly
- Additional configurations > Pulse/Direction encoder > Input type: 2 - C0/C1 and 3 - CW/CCW are offered on firmware that supports them (PDSubType up to 3)
- Data Recording: a chart with a recorded signal on its X axis keeps a 1:1 aspect ratio, so a circle looks like a circle; turn it off from the chart's right-click menu
- PVAJ Motion (Motions menu, AGM800 firmware 5.3.0 and later): load a PVAJ list from a CSV file, validate, arm and run it, alone or in a multi-axis group
- Gantry on a two-drive SPI gantry: the Gantry page follows the drive's Master or Slave role, set from a Role combo, and a Link box shows the link to the other drive.
- Identification in gantry mode on a two-drive SPI gantry no longer needs a partner axis.
- Controller error texts for the two-drive gantry link: ERR 413, ERR 414 and ConFlt 1075.
- Lock / Event: the Lock page reads the stored lock table on request, 16 locks at a time, with lock position and time
- Lock / Event: the Lock page shows the lock position before error mapping (LockValBefMap) under the lock position, in full width, when the connected firmware has it; Scope draws it as a step signal
- Auto Phasing: method 7 (user-defined electrical angle) and its electrical-angle setting are available when the connected firmware supports ComtMode[33].
- Draw Control and IDE+: select lines in the Draw Control log or the IDE+ message pane and copy them with Ctrl+C or right-click > Copy.
- Error Mapping: on firmware that allows it, Apply All writes the error map with the motor on while the axis is still, after a confirmation, and refusals show the controller's error text
- Lock / Event: mode 2 computes the offset automatically on firmware that has it, a stale offset says what to do, and a parameters download no longer fails halfway on a lock/event setting
- Lock / Event on AGM800-EC: the Lock/Event mode is read-only, since every EtherCAT Enable Operation sets mode 2 and learns the offset, and the related statuses say what to check
- Draw Control: the Blocks Explorer has a search box that filters the blocks by name; choose the category All to search every block
- Design: several frequency responses, such as Plant, Open Loop and Closed Loop, can be shown on one Bode chart at once, and the set is saved in the design file
- Push Events: a new floating window (Floating Tools > Push Events, Alt-Shift-B) lists the events the controller pushes and sets which ones it sends, on controllers that support them
- Scope: the signal whose configuration row is open is marked in the signal strip — its toggle stays filled and its name turns semibold, without the strip re-arranging
- Scope: the Charts tab takes expression signals as Data Recording does, evaluated as data arrives and measured, marked and exported like any other signal
- Data Rec / Scope: an expression name that shadows a controller parameter or a user-program global is refused when the row is added or updated, not only when the recording or the run starts
- Data Rec and Scope: expressions can differentiate, integrate and smooth signals with diff(), integral() and movavg(), which nest and combine with other math
- Statuses: the Error log pill's right-click menu has Open Log, which opens the Error Log floating window
- YuWei PCSuite: a customer version of PCSuite for YuWei, installed from YuWei_PCSuiteSetup_.exe, that upgrades an installed PCSuite in place and only updates to YuWei builds
- YuWei PCSuite: PCSuite never changes the PC's IP address or clears its ARP cache; it names the subnet to set in Windows instead
- YuWei PCSuite: every message box appears at the centre of the window it belongs to
- AGM800-EC: the controller type can be selected in the connection list, and a connected AGM800-EC works as an AGM800 master, Draw Control included
- Manage FW: an AGM800-EC connection can flash the firmware or the ESI image, and the firmware catalogue lists AGM800-EC releases as a product family of their own
- Simulation connection: the firmware simulations come with the offline content file, and PCSuite adds them to the Simulation version list at startup while Use offline content is on
- Simulation connection: an AGM800 or AGM800-EC simulation drives a simulated remote amplifier, so the axis phases and its encoder and currents are live
- Simulation connection: Save to Flash survives a disconnect and reconnect; each saved simulation connection keeps its own memory
- Simulation connection: a Reset simulation memory button in Manage Connections clears what the selected connection saved, so the next connect starts from defaults
- Manage FW, Manage FPGA: the download catalogue hides release candidates; engineering installs can show them from Preferences, with a confirmation before fetching one
- Switches put their pill first, before the label, so a column of switches lines up with the checkboxes and radio buttons beside it
- Toggles that act the moment they are clicked are switches throughout PCSuite: the tool pages, floating tools, wizards and dialogs
- Draw Control: a DisableMultiAndLog block (General category) disables several axes at once on a fault and logs the error code of each
- Draw Control: a Global Variables block (General category) declares global C variables, with optional initial values, that the scheme's C code can use by name
- On connect, PCSuite says once when the controller's firmware or FPGA, or a Ci remote unit's FPGA, is behind the current stable release
- Manage FPGA, Remote FPGA and EC FPGA: fetch certified FPGA images from the Akribis-Agito release catalogue; Remote FPGA narrows the list to the unit on the selected port
- Manage FW and the FPGA pages: the release catalogue says "Newer available: vX.Y.Z" when the selected unit's firmware or FPGA is behind the current stable release
- Preferences: a Use offline content switch and file make the documentation, the firmware and FPGA catalogues and the connect check read only that file, with no internet request
- YuWei PCSuite: starts in offline mode, reading the documentation and the firmware and FPGA catalogues from the offline content the installer carries
- Updates: PCSuite offers a newer offline content file at startup next to the PCSuite update, and a Check now button in Preferences checks for both on demand
- Offline: with Use offline content on or without internet, PCSuite no longer fetches the Application Notes or Desmos graphs, and Error Mapping's Preview says when its chart cannot load
- Switches that write the controller the moment they are clicked carry a small square in the switch knob
- New controller fault 1082 (external amplifier fault, e.g. Varedan undervoltage) on ADP05 (AGL105) is shown with its description
- Manage/FPGA: FPGA download to ADP05 (AGL105) remotes built on the 16K (10M16) device
- Draw Control: the DCC download works over a Simulation connection, as it does over Ethernet
- Simulation connection: Configure axis has an axis list - All axes (base), or A to L. Give an axis its own motor, encoder and load, or leave it equal to the base and it follows the base
- Config/User Units: every control has a tooltip, and the staged fields' tooltips say they reach the controller only with Apply All
- Firmware and FPGA release candidates show as X.Y.Z-rcN, a unit on a candidate is told when its final release is out, and candidates list in numeric order
- Help: Akribis-Mentor is available in the Agito and MVG releases, under the Help menu
Fix
- Draw: a Build or Build & Download whose BIN reaches the maximum allowed size now logs the error and re-enables the page, instead of leaving it disabled until Disconnect
- Draw: F7 compiles only in Edit mode, like the Compile menu item, so pressing it in Tune mode no longer freezes the page.
- Draw: leaving the page or closing PCSuite while a scheme is in Tune mode asks first, and unsaved Tune-mode changes are mark...
Software/HostGcc/v14.2.0-r3
Host GCC 14.2.0 (WinLibs UCRT r3), for Draw on the PC simulator
Added
- The x86-64 Windows GCC the PCSuite simulator compiles a downloaded Draw Control scheme with. PCSuite downloads it into
%LOCALAPPDATA%\PCSuite\HostGccwhen no compiler is installed; you don't run it yourself. - A trimmed, unmodified copy of WinLibs
gcc-14.2.0-mingw-w64ucrt-12.0.0-r3(upstream zip sha25688868d745b807f083a117ff69348d8bc021ad7389aa503379dbed1866efcaeb9).README.txtin the zip lists every component with its version, licence and source; the licence texts are inlicenses/.
Software/AAMotion/v12.0.0
AAMotion 12.0.0
⚠️ Breaking
- The 11.0.0 → 12.0.0 upgrade page walks the whole release for a consumer — every break with the diagnostic it raises, the changes that raise none, and compiled before/after samples. It is published with the 12.0.0 release as
aamotion-12-change-disclosure.html; download and open it in a browser, as GitHub serves an.htmlrelease asset as a file rather than rendering it. - Requires
Agito.AAComm15.x (see its changelog for the breaking communication-layer changes: theIIdentityContainermember,MessagesInBulkon a Simulation channel, theAllStatInterpreterinput contract). - The
AssemblyVersionis pinned to12.0.0.0for the whole 12.x line (package and file version keep the full number). .NET Framework consumers must recompile against 12.0.0 — a binary built against11.0.0.0does not bind, and no binding redirect bridges the identity change. .NET 8/10 consumers see no difference. - A type of yours that implements one of the seven retyped interfaces —
ISingleAxis,IVector,IIOModule,IECAM,IGroupAxis,ICiGroupAxisorICiSlave; a wrapper, an adapter, a test double — no longer satisfies it until every affected member carries the new type: 73 members losedynamic, 59 properties move frominttodouble, 56 array members move fromAAValueArray<int>toAAValueArray<double>, the four gantry gains become per-setAAValueArray<double>members and 34 methods widen their parameters — 226 members, none of them counted twice. The compiler reports each unsatisfied member at the class declaration, so this surfaces as one wall of errors on that type rather than at call sites. - Parameter values are now carried as
doubleend to end. Every array property that wasAAValueArray<int>—Identity,GenData,ErrLog,DInMode,HomingDef,LoggerParams,LoggerStatus,EventTableand the rest, onISingleAxis,IIOModule,IGroupAxis,IVector,IECAM,ICiSlave,ICiGroupAxisandMotionController— is nowAAValueArray<double>, and yields the parameter's exact value instead of a roundedint. Assigning an element into anintneeds an explicit cast. dynamicis gone from the AAMotion surface. Everydynamicmember is now statically typed: the value properties (Pos,AuxPos,PosRef,Speed,Accel,Decel,MaxVel,MaxAcc,Force,MotorCurr,ContCL,Ia…Vq, theVec*members onIVector, …) aredouble; the array-valued ones (ISingleAxis.Vel,ISingleAxis.AInGain, andIIOModule.AInPort/AInFilt/AInOffSet/AInDB/AInGain) areAADynamicValueArray;MotionController.GenDataDisAADoubleArray. Code that relied on late binding — calling a member the static type does not have, or letting adynamicconvert silently toint— no longer compiles, and a narrowing conversion now needs an explicit(int). In exchange the members are IntelliSense-visible and bind at compile time.- Quantity-carrying properties are
double; modes, indices, counts, bitmasks and millisecond durations keep their integer type (int, oruintfor the homing timeouts). The properties that moved frominttodoubleare the positions and distances (MasterPos,PosErr,RelTrgt,MaxPosErr,InTargetTol,LockVal,ModRev,AuxModRev,ComtAng,EventNextPos,EventBegPos,EventEndPos,EventGap,SpeedChgPos,CurrPosTh,CurrPosErrTh,PosPosTh,ForcePosErrTh,RetractTarget,MapErrOffset,MapErrOffRamp,MapErrOnStep,CNCAPosRef,CNCAdPosRef,CNCBAbsTrgt,CNCBPosRef,CNCBdPosRef), the velocities and profile magnitudes (StuckVel,SpeedChgNew,RetractSpeed,CNCASpeed,CNCBSpeed,CNCBEndSpeed,CNCBAccel,CNCBDecel,CNCBJerk,CNCAEmrgDec,CNCBEmrgDec), the gains and force parameters (ForceGain,ForceKi,ForceKd,ForceFFW,ForceVelFFW,ForceRefFilt,MaxForceErr,MaxForceErrOL,ForceAInTh,CurrCurrTh,CurrAInTh), and the voltages and temperatures (VBus,VLogic,MinVBus,MaxVBus,MaxVBusAbs,RegenOn,RegenOff,BoardTemp,PwrTemp,MotorTemp,MaxPwrTemp). A caller that stored one in anintmust widen it or add a cast; one reading a scaled User-Units axis now receives the fractional value instead of a truncated one. Status, mode and configuration properties (MotionStat,StatReg,ConFlt,LimitsStat,MotorOn,MotorType,EncType,EncRes,EncDir,UsrUnits,EmulRat,ProtectMask,InTargetTime,StuckTime,RptWait,MaxVBusTime,PeakTime,MaxPWM, and the*Flag/*Dir/*Src/*Type/*Stat/ table-index members) keepint. The four gantry gains (GantryAccFFW,GantryPosGain,GantryVelGain,GantryVelKi) move fromintto a per-setAAValueArray<double>instead; see the next entry. ISingleAxis.GantryAccFFW,GantryPosGain,GantryVelGainandGantryVelKiare per-setAAValueArray<double>members, get-only. On firmware with gain scheduling — the AGM800 — each gain holds one value per gain-scheduling set, and the controller lists it as an array of five: read or write setnasaxis.GantryPosGain[n],nfrom 1 to 5. There the member's.ValueraisesInvalidOperationException, as on every array member. On the AGD200 and AGD155-EC the gain is a scalar: read and write it through.Value. Asintproperties they sent the unindexed mnemonic, which the AGM800 refuses (ERR 24), so no set could be read or written there. Reading one into a number no longer compiles (CS0029), nor does assigning to the member (CS0200); an implementer ofISingleAxismust declare the four the same way.GantryVelGainandGantryVelKiare the velocity loop's proportional and integral gains; their documentation named the position loop.- The single-axis motion, homing, vector, PEG and force-control methods take
double.MoveAbs,MoveReland theirAndWait/Repetitive/RepetitiveCycle/TwoSpeedvariants,Jog,SetPosition,Home,HomeToHardStop,HomeToIndex,HomeToLimitThenIndex,HomeToHardStopThenIndex,SetSingleEventPEG,SetEventFixedGapPEG,SetEventTableValue, theForceCurr_Set*family andIVector'sVectorLinear/VectorArc/SetVectorParamcarry their position, distance, speed, acceleration, deceleration, threshold, offset, arc-centre and gain arguments asdouble/double?— including the ones that wereuinton the homing methods — andForceCurr_SetForceCmdSourcetakesdouble[]forforceCurrSlopeandforceCmdVal,VectorLinearparams double[] pos. Millisecond timeouts and dwell times keep their integer type (uintfor the homing timeouts,intelsewhere); cycle counts, directions, sources, polarities, table indices, command hold times and the vector smoothing factor (VecJerk) stayint.VecAccel/VecDecel/VecEmrgDecare float registers, soSetVectorParam(…, 1234.5, …)used to truncate on every controller, User Units or not. The same signatures change onAAMotionAPIand on the Java binding. Passing anintliteral still compiles; passing anint?variable still compiles too (the nullable conversion lifts); anint[]into a wideneddouble[]parameter does not — declare itdouble[]. TheIGroupAxis/ICiGroupAxisCNC path builders and theIECAMtable helpers are deliberately unchanged: their arguments are controller counts, unaffected by Global User Units — a CNC segment crosses as a rawSpecialBulkpayload the scaling seam leaves alone, and an ECAM table is filled with the counts the controller consumes — not display values. ISingleAxis.MoveAbs(dynamic position, dynamic speed = null, …)is nowMoveAbs(double position, double? speed = null, double? accel = null, double? decel = null). The optional-argument call shape is unchanged: nullable value types replace thedynamicnulls rather than an overload set.- The multi-axis
AAMotionAPI.MoveAbs/MoveReloverloads takedouble accel, double speed, double decelanddouble[]targets (double aPos, double bPos, …on the fixed-arity overloads). Anint[]target array no longer binds — declare itdouble[]. ParameterTypeConverter.GetSmartValueandGetArrayreturndoubleinstead ofdynamic, andAASmartArrayWrapper's indexer returnsdouble. A 64-bit (long) parameter is still read with its own command rather than from the value slot; the controller'slongparameters stay inside ±2^51, which adoubleholds exactly.AAMotionConfig.UseNativeDataTypesis removed. It chose between a roundedintview and a native-type view of float/double/long parameters; the value now always arrives at full precision, so the switch has nothing left to select. Delete the assignment.ParameterTypeConverter.ConvertStringToRawInt(eKeyword, string)is renamedConvertStringToRawValueand returnsdouble;ConvertValueForWrite(eKeyword, int)now takes adouble.FastReadCache.GetCachedValue/GetCachedArrayValuereturndouble?instead ofint?.- A multi-axis
AAMotionAPI.MoveAbs/MoveRelacross axes whose Global User Units differ now returnsfalseand commands nothing. These overloads apply onespeedand oneaccelto the vector distance over every axis, so the axes have to measure the same quantity: each must carry the same unit name in the position, velocity and acceleration groups.sqrt(dA² + dB²)over a radian and a centimetre is not a length, and the singlespeedthe caller passes has no unit to give it — so instead of norming incommensurable deltas and running the move, the call is refused before any parameter is read from or written to the controller, and the reason arrives onMotionController.ErrorOccurredas(-1, "<method>", <message naming the axes and the group>). Different scaling factors under the same unit na...
Software/AAMotion-Native/v12.0.0
AAMotion Native SDK 12.0.0
Runtime identifiers in this package: linux-x64, osx-arm64, osx-x64, win-x64.
C ABI version: 2 — the load-time gate is an exact match, so managed and native upgrade together.
The notes below are the version-locked managed changelog for 12.0.0.
The osx binaries are not signed or notarized: macOS quarantines a downloaded archive's contents until xattr -dr com.apple.quarantine <folder> clears them.
⚠️ Breaking
- The 11.0.0 → 12.0.0 upgrade page walks the whole release for a consumer — every break with the diagnostic it raises, the changes that raise none, and compiled before/after samples. It is published with the 12.0.0 release as
aamotion-12-change-disclosure.html; download and open it in a browser, as GitHub serves an.htmlrelease asset as a file rather than rendering it. - Requires
Agito.AAComm15.x (see its changelog for the breaking communication-layer changes: theIIdentityContainermember,MessagesInBulkon a Simulation channel, theAllStatInterpreterinput contract). - The
AssemblyVersionis pinned to12.0.0.0for the whole 12.x line (package and file version keep the full number). .NET Framework consumers must recompile against 12.0.0 — a binary built against11.0.0.0does not bind, and no binding redirect bridges the identity change. .NET 8/10 consumers see no difference. - A type of yours that implements one of the seven retyped interfaces —
ISingleAxis,IVector,IIOModule,IECAM,IGroupAxis,ICiGroupAxisorICiSlave; a wrapper, an adapter, a test double — no longer satisfies it until every affected member carries the new type: 73 members losedynamic, 59 properties move frominttodouble, 56 array members move fromAAValueArray<int>toAAValueArray<double>, the four gantry gains become per-setAAValueArray<double>members and 34 methods widen their parameters — 226 members, none of them counted twice. The compiler reports each unsatisfied member at the class declaration, so this surfaces as one wall of errors on that type rather than at call sites. - Parameter values are now carried as
doubleend to end. Every array property that wasAAValueArray<int>—Identity,GenData,ErrLog,DInMode,HomingDef,LoggerParams,LoggerStatus,EventTableand the rest, onISingleAxis,IIOModule,IGroupAxis,IVector,IECAM,ICiSlave,ICiGroupAxisandMotionController— is nowAAValueArray<double>, and yields the parameter's exact value instead of a roundedint. Assigning an element into anintneeds an explicit cast. dynamicis gone from the AAMotion surface. Everydynamicmember is now statically typed: the value properties (Pos,AuxPos,PosRef,Speed,Accel,Decel,MaxVel,MaxAcc,Force,MotorCurr,ContCL,Ia…Vq, theVec*members onIVector, …) aredouble; the array-valued ones (ISingleAxis.Vel,ISingleAxis.AInGain, andIIOModule.AInPort/AInFilt/AInOffSet/AInDB/AInGain) areAADynamicValueArray;MotionController.GenDataDisAADoubleArray. Code that relied on late binding — calling a member the static type does not have, or letting adynamicconvert silently toint— no longer compiles, and a narrowing conversion now needs an explicit(int). In exchange the members are IntelliSense-visible and bind at compile time.- Quantity-carrying properties are
double; modes, indices, counts, bitmasks and millisecond durations keep their integer type (int, oruintfor the homing timeouts). The properties that moved frominttodoubleare the positions and distances (MasterPos,PosErr,RelTrgt,MaxPosErr,InTargetTol,LockVal,ModRev,AuxModRev,ComtAng,EventNextPos,EventBegPos,EventEndPos,EventGap,SpeedChgPos,CurrPosTh,CurrPosErrTh,PosPosTh,ForcePosErrTh,RetractTarget,MapErrOffset,MapErrOffRamp,MapErrOnStep,CNCAPosRef,CNCAdPosRef,CNCBAbsTrgt,CNCBPosRef,CNCBdPosRef), the velocities and profile magnitudes (StuckVel,SpeedChgNew,RetractSpeed,CNCASpeed,CNCBSpeed,CNCBEndSpeed,CNCBAccel,CNCBDecel,CNCBJerk,CNCAEmrgDec,CNCBEmrgDec), the gains and force parameters (ForceGain,ForceKi,ForceKd,ForceFFW,ForceVelFFW,ForceRefFilt,MaxForceErr,MaxForceErrOL,ForceAInTh,CurrCurrTh,CurrAInTh), and the voltages and temperatures (VBus,VLogic,MinVBus,MaxVBus,MaxVBusAbs,RegenOn,RegenOff,BoardTemp,PwrTemp,MotorTemp,MaxPwrTemp). A caller that stored one in anintmust widen it or add a cast; one reading a scaled User-Units axis now receives the fractional value instead of a truncated one. Status, mode and configuration properties (MotionStat,StatReg,ConFlt,LimitsStat,MotorOn,MotorType,EncType,EncRes,EncDir,UsrUnits,EmulRat,ProtectMask,InTargetTime,StuckTime,RptWait,MaxVBusTime,PeakTime,MaxPWM, and the*Flag/*Dir/*Src/*Type/*Stat/ table-index members) keepint. The four gantry gains (GantryAccFFW,GantryPosGain,GantryVelGain,GantryVelKi) move fromintto a per-setAAValueArray<double>instead; see the next entry. ISingleAxis.GantryAccFFW,GantryPosGain,GantryVelGainandGantryVelKiare per-setAAValueArray<double>members, get-only. On firmware with gain scheduling — the AGM800 — each gain holds one value per gain-scheduling set, and the controller lists it as an array of five: read or write setnasaxis.GantryPosGain[n],nfrom 1 to 5. There the member's.ValueraisesInvalidOperationException, as on every array member. On the AGD200 and AGD155-EC the gain is a scalar: read and write it through.Value. Asintproperties they sent the unindexed mnemonic, which the AGM800 refuses (ERR 24), so no set could be read or written there. Reading one into a number no longer compiles (CS0029), nor does assigning to the member (CS0200); an implementer ofISingleAxismust declare the four the same way.GantryVelGainandGantryVelKiare the velocity loop's proportional and integral gains; their documentation named the position loop.- The single-axis motion, homing, vector, PEG and force-control methods take
double.MoveAbs,MoveReland theirAndWait/Repetitive/RepetitiveCycle/TwoSpeedvariants,Jog,SetPosition,Home,HomeToHardStop,HomeToIndex,HomeToLimitThenIndex,HomeToHardStopThenIndex,SetSingleEventPEG,SetEventFixedGapPEG,SetEventTableValue, theForceCurr_Set*family andIVector'sVectorLinear/VectorArc/SetVectorParamcarry their position, distance, speed, acceleration, deceleration, threshold, offset, arc-centre and gain arguments asdouble/double?— including the ones that wereuinton the homing methods — andForceCurr_SetForceCmdSourcetakesdouble[]forforceCurrSlopeandforceCmdVal,VectorLinearparams double[] pos. Millisecond timeouts and dwell times keep their integer type (uintfor the homing timeouts,intelsewhere); cycle counts, directions, sources, polarities, table indices, command hold times and the vector smoothing factor (VecJerk) stayint.VecAccel/VecDecel/VecEmrgDecare float registers, soSetVectorParam(…, 1234.5, …)used to truncate on every controller, User Units or not. The same signatures change onAAMotionAPIand on the Java binding. Passing anintliteral still compiles; passing anint?variable still compiles too (the nullable conversion lifts); anint[]into a wideneddouble[]parameter does not — declare itdouble[]. TheIGroupAxis/ICiGroupAxisCNC path builders and theIECAMtable helpers are deliberately unchanged: their arguments are controller counts, unaffected by Global User Units — a CNC segment crosses as a rawSpecialBulkpayload the scaling seam leaves alone, and an ECAM table is filled with the counts the controller consumes — not display values. ISingleAxis.MoveAbs(dynamic position, dynamic speed = null, …)is nowMoveAbs(double position, double? speed = null, double? accel = null, double? decel = null). The optional-argument call shape is unchanged: nullable value types replace thedynamicnulls rather than an overload set.- The multi-axis
AAMotionAPI.MoveAbs/MoveReloverloads takedouble accel, double speed, double decelanddouble[]targets (double aPos, double bPos, …on the fixed-arity overloads). Anint[]target array no longer binds — declare itdouble[]. ParameterTypeConverter.GetSmartValueandGetArrayreturndoubleinstead ofdynamic, andAASmartArrayWrapper's indexer returnsdouble. A 64-bit (long) parameter is still read with its own command rather than from the value slot; the controller'slongparameters stay inside ±2^51, which adoubleholds exactly.AAMotionConfig.UseNativeDataTypesis removed. It chose between a roundedintview and a native-type view of float/double/long parameters; the value now always arrives at full precision, so the switch has nothing left to select. Delete the assignment.ParameterTypeConverter.ConvertStringToRawInt(eKeyword, string)is renamedConvertStringToRawValueand returnsdouble;ConvertValueForWrite(eKeyword, int)now takes adouble.FastReadCache.GetCachedValue/GetCachedArrayValuereturndouble?instead ofint?.- A multi-axis
AAMotionAPI.MoveAbs/MoveRelacross axes whose Global User Units differ now returnsfalseand commands nothing. These overloads apply onespeedand oneaccelto the vector distance over every axis, so the axes have to measure the same quantity: each must carry the same unit name in the position, velocity and acceleration groups.sqrt(dA² + dB²)over a radian and a centim...
Software/AAComm/v15.0.0
AAComm 15.0.0
⚠️ Breaking
- Server-side
SimProfileWriter.DefaultText()no longer invents a48V supply; use its explicit-voltage overload or resolve a known product. A raw unidentified simulator requires an explicit validvbus_vprofile. MessageData.DynamicPtris now along(wasint), so a 64-bit simulator's memory address fits. A consumer that reads the property into anintmust widen it or useIsDynamicPtr, and a binary built against the old type must recompile.IsDynamicPtris unchanged.- A message that a closing session drops before sending it, and a
SendReceivethat races the close, now replyPC Suite: ERR 4025(the connection closed before the message was sent) instead ofPC Suite: ERR 4020. 4020 now means only that the API had no connection when the call was made. A consumer that read 4020 as a teardown also matches 4025, or tests the newAACommEventArgs.IsSessionClosed. - The
AssemblyVersionis pinned to15.0.0.0for the whole 15.x line (package and file version keep the full number). .NET Framework consumers must recompile against 15.0.0 — a binary built against14.0.0.0does not bind, and no binding redirect bridges the identity change. .NET 8/10 consumers see no difference. IIdentityContainergainsPushEventQueueDepth. A consumer that implements the interface itself must add the member (CS0535); a consumer that only reads the container sees a new property.ICommServicegains bothDownloadArrayoverloads. A consumer that implements the interface itself must add them (CS0535); a consumer that only calls it sees new members.CommAPI.MessagesInBulkreports the bulk capacity, 50, on aChannelType.Simulationconnection, as it does on Ethernet. The firmware-simulator channel has always carried aMessageType.BulkMessage, but the property said 1 there, so every consumer that routes on it took the one-message-per-command path: recording-parameter download (AACommDataRecManager.SendRecordingParams) on a Simulation connection now crosses as one bulk instead of one message per parameter, and the AAMotion parameter batches batch there too. A consumer that readMessagesInBulk == 1as "not an Ethernet connection" now sees 50 on Simulation as well.AllStatInterpreter.ParseAllStatDatanow takes the AllStat reply as AAComm delivers it — the resolved text a caller reads fromAACommEventArgs.MsgReceived— and reads those values straight intoAllStatData. It used to expect the raw controller longs and re-run the IEEE 754 decode and the User Units factor itself, so the only reply a consumer can actually obtain was converted twice: on a controller with 64-bit AllStat every floating-point field came back 0. The structured data now carries exactly the values the reply text shows, already scaled. Callers pass the received reply unchanged — and must not ask for it withAACommMessage.SkipUserUnits, which suppresses the User Units factor but not the IEEE 754 decode, so it never yields raw wire values.
Added
CiFpgaFeatures.FromReadbackdecodes the remote FPGA capability snapshot that AGM800 and AGM800-EC firmware publish inCiIdentity[24..41]: the generation, the availability (CiFeatureAvailability) and the main and auxiliary index-output bits. A read that is not bracketed by a matching generation and availability, or whose header or check word is wrong, decodes asCiFpgaFeatures.Unknown- Two
ConnectResultcodes name why a managedSimulationconnection could not launch itsfirmware_sim:SimExeNotFound(51), whenConnectionData.SimExePathis empty or names no file on the AACommServer host, andSimStarterParMissing(52), when nostarter.paris next to the simulator executable, as with afirmware_simbuilt from source rather than packaged. Every other launch failure is stillSimLaunchFailed(49), with its cause in the AACommServer log. A client older than the server getsFailOpenCommHandlerfor the two new codes - Add immutable verified event-table definitions and an explicit captured-session Load/Arm/Complete/Abort/acknowledgement client. Preparation validates and reads back all three raw columns/settings; ambiguous writes retain process-local ownership, and recovery never crosses to a replacement connection without retirement proof.
EventTableStatusReaderprovides bounded live coherent status/error/capability observations over a captured connection; typed unsigned fields retain the firmware publication and error provenance. Cancellation abandons unsent reads without implying remote Abort.CommAPI.CaptureSession()binds a multi-request operation to its original connection, including disconnect/reconnect to the same endpoint. Its cancellation token and replies reject a closed session.- Verified-table preload capability uses Identity[62] bit0x200; Central-i master keyword caches distinguish its presence without requiring manual cache deletion.
SimParameterFile.Configureexplicitly delivers a complete selected-motoragito.parand physical profile to a disconnected simulator's memory folder without deleting its user program. Fresh managed launches initialize from the packaged complete starter; reconnect keeps the saved parameter file.- Managed firmware simulation writes an explicit product-specific supply into the motor profile and preserves caller voltage overrides. Unknown products require an explicit finite positive
vbus_v; invalid or unresolved supplies fail before launch. SimSupplyVoltage.TryGetexposes verified nominal simulator supplies by product identity. Unknown products have no implicit supply;IsValidchecks an explicit finite positive voltage.PassiveCollectionRequest.EncoderSelectionsopts individual mapping scopes into main or auxiliary absolute-encoder metadata. The passive collector reports table-approved configured type/bit widths, the controller's processed absolute value and raw main diagnostics, with device identity, qualified reported resolution, full health and query capability kept explicitly unavailable. Main and auxiliary scopes remain distinct, no controller settings or protocol queries are sent, and callers without selections retain their existing reads.AAComm.Commissioningis a portable result contract for discovery and commissioning passes:CommissioningReportrecords per-controller/remote-port/axis/encoder observations with value, units, origin (configured, declared, controller- or device-reported, measured, inferred), acquisition source, outcome and reason, capture time, and linked attempts and hash-referenced evidence, andCommissioningValidator.Validaterejects a report that contradicts itself (a configured value presented as device-reported, a failed or partial acquisition presented as a success, nonfinite or ambiguous values, dangling or cyclic derivations, a storedComtStatuspresented as fresh phasing, a failed restore recorded as completed). A clean validation says the report is consistent, not that any hardware state is true.PassiveMetadataCollector(AAComm.Commissioning) is the first producer of aCommissioningReport. Over anICommServiceit records the identity the sharedIIdentityContainerexposes (axis and motor-axis counts, capability flags, current-loop sample rate, recording limits), and for each caller-supplied port/axis/encoder mapping the configuredEncTypeand the storedComtStatus[1], using ordinary parameter reads only. Identity values are marked as cached at connect and stamped with the host time of collection; a collection is not an atomic snapshot. A disconnected service, an unloaded or lacking message table, a failed read, an unmapped or out-of-range axis, and the product, firmware, FPGA and serial-number fields the interface does not expose each stay an explicit outcome with a reason, never zero or false.Collectappends one attempt per call, so a repeat keeps earlier failures beside later successes. Nothing here changesaacomm.rig-manifest/1.AACommEventArgs.IsSessionClosedis true for a reply that ended because its session closed:ERR Sync: Session terminatedfor a message already sent,PC Suite: ERR 4025for one never sent. A consumer can leave those to the oneOnCommsErrorreport of a lost connection instead of reporting each request.- Error texts for the lock/event guards of Firmware-Main #1256, in English and Chinese: ERR 403 (a lock/event source change refused while Lock or Event is on, LockEventMode 1/2) and ERR 404 (Lock/Event refused, the offset is stale).
LockEventWriteOrder(AAComm.Services) holds the write order a restore needs under those guards (Order, whosePlan.AddedandPlan.Initsname the rows it adds), the dependency list (EncSinCosHWEn,EncDir,VEncSrc,VEncOn,AuxEncDir,VEncFact,VEncFactDen),ReadCurrentModesfor the controller's current LockEventMode where the rows carry none, andMode2Supported, read fromLockEventMode's declared maximum: firmware that declares it up to 2 is the firmware with the guards, and only it needs the order. - AGM800-EC enable (Firmware-Main #1258, merged as 5fa8dcc2a): every EtherCAT Enable Operation forces
LockEventMode2 (when it isn't 2 yet, the drive first turnsLockEn/EventOnoff, which also drops an armed touch probe), and, on an axis with an ancillary counter, waits forLockEventStat1 before the motor turns on (an axis without one skips the wait). If the mode isn't taken, or the offset still isn't learned after 8LockEventInitattempts, the axis faults with 0x603F = 0x7300.LockEventWriteOrder.EnableForcesMode2(productType, lockEventMode)(an AGM800-EC whose firmware declares LockEventMode up to 2) andEcEnableLockOffsetFault(0x7300) expose this. That forcing happens only at the next enable, soOrder(rows, isSupported, currentMode)decidesLockEventInitfrom the mode the axis is in when it re-arms (the file'sLockEventModerow, else the controller's current mode from `R...
Software/AAComm-Native/v15.0.0
AAComm Native SDK 15.0.0
Runtime identifiers in this package: linux-x64, osx-arm64, osx-x64, win-x64.
C ABI version: 1 — the load-time gate is an exact match, so managed and native upgrade together.
The notes below are the version-locked managed changelog for 15.0.0.
The osx binaries are not signed or notarized: macOS quarantines a downloaded archive's contents until xattr -dr com.apple.quarantine <folder> clears them.
⚠️ Breaking
- Server-side
SimProfileWriter.DefaultText()no longer invents a48V supply; use its explicit-voltage overload or resolve a known product. A raw unidentified simulator requires an explicit validvbus_vprofile. MessageData.DynamicPtris now along(wasint), so a 64-bit simulator's memory address fits. A consumer that reads the property into anintmust widen it or useIsDynamicPtr, and a binary built against the old type must recompile.IsDynamicPtris unchanged.- A message that a closing session drops before sending it, and a
SendReceivethat races the close, now replyPC Suite: ERR 4025(the connection closed before the message was sent) instead ofPC Suite: ERR 4020. 4020 now means only that the API had no connection when the call was made. A consumer that read 4020 as a teardown also matches 4025, or tests the newAACommEventArgs.IsSessionClosed. - The
AssemblyVersionis pinned to15.0.0.0for the whole 15.x line (package and file version keep the full number). .NET Framework consumers must recompile against 15.0.0 — a binary built against14.0.0.0does not bind, and no binding redirect bridges the identity change. .NET 8/10 consumers see no difference. IIdentityContainergainsPushEventQueueDepth. A consumer that implements the interface itself must add the member (CS0535); a consumer that only reads the container sees a new property.ICommServicegains bothDownloadArrayoverloads. A consumer that implements the interface itself must add them (CS0535); a consumer that only calls it sees new members.CommAPI.MessagesInBulkreports the bulk capacity, 50, on aChannelType.Simulationconnection, as it does on Ethernet. The firmware-simulator channel has always carried aMessageType.BulkMessage, but the property said 1 there, so every consumer that routes on it took the one-message-per-command path: recording-parameter download (AACommDataRecManager.SendRecordingParams) on a Simulation connection now crosses as one bulk instead of one message per parameter, and the AAMotion parameter batches batch there too. A consumer that readMessagesInBulk == 1as "not an Ethernet connection" now sees 50 on Simulation as well.AllStatInterpreter.ParseAllStatDatanow takes the AllStat reply as AAComm delivers it — the resolved text a caller reads fromAACommEventArgs.MsgReceived— and reads those values straight intoAllStatData. It used to expect the raw controller longs and re-run the IEEE 754 decode and the User Units factor itself, so the only reply a consumer can actually obtain was converted twice: on a controller with 64-bit AllStat every floating-point field came back 0. The structured data now carries exactly the values the reply text shows, already scaled. Callers pass the received reply unchanged — and must not ask for it withAACommMessage.SkipUserUnits, which suppresses the User Units factor but not the IEEE 754 decode, so it never yields raw wire values.
Added
CiFpgaFeatures.FromReadbackdecodes the remote FPGA capability snapshot that AGM800 and AGM800-EC firmware publish inCiIdentity[24..41]: the generation, the availability (CiFeatureAvailability) and the main and auxiliary index-output bits. A read that is not bracketed by a matching generation and availability, or whose header or check word is wrong, decodes asCiFpgaFeatures.Unknown- Two
ConnectResultcodes name why a managedSimulationconnection could not launch itsfirmware_sim:SimExeNotFound(51), whenConnectionData.SimExePathis empty or names no file on the AACommServer host, andSimStarterParMissing(52), when nostarter.paris next to the simulator executable, as with afirmware_simbuilt from source rather than packaged. Every other launch failure is stillSimLaunchFailed(49), with its cause in the AACommServer log. A client older than the server getsFailOpenCommHandlerfor the two new codes - Add immutable verified event-table definitions and an explicit captured-session Load/Arm/Complete/Abort/acknowledgement client. Preparation validates and reads back all three raw columns/settings; ambiguous writes retain process-local ownership, and recovery never crosses to a replacement connection without retirement proof.
EventTableStatusReaderprovides bounded live coherent status/error/capability observations over a captured connection; typed unsigned fields retain the firmware publication and error provenance. Cancellation abandons unsent reads without implying remote Abort.CommAPI.CaptureSession()binds a multi-request operation to its original connection, including disconnect/reconnect to the same endpoint. Its cancellation token and replies reject a closed session.- Verified-table preload capability uses Identity[62] bit0x200; Central-i master keyword caches distinguish its presence without requiring manual cache deletion.
SimParameterFile.Configureexplicitly delivers a complete selected-motoragito.parand physical profile to a disconnected simulator's memory folder without deleting its user program. Fresh managed launches initialize from the packaged complete starter; reconnect keeps the saved parameter file.- Managed firmware simulation writes an explicit product-specific supply into the motor profile and preserves caller voltage overrides. Unknown products require an explicit finite positive
vbus_v; invalid or unresolved supplies fail before launch. SimSupplyVoltage.TryGetexposes verified nominal simulator supplies by product identity. Unknown products have no implicit supply;IsValidchecks an explicit finite positive voltage.PassiveCollectionRequest.EncoderSelectionsopts individual mapping scopes into main or auxiliary absolute-encoder metadata. The passive collector reports table-approved configured type/bit widths, the controller's processed absolute value and raw main diagnostics, with device identity, qualified reported resolution, full health and query capability kept explicitly unavailable. Main and auxiliary scopes remain distinct, no controller settings or protocol queries are sent, and callers without selections retain their existing reads.AAComm.Commissioningis a portable result contract for discovery and commissioning passes:CommissioningReportrecords per-controller/remote-port/axis/encoder observations with value, units, origin (configured, declared, controller- or device-reported, measured, inferred), acquisition source, outcome and reason, capture time, and linked attempts and hash-referenced evidence, andCommissioningValidator.Validaterejects a report that contradicts itself (a configured value presented as device-reported, a failed or partial acquisition presented as a success, nonfinite or ambiguous values, dangling or cyclic derivations, a storedComtStatuspresented as fresh phasing, a failed restore recorded as completed). A clean validation says the report is consistent, not that any hardware state is true.PassiveMetadataCollector(AAComm.Commissioning) is the first producer of aCommissioningReport. Over anICommServiceit records the identity the sharedIIdentityContainerexposes (axis and motor-axis counts, capability flags, current-loop sample rate, recording limits), and for each caller-supplied port/axis/encoder mapping the configuredEncTypeand the storedComtStatus[1], using ordinary parameter reads only. Identity values are marked as cached at connect and stamped with the host time of collection; a collection is not an atomic snapshot. A disconnected service, an unloaded or lacking message table, a failed read, an unmapped or out-of-range axis, and the product, firmware, FPGA and serial-number fields the interface does not expose each stay an explicit outcome with a reason, never zero or false.Collectappends one attempt per call, so a repeat keeps earlier failures beside later successes. Nothing here changesaacomm.rig-manifest/1.AACommEventArgs.IsSessionClosedis true for a reply that ended because its session closed:ERR Sync: Session terminatedfor a message already sent,PC Suite: ERR 4025for one never sent. A consumer can leave those to the oneOnCommsErrorreport of a lost connection instead of reporting each request.- Error texts for the lock/event guards of Firmware-Main #1256, in English and Chinese: ERR 403 (a lock/event source change refused while Lock or Event is on, LockEventMode 1/2) and ERR 404 (Lock/Event refused, the offset is stale).
LockEventWriteOrder(AAComm.Services) holds the write order a restore needs under those guards (Order, whosePlan.AddedandPlan.Initsname the rows it adds), the dependency list (EncSinCosHWEn,EncDir,VEncSrc,VEncOn,AuxEncDir,VEncFact,VEncFactDen),ReadCurrentModesfor the controller's current LockEventMode where the rows carry none, andMode2Supported, read fromLockEventMode's declared maximum: firmware that declares it up to 2 is the firmware with the guards, and only it needs the order. - AGM800-EC enable (Firmware-Main #1258, merged as 5fa8dcc2a): every EtherCAT Enable Operation forces
LockEventMode2 (when it isn't 2 yet, the drive first turnsLockEn/EventOnoff, which also drops an armed touch probe), and, on an axis with an ancillary counter, waits forLockEventStat1 before the motor turns on (an axis without one skips the wait). If the mode isn't taken, or the offset still isn't learned after 8LockEventInitattempts, the axis faults with 0x603F = 0x7300. `L...