Skip to content

Zaber Motion Library Changelog

2023-03-03 Version 3.1.1

  • Bug fixes and Improvements
    • C++ - removing global using clauses
    • Js - initialization improvements
    • Js - exception module export
    • C# - ServoTuner constructor is now public
    • Python - explicit exports that satisfies mypy
    • CanSetState(Device|Axis)Response classes moved to ascii namespace.
    • Documentation improvements

2023-02-14 Version 3.1.0

  • New features
    • enable_alerts (and disable counterpart) methods added to Connection class.
      • Documentation is updated with recommendations of using alerts.
  • Bug fixes and Improvements
    • Alerts are used to improve consistency of movements of all axes.
    • Some C++ arguments changed from passing by const references to passing by value and vice versa.
    • Adding logging of opening of connection through message router.

2023-02-07 Version 3.0.1

  • Bug fixes and Improvements
    • Fixing compatibility with Ubuntu 18 and 22.
    • C++ data-classes have noexcept in their constructors.

2023-02-01 Version 3.0.0

  • Breaking changes
    • Major C++ improvements
      • Classes no longer contain hidden pointers to their parents in hierarchy.
        • Instances can be easily copied around without any pitfalls.
      • Connection class is split to a copyable parent BaseConnection and move-only Connection (RAII).
    • Option objects for C++ and Typescript (as alternative to named arguments).
      • In C++, option objects are an additional overloads of existing methods.
      • In Typescript, the positional arguments are removed resulting in many breaking changes.
    • Binary Connection method open_tcp no longer has a default value for the TCP port.
    • ASCII Connection method open_tcp now has a default value for the TCP port (chain port of X-MCC).
    • The C# type of the SerialNumber device property has changed from uint to long for CLS compliance.
    • The setting name constant for the FW6 deviceid setting has been renamed from Deviceid to DeviceIdLegacy.
    • Device Database Store functionality is enabled by default.
    • open_serial_port_directly removed and replaced by argument of open_serial_port.
    • open_iot_unauthenticated removed and replaced by argument of open_iot.
  • Bug fixes and Improvements
    • The C# library has been marked CLS compliant to enable interoperability with more .NET languages.
    • In-code documentation now contains minimal required firmware version.
    • Acceleration argument of movement methods now accepts Infinity making the device ignore acceleration limits.
    • Movement methods query device for maxspeed when acceleration is specified without velocity.
    • Lockstep achieves the same functionality with less messages (communication pattern change)

2022-01-20 Version 2.15.4

  • Bug fixes and Improvements
    • Fixing bug preventing G-Code translator working with stream buffers
    • Improving error for stream setup
    • Improving error for unit conversions
    • Improving documentation of compatibility
    • Fixing C++ freezing if the library was called from an event handler

2022-12-12 Version 2.15.3

  • New features
    • New hidden GetDbServicePipePath method to get the location of the pipe serving a local device database
  • Bug fixes and Improvements
    • Downloads device DB from appropriate source (not "current")
    • Prevents interface IDs from wrapping

2022-11-25 Version 2.15.2

  • Bug fixes and Improvements
    • Upgrading protobuf libraries to 21.9
    • Allowing range for Python protobuf library protobuf>=3.20.0,<4.22.0

2022-11-14 Version 2.15.1

  • Bug fixes and Improvements
    • Fixing copy assignment operator in C++ (Credit: Dr. -Ing. Franz-Georg Ulmer)
    • Extending support for Binary Protocol
    • Save/Load state - support for axis storage on integrated devices

2022-11-08 Version 2.15.0

  • New features
    • The Oscilloscope class now exposes the FW 7.29 numchannels, and settings, with default values for older Firmware versions.
    • The Oscilloscope Start() method now has an optional parameter for the FW 7.29 capture length parameter.
    • Adding Storage API methods listKeys and keyExists.
  • Bug fixes and Improvements
    • Save/Load state support stored positions.
    • Support for Message Router 1.6.0
    • Documentation fixes
    • Device DB upgrade

