Table of Contents



  • fix: for some reason objectmock gets excluded from the build
  • fix: added several qualified_only flags to enumerations
  • feat: renamed ConcurrentTaskToken to catchier name TaskToken
  • feat: added new token to support concurrent calls to async methods, which is supported by some objects in the framework (i.e. ParameterChannels) (#31)
  • feat!: moved platform independent datatypes from ZPlatform to ZCore (#30) BREAKING CHANGE: The namespace for the following datatypes has to be corrected in Applications
  • feat(Instance): added functionblock Instance, which autogenerates the string for a Name property from the variable name (#35)
  • feat: updated twincat-libraries to actual version and set new twincat version in references.json and config.json (#49)
  • feat: set newest twincat libraries


  • feat: exclude unittest objects from doc
  • doc: add example/tutorial for a userdefined sequence (#47)
  • doc(Quickstart): Added halting to DevKit Pro Quickstart-Tutorial
  • doc(Quickstart): Added halt button description
  • doc(Quickstart): updated property names in quickstart tutorial
  • doc: added description for zeugwerk-licenses
  • doc: fixed tabs, image links, xrefs, markdown anchors
  • doc: testing new anchor in doc
  • doc: moved umrt and github tut to general nav-entry (#48)
  • doc: restructured userguide toc
  • doc: reword subsequences, actions, Userdefined state, standard states
  • doc: sequence introduction update
  • doc: restructured state tutorial


  • feat(Axis): added undefined to motionstates (#37)
  • fix: cancellationtoken now correctly resets the halt requested flag when recovering (#27)
  • feat(PlcOpenMotion): added plcopen motion datatypes
  • fix: typo in var_input variable of IAssertion (#37)
  • fix(Pid): Fixed div0 exception that occured if the cycle time was not initialized
  • feat(Str): function to convert a byte into a hexstr (#37)
  • feat: removed internal flag on ILoggerAppender; updated some doc (#48)
  • feat(PlcOpenMotion): added positioning type enum (#41)
  • feat!(IDateTime): changed API of fetching UnixTimestamp and added Now and CalendarInfo as new Methods


  • fix(Mutex): running multiple tasks on 1 CPU lead to deadlocks (#45)
  • feat!(Mutex): locking can fail when the PLC is in a breakpoint, Mutex.Lock now returns if it succeeded or not (#32) BREAKING CHANGE: When calling Mutex.Lock it is mandatory to check if the lock was successfully done
  • fix: avoid _resetSoE, the FB does not play nice with library references
  • fix: use the explicitly set version of Tc2_MC2 instead of a placeholder
  • feat: implemented homing for PlcOpenMotion
  • fix: fixed parameterchannel call according to new api (not seen in PR)
  • feat: homing with and without parameters (#62)


  • feat!(DateTime): changed API of fetching UnixTimestamp and added Now and CalendarInfo as new Methods
  • feat!(LoggerFile): reworked rollover options for the File Logger, it is now possible to configure rolling over at specific times in addition to rollover over when exceeding a file size. (#52)
  • feat(LoggerFile): added a property to adjust the offset (in milliseconds) to the UTC timezone when logging a message
  • fix(Logger): Persistent filehandles were not closed during booting This could could render the logger inoperational after a bluescreen. (#34)
  • fix(Logger): fixed possible exception in Logging object
  • fix(DateTime): if synchronization was successful and suddenly is unsuccessful reset the synchronized flag. This happens when connection to remote target is lost (#23)
  • fix(DateTime): if synchronization was successful, transition to booting error if syncclock fails to reset the synchronized flag
  • feat(DateTime): added property for synchronization period (#46)
  • feat(StringBuilder): New method AppendUrlEncoded allows to append text to a string, which gets encoded to be used in an URL. This is useful in combination with IHttpClient (#38)


  • feat(PwmController): Added PhaseShift property, which can be used to tune the phase between multiple PwmControllers to distribute peakload more evenly over time (#85)
  • feat(#35): Improved Axis API regarding parameter handling. (#36)
  • fix: removed wrong cia states in scp drive
  • fix: check if sequence is busy (#33)
  • fix(PwmController): PwmController used local _isInRange #42
  • fix(Controllers): Pwm- and PidController Settled and InRange method could return incorrect informations in Status <> Busy and/or before settling started (#43)
  • feat(Light): add name method to lightbase fb
  • fix: logmessage format for moveabsolute and movevelocity
  • feat(DigitalArray): add evaluation possibility for enabled property (#65)
  • fix(PulsedOutput): Wrong handling of limits of dutyCycle parameter (#59)
  • fix(Digital): Invert of Digital with inverted logic does not work (#58)
  • feat(Controllers): Uniform settling timeout reset behavior accross all controllers when changing nominal values (#61)
  • fix(PwmController): changed new setpoint check to is equal
  • fix: if nominalvalue is equal previously set value, return (#53)
  • fix: start settlingtimeout timer when new nominal value is set (#52)
  • feat: update to parameterchannel with tasktoken and new api (#71)
  • fix(PwmController): if dutycycle is one hundret percent, output should stay TRUE (#68)
  • feat(ParameterChannel): implemented new ParameterChannel, which can be used for any NcMotion parameter (#39)
  • feat(PlcOpenMotion): add modulo positioning for plcopendrive (#41)
  • fix(AxisPlcOpen): the ActualPositionDisplayType only worked correctly if PositioningType was set afterwards. Refactored ActualPositionDisplayType to PositioningDisplayType to indicate that this it is related to the PositioningType property (#73)
  • fix(Analog I/O): writing the maximum value of a signed analog I/O creates an integer overflow #74 (#75)
  • fix: fixed cycle time of pid to pwm controller cycle time (#79)


  • fix(Unit): if unit was on error and homing would cause an error in the same cycle as the action was started, error was not logged
  • feat!: Improved error tracing mechanismn (#42) The previous implementation limited the size of a trace to 256
  • feat(Unit): extended halting feature to units Units can now be halted via com structs or by using the a dedicated Unit.Halt() method. To use this feature in existings PLCs Halt booleans have to be added in the Unit's Request Communication Struct
  • feat: show a debug message to indicate errors on booting process (#42) * feat: show a debug message to indicate errors on booting process
  • feat(AxisBridge): Added status information in publish comstruct (#35)
  • feat(Application): Introduced a minimum duration that an Application waits before switching from Booting to Busy, to postpone the booting procedure of Units. This is helpful in TwinCAT, which sometimes takes awhile to finish its license initialization (#38)


  • feat(Omron): use a SDO to read out the motion state instead of determining it in software
  • fix(Indradrive): removed wrong cia states in scp drive
  • feat: added parameter fb to omron (#12)
  • fix: use same version of struckig as the standalone build of ZExperimental does
  • feat: update to struckig 0.8.8