c++ open62541-1

简介

open62541 是一个开源的、跨平台的 OPC UA(Open Platform Communications Unified Architecture) 协议实现库。OPC UA 是一种用于工业自动化、物联网(IoT)等领域的机器对机器(M2M)通信协议,旨在提供安全、可靠、跨平台的数据交换能力。open62541 以轻量级、高性能和可扩展性为特点,广泛应用于嵌入式系统、工业控制、智能家居等场景。

核心特点

  1. 轻量级设计
    • 代码量小,内存占用低,适合资源受限的嵌入式设备(如微控制器、边缘计算节点)。
    • 可通过编译选项裁剪功能,仅保留必要模块(如数据编码、网络传输)。
  2. 跨平台支持
    兼容主流操作系统:Linux、Windows、macOS、FreeRTOS 等。
    支持多种架构:x86、ARM、RISC-V 等,满足嵌入式与服务器端需求。
  3. 完整的 OPC UA 功能
    • 实现 OPC UA 核心规范(如数据模型、信息模型、安全机制)。
    • 支持客户端(Client)和服务器(Server)模式,可同时作为客户端和服务器运行。
  4. 安全性
    • 集成加密(AES、RSA)、签名(SHA)和身份验证机制,符合 OPC UA 安全标准。
    • 支持证书管理和访问控制列表(ACL),保障数据传输安全。
  5. 易用性与可扩展性
    • 提供简洁的 C 语言 API(也有 C++ 封装),便于快速开发。
    • 支持自定义数据类型、节点(Node)和方法,可扩展协议功能以适应特定场景。

下载与编译

使用cmake编译

在这里插入图片描述

构建相关选项

  • BUILD_SHARED_LIBS

    • 含义:用于控制是否构建共享库。如果设置为 ON,则在编译时会生成动态链接库(如在 Linux 下生成 .so 文件,在 Windows 下生成 .dll 文件);若设置为 OFF,则生成静态链接库(如在 Linux 下生成 .a 文件,在 Windows 下生成 .lib 文件 )。
    • 用途:共享库可以减少可执行文件的体积,在多个程序间共享代码,并且在库更新时无需重新编译使用它的程序;静态库则可以让程序的发布更加独立,无需依赖外部库的特定版本。
  • CMAKE_BUILD_TYPE

    • 含义:指定构建类型,常见的值有 Debug、Release、RelWithDebInfo 和 MinSizeRel 等 。Debug 模式包含调试信息,便于开发阶段调试程序,但生成的可执行文件较大且性能优化较少;Release 模式会进行大量的优化,以提高程序的运行效率,但不包含调试信息;RelWithDebInfo 兼具优化和调试信息;MinSizeRel 则专注于最小化可执行文件的大小。
    • 用途:在开发阶段通常使用 Debug 模式,在发布阶段使用 Release 模式。
  • CMAKE_CONFIGURATION_TYPES

    • 含义:定义可用的构建配置类型列表。例如,可以设置为 Debug;Release,表示可以选择 Debug 和 Release 两种构建配置。
    • 用途:方便在 CMake 工具中切换不同的构建配置,满足不同的开发和发布需求。
  • CMAKE_INSTALL_PREFIX

    • 含义:指定 make install 命令安装文件的目标路径。默认情况下,安装路径可能是系统的标准路径(如 /usr/local),但通过设置该选项,可以将 open62541 安装到自定义的目录中,例如 ~/my_opcua_install。
    • 用途:有助于在多版本管理、隔离不同项目依赖等场景下,更灵活地管理库文件和头文件的安装位置。

架构及示例相关选项

  • UA_ARCHITECTURE
    • 含义:用于指定目标架构信息,可能会影响编译器的一些优化策略以及代码的适配性。比如在交叉编译场景下,明确目标硬件平台的架构(如 ARM、x86 等)。
    • 用途:确保 open62541 能够在特定的硬件平台上正确编译和运行,充分发挥硬件性能。
  • BUILD_EXAMPLES
    • 含义:控制是否编译 open62541 提供的示例代码。如果设置为 ON,则在编译过程中会构建示例程序,方便开发者快速了解和学习库的使用方法;设置为 OFF 时,则不编译示例代码,减少编译时间和生成文件的数量。
    • 用途:在开发阶段,开启示例编译有助于快速上手和调试;在发布阶段,若不需要示例,可以关闭以简化构建过程。
      工具及测试相关选项
  • UA_BUILD_TOOLS
    • 含义:决定是否编译 open62541 提供的工具程序。这些工具可能包括用于配置、测试或者辅助开发的程序。
    • 用途:根据实际需求选择是否编译工具,以满足特定的开发、调试或维护任务。
  • UA_BUILD_UNIT_TESTS
    • 含义:控制是否编译单元测试代码。如果设置为 ON,则会编译库中的单元测试代码,开发者可以运行这些测试来验证库的功能是否正常;设置为 OFF 时,不编译单元测试代码,减少编译时间和生成文件的大小。
    • 用途:在开发和维护阶段,开启单元测试有助于及时发现代码中的问题,保证库的质量;在发布阶段,若不需要运行测试,可以关闭以简化构建。