2022-10-07 Version 2.14.7

  • Bug fixes and Improvements
    • Save/Load state bug fixes and support of FW 7.29
    • Support for the latest Device DB

2022-08-12 Version 2.14.6

  • Bug fixes and Improvements
    • Fixed error when using the Oscilloscope to record device-scope settings.
    • Corrected some dead links and typos in the documentation.

2022-07-27 Version 2.14.5

  • Bug fixes and Improvements
    • Fixing concurrency issues with Binary Protocol
    • Fixing ASCII message ID leakage during protocol errors
    • Redoing and updating Getting Started guide
    • Support for multiple v8 context for JS library
    • Fixing package size limit exceeding when sending to unknown device
    • Fixing parking not supported error
    • Updating warning flags enum

2022-07-08 Version 2.14.4

  • Bug fixes and Improvements
    • Fixing G-Code exact stop (G9, G61.1)
    • Fixing occasional stalling at sharp corners

2022-07-06 Version 2.14.3

  • Bug fixes and Improvements
    • G-Code optimization introduced in FW 7.28

2022-06-20 Version 2.14.2

  • New features
    • Adds field version to paramset info
    • A new method check_disabled of the Stream class

2022-06-09 Version 2.14.1

  • New features
    • New method to create an offline G-Code translator from a device
  • Bug fixes and Improvements
    • erase_key method of Storage class returns false instead of throwing exception when the key does not exist.
    • Concurrency improvements of G-Code translator

2022-06-03 Version 2.14.0

  • New features
    • Custom unit conversions of hardware modified devices
    • Method to erase storage with a particular key
    • is_homed method to indicate if device was homed and has reference
  • Bug fixes and Improvements
    • Enhancing device database failed exception.
    • Reserving maximum space for message IDs in case they get remapped.
    • Fixing an issue with servo-tuner error handling
    • Renaming PeripheralErrors to AxisErrors in CanSetStateDeviceResponse class
    • Documenting matlab array behavior in streams documentation
    • Improving order of setting of settings when setting a state
    • Cleanup of Python package classifiers

2022-05-18 Version 2.13.2

  • Bug fixes and Improvements
    • Fixing Python license field
    • Protobuf 3.20.1

2022-05-16 Version 2.13.1

  • Bug fixes and Improvements
    • Compatibility with the new database

2022-04-28 Version 2.13.0

  • New features
    • Additional arguments (speed, velocity) for movement methods.
    • New dimensions for current tuning settings.
    • A method for verification of simple tuning.

2022-04-18 Version 2.12.0

  • New features
    • Storage API allows adding arbitrary key-value data to a device
    • Line continuations allow sending commands that are too long to fit on a single line
    • Add virtual device connection howto.

2022-04-05 Version 2.11.2

  • Bug fixes and Improvements
    • Fixing G-Code compatibility with older versions of firmware.

2022-03-31 Version 2.11.1

  • Bug fixes and Improvements
    • Fixing exception when setting multiple G-Code translators on one controller
    • Sets storage associated with peripherals on a state restore

2022-03-21 Version 2.11.0

  • New features
    • Servo Tuner API
    • Save/Load supports values stored with the key value store
    • API to get the expected location of message router pipe
  • Bug fixes and Improvements
    • Fixing port sharing with Zaber Launcher for multiple OS users

2022-03-03 Version 2.10.1

  • Bug fixes and Improvements
    • Adding G-Codes (G30, G30.1, M64, M65, M66, M68, G92, M700)
    • Improvements to TCP/IP documentation.

2022-02-16 Version 2.10.0

  • New features
    • Scope API
    • GCode API
  • Bug fixes and Improvements
    • Adding compatibility with Mono
    • Improvements of save/restore behavior.

2022-01-26 Version 2.9.1

  • New features
    • Add isIntegrated field to device identity
    • set_all_digital/analog_outputs method for streams
  • Bug fixes and Improvements
    • Ensure unique titles between ASCII and Binary protocol
    • Better unit conversion errors
    • Fix bug where device restore could fail to set certain settings

2022-01-05 Version 2.9.0

  • New features
    • Experimental G-Code translator (unstable)

