Skip to content

Release 1.4

Compare
Choose a tag to compare
@seehma seehma released this 08 Jan 15:02
· 32 commits to main since this release
a320aee

Changelog

For more information on this release please visit zeugwerk.dev

General

  • Updated documentation in several places
  • License expiration will no longer put the PLC to config mode, instead notification hint that the license expired

Features

  • feat(Bridges): added loadbalancing to bridges, use UpdateInterval to specify the interval a bridge may take to update all managed objects (#36).
    This feature significatly improves the performance for PLCs with a lot of I/Os, Axis and Actuators by updating the communciation structures less frequently then the logic of the PLC.
  • feat: added version identifiers such that the version of any library can be checked with Global_Version.stLibVersion_ (#55)
    Allows to check the version of the libraries during runtime, e.g. to check if a HMI is compatible with the communication structured provided by the framework.
  • 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) There are various options here, like creating a new log file on a daily, monthly, hourly (...) basis.
  • feat(PwmController): Added PhaseShift property, which can be used to tune the phase between multiple PwmControllers to distribute peakload more evenly over time (#85)
    This can be used if there is only 1 powersupply that has to provide power for several controllers. By shifting the expected duty cycle one power supply can now be used where otherwise more or a bigger one would be needed.
  • feat!(DateTime): Datetime can now provide calendar information instead of "only" timestamps (#45)
  • feat(AxisStepperEL70xx): added parameter reverse rotation direction for encoder (#16)
  • feat(ParameterChannelCoE): show parameter subindex in dezimal and hex representation in log messages (#48)
  • feat!(ActuatorDigital): refactored listener concept. Listeners can now implement sequence, which may abort a movement and will be waited for. It is also possible to have multiple listeners per actuator (#92)
    RegisterListener is no longer available on the public API. Instead you have to extend from the object 'ActuatorDigitalMoveListenerSequence' and pass the actuator, which should be listened to. The sequence comes with a MoveType input parameter, which is set accordingly to the current movement of the actuator. To port the existing code to the new API do as follows: Create a "CASE MoveType" statement and move the code from your existing function into their respective cases. In the end, don't forget to set the Sequence to idle with SetBusy(TRUE).
    To make use of a new feature, you can create sequences with steps and everything else that a sequence supports. To cancel the actuators movement simply abort the listener sequence
  • feat(Sequence): the await methods of a Sequence now returns true if all passed objects are done (=not busy and no error) (#51)
  • feat!(Analog): Analog I/Os now have the possibility to configure physical limits. Values written or read from the terminal are capped to these limits. When using SetConversionParameters to initialize the I/O the limits are automatically set with the appropriate values. If using another conversion method or want to overwrite the preset limits, you can use method SetPhysicalLimits to do so. Limits can be disabled by setting the upper and lower limits to 0. Overwriting the physical value can be useful if you want to operate the I/O outside of its specification
  • feat(Unit): implemented resuming mechanism (#46)
    If a state is halted it can now be resumed from the the Milestone mechanism provided by a sequence.
    The state transition diagram for the halted state is as follows:
    The halted state can be resumed from, other predefined sequences and/or userdefined sequences can not be started when halted with the exception of GoHome and Stop (and of course FaultReaction)
    Userdefined actions can be started even when halted, they will executed and afterwards the originally halted sequence can be resumed from
  • feat: add string tokenizer (#63)
  • feat: defined modbus device interface and basetype for ethernet protocol
  • feat(IDigital): added setter of property Enabled to interface IDigital
  • feat: integrated modbus tcp/udp ParameterChannel (#53)
  • feat: added functions StrTrim, StrLTrim, StrRTrim (#54)
  • feat!(IFile): added readline to IFile and fileopenmode for text or binary opening (#55)
  • feat: Improved performance of string length expressions (#60)
  • feat: added function to test if a string is empty (#59)
  • feat!(FileSystem): split file um in fileimpl and aux file (#70)
  • feat!(IFile): replaced iseof and isopened by corresponding properties (#56)
  • feat(DebouncedInput): added properties to set and get the debouncing durations
  • feat(Modbus): Implemented Modbus RTU. We now have new equipment objects that can be used in an application to connect to modbus devices and retrieve/send data to them (#115)
  • feat: upgrade to docfx 2.70 (#70)
  • feat(Modbus): added logging at ModbusMasterSerielPortImpl (#75)

Bugfixes

  • fix: fixed cycle time of pid to pwm controller cycle time (#79)
  • fix(Pid): Fixed div0 exception that occured if the cycle time was not initialized (#44)
  • fix(DateTime): Datetime with deactivated synchronization would always return the same timestamp
  • fix(Unit): fixed an error in the unit diagnostics, it showed the last item of the error trace instead of the relevant message (#41)
  • fix(PlcOpen): Objects and methods of AXIS_REF are vendor specific and must not be used in the framework (#86)
  • fix(Unit): after halting the state of a unit should be halted rather than idle (#44)
  • fix: fixed text decode in error string
  • fix(OnlineTrajctoryGenerator): correct initialisation of actual values for calculation (#48)
  • fix: fixed return of internal parameter instances (#14)
  • fix(AxisSimulatedDrive): initialize trajectory if corresponding parameter is set
  • fix(Unit): halting of a unit should only be possible with HaltAsync (#45)
  • fix(ActuatorDigital): call next step either with or without listener (#91)
  • fix(Sequence): added Workaround for twincat/codesys bug when assigning an interface
  • fix(PlcOpen): Objects and methods of AXIS_REF are vendor specific and must not be used in the framework (#96)
  • fix(ActuatorDigital): avoid override of possible stop from actuatorlisteners (#94)
  • fix(AxisPlcOpenMc): HomingMode was not set correctly
  • fix: debounced inputs not set to iobridge via add method (#47)
  • fix(Analog): Physical unit was not adopted with SetConversionScaling
  • fix(UnitStateMachine): no overwriting of an existing sequence name in SetSequence
  • fix(ResistorBridgeEL3356): added setter of property Enabled
  • fix: simulated highlow of limitswitches for src and dst (#111)
  • fix: added log-messages for actuator-movement again (#110)
  • feat: add setname method to LoggerNameDecorator (#72)
  • fix!(Unit): StopAsync is not working if the unit is locked by a different unit (#59)
  • fix: set and return name properly in ImpulseOutput and PulsedOutput (#121)