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 logicmbedcrypto: 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 ofApplyEn
in each service state for convenienceMTP:
Apply
-Logic and pre-configurable units/ranges added toProcessValueIns
MTP:
Apply
-Logic added to ParameterElementsMTP:
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
andDeviceClass
from high level PEA API, as these are supposed to be set by the POLMTP:
ReportValues
of selected procedures are frozen (forced) by the service when it enters COMPLETED, ABORTED or STOPPEDMTP: Examples:
example_mtp_controlEngine
was reinstated and upgraded (as a pattern) for the new model core functionMTP:
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 userspaceMTP: 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 activateMTP: Service Procedure selection, state machine and CommandEn/CommandInfo according to new 01/2022 MTP standard
MTP: Enforcing common interface for handling Op/ServiceModes across
ParameterElement
s andServiceControl
MTP:
QualityCodes
check and enforce correct encoding to/from native integer typeMTP: Re-implementation
BinServParam
,AnaServParam
,DIntServParam
andStringServParam
as ParameterElements, not withApplyBaseFunction
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 POLMTP: “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 fromStatusCode
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 nowsetQualityCode()
MTP: Access to QualityCodes was limited to
IQualityCode
; can no longer be set using C’TorMTP: Any
int
-Access to Units from C’TorsMTP: 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
andBinManInt
with associated logicMTP:
BinServParam
with associated logicMTP:
AnaVlv
with associated logicMTP: 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
) andVScaleBaseInFunction
MTP: Added support for
ProcedureParameters
,ReportValues
&ProcedureValueOut
MTP:
AnaServParam
(and ParameterElement base class) asConfigurationParameters
for ServicesMTP:
BinMan
with associated logicDrivers: Kunbus PiControl drivers for LED, Relays, DI, DO, AI and AO
MTP:
BinVlv
with associated logicMTP:
OperatingModeBaseFunction
with associated logicMTP:
BinView
with associated logicMTP:
ResetBaseFunction
with associated logicMTP:
InterlockBaseFunction
with associated logicMTP:
SourceModeBaseFunction
with associated logicReflection: Dynamic (but single pass) PADIM reflection
Model: Business Logic for
AnalogSignal
andAnalogSignalVariables
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
feedbackModel: 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 writesMTP:
Service
class now uses update(), not iterate(); which is more of a task loop thing.This may break older service implementations.
MTP:
ServiceOperationMode()
andServiceSourceModes
providegetUpdatedXY()
(which performs handshakes & updates values) andgetCurrentXY()
for peeking into current settings without changeMTP: Corrected/Overhauled logic for AnaMan; conform to
updateSetpoint()
,getCurrentSetpoint()
andgetUpdatedSetpoint()
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
andStringView
values have static OPC UA IDsMTP: 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