2021-12-31 Version 2.8.1

  • Bug fixes and Improvements
    • Fixes an error that occurs when setting the state of a device with an unset stream buffer
    • Amends the changelog with correct date for the 2.8.0 release

2021-12-22 Version 2.8.0

  • New features
    • GetState returns a string representing a device or axis' current state. This may include:
      • Settings
      • Servo Tuning
      • Stream Buffers
      • Triggers
    • SetState takes a state returned by GetState and applies it to a device, setting its state to match the save
    • CanSetState will check if a supplied state is compatible with a device or axis, and return an error explaining why not if it isn't.

2021-11-30 Version 2.7.2

  • Bug fixes and Improvements
    • Removing protobuf header files from C++

2021-11-15 Version 2.7.1

  • Bug fixes and Improvements
    • JS library does not work in Windows when path contains unicode characters

2021-10-22 Version 2.7.0

  • New features
    • GetString and SetString methods for accessing string-based device/axis settings
  • Bug fixes and Improvements
    • Fixing digital output method on streams
    • Fixing rare python warning message when script ends
    • Documentation improvements

2021-08-23 Version 2.6.1

  • Bug fixes and Improvements
    • Identification resets all stored device information
    • N-API upgrade to version 4 (Node.js library)
    • Unifying web and Node.js library

2021-07-30 Version 2.6.0

  • Bug fixes and Improvements
    • Adding support for communicating with Zaber Launcher remotely (Network Sharing)

2021-07-27 Version 2.5.1

  • Bug fixes and Improvements
    • Fixing Device DB local file compatibility

2021-07-26 Version 2.5.0

  • New features
    • Support for hardware modified devices

2021-07-16 Version 2.4.2

  • Bug fixes and Improvements
    • Upgraded all external dependencies
    • Allowing setting of unknown setting without unit conversion

2021-06-28 Version 2.4.1

  • Bug fixes and Improvements
    • Improved compatibility with Zaber Launcher

2021-06-17 Version 2.4.0

  • New features
    • Support for port sharing with Zaber Launcher
    • Support for upcoming IoT services
  • Bug fixes and Improvements
    • Logging to file will append to the file instead of overwriting the content.
    • GetChannelsInfo will return zeros when device does not support io at all (instead of error).

2021-06-01 Version 2.3.2

  • Bug fixes and Improvements
    • Fixing compatibility with Firmware 6.04

2021-04-07 Version 2.3.1

  • New features
    • Custom transport feature allowing to use the library with different means of communication.
    • WebAssembly support for JS library.
  • Bug fixes and Improvements
    • Fixing description of park/unpark to be consistent across FW versions.

2021-03-10 Version 2.2.0

  • Bug fixes and Improvements
    • Adding GetAxisNumbers method to Lockstep class that returns array of axis numbers (GexAxes marked obsolete).

2021-03-01 Version 2.1.3

  • Bug fixes and Improvements
    • Ensuring offline Device Database file compatibility. (New database file download required)

2021-02-09 Version 2.1.2

  • Bug fixes and Improvements
    • Adding empty constructor for some C++ classes (Device, Axis, Stream)

2021-02-01 Version 2.1.1

  • Bug fixes and Improvements
    • Support for FW 7.17

2021-01-15 Version 2.1.0

  • New features
    • StopAll and HomeAll methods on Connection class to simplify homing and stopping across the entire device chain
  • Bug fixes and Improvements
    • Introduction of constant (FW 7) and distinction from peripheralid constant (FW 6)
    • Fixing naming in DeviceAddressConflictExceptionData renaming DeviceIds property to DeviceAddresses
    • Adding py.typed to the python library to allow mypy to type check code against the library types

