
DDAS License Manager Manual
About this documentation
This documentation provides essential information for working with components of the DDAS software ecosystem. It is intended for software developers and machine manufacturers who integrate, validate, and operate DDAS function blocks within CODESYS‑based applications.
Note!
Before installing or configuring any software, ensure that you have read and understood the operating instructions of all relevant hardware devices!
Tip!
Further information can be found at: https://www.ddas.digital
This manual is part of the DDAS library collection, which includes documentation for license management, date and time handling, scheduling, equipment performance, and other functional modules:
| Documentation | Subject |
|---|---|
| DDAS LicenseManager Library Manual | Description and usage of the library license management function blocks |
| DDAS DateTime Library Manual | Description and usage of the library date time function block. |
| DDAS Scheduler Library Manual | Description and usage of the library scheduler function block. |
| DDAS EquipmentPerformance Library Manual | Description and usage of the library Equipment Performance function block. |
Document history
| Version | Description | ||
|---|---|---|---|
| 1.0 | 14.04.2026 | DDAS | Initial version |
General
Library
This library manages the library licensing mechanism.
The library includes the following user function block:
Get_Lib_License
Detailed descriptions of the function blocks and their relevant dependencies are provided in the following chapters.
Licensing Concept
All libraries require a valid license. Each license is based on three mandatory keys:
SiteCode
Provided by the user (e.g. ‘DDAS-Site-License’)LibraryGuid
Delivered with the library (e.g. ‘{LIB-DDAS-D5BA612E}’)LibraryActivationKey
Issued by DDAS (e.g. ‘EDB86DA0’)
License Activation Mechanism
To activate a library license, one instance of the function block
Get_Lib_License must be called for each licensed
library.
This function block is part of the
DDAS_LicenseManager_Lib library.
Licensing Process
The following steps are required to license and use a library:
The user selects the required libraries.
The user integrates the selected libraries into a test project or uses the provided demo program and evaluates them using the time‑limited demo license.
If the user intends to use the library function blocks in a machine application, the library is ordered and the selected SiteCode is sent to DDAS.
DDAS provides the corresponding LibraryActivationKey.
In the machine application, the user instantiates the function block Get_Lib_License once for each library and assigns all required license keys to activate the library license.
After successful activation, all function blocks of the licensed library can be implemented and executed.
Note: Detailed information on how to use the function block Get_Lib_License is provided in this software manual.
Note: The function Get_sError is available in every library and provides access to the error description and enumeration corresponding to a function block’s error code, when required.

| Scope | Name | Type | Comment |
|---|---|---|---|
| Return | Get_sError | STRING | |
| Input | iErrorID | INT | Error and status identifier for diagnostics. |
| Output | eErrorID | eError | Returns the eError enumeration based on the iErrorID. |
FB Get_Lib_License
General Information
This chapter describes the function block Get_Lib_License.
Function Block Name: Get_Lib_License
Library: DDAS_LicenseManager_Lib
Dependent Codesys libraries: none
CODESYS Version Compatibility: CODESYS V3.5 and higher
License / Usage Restrictions: Requires valid full or demo library license
Purpose & Scope
The Get_Lib_License function block manages the library licensing mechanism. A separate instance of this function block is required for each DDAS library used within an application.
The function block is designed to activate the library license for all function blocks contained in a specific DDAS library. Each DDAS library inherits the DDAS_LicenseManager_Lib; however, this library must be explicitly added to the user’s machine application in order to enable license activation.
Typical Use Cases
Activate licenses for all function blocks within a DDAS library
Functional Overview
When enabled, the Get_Lib_License function block activates the full library license or manages the operation of a time‑based demo license.
It outputs:
- Full license active
- Demo license active
- Time left of demo license