功能特性相关选项

  • UA_ENABLE_AMALGAMATION

    • 含义:用于控制是否启用合并编译。启用后,open62541 的多个源文件会被合并成一个较大的源文件,减少编译过程中文件的数量,在某些情况下可能会提高编译速度。
    • 用途:对于追求编译效率,或者在特定编译环境下希望简化编译过程的场景比较有用。
  • UA_ENABLE_DA

    • 含义:DA 代表 Data Access(数据访问),该选项用于启用 OPC UA 协议中的数据访问功能。开启后,open62541 会支持客户端读取、写入服务器中的数据节点等操作。
    • 用途:如果项目需要使用 OPC UA 的数据访问功能来实现设备间的数据交互,就需要开启此选项。
  • UA_ENABLE_DIAGNOSTICS

    • 含义:控制是否启用诊断功能。启用后,open62541 会收集和提供一些关于运行时状态的诊断信息,例如连接状态、错误信息等,方便开发者进行调试和故障排查。
    • 用途:在开发和维护阶段,诊断信息有助于快速定位和解决问题。
  • UA_ENABLE_DISCOVERY

    • 含义:启用 OPC UA 协议中的发现服务功能。开启后,服务器可以被客户端发现,客户端可以获取服务器的端点信息、服务器支持的功能等,实现自动发现网络中的 OPC UA 服务器。
    • 用途:在需要自动发现 OPC UA 服务器的网络环境中,如工业自动化系统中多个设备之间的通信,需要开启此选项。
  • UA_ENABLE_ENCRYPTION

    • 含义:控制是否启用数据加密功能。启用后,open62541 在数据传输过程中会对数据进行加密,保证数据的安全性,防止数据在传输过程中被窃取或篡改。
    • 用途:在对数据安全性要求较高的场景,如涉及敏感信息传输的工业控制系统中,必须开启此选项。
  • UA_ENABLE_ENCRYPTION_TPM2

    • 含义:启用基于 TPM 2.0(Trusted Platform Module 2.0,可信平台模块 2.0)的加密功能。TPM 2.0 是一种硬件安全模块,可以提供更高级别的安全保护,例如密钥管理、设备身份验证等。
    • 用途:在对安全要求极高,且硬件支持 TPM 2.0 的环境中,可以开启此选项来增强系统的安全性。
  • UA_ENABLE_HISTORIZING

    • 含义:控制是否启用数据历史记录功能。启用后,open62541 可以记录数据节点的值随时间的变化情况,方便后续进行数据分析和查询。
    • 用途:在工业监控等需要对历史数据进行分析的场景下,该功能非常有用。
  • UA_ENABLE_JSON_ENCODING

    • 含义:启用 JSON 编码功能,使 open62541 支持将数据编码为 JSON 格式进行传输或存储。JSON 是一种常用的数据交换格式,具有良好的可读性和通用性。
    • 用途:当需要与其他支持 JSON 格式的系统或组件进行交互时,需要开启此选项。
  • UA_ENABLE_METHODCALLS

    • 含义:控制是否启用 OPC UA 协议中的方法调用功能。开启后,客户端可以调用服务器中定义的方法,实现一些特定的业务逻辑,例如设备的控制操作等。
    • 用途:在需要通过 OPC UA 进行设备控制或执行特定业务逻辑的场景中,需要启用此选项。
  • UA_ENABLE_PUBSUB

    • 含义:启用发布 - 订阅(Publish - Subscribe)功能。在发布 - 订阅模式下,发布者将数据发送到主题,订阅者可以接收感兴趣主题的数据。该功能可以提高数据传输的效率和灵活性,适用于实时性要求较高的场景。
    • 用途:在工业物联网、实时监控等场景中,当多个设备之间需要进行高效的数据广播时,通常会启用此功能。
  • UA_ENABLE_PUBSUB_DELTAFRAMES

    • 含义:在启用发布 - 订阅功能的基础上,进一步启用发布 - 订阅中的增量帧功能。增量帧可以减少数据传输量,只发送与上一次数据相比有变化的部分。
    • 用途:在数据变化相对较小,且对网络带宽要求较高的场景下,启用此功能可以有效降低网络负载。
  • UA_ENABLE_PUBSUB_ETH_UADP

    • 含义:启用基于以太网的 UADP(User - datagram - based PubSub Transport Protocol,基于用户数据报的发布 - 订阅传输协议) 传输协议。该协议用于在以太网环境下进行发布 - 订阅数据的传输。
    • 用途:当需要在以太网网络中实现基于发布 - 订阅的数据传输时,需要开启此选项。
  • UA_ENABLE_PUBSUB_INFORMATIONMODEL

    • 含义:启用发布 - 订阅信息模型功能,定义了发布 - 订阅相关的数据结构和语义,使发布 - 订阅功能更加规范和可扩展。
    • 用途:在构建复杂的发布 - 订阅系统,需要对数据模型进行严格定义和管理时,需要开启此选项。
  • UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS

    • 含义:在启用发布 - 订阅信息模型的基础上,进一步启用信息模型中的方法。这些方法可以用于管理和操作发布 - 订阅相关的对象和数据。
    • 用途:在需要对发布 - 订阅信息模型进行更复杂操作和管理的场景下,启用此选项。
  • UA_ENABLE_SUBSCRIPTIONS

    • 含义:控制是否启用订阅功能。订阅功能允许客户端注册对特定数据节点或事件的兴趣,当数据节点的值发生变化或事件发生时,服务器会通知客户端。
    • 用途:在需要实时获取数据变化或事件通知的场景中,如工业监控系统中对设备状态变化的实时监测,需要开启此选项。
  • UA_ENABLE_SUBSCRIPTIONS_EVENTS

    • 含义:在启用订阅功能的基础上,进一步启用对事件的订阅功能。客户端可以订阅服务器上发生的特定事件,例如设备故障事件、报警事件等。
    • 用途:在工业自动化等对事件响应要求较高的场景中,用于及时获取和处理各种事件。