2020-11-09 Version 2.0.1

  • Bug fixes and Improvements
    • Support for multi-axes integrated products (requires refreshing data from
    • Error handling tutorial improvements
    • Improvements of JavaDoc
    • Removing mistaken constant encoder.counth

2020-10-15 Version 2.0.0

  • New features
    • New exception system providing more information on cause of exceptions
      • e.g. CommandFailedException contains parsed reply from the device
      • new exception SerialPortBusyException
  • Breaking changes
    • Removal of obsolete methods
      • Lockstep.getOffset
      • Lockstep.getTwist
      • Library.toggleDeviceDbStore
    • Change of library default caching directory for Linux, MacOS
      • On Linux $XDG_CACHE_HOME/zaber-motion-lib (or ~/.cache/zaber-motion-lib if not set)
      • On MacOS ~/Library/Caches/zaber-motion-lib
    • C++ MotionLibException's method message() renamed to getMessage() to conform to library conventions

2020-09-23 Version 1.6.1

  • Bug fixes and Improvements
    • Binary device with FW 5 is not asked for FW build

2020-09-18 Version 1.6.0

  • Bug fixes and Improvements
    • Strong-named assemblies for .NET as well as digital signature
    • Unit conversions for controllers
    • Protobufs 3.13.0
    • Go 1.15

2020-09-15 Version 1.5.1

  • Bug fixes and Improvements
    • Fixing that waitForIdle throws CommandPreemptedException upon receiving unexpected response (Binary protocol)
    • Adding isIdentified property on Device class
    • Improvements to the documentation

2020-08-19 Version 1.5.0

  • New features
    • Allowing to disable checksums for a connection
  • Bug fixes and Improvements
    • Improvements to C++ and Python documentation
    • Js library is compiled to ES2018 standard and contain inline source maps

2020-07-24 Version 1.4.4

  • Bug fixes and Improvements
    • Making asyncio Python methods for opening port cancel-proof in sense that the port is closed when canceled
    • Improving update instructions for Matlab library
    • Adding newly introduced ASCII protocol warning flags

2020-07-08 Version 1.4.3

  • Bug fixes and Improvements
    • Fixing segmentation fault when Python asyncio task is cancelled
    • JavaScript library no longer uses eval in generated protobuf code
    • Dropping support for Node.js 8

2020-06-17 Version 1.4.2

  • Bug fixes and Improvements
    • Critical: Invalidation of Device DB store after temporary caching issue on

2020-06-05, Version 1.4.1

  • Bug fixes and Improvements
    • Protobufs 3.12.3
    • Documentation improvements

2020-06-02, Version 1.4.0

  • New features
    • move_min and move_max methods
  • Bug fixes and Improvements
    • Fixing missing DeviceSettings class in API documentation
    • Fixing compatibility with Matlab 2020
    • Fixing JS library being broken when packed in asar archive by electron

2020-05-20, Version 1.3.1

  • Bug fixes and Improvements
    • Fixing ArgumentNullException when C# Connection gets disposed by finalizer

2020-05-14, Version 1.3.0

  • New features
    • Parking API
  • Bug fixes and Improvements
    • Fixing handling of signals on Windows (
    • Empty constructor for C++ Connection class
    • Making toggleDeviceDBStore method obsolete in favor of enableDeviceDBStore
    • Checking axis number in reply in genericCommand

2020-04-29, Version 1.2.2

  • New features
    • Win32 support
    • On UNIX platforms library uses flock in addition to TIOCEXCL
  • Bug fixes and Improvements
    • toString methods for Java and C++ classes
    • Specific exception is thrown when used with incompatible devices
    • C++ documentation for Qt and MinGW

2020-04-21, Version 1.2.1

  • New features
    • Octave support (installation and tutorials)
  • Bug fixes and Improvements
    • Adding mathematical rounding to unit conversions
      • Previously the number was cut at needed precision
    • Fixing that stream commands get stuck on a stream FB error
    • Error is thrown when rounding and unit conversion of non-zero acceleration results into a zero value
    • Adding missing namespaces to C++ enums
    • Improved compatibility with old versions of firmware
    • Updating the go protobuf library
    • Little documentation improvements

2020-04-07, Version 1.2.0

  • New features
    • Adding custom timeouts for ASCII generic command methods
    • Adding get/set of default request timeout of ASCII connection
  • Bug fixes and Improvements
    • Adding documentation of events
    • Adding description of exceptions
    • Hiding internal classes of C# implementation
    • Adding numbering information to API doc

2020-04-02, Version 1.1.1

  • Bug fixes and Improvements
    • Fixing name of reply_only event in Python Binary Connection (mistakenly called alert)

2020-03-30, Version 1.1.0

  • New features
    • Stream API
      • Provides streaming of movement commands and synchronized multi-axis movement
    • Analog output support
  • Bug fixes and Improvements
    • Improvement of lockstep documentation.

2020-03-23, Version 1.0.13

  • Bug fixes and Improvements
    • Fixing that copying of Device and Axis classes in C++ makes the properties (e.g. setting, all axes) of instances unusable.
    • Adding code documentation to C++ properties
    • Improving C++ installation documentation
    • Making getters of C++ classes constant (rest of the classes)
    • Improving compatibility with X-JOY3 product
    • Adding lockstep support for more that two axes

2020-03-04, Version 1.0.12

  • Bug fixes and Improvements
    • Fixing Binary Protocol and TCP (Python)
    • Adding const to getters (C++)

2020-03-03, Version 1.0.11

  • Bug fixes and Improvements
    • Providing a default path for Device DB store
  • Documentation changes
    • Turning on Device DB store in tutorials
    • Making library's need for internet connection more apparent

2020-02-26, Version 1.0.10

  • Bug fixes and Improvements
    • Updating dependencies across the library
      • Protobuf 3.11.2
      • RxPy 3.0.1 (Python)
    • Adding ARM64 (aarch64) platform for Linux

2019-12-13, Version 1.0.8

  • Bug fixes and Improvements
    • Making NuGet package work with MSBuild older than 15.3

2019-11-21, Version 1.0.7

  • Bug fixes and Improvements
    • Improving prepareCommand capabilities allowing numbers to be place directly to template.

2019-11-04, Version 1.0.6

  • Bug fixes and Improvements
    • Fixing compatibility issues with products predating Firmware 5.34 (Auto-Reply setting missing)

2019-11-04, Version 1.0.5

  • Bug fixes and Improvements
    • Improved the error message when the Device Database service is not reachable
    • Ensured compatibility with upcoming Firmware 7 products

2019-10-23, Version 1.0.4

  • Bug fixes and Improvements
    • Added support for Binary Protocol with Firmware version lower than 6.06

2019-10-21, Version 1.0.3

  • Bug fixes and Improvements

    • Improved Firmware 7 support (commands and settings formatting).
    • Added unit conversions and command formatting to Device class.
    • Fixed failure of GenericCommandMultiResponse for more than 1k replies.
    • Fixed JavaSript initialization when importing directly from dist folder
  • Documentation changes

    • Adding enum values to the API reference

2019-10-04, Version 1.0.2

  • Bug fixes and Improvements

    • Improved performance of GenericCommandMultiResponse (no waiting when targeting particular device).
    • Removing unused dependencies of the JS library.
    • Fixing protobuf dependency version of the Python library.
  • Documentation changes

    • General improvements of the texts.

2019-09-23, Version 1.0.1

  • Bug fixes

    • Fixing typescript compilation errors due to empty namespaces.
    • Fixed behavior: Binary connection was getting closed due to unmatched error. Now it emits unknownResponse.
    • Fixed behavior: Commands are now preempted even without matching requests.
  • Documentation changes

    • Adding C++ examples and installation instructions.
  • API changes

    • C++ API
    • Reordering genericCommand arguments in binary Device and Communication class (Unreleased)

2019-08-30, Version 1.0.0

  • Documentation changes
    • Fixing couple of mistakes in example codes
    • Improving texts and instructions

2019-08-27, Version 0.0.27

  • Documentation changes

    • Fixing couple of mistakes in example codes
  • Bug fixes

    • Fixing missing types in Typescript namespaces
    • Fixing harmless error that occasionally pops up in Python on Mac OS
    • Fixing prepareCommand in Python

2019-08-19, Version 0.0.26

  • API changes

    • Breaking change: Unit of measure names in JavaScript and Python have been changed to match common standards
    • Breaking change: Some method names have changed to improve clarity and consistency
    • Connection.Device() and Lockstep() are now GetDevice() and GetLockstep()
    • Device.Axis() and Lockstep() are now GetAxis() and GetLockstep()
    • Warnings.Get() and Clear() are now GetFlags() and ClearFlags()
  • Documentation changes

    • Many updates to reflect reviewer contributions
    • Docs about finding the right serial port amended to cover direct USB connections
    • Some site navigation controls have been altered
    • Binary protocol support is now fully documented
    • A temporary banner has been added stating this library is in early development and subject to change
  • Bug fixes

    • Fixed errors when using Binary controller + peripheral combinations

2019-08-12, Version 0.0.25

  • Adding settings constants for ASCII Protocol

  • Finalizing Binary Support

  • Fixing various issues with C++

2019-07-24, Version 0.0.24

  • Extending settings API to provide arbitrary unit conversions

  • Providing properties on Axis and Device that expose device identity information

2019-07-12, Version 0.0.23

  • Python bugfix
    • Fixed a circular dependency problem that prevented using the ASCII Device class in Python.

2019-07-12, Version 0.0.22

  • I/O support

    • I/O pins are now supported on controllers and integrated devices that have them.
    • There is a device I/O how-to guide in the documentation.
  • Lockstep support

    • Lockstep mode is now supported on two-axis ASCII devices.
    • There is a lockstep how-to guide in the documentation.
  • Binary generic commands

    • There is now a second Connection class that supports the Binary protocol.
    • Binary generic commands (without unit conversions) can be sent or broadcast.
    • Spontaneous binary messages such as move tracking become events you can subscribe to.
    • Documentation for the Binary protocol is completely separate from ASCII but has the same structure.
  • ASCII-specific namespace (BREAKING change)

    • Object types specific to the ASCII protocol have been moved into an ASCII namespace or subdirectory.
    • Import statements in existing code will need modification - please refer to the updated documentation.
    • The API reference now indicates what import statements are needed for each type.
  • Example projects

    • The documentation includes downloadable, self-contained example projects for ASCII in several programming languages.
  • Database usage documentation

    • There is a how-to guide explaining how to use the device database offline, how to cache data.
    • For Zaberians, the how-to also explains how to use the master database.
  • Exception types (BREAKING change)

    • The numeric MotionLibErrorType code no longer exists
    • Instead there are different subclasses of MotionLibException to report different error conditions.
    • The list of exception types can be seen at the bottom of the API reference section for MotionLibException.

2019-06-12, Version 0.0.21

  • Java Support

    • Full support of Java programming language with the API matching the APIs of other languages.
    • Available through Maven.
  • Changed type of the serial number in device identity to unsigned integer

    • Ensuring that the library covers the full range of Zaber serial numbers.
  • Documentation improvements

    • Improved navigation in Getting Started guide.
    • Improved responsive design.
    • External links are marked with an icon.
    • Language specific paragraphs.

2019-06-05, Version 0.0.20

  • Fixing parsing of serial number
    • Only affects Zaber internal development.

2019-05-28, Version 0.0.19

  • Renaming Communication class to Connection

  • Adding renumber method to Connection class

    • The method allows to automatically assign addresses to a device chain.
  • Python asyncio

    • All blocking methods in Python got new asyncio counterparts with _async suffix.
  • Improving the error message when the setting is not supported by the device

2019-05-15, Version 0.0.18

  • Device Database store

    • It is a feature allowing to store Device Database information to hard-drive to minimize the usage of web-service API.
  • Adding serial number to device identity

    • Queries device for system.serial and exposes the returned information in a field.
  • Renaming method wait_till_idle to wait_until_idle

  • Device settings API

    • Allows read and write device settings using API similar to axis settings.
  • Improving error message when device rejects the read or write of settings

  • Device Database documentation

    • Adding more information about Device Database and its API.
  • Sorting classes in the reference

  • Fixing letter case of enum values in the reference (Python, Js)

  • Improving grammar in documentation

    • Improving texts on the portal.
  • Adding an appropriate license to source code and packaging

    • Additionally, collecting licenses of all used libraries and tools.
  • Adding Changelog