太阳集团tcy8722

当前位置: 首页 >应用方案 >技术应用 >

西门子PLC利用函数块连接MQTT服务器发布消息教程

在之前文章中小编已经介绍了西门子PLC如何接入阿里云MQTT服务器,这里使用飞燕平台方便通过低代码的开发方式实现手机控制界面与Web网页控制界面接入,使用该功能需要先对MQTT数据收发机制具有初步的认知。

在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。

MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:

1Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload);

2payload,可以理解为消息的内容,是指订阅者具体要使用的内容。


一、飞燕物联网平台配置

通过“功能定义”定义上报的数据点标签与数据点类型,用于接收PLC上报数据,使用飞燕平台需要遵守飞燕规定的上报方式与数据格式,否则无法使用其他控件开发可视化程序,具体规则详情以阿里云官方提供的为准,规则有时会有细微的调整这里不重复。 1 PLC利用函数块连接MQTT发布消息

小编这里就以上报温度传感器采集数据为例,可通过传感器使用手册查询到他的采集范围为-40℃到+120℃,PLC类使用浮点型(REAL类型)缓存该数据,平台配置如下:

2  PLC利用函数块连接MQTT发布消息

点击“确认”即可。

二、上报数据格式分析

1、上报数据格式

通过阿里云提供的“物模型数据解析使用示例”可以查询到上报阿里云的数据格式如下:

手册地址:http://help.aliyun.com/document_detail/114621.html

{"method":"thing.event.property.post","id":"2241348","params":{"prop_float":1.25,"prop_int16":4658,"prop_bool":1},"version":"1.0"}

"params":{"prop_float":1.25,"prop_int16":4658,"prop_bool":1}为上报的数据,其余的为一帧数据固有的包头包尾,根据将要使用的上报属性对应调整报文数据,本案例数据如下:

{"method":"thing.event.property.post","id":"2241348","params":{"temperature":31.5},"version":"1.0"}。

2、组合数据包

接下来就是通过PLC动态组合该数据包,该数据包由固定部分和变化的温度组成,JSON的报文为字符串类型数据,因此第一步应当将采集的温度转换为字符型数据,利用功能块VAL_STRG”进行转换,下图为该功能块的使用实例:

3 PLC利用函数块连接MQTT发布消息

3、调整转换格式

根据实际情况调整转换格式,比如FORMAT”选择16#0000(正数不需要符号的带小数类型),由于传感器分度值最小为0.1因此PREC”和“P”配置为1,由于最长字符串为120.0或者-40.0都是长度不超过5的字符将SIZE”配置为5以上即可(不足的位数自动填充空格,而空格不影响JSON数据的解析),如下图所示:

4 PLC利用函数块连接MQTT发布消息

还需要温度字符串组合到params”属性的"temperature":字段后面,因此还需要使用字符串插入功能块INSERT”,官方提供的使用示例如下:

5 PLC利用函数块连接MQTT发布消息

这个功能块非常的简单,只需要配置两个字符串一个插入位置,本案例由于只有一个数据点需要上报,插入值就不通过动态计算所得,直接使用固定值,如有需要可以通过FIND”功能块查找字符串的位置结合其他的功能块实现动态调整,动态组合可以只争对变化数据进行上报达到节省流量的目的,本章意在教会使用MQTT上报数据,不易将程序复杂化,若有兴趣可在实现上报功能后来优化程序。

6 PLC利用函数块连接MQTT发布消息

4、字符串转数组

由于该MQTT连接例程发布消息是通过数组存储缓存,因此需要将刚才转换的字符串通过字符串转数组功能块存入发送缓存数组,官方提供的使用方法如下:

7 PLC利用函数块连接MQTT发布消息

每次上报都需要完全覆盖上一次的上报数据,因此pChars”配置为0,将刚才转换的字符串填入“Strg”,将MQTT发布缓存数组填入Chars”,将功能块输出的长度存入MQTT发布数据长度缓存区,后续用于可变字符长度计算(功能块内部调用,只需提供发送字符长度即可),具体配置如下图所示:

8 PLC利用函数块连接MQTT发布消息

到这里基本完成了MQTT上报数据的全部分析过程。

三、PLC程序分析

“上报数据格式分析”基本对将要使用到的功能块进行了逐个讲解,利用FB函数块将上述功能块串联起来,首先定义变量表(输入变量、静态变量、中间变量)。

输入变量(Input:temperature”,外部输入温度数据用于协议组包与数据上传;

静态变量(Static:Static_1”,用于存储协议报文的固定部分;

中间变量(Temp:temp_post_data”,缓存过程中的上报数据;

temp_to_str”,缓存数值转字符的温度数据;

9 PLC利用函数块连接MQTT发布消息

合并上述功能块为FB函数块,并在主函数中调用该函数块。

10 PLC利用函数块连接MQTT发布消息

四、数据上报与日志查询

配置物模型的发布地址,可在设备详情的Topic列表下查询到物模型的订阅发布地址;

11 PLC利用函数块连接MQTT发布消息

配置MqttDb数据块”的默认发布与订阅地址,配置发布等级,这里使用0,该例程功能块不支持等级2,加之阿里云物模型可能也不支持等级2,只能使用01。

12 PLC利用函数块连接MQTT发布消息

第一步进入MqttDb数据块”,第二步点击“监控”,小编这里已经成功连接阿里云,可以直接进行数据发布,若没有连接应当先触发connect”变量,不知道怎么连接的可以回看之前发布的“西门子PLC利用函数块连接MQTT服务器”,连接成功后“output”下的“status”会反馈16#7004表示连接成功;

13 PLC利用函数块连接MQTT发布消息

给变量publish”一个上升沿信号即可触发一次数据上报,小编这里就通过在线监控的方式实现手动上报,上报成功会输出提升信息,如下图所示:

14 PLC利用函数块连接MQTT发布消息

通过云平台查询上报数据日志,如下图所示:

15 PLC利用函数块连接MQTT发布消息

也可以在“设备详情”的“运行状态”下查询上报数据曲线,如下图所示:

16 PLC利用函数块连接MQTT发布消息

这里并未连接真实的传感器进行采集,因此可以方便对最大值和最小值进行测试,可以看出极限值都能正确上报。


今天的分享就到这里啦,EBYTE每一天都致力于更好的助力物联化、智能化、自动化的发展,提升资源利用率,更多产品更多资料,感兴趣的小伙伴可以登录我们的太阳集团tcy8722官网和企业公众号(微信号:cdebyte进行了解,也可以直接拨打400电话咨询技术专员!



相关阅读:

1、【教程】PLC利用函数块连接MQTT订阅消息(一)

2、【教程】PLC利用函数块连接MQTT订阅消息(二)

3、串口服务器快速接入MQTT3.1协议服务器链接配置教程

4、NB114单路串口服务器如何配置MQTT软件教程

5、MQTT通信协议报文详解



太阳集团tcy8722