ctrlX-DataLayer 4.3.0

Bosch Rexroth ctrlX Data Layer .NET API

This is the Bosch Rexroth ctrlX Data Layer API for .NET Core and .NET Standard 2.0.

Usage

Example: Read a ctrlX Data Layer node's value

// Create a new ctrlX Data Layer system to connect to a ctrlX and start.
using var system = new DatalayerSystem();
system.Start(startBroker: false);

// Create a remote according to your environment (options see Remote class).
var remote = new Remote(ip: "192.168.1.1", sslPort: 443).ToString();

// Create the client.
using var client = system.Factory.CreateClient(remote);

// Read a node with by it's node address.
var (result, value) = client.Read("framework/metrics/system/memused-percent");
if (result.IsGood())
{
    Console.WriteLine($"{memUsed}: {value.ToFloat()} (single read)");
}

Example: Subscribe a ctrlX Data Layer node's value

// Create a new ctrlX Data Layer system to connect to a ctrlX and start.
using var system = new DatalayerSystem();
system.Start(startBroker: false);

// Create a remote according to your environment (options see Remote class).
var remote = new Remote(ip: "192.168.1.1", sslPort: 443).ToString();

// Create the client.
using var client = system.Factory.CreateClient(remote);

// Create the subscription properties by using helper class SubscriptionPropertiesBuilder.
var propertiesFlatbuffers = new SubscriptionPropertiesBuilder("mySubscription")
    .SetKeepAliveIntervalMillis(10000)
    .SetPublishIntervalMillis(1000)
    .SetErrorIntervalMillis(1000)
    .Build();

// Create the subscription
var (createResult, subscription) = client.CreateSubscription(propertiesFlatbuffers, userData: null);
if (createResult.IsBad())
{
    Console.WriteLine($"Failed to create subscription: {createResult}");
    return;
}

// Add DataChanged Event Handler
subscription.DataChanged += (subscription, eventArgs) =>
{
    var notifyInfo = NotifyInfo.GetRootAsNotifyInfo(eventArgs.Item.Info.ToFlatbuffers());
    var timestampUtc = DateTime.FromFileTimeUtc(Convert.ToInt64(notifyInfo.Timestamp));
    Console.WriteLine($"{timestampUtc}, {notifyInfo.Node}: {eventArgs.Item.Value.ToFloat()}");
};

// Subscribe a node by it's node address.
const string cpuLoad = "framework/metrics/system/cpu-utilisation-percent";
var subscribeResult = subscription.Subscribe(address: cpuLoad);
if (subscribeResult.IsBad())
{
    Console.WriteLine($"Failed to subscribe: {subscribeResult}");
    return;
}

Please find the code coverage reports in folder ./coverage.

License

SPDX-FileCopyrightText: Bosch Rexroth AG SPDX-License-Identifier: MIT

