6. Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning in accordance with Semodia GmbH Guidelines.

6.1. [3.6.0] - 2024-08-13

6.1.1. Added

  • Detailed cena demo documentation for mtp control engine example

  • UA Expert templates in tools/

6.1.2. Fixed

  • Fixed various compiler warnings, mostly concerning unused parameters

  • Model: MTP: Multiple variables in the PeaInformationLabel now are assigned correct values

6.1.3. Changed

  • Model: SemanticModelEntities cannot be copied anymore

  • mbedcrypto: Update from v3.4.1 to v3.6.0

  • open62541: Update from v1.3.6 to v1.3.11

6.1.4. Deprecated

  • Model: MTP: PeaInformationLabel and ModuleTypePackage constructors with out-of-date parameters

6.2. [3.5.0] - 2023-12-19

6.2.1. Added

  • modbus: New dataio library to access Modbus TCP servers (Client and Server)

  • nanomodbus: embedded third party backend library for modbus datio

6.2.2. Fixed

  • mtp, reflection: ProcessValueIn and ProcessValueOut are now correctly reflected by the OPC UA server

6.2.3. Changed:

  • util: EndianessTool now uses constexpr to detect system endianness at compile time

6.3. [3.4.1] - 2023-11-17

6.3.1. Fixed

  • Examples: Added proper static node Ids to example_mtp_controlengine

6.4. [3.4.0] - 2023-11-10

6.4.1. Added

  • CENA Demo build: New build target for testing purposes

6.5. [3.3.0] - 2023-09-29

