Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
97c0249
opcua generic client: generic client module, generic client device
Mar 24, 2026
2d97dba
opcua generic client: MonitoredItem FB
Mar 25, 2026
a4ae980
MonitoredItem FB: reading values with timestamps; tests;
Mar 27, 2026
7e9a268
OpcUaDataValue reworking
Mar 27, 2026
e103876
MonitoredItem FB: TimestampSource property; tests for different sources
Mar 27, 2026
da462ba
MonitoredItem: statuses; accessLevel; tests;
Mar 27, 2026
4d4da21
new approach for Error and StatusContainer classes
Mar 30, 2026
75bc8a4
MonitoredItem: locks for the FB
Mar 30, 2026
d3938da
MonitoredItem: fixes
Mar 30, 2026
da50137
MonitoredItem: delay calculation
Mar 30, 2026
a2de47a
opendaq_ref
Mar 30, 2026
2aa2b4a
MonitoredItem FB: local system timestamp
Mar 31, 2026
84a553a
generic opcua module: ProtocolType::Unknown
Mar 31, 2026
7a8ac65
MonitoredItem: fixes
Mar 31, 2026
9b72f52
MonitoredItem: tests
Mar 31, 2026
b1249ba
generic opcua client: renaming
Mar 31, 2026
df8b93a
generic opcua client: device local id is opcua server application URI…
Apr 1, 2026
6a678b5
MonitoredItem: sleep duration fix
Apr 1, 2026
a82418d
generic opcua client: node_event_manager.* is mooved to tms; DAQMODUL…
Apr 1, 2026
96022e3
MonitoredItem: test fix
viacheslauK Apr 1, 2026
7b208ba
generic opcua client: cmake fix (Boost::uuid)
Apr 1, 2026
af98522
generic opcua client: LocalId property for a device
Apr 2, 2026
96d3eaa
MonitoredItem FB: disable node data type validation; new supported types
Apr 2, 2026
7e708b4
MonitoredItem FB: status fix
Apr 2, 2026
38fe611
OpcUaClient fix
Apr 2, 2026
f0f762b
generic opcua client: reconnection
Apr 2, 2026
7095b5a
generic opcua client: reconnection tests
Apr 2, 2026
739bacf
generic opcua client: nullptr fix
viacheslauK Apr 3, 2026
a930c0a
MonitoredItem FB: numeric node ID
Apr 3, 2026
e1001d9
Merge branch 'main' into generic-client
viacheslauK Apr 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ opendaq_setup_project_specific_build_options(${REPO_OPTION_PREFIX})
option(${REPO_OPTION_PREFIX}_ENABLE_EXAMPLE_APP "Enable ${REPO_NAME} example applications" ${PROJECT_IS_TOP_LEVEL})
option(${REPO_OPTION_PREFIX}_ENABLE_TESTS "Enable ${REPO_NAME} testing" ${PROJECT_IS_TOP_LEVEL})
option(${REPO_OPTION_PREFIX}_ENABLE_CLIENT "Enable ${REPO_NAME} client module" ${PROJECT_IS_TOP_LEVEL})
option(${REPO_OPTION_PREFIX}_ENABLE_GENERIC_CLIENT "Enable ${REPO_NAME} client module" ${PROJECT_IS_TOP_LEVEL})
option(${REPO_OPTION_PREFIX}_ENABLE_SERVER "Enable ${REPO_NAME} server module" ${PROJECT_IS_TOP_LEVEL})
option(OPCUA_ENABLE_ENCRYPTION "Enable OpcUa encryption" OFF)
cmake_dependent_option(OPENDAQ_ENABLE_OPCUA_INTEGRATION_TESTS "Enable ${REPO_NAME} integration testing" ${PROJECT_IS_TOP_LEVEL} "${REPO_OPTION_PREFIX}_ENABLE_TESTS" OFF)
Expand Down
4 changes: 4 additions & 0 deletions modules/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ if (${REPO_OPTION_PREFIX}_ENABLE_CLIENT)
add_subdirectory(opcua_client_module)
endif()

if (${REPO_OPTION_PREFIX}_ENABLE_GENERIC_CLIENT)
add_subdirectory(opcua_generic_client_module)
endif()

if (${REPO_OPTION_PREFIX}_ENABLE_SERVER)
add_subdirectory(opcua_server_module)
endif()
9 changes: 9 additions & 0 deletions modules/opcua_generic_client_module/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
cmake_minimum_required(VERSION 3.10)
opendaq_set_cmake_folder_context(TARGET_FOLDER_NAME)
project(ClientModule VERSION ${${REPO_OPTION_PREFIX}_VERSION} LANGUAGES C CXX)

add_subdirectory(src)