其他选项

  • UA_FORCE_WERROR

    • 含义:设置为 ON 时,会将所有编译警告视为错误,只要出现编译警告,编译过程就会停止。这有助于开发者在开发过程中及时发现和解决潜在的问题,提高代码质量。
    • 用途:在追求高质量代码,希望严格控制编译警告的项目中,可以启用此选项。
  • LOGLEVEL

    • 含义:用于设置日志级别,常见的日志级别有 trace、debug、info、warn、error、critical 等。不同的日志级别控制着程序运行时输出日志信息的详细程度,例如 trace 级别会输出最详细的调试信息,而 critical 级别只输出严重的错误信息。
    • 用途:在开发阶段,通常设置为较低的日志级别(如 debug 或 trace)以获取更多的调试信息;在生产环境中,设置为较高的日志级别(如 warn 或 error),减少不必要的日志输出,提高性能。
  • UA_MULTITHREADING

    • 含义:控制是否启用多线程支持。如果设置为 ON,open62541 会在设计上支持多线程环境,例如服务器可以同时处理多个客户端的请求,提高系统的并发处理能力;设置为 OFF 时,库以单线程模式运行。
    • 用途:在需要处理大量并发请求的场景,如工业自动化系统中多个设备同时与服务器通信,需要开启多线程支持以提高系统性能。
  • UA_NAMESPACE_ZERO

    • 含义:与 OPC UA 协议中的命名空间 0 相关,可能用于控制命名空间 0 的一些特性或行为。命名空间在 OPC UA 中用于唯一标识节点和数据类型等,命名空间 0 是 OPC UA 标准定义的基础命名空间。
    • 用途:在涉及到 OPC UA 命名空间相关的开发和配置时,根据具体需求设置此选项,以确保与标准或特定业务逻辑的兼容性。

使用vs生成解决方案

在这里插入图片描述

使用

  1. 将open62541 目录下的include 文件夹复制到 项目文件夹下。
  2. 将open62541.lib 复制到 项目lib文件夹下。
  3. 将open62541.dll 复制到项目文件夹下。
  4. 在vs中右击项目,【属性】=》【C/C++】=》【附加包含目录】,输入$(ProjectDir)include
  5. 【属性】=》【链接器】=》【常规】=》【附加目录库】,输入$(ProjectDir)lib
  6. 【属性】=》【链接器】=》【输入】=》【附加依赖项】,输入open62541.lib
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值