CODESYS-MQTT客户端库完整使用指南
概述
CODESYS-MQTT是一个专为CODESYS自动化开发环境设计的MQTT客户端库,支持所有QoS(服务质量)等级。该库提供了高性能的MQTT通信能力,能够在单个周期内处理大量数据包传输,同时支持多服务器连接和TLS加密通信。
项目特性
- 全面QoS支持:支持所有QoS等级(0、1、2)的发布和订阅操作
- 高性能传输:在默认配置下,单个周期内可传输50个QoS 0数据包
- 多服务支持:支持同时连接到多个MQTT服务器
- TLS加密:提供TLS支持(无需证书验证)
- 回调机制:采用强大的回调系统实现高效集成
- 动态内存分配:支持64位系统和动态内存配置
- 无限制功能块:支持无限制数量的发布和订阅功能块
安装与配置
添加库文件
首先需要在CODESYS项目中添加MQTT库文件:
- 在CODESYS开发环境中右键点击项目
- 选择"添加库"
- 浏览并选择相应的MQTT库文件(如MQTT 1.2.0.7.library)
启用动态内存分配
为了确保库的正常运行,需要启用动态内存分配:
- 右键点击Application
- 选择"Option Application"
- 启用动态内存分配选项
基础使用
MQTT处理器设置
要开始使用MQTT通信,首先需要创建一个SD_MQTT.MQTT_IN_OUT结构体用于与服务器的通信:
VAR
mqttInOut: SD_MQTT.MQTT_IN_OUT;
END_VAR
这个设置将建立与服务器的连接,但此时还不会发送或接收发布数据包。
调试与错误处理
在遇到问题时,SD_MQTT.HANDLE_MQTT实例中包含ErrorHistory功能,可以提供详细的错误提示信息:
发布数据
创建发布实例
要发布数据到MQTT服务,需要创建SD_MQTT.MQTTPublish实例:
- 实例化SD_MQTT.MQTTPublish功能块
- 调用SET_MQTT_IN_OUT方法一次,传入SD_MQTT.MQTT_IN_OUT结构体参数
- 调用实例时定义主题、负载、QoS和保留标志
发布配置选项
- 负载类型:可以是字符串或字节数组(通过PublishAsString输入选择)
- 传输控制:设置send输入为True时发布数据包
- 完成检查:使用done输出检查传输是否完成
- 实例数量:可以实例化任意数量的SD_MQTT.MQTTPublish实例
订阅管理
订阅工作原理
订阅功能通过SD_MQTT.MQTTSubscribe功能块实现:
- 向服务注册订阅主题
- 在SD_MQTT.HANDLE_MQTT功能块中注册对应主题的回调
- 当前支持最多200个订阅主题注册
回调机制
当服务向客户端发送发布数据包时:
- HANDLE_MQTT功能块检查接收到的主题匹配哪个订阅主题
- 调用传递给SD_MQTT.MQTTSubscribe功能块的PublishReceived方法
- 向PublishReceived方法传递包含所有所需数据的CALLBACK_DATA参数
回调收集器
回调收集器(CallbackCollector)提供了强大的功能:
- 动态内存分配:使用动态内存分配,受可用动态内存量限制
- 多实例收集:可以收集任意数量的功能块实例
- 高效处理:在单个周期内将所有接收到的负载传递给应用程序
- 高速性能:如果一个周期缓冲区中有20个发布数据包,这些数据包将在完全相同的周期内传递给应用程序
基本订阅设置
创建CallbackCollector和SD_MQTT.MQTTSubscription功能块的实例,进行一些初始化设置后即可开始接收数据:
高级功能
JSON支持
新版本库提供了与JSON/zigbee2mqtt轻松使用的功能,通过专门的库支持JSON数据处理。
监控功能
版本1.2.0.1新增了监控功能块,可以通过MQTT监控MQTT客户端状态。
命名空间改进
新版本改变了命名空间,并改进了类型系统,使用Base Interfaces TypeClass来支持any类型。
示例项目
项目中包含多个示例项目,分别针对不同平台和配置:
- Windows平台:带TLS和不带TLS的示例
- Raspberry Pi平台:带TLS和不带TLS的示例
- 高性能测试:TestMQTTGithubWindowsHighLoad项目展示高负载性能
- 接口示例:多个示例展示主题和负载处理的不同方法
GreatExampleOfAdvantages项目
这是一个特别推荐的示例项目:
- 开箱即用,与test.mosquitto.org配合工作
- 在MyProperty程序中展示如何避免在程序中硬编码主题
- 演示了基于实例和变量名称的直接发布功能
性能特点
- 极速传输:每个接收到的数据包都在接收周期内交付给应用程序
- 高吞吐量:testHighReciveSplitPayload()测试显示近600次发送/接收每秒
- 灵活配置:QoS通道大小和历史记录大小现在可配置
依赖库
所有需要的依赖库都可以在相应的GitHub仓库中找到,确保在集成前安装所有必需的依赖项。
注意事项
- 客户端不是线程安全的
- 需要启用动态内存分配以获得最佳性能
- 建议使用最新版本的库以获得所有功能和修复
- 在部署前充分测试所有配置
通过遵循本指南,您可以成功地将CODESYS-MQTT客户端库集成到您的自动化项目中,实现高效的MQTT通信功能。
更多推荐






所有评论(0)