A demo license is valid for a duration of 2 hours. After this time has elapsed, no active license is available, and all function blocks of the library enter an idle state.
To reactivate the demo license, the controller must be restarted. Each controller restart reactivates the demo license and starts a new demo period.
Error states are monitored continuously and reported via diagnostic outputs.
Interface Description
Function block Inputs and Outputs
| Scope | Name | Type | Comment |
|---|---|---|---|
| Input | xEnabled | BOOL | When TRUE, license management is executed cyclically. |
| sSiteCode | STRING | Please assign the Company Site Code. | |
| sLibraryGuid | STRING | Please assign the Library Guid Code. | |
| sLibraryActivationKey | STRING | Please assign the Library Activation Code . | |
| Output | xFullLicensed | BOOL | TRUE valid full License |
| xDemoActive | BOOL | TRUE when demo License | |
| tTimeLeft | TIME | Display left time in demo mode | |
| xLicensed | BOOL | TRUE when a valid full or demo library license is active. | |
| xError | BOOL | TRUE if an error or warning is detected. Detailed error information is provided in iErrorID. | |
| iErrorID | INT | Error and status identifier for diagnostics. |
Enumerations
eError
Library Possible Error Codes and Descriptions.
| Name | Initial | Comment |
|---|---|---|
| no_error | 0 | No Error detetced |
| empty_Key | 10 | Activation Key string is empty |
| empty_SiteCode | 11 | Site code string is empty |
| empty_cLibraryGuid | 12 | Library guide code string is empty, no demo license available |
| invalid_Key_size | 20 | Invalid Activation Key string size, 8 char required |
| invalid_Key | 21 | Invalid Activation Key string |
| demo_License_expired | 30 | Demo license has been expired, system restart required |
Execution & Timing Behaviour
The function block is intended to be executed cyclically in a task context.
Timing precision depends on the configured task cycle time and target platform
Error Handling & Diagnostics
If an internal error, a library issue, or a licensing problem occurs, xError is set to TRUE and iErrorID provides the corresponding error code. Detailed descriptions of the error codes are defined in the enumeration eError.
Assumptions & Limitations
This library serves as an extension to all DDAS libraries and is applicable only within the DDAS library ecosystem.
Example Implementation
Declaration and Call of the Function Block Get_Lib_License:
VAR
fb_GetLibLicense: DDAS_LM.Get_Lib_License;
END_VAR
FB call in structure text:
fb_GetLibLicense(
xEnabled := TRUE,
sSiteCode:= 'DDAS-Site-License',
sLibrayGuid := '{LIB-DDAS-D5BA612E}'
sLibraryActivationKey := ‘EDB86DA0’
);
FB call in continuous function chart diagram:

Demo Visualisation

MergeLibFBErrors
General Information
This chapter describes the function block MergeLibFBErrors.
Function Block Name: MergeLibFBErrors
Library: DDAS_LicenseManager_Lib
Dependent Codesys libraries: none
CODESYS Version Compatibility: CODESYS V3.5 and higher
License / Usage Restrictions: Requires valid full or demo library license
Purpose & Scope
This function block merge six function block error outputs into one single error output based on input error priority order.
Helps to summarize function block error output into one error based on error and FB priority.
Typical Use Case
Aggregating error outputs from multiple sub-function blocks.
Simplifying HMI/SCADA diagnostics.
Providing a single, clear fault message to operators.
Reducing complexity in higher-level control logic.
Advantages
Centralized error handling
Deterministic priority resolution
Improved readability and diagnostics
Scalable up to six error sources
Functional Overview
The FB MergeLibFBErrors consolidates error outputs from up to six different function blocks into a single unified error output. It prioritizes errors based on a defined priority order (Priority 1 = highest, Priority 6 = lowest).
Key Functionality
Evaluates six independent error sources.
Applies a fixed priority scheme (1 → 6).
Outputs only the highest-priority active error.
Provides consolidated diagnostic information:
Error state
Error ID
Error message
Originating function block
Inputs
Each error source includes:
iErrorIDx (INT): Error/status identifier
sErrorx (STRING): Error description
sErrorFBx (STRING): Source function block name
Where:
x = 1...6
Priority is determined by index:
1 = Highest priority
6 = Lowest priority
Outputs
xError (BOOL)
TRUE if any error or warning is presentiErrorID (INT)
Error ID of the highest-priority active errorsError (STRING)
Error message of the selected errorsErrorFB (STRING)
Function block where the error originated

