EPICS 使用open62541 SDK集成OPC UA设备支持
前言:本文假设你已经在Linux系统下搭建好了EPICS的开发环境,了解Linux常用命令。
EPICS opcua module(https://github.com/epics-modules/opcua)是用于连接 OPC UA 协议的EPICS设备支持模块。该模块支持两种OPC UA Client SDK的不同实现。
UA OPC UA SDK是目前市场普遍在用的解决方案,但需要购买授权,这里就不介绍太多,感兴趣可以浏览其官方网站。
本文主要介绍使用open62541 SDK集成OPC UA设备支持,仅供学习和参考。
open62541(https://www.open62541.org/)是开源的OPC UA SDK,基于MPL v2.0开源协议。值得注意的是EPICS opcua module基于open62541 SDK的实现目前还处于开发阶段,尚不支持结构化数据。
使用open62541 SDK
下载并解压 open62541 发行版。在根目录下创建一个构建目录 build 并
cd
进入该目录路径。Open62541 的 cmake 构建默认创建一个静态库。EMBED 类型的设备支持构建需要这种类型的库(见下文)。
要创建共享库,请构建 Open62541 库并设置 cmake 选项
BUILD_SHARED_LIBS=ON
。cmake .. -DBUILD_SHARED_LIBS=ON [...]
您可以通过在同一构建目录中运行具有不同配置的两个构建来创建这两种类型。删除中间的 CMakeCache 以获得干净的配置。
Open62541可以使用openssl来实现OPC UA安全性,通过设置 cmake 选项来选择它
UA_ENABLE_ENCRYPTION=OPENSSL
。对于 Linux 构建,一般的编译选项设置是:
cmake .. -DBUILD_SHARED_LIBS=ON \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DUA_ENABLE_ENCRYPTION=OPENSSL
创建共享库,以及
cmake .. -DBUILD_SHARED_LIBS=OFF \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=OFF \ -DUA_ENABLE_ENCRYPTION=OPENSSL
创建静态变体。
还有很多其他选项可用,但大多数仅影响服务器部分,与客户端的使用无关。
对于 Open62541 版本 1.2,请设置
UA_ENABLE_ENCRYPTION_OPENSSL=ON
而不是上面显示的 OPENSSL 设置。您可能还必须在 file 中显式设置 Open62541 版本字符串CMakeLists.txt
,因为当您不在 git 下工作时,自动检测不起作用。默认安装位置如下
/usr/local
。通常,这是一个系统位置,因此部署模式设置(见下文)将为SYSTEM
。如果您想安装到其他位置,请设置选项CMAKE_INSTALL_PREFIX=/other/location
。在这种情况下,部署模式设置(见下文)将是PROVIDED
,并且需要设置库位置。如果您想在其构建位置使用 Open62541 库,情况也是如此。库位置(在 中设置CONFIG_SITE.local
)将有所$(OPEN62541)/build/bin
不同$(OPEN62541)/build/bin/Release
,具体取决于您的安装、操作系统和构建目录名称的选择。跑完后
cmake
,make
再跑make install
。安装到系统位置需要 root 权限。
构建设备支持模块
在configure
子目录内或 TOP 位置上一级,创建一个文件RELEASE.local
,设置EPICS_BASE
为 EPICS 安装的绝对路径。
在configure
子目录内或 TOP 位置上一级,创建一个文件CONFIG_SITE.local
,用于设置 Open62541 安装的绝对路径及其构建和部署功能(如果需要)。您还需要配置安装的其他依赖项的位置。
# Path to the Open62541 C++ installationOPEN62541 = /other/location# How the Open62541 shared libraries are deployed# SYSTEM = shared libs are in a system location# PROVIDED = shared libs are in $(OPEN62541_SHRLIB_DIR)# INSTALL = shared libs are installed (copied) into this module# EMBED = link Open62541 code statically into libopcua,# the Open62541 libraries are not required on target systemOPEN62541_DEPLOY_MODE = PROVIDEDOPEN62541_LIB_DIR = $(OPEN62541)/libOPEN62541_SHRLIB_DIR = $(OPEN62541_LIB_DIR)# How the Open62541 libraries were builtOPEN62541_USE_CRYPTO = YES
Open62541相关配置只需在该模块中完成,该模块会创建一个CONFIG_OPCUA
文件,该文件会被所有下游模块(创建IOC的模块)自动包含,以便配置始终保持一致。
EPICS opcua module支持 Linux 和 Windows 版本。
本人已在Linux系统亲测可用;并尝试在Windows系统编译部署此环境,由于缺少相关依赖,暂时未完全编译部署成功,有兴趣可亲自尝试。