if (${REPO_OPTION_PREFIX}_ENABLE_TESTS)
add_subdirectory(tests)
endif()
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/*
* Copyright 2022-2025 openDAQ d.o.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#pragma once
#include <coretypes/common.h>

#define BEGIN_NAMESPACE_OPENDAQ_OPCUA_GENERIC_CLIENT_MODULE BEGIN_NAMESPACE_OPENDAQ_MODULE(opcua_generic_client_module)
#define END_NAMESPACE_OPENDAQ_OPCUA_GENERIC_CLIENT_MODULE END_NAMESPACE_OPENDAQ_MODULE
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/*
* Copyright 2022-2025 openDAQ d.o.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#pragma once

#include <opcua_generic_client_module/common.h>

BEGIN_NAMESPACE_OPENDAQ_OPCUA_GENERIC_CLIENT_MODULE

static const char* DaqOpcUaGenericProtocolId = "OPCUAGeneric";
static const char* DaqOpcUaGenericProtocolName = "OPCUAGeneric";
static const char* DaqOpcUaGenericComponentName = "OPCUAGenericClient";
static const char* DaqOpcUaGenericDevicePrefix = "daq.opcua.generic";
static const char* OpcUaGenericScheme = "opc.tcp";

static const char* MODULE_NAME = "OpenDAQOPCUAGenericClientModule";
static const char* MODULE_ID = "OpenDAQOPCUAGenericClientModule";

END_NAMESPACE_OPENDAQ_OPCUA_GENERIC_CLIENT_MODULE
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/*
* Copyright 2022-2025 openDAQ d.o.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#pragma once
#include <opendaq/module_exports.h>

DECLARE_MODULE_EXPORTS(OpcUaGenericClientModule)
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
* Copyright 2022-2025 openDAQ d.o.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#pragma once
#include <opcua_generic_client_module/common.h>
#include <opendaq/module_impl.h>
#include <daq_discovery/daq_discovery_client.h>
#include <opendaq/device_ptr.h>

BEGIN_NAMESPACE_OPENDAQ_OPCUA_GENERIC_CLIENT_MODULE

class OpcUaGenericClientModule final : public Module
{
public:
OpcUaGenericClientModule(ContextPtr context);

ListPtr<IDeviceInfo> onGetAvailableDevices() override;
DictPtr<IString, IDeviceType> onGetAvailableDeviceTypes() override;
DevicePtr onCreateDevice(const StringPtr& connectionString,
const ComponentPtr& parent,
const PropertyObjectPtr& config) override;
bool acceptsConnectionParameters(const StringPtr& connectionString, const PropertyObjectPtr& config);
Bool onCompleteServerCapability(const ServerCapabilityPtr& source, const ServerCapabilityConfigPtr& target) override;

private:
StringPtr formConnectionString(const StringPtr& connectionString, const PropertyObjectPtr& config, std::string& host, int& port, std::string& hostType);
static DeviceTypePtr createDeviceType();
static PropertyObjectPtr createDefaultConfig();
static PropertyObjectPtr populateDefaultConfig(const PropertyObjectPtr& config);
static DeviceInfoPtr populateDiscoveredDevice(const discovery::MdnsDiscoveredDevice& discoveredDevice);
discovery::DiscoveryClient discoveryClient;

std::mutex sync;
};

END_NAMESPACE_OPENDAQ_OPCUA_GENERIC_CLIENT_MODULE
50 changes: 50 additions & 0 deletions modules/opcua_generic_client_module/src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
set(LIB_NAME opcua_generic_client_module)
set(MODULE_HEADERS_DIR ../include/${TARGET_FOLDER_NAME})

set(SRC_Include common.h
constants.h
module_dll.h
opcua_generic_client_module_impl.h
)

set(SRC_Srcs module_dll.cpp
opcua_generic_client_module_impl.cpp
)

opendaq_prepend_include(${TARGET_FOLDER_NAME} SRC_Include)

source_group("module" FILES ${MODULE_HEADERS_DIR}/opcua_generic_client_module_impl.h
${MODULE_HEADERS_DIR}/module_dll.h
${MODULE_HEADERS_DIR}/common.h
${MODULE_HEADERS_DIR}/constants.h
module_dll.cpp
opcua_generic_client_module_impl.cpp
)


add_library(${LIB_NAME} SHARED ${SRC_Include}
${SRC_Srcs}
)
add_library(${OPENDAQ_SDK_TARGET_NAMESPACE}::${LIB_NAME} ALIAS ${LIB_NAME})

if (MSVC)
target_compile_options(${LIB_NAME} PRIVATE /bigobj)
endif()

target_link_libraries(${LIB_NAME} PUBLIC ${OPENDAQ_SDK_TARGET_NAMESPACE}::opendaq
Boost::uuid
PRIVATE ${OPENDAQ_SDK_TARGET_NAMESPACE}::discovery
${OPENDAQ_SDK_TARGET_NAMESPACE}::opcuageneric_client
)

if (MSVC)
target_compile_options(${LIB_NAME} PRIVATE /bigobj)
endif()

target_include_directories(${LIB_NAME} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/../include>
$<INSTALL_INTERFACE:include>
)

opendaq_set_module_properties(${LIB_NAME} ${PROJECT_VERSION_MAJOR})
opendaq_generate_version_header(${LIB_NAME})
9 changes: 9 additions & 0 deletions modules/opcua_generic_client_module/src/module_dll.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#include <opcua_generic_client_module/module_dll.h>
#include <opcua_generic_client_module/opcua_generic_client_module_impl.h>

#include <opendaq/module_factory.h>

using namespace daq::modules::opcua_generic_client_module;

DEFINE_MODULE_EXPORTS(OpcUaGenericClientModule)

Loading
Loading