Terms and Conditions for the Provision of Products of Bosch Rexroth AG Free of Charge

  • See LICENSES/tc_for_provision_of_products_free_of_charge.pdf inside this package. Please download the latest version from https://www.boschrexroth.com. Navigate to Legal Notice (footer) -> Terms and Conditions for the Provision of Products Free of Charge

  • See LICENSES/*.fossinfo.xml for used open source software licenses.

About

Please note that any trademarks, logos and pictures contained or linked to in this Software are owned by or copyright © Bosch Rexroth AG and not licensed under the Software's license terms.

https://www.boschrexroth.com

Bosch Rexroth AG
Bgm.-Dr.-Nebel-Str. 2
97816 Lohr am Main
GERMANY

No packages depend on ctrlX-DataLayer.

# Bosch Rexroth ctrlX Data Layer .NET API ## CHANGELOG ### 4.3.0 #### NEW - HIGHLIGHTS + New: Updated to Data Layer API 2.9.5. + New: Updated Flatbuffers types package to 'ctrlX-DataLayer.Flatbuffers' 3.6.0. #### FIXED + Fix: Bug 991531: Possible AccessViolationException accessing IFactory on a stopped or retarted system: ObjectDisposedException is thrown instead. #### CHANGED + n/a ### 4.2.0 #### NEW - HIGHLIGHTS + New: Updated to Data Layer API 2.8.6. + New: Updated Flatbuffers types package to 'ctrlX-DataLayer.Flatbuffers' 3.4.0. + New: IProvider: Introduced method _RegisteredType_ to get a registered type (flatbuffers) by it's address. #### FIXED + n/a #### CHANGED + n/a ### 4.1.4 #### NEW - HIGHLIGHTS + n/a #### FIXED + Fix: Bug 919347: Possible native application crash while executing parallel writes. #### CHANGED + n/a ### 4.1.2 #### NEW - HIGHLIGHTS + New: Updated to Data Layer API 2.7.6. + New: IVariant: Added support to create a Variant of type DLR_VARIANT_TYPE_RAW instead of DLR_VARIANT_TYPE_ARRAY_OF_UINT8 using constructor Variant(byte[] value, bool raw = true) #### FIXED + n/a #### CHANGED + n/a ### 4.1.1 #### NEW - HIGHLIGHTS + New: Updated to Data Layer API 2.7.5. + New: Updated Flatbuffers types package to 'ctrlX-DataLayer.Flatbuffers' 3.2.0. + New: IVariant: Introduced method _GetDataFromFlatbuffers_ to query data of a complex Variant (flatbuffers) without using the ctrlX-DataLayer.Flatbuffers package. #### FIXED + Fix: Bug 901352: API tries to load not existent 'libzmq.so', which fails on Linux. #### CHANGED + n/a ### 4.0.1 #### NEW - HIGHLIGHTS + New: The API assemblies are now strong-name signed. #### FIXED + n/a #### CHANGED + n/a ### 4.0.0 #### NEW - HIGHLIGHTS + New: Upgraded to .NET 8.0 (LTS). + New: Updated to Data Layer API 2.6.1. + New: Updated Flatbuffers types package to 'ctrlX-DataLayer.Flatbuffers' 2.6.0. + New: Reduced size of API package (removed all files 'libzmq.so.*') + New: IProvider: Introduced method _PublishEvent_ to publish an event. #### FIXED + Fix: Variant: Array conversion methods To...Array() returned "null" for empty arrays, now an empty array is returned. + Fix: Variant: All scalar- or flatbuffers value to array conversion methods returned "null", now an empty array is returned. #### CHANGED + n/a ### 3.1.0 #### NEW - HIGHLIGHTS + New: Updated to Data Layer API 2.4.4. + New: Updated Flatbuffers types package to 'ctrlX-DataLayer.Flatbuffers' 2.4.0. + New: Reduced size of API package (removed all files 'libzmq.so.*') #### FIXED + Fix: Variant: Array conversion methods To...Array() returned "null" for empty arrays, now an empty array is returned. + Fix: Variant: All scalar- or flatbuffers value to array conversion methods returned "null", now an empty array is returned. #### CHANGED + n/a ### 3.0.3 #### NEW - HIGHLIGHTS + New: Updated to Data Layer API 2.2.7. + New: Reduced size of API package (removed all files 'libzmq.so.*'). #### FIXED + n/a #### CHANGED + n/a ### 3.0.2 #### NEW - HIGHLIGHTS + New: Updated to Data Layer API 2.2.6. #### FIXED + Fix: Linux - Unable to load shared library 'libcomm_datalayer.so' or one of its dependencies (libzmq.so missing in nuget-package). #### CHANGED + n/a ### 3.0.1 #### NEW - HIGHLIGHTS + New: Updated to Ubuntu 22.04 LTS (Jammy Jellyfish). + New: Upgraded to Data Layer API 2.2.5. + New: Updated Flatbuffers types package to 'ctrlX-DataLayer.Flatbuffers' 2.2.0. #### FIXED + n/a #### CHANGED + Changed: Removed OpenSSL V3 libraries for Windows, because of export control relevance. You have to install the latest [Win64 OpenSSL v3 Light](https://slproweb.com/products/Win32OpenSSL.html) setup, if the API is used on Windows operating systems. ### 2.7.0 #### NEW - HIGHLIGHTS + New: Updated to Data Layer API 1.10.7. + New: Updated Flatbuffers types package to 'ctrlX-DataLayer.Flatbuffers' 1.20.0. + New: Added support for [.NET Framework Apps](https://dotnet.microsoft.com/en-us/platform/dotnet-standard) (Windows) based on [netstandard2.0](https://github.com/dotnet/standard/blob/v2.1.0/docs/versions/netstandard2.0.md) (>= .NET Framework 4.6.1). + New: Variant: Improved performance for conversion methods To*Array() and ToFlatbuffers(). #### FIXED + Fix: Variant: Method ToRawBytes() returned an UTF-8 string representation instead of the packed plain bytes (without type check). #### CHANGED + Changed: Moved to official flatbuffers library [Google.Flatbuffers](https://www.nuget.org/packages/Google.FlatBuffers) 23.3.3 ### 2.6.0 #### NEW - HIGHLIGHTS + New: Updated to Data Layer API 1.9.4. + New: Updated Flatbuffers types package to 'ctrlX-DataLayer.Flatbuffers' 1.18.0. + New: IProvider: Introduced method _RegisteredNodePaths_ to get all node paths, accepted by the broker. + New: IProvider: Introduced method _RejectedNodePaths_ to get all node paths, rejected by the broker. + New: IClient: Introduced efficient and fast _Bulk*_ methods to apply the same operation on a list of nodes (read, read metadata, write, create, remove, browse) just on a single method call. + New: IClient: Introduced property _ConnectionStatus_ to get the current connection status. + New: IClient: Introduced method _ReadJson_ to read a node as JSON with arguments. + New: IClient: Introduced method _ReadJsonAsync_ to read a node as JSON with with arguments asynchronously. + New: Variant: Improved performance of contructors consuming Flatbuffers. #### FIXED + Fix: IClient: Possible crash using parallel loops, because of GC collect. #### CHANGED + Changed: NuGet package _ctrlX-DataLayer_ contains [openssl](https://github.com/openssl/openssl) libraries for Windows x86 and x64. ### 2.5.0 #### NEW - HIGHLIGHTS + New: Updated to Data Layer API 1.8.6. + New: Updated Flatbuffers types package to 'ctrlX-DataLayer.Flatbuffers' 1.16.0. + New: IVariant: Introduced data type _DLR_VARIANT_TYPE_TIMESTAMP_ ((FILETIME) 64 bit 100ns since 1.1.1601 (UTC)). Represented and converted to DateTime. + New: IVariant: Introduced data type _DLR_VARIANT_TYPE_ARRAY_OF_TIMESTAMP_ ((FILETIME) 64 bit 100ns since 1.1.1601 (UTC)). Represented and converted to an array of DateTime. + New: IClient: Introduced method _ReadJsonAsync_ to read a node as JSON asynchronously. + New: IClient: Introduced method _WriteJsonAsync_ to write a JSON value to a node asynchronously. #### FIXED + Fix: IClient: Method _Create_ didn't return a tuple containing the value of the method call: (DLR_RESULT, IVariant). #### CHANGED + n/a ### 2.4.1 #### NEW - HIGHLIGHTS + n/a + New: Updated to Data Layer API 1.7.13. #### FIXED + n/a #### CHANGED + n/a ### 2.4.0 #### NEW - HIGHLIGHTS + New: Updated to Data Layer API 1.7.11. #### FIXED + n/a #### CHANGED + n/a ### 2.3.0 #### NEW - HIGHLIGHTS + New: Upgraded to .NET 6.0 (LTS). + New: Updated to Data Layer API 1.7.11. + New: Updated Flatbuffers types package to 'ctrlX-DataLayer.Flatbuffers' 1.14.0. + New: IProvider: Introduced method _RegisterTypeVariant_ to register a Variant containing a flatbuffers type. #### FIXED + Fix: IClient: Possible NPE for method _WriteMultiAsync_ if argument _writeValues_ was null. + Fix: IClient: Methods _ReadMulti_ and _WriteMulti_ returned an AggregateException instead of ArgumentNullException, if any arguments null. + Fix: IClient: Memoryleak in method _CreateSubscriptionAsync_. #### CHANGED + Changed: IFactory: Removed convenience methods to create a client or provider. Please use more generic methods _CreateClient(remote)_ and _CreateProvider(remote)_. ### 2.2.2 #### NEW - HIGHLIGHTS + Fix: Possible crash for async methods because of GC collect. #### FIXED + n/a #### CHANGED + n/a ### 2.2.1 #### NEW - HIGHLIGHTS + New: IClient: Improved performance of async methods. + New: IClient: Introduced methods for batch read and write. + New: ISubscription: Added default subscription constants. public static readonly uint DefaultKeepaliveIntervalMillis = 60000; public static readonly uint DefaultPublishIntervalMillis = 1000; public static readonly uint DefaultErrorIntervalMillis = 10000; public static readonly ulong DefaultSamplingIntervalMicros = 1000000; #### FIXED + n/a #### CHANGED + Changed: IVariant: Removed property 'Timestamp', because this is not created either by source nor by server and to improve the overall performance. ### 2.2.0 #### NEW - HIGHLIGHTS + New: Updated Flatbuffers types package to 'ctrlX-DataLayer.Flatbuffers' 1.12.0. #### FIXED + n/a #### CHANGED + n/a ### 2.1.0 #### NEW - HIGHLIGHTS + New: Updated to Data Layer API 1.7.4. + New: IClient: Added method _ReadJson_ to read and _WriteJson_ to write a JSON string. + New: Used NuGet package _Flatbuffers.Core_ instead of shipping the Flatbuffers stack with the SDK. Please add this package to your project (Manage NuGet packages). + New: Moved embedded ctrlX Flatbuffers types to NuGet package _ctrlX-DataLayer.Flatbuffers_. Please add this package to your project if necessary (Manage NuGet packages). #### FIXED + n/a #### CHANGED + n/a ### 2.0.1 #### NEW - HIGHLIGHTS + New: Update to Data Layer API 1.6.2. #### FIXED + n/a #### CHANGED + n/a ### 2.0.0 #### NEW - HIGHLIGHTS + New: Update to Data Layer API 1.5.17. + New: Updated Flatbuffer types to 1.1.0. #### FIXED + n/a #### CHANGED + Changed: Refactored, simplified and improved the provider API: + IProvider: Eliminated method _CreateNode(...)_. + IProvider: Changed method arguments for _RegisterNode(...)_. + IProvider: Moved and renamed method _SetTimeoutNode(...)_ to interface _IProviderNode_ method _SetTimeout(...)_. + IProviderNode: Eliminated property _value_: The client application has to keep a reference to the value of a handled node. + IProviderNodeHandler: Elminated argument _providerNode_ on all interface methods. + Changed: Renamed client's optional _Read(),Create()_ method arguments _readFilter_ to _args_. ### 1.0.8 #### NEW - HIGHLIGHTS + New: Update to Data Layer API 1.5.11. #### FIXED + Fix: Possible __NPE__ during a GC cycle using Subscription with invalid SubscriptionSettings flatbuffers. #### CHANGED + n/a ### 1.0.7 #### NEW - HIGHLIGHTS + New: Added common used type convenience getter for Variant: IsString, IsBool, IsNumber. #### FIXED + Fix: Possible __Access Violation__ during a GC cycle using Variant constructor Variant(IVariant other). + Fix: Possible __Access Violation__ during a GC cycle if a IProviderNode is created and registered on a address, but not hold as a reference by the application code. + Fix: IClient.WriteValueAsync() didn't return the written value (or a result value set by the handled provider) back to the client as IClientAsyncResult.Value. #### CHANGED + n/a ### 1.0.6 #### NEW - HIGHLIGHTS + n/a #### FIXED + Fix: __Application Crash__ (Unknown Hard Error): Process terminated. A callback was made on a garbage collected delegate of type 'datalayer!Datalayer.NativeMethods.DLR_CLIENT_NOTIFY_RESPONSE::Invoke'. + Fix: __Application Crash__ (Unknown Hard Error): Process terminated. A callback was made on a garbage collected delegate of type 'datalayer!Datalayer.NativeMethods.DLR_PROVIDER_NODE_FUNCTION::Invoke'. + Fix: Variant.JsonDataType returns incorrect result for type Float32 ('float32' -> 'float') + Fix: Variant.JsonDataType returns incorrect result for type Float64 ('float64' -> 'double') + Fix: Variant.JsonDataType returns incorrect result for type Array of Float32 ('arfloat32' -> 'arfloat') + Fix: Variant.JsonDataType returns incorrect result for type Array of Float64 ('arfloat64' -> 'ardouble') #### CHANGED + n/a ### 1.0.5 #### NEW - HIGHLIGHTS + n/a #### FIXED + Fix: Generated *.html docs contained internal content. #### CHANGED + n/a ### 1.0.4 #### NEW - HIGHLIGHTS + New: Supported equality check (Equals) for Variants containing Flatbuffers. #### FIXED + n/a #### CHANGED + n/a ### 1.0.3 #### NEW - HIGHLIGHTS + New: Added implicit operators for DataBuffer (Flatbuffers) and FlatbufferBuilder. #### FIXED + n/a #### CHANGED + n/a ### 1.0.2 #### NEW - HIGHLIGHTS + n/a #### FIXED + Fix: Generated *.html docs contained some wrong content. #### CHANGED + n/a ### 1.0.1 #### NEW - HIGHLIGHTS + n/a #### FIXED + Fix: Duplicate value for DL_INVALID_VALUE (0x8001000E -> 0x8001000D). #### CHANGED + n/a ### 1.0.0 #### NEW - HIGHLIGHTS + New: First stable release. #### FIXED + n/a #### CHANGED + n/a

.NET 8.0

.NET Standard 2.0

Version Downloads Last updated
6.0.1 9 09/22/2026
5.0.0 32 01/22/2026
4.3.0 42 07/20/2026