上一篇文章简单介绍了MQTT协议,及如何基于NanoMQ来搭建MQTT服务器。今天这篇文章,我们来介绍如何使用西门子官方发布的LMQTT通信库来完成客户端与服务器的MQTT通信。
西门子官方发布了一个基于博途环境的SIMATIC控制器通信库,涵盖了多种通信协议,比如:TCP、FTP、HTTP、MQTT、OPCUA、SNMP等等。可以去西门子官网或本文附件下载。本例程介绍其中的MQTT通信库。
在博途环境下新建项目,命名为“MQTT_Demo”,添加控制器CPU 1517-3PN/DP。单击右侧任务卡【库】,在全局库中单击打开图标,如下图所示:
浏览到存放通信库的路径,默认情况下以“只读”形式打开,如下图所示:
打开该通信库会看到在其“类型”中有各种通信协议的函数,比如LCom(TCP协议通信库)、LFTP(FTP协议通信库)、LHTTP(HTTP协议通信库)、LMQTT(MQTT协议通信库)等等。
在项目树的【程序块】中新建一个函数块,命名为“MQTT_Test”。将LMQTT_Client拖放到函数块MQTT_Test中,如下图所示:
添加MQTT_Client时,系统会提示创建背景数据块。这里我们选择“单个实例(独立背景数据块)”,添加完成后如下图所示:
函数LMQTT_Client有8个输入参数、8个输出参数和9个输入/输出参数,其中:
输入参数:
名称 | 数据类型 | 说明 |
---|---|---|
enable | 布尔型 | 当该值为真表示与MQTT服务器建立连接并保持,反之断开连接 |
publish | 布尔型 | 该值的上升沿发送一个“发布(PUBLISH)”报文 |
subscribe | 布尔型 | 该值的上升沿发送一个“订阅(SUBSCRIBE)”报文 |
unsubscribe | 布尔型 | 该值的上升沿发送一个“取消订阅(UNSUBSCRIBE)”报文 |
qos | USInt | 发布或订阅消息的服务质量数值,可以是0、1或2,更多信息参考后文的解释。 |
retain | 布尔型 | 当该值为真,表示发送的报文带“保持”标识,反之不带。 |
publishMsgLen | UDInt | 发布消息的有效长度(参数publishMsgPayload的有效字节数) |
willMsgLen | UInt | 遗嘱消息的有效长度 |
输出参数:
名称 | 数据类型 | 说明 |
---|---|---|
valid | 布尔型 | 如果该值为真,表示函数的其它输出值是有效的 |
done | 布尔型 | 真=作业执行没有错误;假=作业未执行或有错误 |
busy | 布尔型 | 真=作业正在执行;假=作业已经完成或未执行 |
error | 布尔型 | 真=有错误发生;假=无错误 |
status | 字 | 作业执行的状态 |
diagnostics | typeDiagnostics | 诊断内容 |
receivedMsgStatus | USInt | 接收消息的状态:0=没有新消息;1=有新消息;2=收到新消息但是无效或超出存储区范围 |
receivedMsgLen | UDInt | 接收消息的有效长度 |
输入/输出参数:
名称 | 数据类型 | 说明 |
---|---|---|
connParam | LMQTT_typeConnParam | 通信连接的参数配置 |
clientIdentifier | 字符串 | 客户端标识名称 |
username | 字符串 | 用户名 |
password | 字符串 | 密码 |
willTopic | 字符串 | 遗嘱主题 |
mqttTopic | 字符串 | 用于发布、订阅或取消订阅的MQTT主题 |
publishMsgPayload | 字节数组 | 发布消息的载荷(内容) |
receivedTopic | 字符串 | 接收到的主题 |
receivedMsgPayload | 字节数组 | 接收到的消息载荷(内容) |
添加库函数的过程中,会自动把一些相关的函数、数据类型添加到项目树中,如下图所示:
新建mqttDB_parm数据块存放该函数的形参,如下图所示:
调用LMQTT_Client函数示例如下图所示:
好了,关于LMQTT_Client通信库就先介绍到这里。后续我们配合NanoMQ服务器进行测试。
我的书《西门子S7-1200/1500 PLC SCL语言编程 ——从入门到精通》从硬件到软件,比较详细的介绍了SCL语言的编程,感兴趣的话可以扫描下面的二维码查看:
Libraries_Comm_Controller_LIB_V2_2_0_TIAv17
来源:本站| 大小:6.51MB| 下载次数:58次
发表评论