0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一种直接通过PLC连接MQTT服务器的方法

kae1_cdebyte 来源:亿佰特物联网应用专家 作者:亿佰特物联网应用 2022-09-09 10:26 次阅读

MQTT低协议消耗、数据安全性高等优点,在物联网领域已经发展很多年,网络上有很多资料可以学习,并且有很多的服务器运营商在不断降低云开发难度,之前需要前端工程师开发的网页,现在只要你对界面美观没有要求只是想实现功能,服务器运营商都有对应的可视化开发工具支持,比如下文使用的阿里云飞燕平台的“人机交互”设计就可以快速设置手机控制界面。

fadb5388-2f6b-11ed-ba43-dac502259ad0.png

同样的腾讯有腾讯连连小程序可视化界面设计,OneNET有可视化Web Server界面设计,几乎所有的服务器运营商都在降低开发难度。

最近几年PLC厂家也在提供MQTT函数功能块,只要设备支持TCP客户端并且可以发送16进制透明数据,就可以通过数据组合的方式实现MQTT服务器连接,并根据协议要求发送对应的数据包就可以实现MQTT通讯,之前我就利用组态屏搭配串口服务器通过脚本编程实现TCP客户端连接MQTT服务器,下面介绍一种直接通过PLC连接MQTT服务器的方法。

下面是MQTT常用的报文列举:CONNECT报文:10+字符总长度(遵循剩余字符算法)+00+04+4D 51 54 54+04+C2 +保活时间(120s:00 78)+客户端长度(2字节)+客户端ID+用户名长度(2字节)+用户名+密码长度(2字节)+PASSWORD

PUBLISH报文:30 +字符总长度(遵循剩余字符算法)+发布地址长度(2字节)+发布地址+用户数据

SUBSCRIBE报文:82 +字符总长度(遵循剩余字符算法)+00 00+订阅地址长度(2字节)+订阅地址+服务等级(00、01、02)

一博图开发环境搭建

从零开始编写程序,需要熟悉西门子SLC编程语言,现学可能比较困难也不符合我写这篇文章的初衷,利用这篇文章只需要原来熟悉博图的梯型图编程和功能块调用,就可以利用下文使用函数块连接MQTT服务器。

西门子全球技术支持中心可以下载到一篇关于MQTT连接的实例,这里小编采用“国际版”下载MQTT实例讲解,在“中文”技术支持中心也有一篇关于“MQTT连接”的实例(中文实例地址:SIMATIC CPU 的 MQTT 发布服务器),但我们有没有使用过,有可能是同一实例,用什么实例本质都是相同的(MQTT协议不变,最终与服务器通讯的数据不变),中间过程可能不同但变量描述与协议相同也相同,建议在开发中变量名尽量与协议相同,方便程序阅读。

小编使用的是“国际版”下载的实例(国际版实例下载地址:Use the SIMATIC controller as an MQTT client)。

后面会通过PLC仿真软件仿真真实的S7-1500设备,例程提供了两个PLC的连接的实例,其实都是一样的,把S7-1200删除仿真下载程序时报错;

fb6a04a2-2f6b-11ed-ba43-dac502259ad0.png

后面会连接阿里云,需要PLC接入外网,需要连接可以上网的路由器并配置正确的IP地址;

fc121a3e-2f6b-11ed-ba43-dac502259ad0.png

之面会使用域名连接,默认的DNS可能无法解析,需要在“高级组态”的”DNS”下配置阿里云域名解析服务器(223.5.5.5),我这可以解析域名可以忽略配置DNS服务器;

fc85b0e8-2f6b-11ed-ba43-dac502259ad0.png

二西门子PLC仿真

手上没有PLC也可以学习MQTT Client函数块的使用,只需要使用“SIMATIC S7-PLCSIM Advanced V4.0”西门子PLC高级仿真器即可实现S7-1500PLC的仿真运行。

1、配置虚拟网卡,填写PLC参数,如下图所示:

fd402202-2f6b-11ed-ba43-dac502259ad0.png

2、切回博图界面点击“编译”,忽略警告,在点击下载,按照下图配置:

fdb9f8fc-2f6b-11ed-ba43-dac502259ad0.png

