[西门子] 西门子博途环境下LMQTT库的通信实例

[复制链接]
查看62436 | 回复0 | 昨天 08:09 | 显示全部楼层 |阅读模式
上一篇文章简单介绍了MQTT协议,及如何基于NanoMQ来搭建MQTT服务器。今天这篇文章,我们来介绍如何使用西门子官方发布的LMQTT通信库来完成客户端与服务器的MQTT通信。



西门子官方发布了一个基于博途环境的SIMATIC控制器通信库,涵盖了多种通信协议,比如:TCP、FTP、HTTP、MQTT、OPCUA、SNMP等等。可以去西门子官网或我的博客网站(www.founderchip.com)同名文章下载。本例程介绍其中的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语言的编程,感兴趣的话可以点击下面的链接或者左下角的【阅读原文】查看:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则