6.5.1. Added

  • MTP: Added PIDCtrl data assembly logic

  • mbedcrypto: Portable cryptography library for inclusion in other libraries

  • Reflection: OPC UA: Variable change subscriptions on OPCUA client

  • Reflection: OPC UA: Functionality to add multiple change callbacks per variable on OPCUA servers

  • Reflection: OPC UA: TLS support for OPC UA clients using the mbedTls library (Currently limited to SecurityPolicy#Basic256Sha256)

  • biobrain: New dataio library to access Sartorius Biobrain servers

6.5.2. Changed

  • Update open62541 from v1.1.2 to 1.3.6

6.5.3. Fixed

  • ProcParamApply now performs the handshake correctly and is applicable even when ProcCur is not yet set

6.6. [3.2.0] - 2023-08-09

6.6.1. Added

  • Examples: New Example on MTP BinValve

  • License: Add licensing enforcements to library builds

  • License: NetworkMediaControllerTrait for Windows builds

  • License: WallTimeTrait

6.6.2. Changed

  • CMake Build System: overhauled regarding sub libraries

    • New CMake option: SEMODIA_CONTROLENGINE_BUILD_STANDALONE_LIBS

      • Build static and shared libraries of CENA libraries to distribute in binary form

      • Include required header files in installation target

      • Deploy example applications that link against binary libraries

    • CMake target naming change: Developers must link ${library_name}_shared or ${library_name}_static instead of ${library_name}

6.6.3. Fixed

  • GCC >= 13 compilation errors due to changed default included C++ headers

6.7. [3.1.0] - 2023-04-13

6.7.1. Added

  • computedValues: PID-Controller utility

  • locking: LockedObject - a container class that constraints access to its internally managed object via a lock

6.7.2. Changed

  • RaspberryIo: Removed completely due to GPL licensing of linked upstream library

6.8. [3.0.0] - 2022-06-20

6.8.1. Added

  • pilotone: Incorporated driver to control Huber PilotOne PLC, enabling control of Huber tempering module operations

  • ritmo: Incorporated driver to control Fink Chem+Tech Ritmo R15 membrane pumps

  • PiControl: Support for temperature probes (AIO RTD elements)

  • Reflection: OPC UA: Expanded interface to allow testing for the existence of NodeIds (used in generated tests)

  • MTP: ServiceParameters (Configuration-/ProcedureParameter) can (optionally) automate the handling of ApplyEn in each service state for convenience

  • MTP: Apply-Logic and pre-configurable units/ranges added to ProcessValueIns

  • MTP: Apply-Logic added to ParameterElements

  • MTP: DIntServParam (sans enum support), StringProcessValueIn, StringServParam

  • MTP: ReportValues (IndicatorElements) implement “Freezing” and MissedValueFlags

  • MTP: MTP Unit codes are now available as enum/class

6.8.2. Changed

  • Messaging: API moved to utilities and made optional

  • MTP: Adapted ServiceOperationMode and ServiceSourceMode to be compatible with standard interpretation of 3rd party software (breaks SOLID)

  • MTP: Removed AssetId and DeviceClass from high level PEA API, as these are supposed to be set by the POL

  • MTP: ReportValues of selected procedures are frozen (forced) by the service when it enters COMPLETED, ABORTED or STOPPED

  • MTP: Examples: example_mtp_controlEngine was reinstated and upgraded (as a pattern) for the new model core function

  • MTP: ParameterElements (Service/ProcedureParameter) can either leave their handling/interpretation to procedure state callbacks (as with legacy, suitable for parameters that are evaluated every time) or define a userspace callback that triggers when apply() happens (suitable for expressions that configure a FEA or smart field device).

  • MTP: Service- and ProcedureParameter updates are now governed by a services ApplyEn, which can be controlled on a by-ServiceState basis from userspace

  • MTP: Procedures now require individual command-enable-callbacks to determine active transitions, even if the procedure is not active

  • Util: StateMachine: Initial states are no longer active by default; enter() needs to be called on/by parent state to activate

  • MTP: Service Procedure selection, state machine and CommandEn/CommandInfo according to new 01/2022 MTP standard

  • MTP: Enforcing common interface for handling Op/ServiceModes across ParameterElements and ServiceControl

  • MTP: QualityCodes check and enforce correct encoding to/from native integer type

  • MTP: Re-implementation BinServParam, AnaServParam, DIntServParam and StringServParam as ParameterElements, not with ApplyBaseFunction

  • MTP: High-Level API access to VUnit must use UnitCodes

  • MTP: High-Level API access to WQC or VQC must use QualityCodes

  • PADIM: New include structure for generated code, also used enforced during API generation

  • MTP: New include structure for generated code, also used during API generation

  • MTP: Service, Procedure, ServiceControl and ServiceParameters have been upgraded to the 01/2022 VDE/VDI 2658 specification

  • MTP: Regenerated changed classes from specification, replacing base classes

  • MTP: All pointer switched to smart pointers

6.8.3. Removed

  • MTP: BinServParamIn no longer has the ability to receive interpretations (VStates) from POL

  • MTP: “WQC”, “VQC” and Units are no longer passed as integer values (require use of proper enums)

  • MTP: Outdated/Legacy business logic and tests from Service, ServiceControl, Procedure, ServerParameter

6.8.4. Fixed

  • MTP: Documentation, tutorials and examples updated to match CENA v3 MTP model Core

  • HART: Master now updated UART flowcontrol on his own (moved into CENA from userspace)

  • OSAL: FrequencyLimitedTaskLoopTask now consider the time between executions in Milliseconds instead of ticks (far more user-friendly in userspace)

6.8.5. Deprecated

  • HART: Replaced C-style pointers for locks and UART with smart pointers to make driver consistent with CENA guidelines

  • PiControl: Remove PiControl-Prefix from StatusCode

  • MTP: Procedures must have userspace callbacks to determine their CommandInfo (enabled transitions) and can no longer be created “defaultly” by Services or ServiceSets

  • MTP: Interdicting UserSpace or high leven API access to internal functions by moving them to protected/friend in addition to deprecation warnings

  • MTP: QualityCodes can no longer be set numerically from userspace; valid QualityCodes enforced by API

  • MTP: updateWQC is now setQualityCode()

  • MTP: Access to QualityCodes was limited to IQualityCode; can no longer be set using C’Tor

  • MTP: Any int-Access to Units from C’Tors

  • MTP: Service, Procedure, ServiceControl and ServiceParameters have been superseded and are incompatible with version 2.x of CENA

6.9. [2.0.0] - 2021-11-12

6.9.1. Added

  • Drivers: Support for Bronkhorsts proprietary ProPar communication protocol

  • License: Rudimentary license framework and MAC-Address trait

  • MTP: AnaManInt and BinManInt with associated logic

  • MTP: BinServParam with associated logic

  • MTP: AnaVlv with associated logic

  • MTP: MTP Control Engine base class

  • OSAL: Optional Logging as decorator for any userland class

  • OSAL: Time-Bound task type that only executes every N time ticks (courtesy of BasicTimer)

  • MTP: Added support for ProcedureValueIn ([Ana|Bin|DInt]ProcessValueIn) and VScaleBaseInFunction

  • MTP: Added support for ProcedureParameters, ReportValues & ProcedureValueOut

  • MTP: AnaServParam (and ParameterElement base class) as ConfigurationParameters for Services

  • MTP: BinMan with associated logic

  • Drivers: Kunbus PiControl drivers for LED, Relays, DI, DO, AI and AO

  • MTP: BinVlv with associated logic

  • MTP: OperatingModeBaseFunction with associated logic

  • MTP: BinView with associated logic

  • MTP: ResetBaseFunction with associated logic

  • MTP: InterlockBaseFunction with associated logic

  • MTP: SourceModeBaseFunction with associated logic

  • Reflection: Dynamic (but single pass) PADIM reflection

  • Model: Business Logic for AnalogSignal and AnalogSignalVariables

  • Model: Signal Set

  • Model: Added PADIM classes (high-level signalVariableTypes are not functional yet)

  • Drivers: UART IO Drivers for Linux/BSD

  • Drivers: Foundation HART IO Driver /w global commands

  • Reflection: OPC UA: Logging of open62541 is redirected and can be customized in userspace

  • Testing: Optional stacktrace-injection

  • Logging: New logging API using sinks (files, terminal), formatters and providing asynchronous logging

6.9.2. Fixed

  • Model: MTP: Added behavior to handle ‘buggy’ services /wo procedures or without default procedures

  • Drivers: HART: Allowing HART5 transmissions with as little as 3 preamble bytes to address problematic field devices or bytes lost by UART

  • OSAL/Tasks: Require uniquely owned locks; sharing locks was previously possible and severely misrepresented intent

  • MTP: SC in EXECUTE would always complete in 1 update() instead of evaluating the callbacks complete feedback

  • Model: MTP: ServiceSourceMode interpretation and updating in ParameterElements was broken (could only be correctly updated by accessing ReferencesSourceMode directly)

  • Reflection: OPC UA: Safeguard against writing to std::any container of wrong type

  • Model: MTP: Byte and DWord are now unsigned (fixes QualityCode, OSLevel, ServiceControl and LockViews).

  • Reflection: OPC UA: attempt to link to existing/created nodeIds before creating new nodes (allows using same IndicatorElement in multiple procedures)

  • Reflection: OPC UA: MTP Reflection now correctly redirects to specific DA types (e.g. does not IndicatorElement, but AnaVIew)

  • Drivers: HART uses per message callbacks instead of per-command callbacks (that would not be removed and cause a memory leak)

  • Util: EndianessTool was “stuck” on detecting everything as bigEndian and tests were broken accordingly

6.9.3. Changed

  • Directory structure now separates includes from sources, mandating use of component-path-prefixes in #include directives

  • Drivers: UART: changed interface specification (breaking) to support explicit flow-control and blocking/nonblocking IO modes along with platform-defined update() function

  • MTP: updateRequest() and updateSetpoint() have to be called on (Bin|Ana)Man[Int]; removed pol/opc ua access function to update Rbk on OPC UA writes

  • MTP: Service class now uses update(), not iterate(); which is more of a task loop thing.

    • This may break older service implementations.

  • MTP: ServiceOperationMode() and ServiceSourceModes provide getUpdatedXY() (which performs handshakes & updates values) and getCurrentXY() for peeking into current settings without change

  • MTP: Corrected/Overhauled logic for AnaMan; conform to updateSetpoint(), getCurrentSetpoint() and getUpdatedSetpoint() for OperationsElements (like ParameterElement & BinMan)

  • Drivers: HART support TX rate limiting

  • Bumped Version Number of dev branch to 1.3.0

  • Reflection: OPC UA: Extended Interface definition to support deleteNode() calls (both tree and single, path and nodeid)

6.10. [1.2.0] - 2020-12-16

6.10.1. Added

  • MTP: Added StringView Items

6.10.2. Changed

  • MTP: All AnaView and StringView values have static OPC UA IDs

  • MTP: QualityCode classes now share a common interface /w symbolic values

6.10.3. Fixed

  • OSAL: Timer implementation based on chrono was using flawed “ticks”

  • CMake: Correctly compile and run tests even if OPC UA is disabled

6.11. [1.1.0] - 2020-11-25

6.11.1. Added

  • Driver: Support for interaction with Siemens S7 devices using SNAP7

  • MTP, Reflection: Support for assigning static node IDs to DataItems

6.11.2. Changed

  • CMake options and targets now include “CONTROLENGINE” to avoid clashing with projects

  • MTP, Reflection: Reflecting communication set instance list now uses TagName of DataItems instead of list numbers

6.11.3. Fixed

  • Reflection: Memory Leak in open62541 OPC UA Server browser operation

  • OSAL: Prevent race condition in optimized code by making ThreadedDecorator datastructs atomic

6.12. [1.0.0] - 2020-10-28

6.12.1. Removed

  • Deprecated or sensitive documents from documentation

    • Global Requirements-Engineering Documents from documentation

    • Unused API-Documentation components (Messaging, mtp)

6.12.2. Added

  • New MTP Model Elements:

    • Read/Write Dataitems (with type casts and operators)

    • AnaView

      • ScaleSettingsBaseFunction

    • AnaMan

      • ValueLimitatationBaseFunction

    • AnaMon

      • LimitMonitoringBaseFunction

    • Services:

      • ServiceSet

      • Service

      • mtp::Procedure

      • ServiceControl

      • ServiceModeBaseFunction

      • ServiceOperationModeBaseFunction

    • Communications (incomplete)

    • ModuleTypePackage (incomplete)

  • Examples:

    • Raspberry Potentiometer example (AnaView, DataIO on Pi)

    • Service-State to AnaView example (Services, Procedures, AnaView)

  • DataIO:

    • Raspberry peripherals

    • AutomationHat Driver

      • SN3218 and ADS1015 I2C support

  • Statement API

  • OPC UA reflection API:

    • open62541 server-/client wrappers

  • OSAL Task framework

    • Thread Decorators (Linux, Windows/Cygwin)

    • Locks/Mutexes (Linux, Windows/Cygwin)

  • OSAL Messaging framework

    • Model Event subsystem

  • Generated MTP Model API

  • Project structure and environment

    • Code and API documentation

    • Requirements engineering documentation

6.13. [0.0.0] - 2020-07-16

6.13.1. Added

  • CMake project skeleton

  • Project structure

  • Incorporated Doxygen and Sphinx documentation systems

  • Set up sample CI build pipeline