PvtSequenceData (parallel arrays of positions, velocities, times) replaced by List[PvtSequenceItem] — a list where each item is a PvtPoint or an I/O actionsubmitSequenceData() now takes List[PvtSequenceItem] instead of PvtSequenceDataPvtBuffer.retrieveSequenceData() now returns List[PvtSequenceItem] instead of PvtSequenceDataPvtCsvData.sequenceData type changed from PvtSequenceData to List[PvtSequenceItem]generateVelocities(), generatePositions(), generateVelocitiesAndTimes() now take a single List[PvtPartialSequenceItem] parameter instead of separate parallel arraystimesRelative boolean parameter removed from generateVelocities() and generatePositions()points() and pointsRelative() on PvtSequence deprecated in favor of submitSequenceData()bufferId property renamed to bufferNumber on StreamBuffer and PvtBuffer classes for consistency with firmware terminologyStreamBuffer.getContent() no longer silently returns empty on invalid buffer — now throws with a descriptive error messageSettingNotFoundException removed — NotSupportedException is now thrown for unsupported settingsUnitTable.convertFromNativeUnits() and UnitTable.convertToNativeUnits()net6.0 target replaced with net8.0Library, Tools, UnitTable) now have private constructors and cannot be instantiatedPvtPoint now has a relative flag — individual points can be absolute or relative, rather than the entire sequencePvtSetDigitalOutputAction, PvtSetAnalogOutputAction, PvtCancelOutputScheduleAction, PvtCallAction, and their "all channels" variants)PvtPartialPoint and PvtPartialSequenceItem types for specifying incomplete data that generation functions fill inloadPartialSequenceData() method loads CSV files with missing columns for use with generation functionsconvertTimeAbsoluteToRelative() static method converts absolute timestamps to relative format required by the devicegetCompilerDependencies method to zaber.motion.Helper classtoString method to generated data classesLibrary.checkVersion deprecation notice when loading MATLAB toolboxtestPort argument is set to true on a call to openSerialPort() with an invalid serial portAdditions
discoverTcpDevices() method to Tools class that searches the local network for X-MCC devices that are discoverable.testPort argument to the openSerialPort() function on Ascii.Connection that tests if the port is writeable before opening it.openMock() method to the Ascii.Connection class that creates a mock connection with any number of mock devices and peripherals. These mock products have many of the real attributes of real products, though they cannot receive commands or send replies.Bug fixes and Improvements
CyclicDirection enum from Ascii namespace to root namespace.Swift language for enum value descriptions.cyclicDirection and extraCycles arguments to Axis.moveAbsolute() function to support upcoming cyclic movement modeServoTuner class producing incorrect tuningsourceType field to DeviceDbInnerError exceptiondevices-public-v2.sqlite)port argument of open_tcp of binary.Connection becomes optional with default value 55550.Stream and PvtSequence class removed in favor of dedicated io property.get_axes method of Lockstep class replaced in favor of get_axis_numbers.find static method of ObjectiveChanger replaced in favor of find method of Microscope class.load_mass and carriage_mass using in methods of ServoTuner class renamed to load_inertia and carriage_inertia.IsConnected property of C# Connection replaced in favor of IsOpen.get_command_unit_conversion_descriptor of Axis, Device classesget_unit_conversion_descriptor of AxisSettings, DeviceSettings classesconvert_from/to_native_units of UnitTable classzaberMotionLibraryInit to MATLAB Legacy toolbox.turnOff method to Illuminator class.PvtSequence class:generateVelocitiesAndTimes for generating velocities given a series of positions.submitSequenceData for writing the contents of a PvtSequenceData object to a buffer or live sequence.PvtBuffer class:retrieveSequenceData for getting stored buffer contents from device.Illuminator.getIntensity will return 0 instead of NaN if device is unplugged.Library::setDeviceDbSource and Library::setLogOutput from const ref to value type.Library.SetDeviceDbSources() method that allows specifying multiple
sources of device database information to use as fallbacks.isBusy method to the microscope Autofocus to check if the autofocus is actively runningiterator_listsgenericCommandNoResponse functionsreopen method to Connection class allows to reopen connection in placeis_open property to Connection class to check whether the connection is open/closedsetInt() in Javascript that causes overflow when attempting to set values outside the range of a signed 64 bit Integer.onFireSet() function of Trigger class which could cause an application crash when used on a non-identified device.Device.SetState to not throw an exception when setting a trigger with condition equal to none on a device trigger with the same condition.generateVelocities and saveSequenceData.getMany function that caused devices with firwmare versions below 7.34 to throw unexpected errors and return inconsistent results in DeviceSettings.Device.GetState function not working with EtherCAT controllers.generateVelocities and generatePositions to PvtSequence class.generateVelocities generates velocities given sequences of positions and times.generatePositions generates positions given sequences of velocities and times.convertUnits to UnitTable classclearDeviceDbStore to Library class for clearing device db store (cache)Int and Bool types in DeviceSettings and AxisSettings:GetInt()SetInt()GetDefaultInt()GetBool()SetBool()GetDefaultBool()Park(), Unpark() and IsParked() and methods to Lockstep.PVTSequence class:points and pointsRelative methods to queue multiple PVT points with absolute or relative positions.loadSequenceData and saveSequenceData.Transport and WdiAutofocusProvider classes (if not disposed properly).FirmwareVersion parameter to CanSetState that allows checking if the state can be set to the device after a version change.ToString() implementations to C++ exceptions.__repr__() implementation to Python exceptions.AllAxes class also gets driver_enable and driver_disable methods.Device and Axis class has a new restore method that deletes all zaber storage keys
and sends system/axis restore command.SetState methods of axis and device now return a list of warnings if expected issues occurSetState function disables the driver while setting state.get and system commands to a device showing FF will no longer trigger DeviceFailedExceptionCameraTrigger class in microscopystd::terminate on unhandled exception thrown from user-registered event callbacksgetXEvent have been changed to setXCallback, which takes an std::function objectConnection::getXEvent().subscribe()libzml to libzaber-motion (zaber-motion.dll on Windows)libzaber-motion.(so/dylib) on macOS and linux (zaber-motion.dll on Windows)libzaber-motion-lib to libzaber-motion-core (zaber-motion-core.dll on Windows)move_sin method for Axis and Lockstep classesrenumber method for Device classfocus_once autofocus methodfind method.UnitTable.getUnit() functionStreamIo and PvtIo classes to handle IO functionality for Stream and PvtSequence classesStreamIo and PvtIoStream class have been deprecated in favour of their equivalents in the StreamIo class, and will be removed in a future major release:waitDigitalInputwaitAnalogInputsetDigitalOutputsetAllDigitalOutputssetAnalogOutputsetAllAnalogOutputsPvtSequence class have been deprecated in favour of their equivalents in the PvtIo class, and will be removed in a future major release:setDigitalOutputsetAllDigitalOutputssetAnalogOutputsetAllAnalogOutputssetLabel, getLabel, and getAllLabels to TriggersStorage when trying to set an empty string valueexcept argument to forget_devices method of Connection classforget_devices method to Connection classcall,setEventHandler to zml_call,zml_setEventHandlerNone being accepted for numbers.onFireSet and onFireSetToSetting functions to allow setting axis-scope settings on all axes simultaneouslyfind is called.call on called on a disabled stream.null instead of 0 for missing defaultValue in the SimpleTuningParamDefinition struct.gcode.AxisDefinition, gcode.AxisTransformation, ascii.SimpleTuningParamDefinition and microscope namespace.bindings to zaber_motion_bindings to avoid conflicts with other packages.defaultValue to the SimpleTuningParamDefinition struct.is_homed and is_busy methods for the AxisGroup class.NullReferenceException when working with Microscope class in C#.DeviceIO class.axis.activate() function that could lead to a program crashDevice class have been moved out into new classes accessible
via the new Streams and Pvt members..NET Standard framework dependency has been updated from 2.0 to 2.1, meaning this build
is no longer compatible with any .NET Framework versions..NET Framework 4.6.2..NET Core 3.1 framework dependency has been replaced with .NET 6.0.zaber::motion::exceptions namespace to reduce clutter
in the main namespace.DigitalOutputAction
type as a parameter. Booleans are no longer supported as a parameter.streams.toggleDigitalOutput function has been removed as it duplicates functionalityIAsyncDisposable in .NET and .NET Standard projects. Connection
and Transport instances can now be used with the await using statement. This is not available in .NET Framework
projects.activate method for Axis class to enable new peripheral activation on standalone controllersdriver_disable and driver_enable methods to the Axis class.settings.get_many that would sometimes incorrectly produce NaNs for device-level settings
mixed in with axis-level settings.is_initialized method for microscopecm and the Units enumeration.LAMP and PROCESS as axis typeswait_until_idle=False just finishes.async withget_from_all_axes method to get one setting from all axes.ToString method call on closed connection does no throw exception.std::optional.Zaber.Motion.Exceptions namespace.get_content call (instead of raising exception)CommandFailedException now contains the failed command in message as well as in details.OscilloscopeData.GetSampleTime() now correctly reports times for Firmware versions prior to 7.33, which
recorded the first sample after one timebase interval rather than immediately at the start of the recording window.
This means the returned times will be one timebase interval higher than with previous ZML versions, unless you are
using current Firmware.set_tolerance method for Lockstep class.get_position method for Lockstep class.wait_to_respond method for Device class (useful after resetting).identify method on Device gets assume_version argument allowing to override firmware version queried from the device.MovementFailedException and MovementInterruptedException details now contain device and axis that caused the exception.CanSetState(Device|Axis)Response classes moved to ascii namespace.enable_alerts (and disable counterpart) methods added to Connection class.noexcept in their constructors.open_tcp no longer has a default value for the TCP port.open_tcp now has a default value for the TCP port (chain port of X-MCC).SerialNumber device property has changed from uint to long for CLS compliance.deviceid setting has been renamed from Deviceid to DeviceIdLegacy.open_serial_port_directly removed and replaced by argument of open_serial_port.open_iot_unauthenticated removed and replaced by argument of open_iot.maxspeed when acceleration is specified without velocity.GetDbServicePipePath method to get the location of the pipe serving a local device databaseprotobuf>=3.20.0,<4.22.0numchannels, scope.channel.size and scope.channel.size.max settings, with default values for older Firmware versions.Start() method now has an optional parameter for the FW 7.29 capture length parameter.listKeys and keyExists.version to paramset infocheck_disabled of the Stream classerase_key method of Storage class returns false instead of throwing exception when the key does not exist.is_homed method to indicate if device was homed and has referenceGetState returns a string representing a device or axis' current state. This may include:SetState takes a state returned by GetState and applies it to a device, setting its state to match the saveCanSetState will check if a supplied state is compatible with a device or axis, and return an error explaining why not if it isn't.GetString and SetString methods for accessing string-based device/axis settingsGetChannelsInfo will return zeros when device does not support io at all (instead of error).GetAxisNumbers method to Lockstep class that returns array of axis numbers (GexAxes marked obsolete).peripheral.id constant (FW 7) and distinction from peripheralid constant (FW 6)DeviceIds property to DeviceAddressesencoder.counth$XDG_CACHE_HOME/zaber-motion-lib (or ~/.cache/zaber-motion-lib if not set)~/Library/Caches/zaber-motion-libmessage() renamed to getMessage() to conform to library conventionsDeviceSettings class in API documentationtoString methods for Java and C++ classesreply_only event in Python Binary Connection (mistakenly called alert)Bug fixes and Improvements
Device class.dist folderDocumentation changes
Bug fixes and Improvements
Documentation changes
Bug fixes
Documentation changes
API changes
Documentation changes
Bug fixes
API changes
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
Bug fixes
Adding settings constants for ASCII Protocol
Finalizing Binary Support
Fixing various issues with C++
Extending settings API to provide arbitrary unit conversions
Providing properties on Axis and Device that expose device identity information
I/O support
Lockstep support
Binary generic commands
ASCII-specific namespace (BREAKING change)
Example projects
Database usage documentation
Exception types (BREAKING change)
Java Support
Changed type of the serial number in device identity to unsigned integer
Documentation improvements
Renaming Communication class to Connection
Adding renumber method to Connection class
Python asyncio
_async suffix.Improving the error message when the setting is not supported by the device
Device Database store
Adding serial number to device identity
Renaming method wait_till_idle to wait_until_idle
Device settings API
Improving error message when device rejects the read or write of settings
Device Database documentation
Sorting classes in the reference
Fixing letter case of enum values in the reference (Python, Js)
Improving grammar in documentation
Adding an appropriate license to source code and packaging
Adding Changelog