open62541之概述
open62541 是一个用 C 语言编写的免费、开源的OPC UA (OPC 统一架构 / IEC 62541)实现。它提供了一个全功能的 SDK用于构建 OPC UA 服务器和客户端以及发布-订阅PubSub通信——所有这些都集成在单一且与平台无关的库中。无论你是在工厂车间连接工业设备还是将安全的机器对机器通信嵌入到微控制器中open62541 都能将完整的 OPC UA 协议栈以足够小的体积交付甚至能直接在裸机目标上运行。什么是 OPC UAOPC 统一架构是一种在IEC 62541系列标准中定义的工业通信协议。它定义了四个相互交织的层级open62541 将其作为一个内聚的 SDK 共同实现协议层— 一种基于 TCP或 HTTP/SOAP构建的异步消息交换协议被组织为安全通道、会话和原始连接。类型系统— 一种丰富的数据类型系统具有二进制和 JSON 编码方案涵盖 25 种内置类型以及任意复杂的结构体、数组和联合体。信息模型— 一种结合了面向对象与语义三元组关系节点-引用-节点的元模型能够实现数据的自描述表示。服务层— 37 种用于浏览、读写、调用方法、管理订阅等的标准服务——每种服务均定义为类型化的请求/响应消息对。OPC UA 由 OPC 基金会负责维护该基金会同时还推动伴随规范的制定将这些特定领域的概念机器人、机床、能源管理转化为可复用的 OPC UA 信息模型。高层架构open62541 的架构采用分层设计其核心是一个以插件为中心的抽象边界。所有与平台相关的及算法上可替换的功能都通过明确定义的插件接口暴露出来这使得核心库保持高度可移植性并且除 C99 标准库外没有任何其他依赖。公共 API 表面被有意设计得极简。开发者通过三个主要的入口头文件——server.h、client.h和pubsub.h——与库进行交互而types.h和common.h则提供共享的数据类型和状态码。位于include/open62541/plugin/下的插件头文件定义了加密、事件循环、节点存储、访问控制、日志记录和历史数据的扩展点。项目结构一览代码仓库的组织结构清晰地分离了公共接口、核心逻辑、可替换插件、平台移植和构建工具open62541/ ├── include/open62541/ 公共 API 头文件 (server, client, pubsub, types) │ └── plugin/ 插件接口头文件 ├── src/ 核心库 (除 C99 外零外部依赖) │ ├── server/ 服务器服务、会话、订阅、NS0 │ ├── client/ 客户端连接、订阅、高级 API │ ├── pubsub/ 发布-订阅协议实现 │ └── util/ 事件过滤器解析器、内部工具 ├── plugins/ 默认插件实现 (加密、日志、节点存储) ├── arch/ ️ 特定平台的事件循环移植 (POSIX, Win32, Zephyr, FreeRTOS) ├── deps/ 第三方依赖 (mdnsd, mqtt-c, libc_time 等) ├── examples/ 教程与示例应用 ├── tools/ ️ 代码生成、证书、CI 脚本、代码合并 ├── tests/ ✅ 单元测试、模糊测试、加密测试、集成测试 └── doc/ Sphinx 文档源码这种分离确保了src/中的核心库仅需 C99 标准库即可干净地编译。其他所有功能——TLS 后端、网络 I/O、证书存储、发现多播——都是在构建时通过选定的插件注入的。支持的特性open62541 实现了全面的 OPC UA 特性集。当前的开发版本v1.5.0-rc2在已获认证的 v1.4 基线之上扩展了 PubSub 改进、新的实时 PubSub 模型以及类型化的异步客户端回调。通信栈类别特性状态编码OPC UA 二进制✅ 已支持OPC UA JSON (v1.05 规范)✅ 已支持OPC UA XML 部分支持传输UA-TCP 安全通道二进制✅ 已支持加密无✅ 已支持Basic128Rsa15✅ 已支持Basic256✅ 已支持Basic256Sha256✅ 已支持Aes256Sha256RsaPss✅ 已支持身份验证匿名✅ 已支持用户名 / 密码✅ 已支持X.509 证书✅ 已支持加密后端mbedTLS✅ 已支持OpenSSL✅ 已支持LibreSSL 实验性支持服务器服务服务集关键服务状态发现FindServers、GetEndpoints、RegisterServer✅安全通道Open / Close SecureChannel✅会话Create / Close / Activate / Cancel✅节点管理Add/Delete Nodes References✅视图Browse、TranslateBrowsePaths✅属性Read、Write、HistoryRead/Update✅方法Call✅被监控项Create / Delete / Modify / SetTriggering✅订阅Create / Modify / Publish / Transfer✅订阅DataChange、Event 被监控项、过滤器✅发现本地发现服务器、mDNS 多播✅发布-订阅 (PubSub)特性状态二进制编码 (UADP)✅JSON 编码✅消息加密 / 解密✅UDP / 多播传输✅以太网传输✅MQTT 传输✅运行时发布者与订阅者配置✅安全密钥服务 (SKS) 模型✅实时 PubSub 模型 (偏移表、自定义状态机)✅ 新增客户端 SDK客户端支持所有 OPC UA 服务并提供同步和异步两种 API。订阅通过事件循环在后台处理。client_highlevel.h中的高级 API 为常见的读写、浏览和调用操作提供了便捷的封装。平台支持open62541 被设计为可以运行在任何地方——从功能完备的 Linux 服务器到资源受限的微控制器。特定于平台的代码被隔离在事件循环插件架构之后并为主要目标平台提供了移植版本平台架构事件循环实现Linux / macOS / BSDPOSIXarch/posix/— epoll/kqueue TCP、UDP、以太网、中断WindowsWin32默认基于 Winsock 的事件循环Zephyr RTOSZephyrarch/zephyr/— 原生 Zephyr 网络FreeRTOS lwIPfreertos-lwiparch/freertos/arch/lwip/— lwIP TCP/UDPPOSIX lwIPposix-lwip混合 POSIX 时钟 lwIP 网络构建配置open62541 使用CMake作为其构建系统并提供大量选项以便你根据具体用例定制库。以下列出了最常用的选项CMake 选项默认值描述UA_ENABLE_AMALGAMATIONOFF将库合并为单个open62541.c/.h以便于集成UA_ENABLE_ENCRYPTIONOFF加密后端MBEDTLS、OPENSSL或LIBRESSLUA_ENABLE_SUBSCRIPTIONSON启用订阅和被监控项支持UA_ENABLE_SUBSCRIPTIONS_EVENTSON启用事件监控UA_ENABLE_HISTORIZINGON启用历史数据访问客户端和服务器UA_ENABLE_DISCOVERYON启用本地发现服务器 (LDS)UA_ENABLE_DISCOVERY_MULTICASTOFFmDNS 发现MDNSD或AVAHIUA_ENABLE_JSON_ENCODINGON启用 JSON 编码 (v1.05 规范)UA_ENABLE_PUBSUBOFF启用 PubSub 协议支持UA_MULTITHREADING0(嵌入式) /100(桌面端)线程安全级别≥100 会启用内部互斥锁UA_LOGLEVEL100最低日志级别TRACE(100) → FATAL(600)