Behaviour
The function block scans inputs in ascending priority order (1 → 6).
The first detected valid error is selected.
All lower-priority errors are ignored once a higher-priority error is found.
If no errors are present:
xError = FALSE
Other outputs typically remain default/empty.
Interface Description
Function block Inputs and Outputs
| Scope | Name | Type | Comment |
|---|---|---|---|
| Input | iErrorID1 | INT | Error and status identifier Prio 1 |
| sError1 | STRING | sError string | |
| sErrorFB1 | STRING | sError Function block | |
| iErrorID2 | INT | Error and status identifier Prio 2 | |
| sError2 | STRING | sError string | |
| sErrorFB2 | STRING | sError Function block | |
| iErrorID3 | INT | Error and status identifier Prio 3 | |
| sError3 | STRING | sError string | |
| sErrorFB3 | STRING | sError Function block | |
| iErrorID4 | INT | Error and status identifier Prio 4 | |
| sError4 | STRING | sError string | |
| sErrorFB4 | STRING | sError Function block | |
| iErrorID5 | INT | Error and status identifier Prio 5 | |
| sError5 | STRING | sError string | |
| sErrorFB5 | STRING | sError Function block | |
| iErrorID6 | INT | Error and status identifier Prio 6 | |
| sError6 | STRING | sError string | |
| sErrorFB6 | STRING | sError Function block | |
| Output | xError | BOOL | TRUE if an error or warning is detected. Detailed error information is provided in iErrorID |
| iErrorID | INT | Error and status identifier for diagnostics | |
| sError | STRING | Error string | |
| sErrorFB | STRING | sError Function block |
Execution & Timing Behaviour
The function block is intended to be executed cyclically in a task context.
Timing precision depends on the configured task cycle time and target platform
Error Handling & Diagnostics
If an internal error, a library issue, or a licensing problem occurs, xError is set to TRUE and iErrorID provides the corresponding error code. Detailed descriptions of the error codes are defined in the enumeration eError.
Assumptions & Limitations
This library serves as an extension to all DDAS libraries and is applicable only within the DDAS library ecosystem.
Example Implementation
Declaration and Call of the Function Block MergeLibFBErrors:
VAR
fb_MergeLibFBErrors: DDAS_LM.MergeLibFBErrors;
END_VAR
FB call in structure text:
fb_MergeLibFBErrors(
iErrorID1 := fb_lic_SL.iErrorID,
sError1:= DDAS_SL.Get_sError(fb_lic_SL.iErrorID),
sErrorFB1 := 'fb_lic_SL',
iErrorID2 := fb_GetBuildTime.iErrorID,
sError2:= DDAS_SL.Get_sError(fb_GetBuildTime.iErrorID),
sErrorFB2 := 'fb_GetBuildTime',
iErrorID3 := fb_GetBatchEndTime.iErrorID,
sError3:= DDAS_SL.Get_sError(fb_GetBatchEndTime.iErrorID),
sErrorFB3 := 'fb_GetBatchEndTime',
iErrorID4 := fb_UpdateInterval.iErrorID,
sError4:= DDAS_SL.Get_sError(fb_UpdateInterval.iErrorID),
sErrorFB4 := 'fb_UpdateInterval',
iErrorID5 := fb_GetSchedule.iErrorID,
sError5:= DDAS_SL.Get_sError(fb_GetSchedule.iErrorID),
sErrorFB5 := 'fb_GetSchedule',
iErrorID6 := 0,
sError6:= ‘’,
sErrorFB6 := ‘’
);
FB call in continuous function chart diagram:

Your Feedback Matters
These instructions have been prepared to the best of our knowledge and belief to provide you with the highest possible level of support when working with our product.
Despite our best efforts, we may not always fully achieve this objective. If you identify any issues or have suggestions for improvement, we would greatly appreciate your feedback.
Please send your comments or criticism in a short e‑mail to:
Thank you for your support.
Your DDAS Application Software Team