3、再点击“下载”,第一次使用会弹出几个配置窗口,全部选“同意”或者“是”,经过以上步骤后点击“装载”选择同意,选择启动设备:

fe0994de-2f6b-11ed-ba43-dac502259ad0.png

至此完成博图仿真调试的全部说明。

三云平台设备创建

准备云平台账号,这里小编使用阿里云飞燕平台进行演示,你也可以OneNET、腾讯云、华为云、百度云等,方法基本类似,这个函数库也是使用标准MQTT3.1.1的三要素Client ID、UserName、Password,因此阿里云的三要素与标准MQTT3.1.1三要素不同也需要转换,转换规则可以通过云平台使用手册查询,不过阿里云在设备详情下提供了标准MQTT3.1.1三要素的参数可以直接使用,使用其他平台的应当根据对应方法进行转换。

1、进入飞燕物联网平台(https://living.aliyun.com),登录自己的阿里云账号,没有开通该功能的点击开通(需要实名认证),开通的点击进入控制台;

fe416760-2f6b-11ed-ba43-dac502259ad0.png

2、没有项目的点击“创建新项目”,输入名称点击“确定”即可,点击“项目”进入“项目详情”,点击“创建新产品”,输入产品名,配置“功能定义”可以随便选一个后面根据需求在重新定义,联网方式一定不要选择“WIFI接入”,通讯格式使用“ICA标准数据格式(Alink JSON)”;

febbdd06-2f6b-11ed-ba43-dac502259ad0.png

3、进入“产品详情”,首先进入的是“功能定义”,这里先讲如何连接,直接跳过“功能定义”与“人机交互”,在“设备调试”,选择开发的模组,目前没有与阿里云合作的模组,直接选择未知模组即可;

ff06efb2-2f6b-11ed-ba43-dac502259ad0.png

4、点击”新增设备”,创建PLC连接的认证参数,进入创建设备的详情界面,查询连接MQTT3.1.1所需要的地址、端口、Client ID、UserName、Password,这里我们不在飞燕平台下查询,需要在“物联网平台”的设备列表下设备详情查询,这样就可不用自己去转换三要素;

ff508636-2f6b-11ed-ba43-dac502259ad0.png

四配置MqttDB块

1、修改MqttDB块中的参数,用于连接阿里云MQTT服务器,打开变量组“connparams”在展开变量“mqttBrokerAddress”,配置参数“qdnAddress”为“a1pc9X6nd09.iot-as-mqtt.cn-shanghai.aliyuncs.com.”,配置“post”为1883。【注意】输入域名需要“.“结束输入。

ffe77118-2f6b-11ed-ba43-dac502259ad0.png

2、填入对应的三要素:

005d444c-2f6c-11ed-ba43-dac502259ad0.png

3、再次点击编译下载:

01c4bb8a-2f6c-11ed-ba43-dac502259ad0.png

五仿真连接MQTT服务器

1、点击在线监控数据,需改“connect“为”true“,函数块自动连接MQTT服务器;

021007d4-2f6c-11ed-ba43-dac502259ad0.png

【注意】阿里云不支持20s的心跳请求,最少配置30s,这里使用120s。

2、登录平台查询MQTT状态:

031b9864-2f6c-11ed-ba43-dac502259ad0.png

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • plc
    plc
    +关注

    关注

    4974

    文章

    12250

    浏览量

    454862
  • 服务器
    +关注

    关注

    12

    文章

    8111

    浏览量

    82496
  • MQTT
    +关注

    关注

    5

    文章

    537

    浏览量

    21971

原文标题:【教程】PLC利用函数块连接MQTT服务器

文章出处:【微信号:cdebyte,微信公众号:亿佰特物联网应用专家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    怎么搭建MQTT服务器

    怎么搭建MQTT服务器
    发表于 06-01 15:04

    c语言连接华为MQTT服务器

    `1、用的鸿蒙系统,3861芯片,连接华为MQTT服务器2、已经确保了wifi网络已经连接,而且确保了用工具可连接
    发表于 03-31 11:55

    c语言连接华为MQTT服务器,始终没连接上,已贴出代码图

    1、用的鸿蒙系统,3861芯片,连接华为MQTT服务器2、已经确保了wifi网络已经连接,而且确保了用工具可连接
    发表于 03-31 12:00

    怎样将NodeMCU接入本地MQTT服务器

    MQTT服务器,并通过外接的OLED显示屏来显示其他设备发送来的消息。 在年前接触NodeMCU后陆续写了几篇学习的博文,中间由于各种原因间隔比较久,本篇将会是这个系列的最后
    发表于 11-24 07:12

    Android程序是怎样通过SSL单向认证方式连接MQTT服务器

    如何对Android程序进行测试呢?Android程序是怎样通过SSL单向认证方式连接MQTT服务器的?
    发表于 01-20 06:06

    通过WiFi模块连接到Onenet_MQTT服务器

    本篇目标、调通合泰单片机串口(成功接收和发送数据)二、通过WiFi模块连接到Onenet_MQTT服务器合泰32串口HT32F5XXX串口
    发表于 01-24 07:37

    通过MQTT连接服务器的步骤分享

    概述这几天查阅了很多的MQTT相关的资料,结果发现查到了太多底层的东西。根本没有太大的作用,浪费了很多时间。在掌握基本的MQTT的概念后,我发现只用掌握连接服务器,订阅话题,发布话题这
    发表于 02-15 07:35

    为什么kawaii-mqtt sim7600 mqtt服务器会切换失败呢

    mqtt broker1失效时,mqtt客户端切换连接mqtt broker2,依次类推。// 与服务器建立
    发表于 10-19 10:43

    MQTT单向认证服务器域名证书到期重签后,设备无法连上服务器怎么处理?

    ;的证书,在设备上使用这个通用证书之后,不管服务器上的证书如何更新,设备都可以正常连接MQTT服务器。请问这个"通用"证书存在吗?在哪里可以得到它?2,如果事实上不存在
    发表于 03-09 07:12

    Web服务器启动时MQTT (SSL) 断开连接如何解决?

    周问题。任何一种协议都在运行 MQTT /web 服务器。如果网络服务器已启动,则 mqtt
    发表于 06-02 07:51

    通过Mosquitto发布到代理到服务器后如何断开MQTT

    我正在处理 MQTT 代码 (tuanpmt),我想在数据通过 Mosquitto 发布到代理到服务器后断开 MQTTMQTT:发送,类
    发表于 06-12 07:44

    如何使用MQTT客户端连接阿里云MQTT服务器详细教程说明

    ,是技小新针对阿里云MQTT服务器连接过程中的痛点,自己编写的一个电脑程序,用来生成连接阿里云MQTT
    发表于 05-29 17:57 29次下载
    如何使用<b class='flag-5'>MQTT</b>客户端<b class='flag-5'>连接</b>阿里云<b class='flag-5'>MQTT</b><b class='flag-5'>服务器</b>详细教程说明

    通过一台PLC网关同时采集多台PLC数据到MQTT自建服务器

    通过一台PLC网关同时采集多台PLC数据到MQTT自建服务器
    发表于 11-21 09:56 968次阅读
    <b class='flag-5'>通过</b>一台<b class='flag-5'>PLC</b>网关同时采集多台<b class='flag-5'>PLC</b>数据到<b class='flag-5'>MQTT</b>自建<b class='flag-5'>服务器</b>

    串口服务器连接MQTT服务器方法说明

    串口服务器连接MQTT服务器方法参考“串口服务器用户手册”,不再重复说明。
    发表于 03-30 09:58 3995次阅读
    串口<b class='flag-5'>服务器</b><b class='flag-5'>连接</b><b class='flag-5'>MQTT</b><b class='flag-5'>服务器</b><b class='flag-5'>方法</b>说明

    PLC利用函数块连接MQTT订阅消息(一)

    在亿佰特介绍了西门子PLC如何通过函数块连接MQTT服务器和发布消息,本文为大家介绍如何通过函数
    的头像 发表于 02-06 17:29 481次阅读
    <b class='flag-5'>PLC</b>利用函数块<b class='flag-5'>连接</b><b class='flag-5'>MQTT</b>订阅消息(一)