专题介绍:物联网MQTT协议支持


基本信息

KQD平台内置了物联网MQTT协议,只要设备可以访问英特网,就可以向英特网中的MQTT服务器订阅主题,接收服务器的消息。也可以将自己的状态通过发布上报给MQTT服务器。基于MQTT协议,让设备成为物联网设备,让远程的监视与控制成为可能。

这里以开发板DK60-STM32F412RE为例,介绍如何使用向导添加4G-CAT模块驱动、添加MQTT协议支持。然后在阿里云上创建设备实例,并完成一个简单的网页,实时显示开发板的状态。也可以在网页上,远程修改开发板的参数。开发板的详细信息可以参考介绍:STM32F412开发板DK60-STM32F412RE

向导配置

首先,需要参考开发板DK60-STM32F412RE的硬件电路完成基础硬件配置,可以参考:专题介绍:使用向导来生成蓝图

添加4G-CAT模块驱动

首先按照专题介绍中的步骤完成向导配置或者直接导入向导配置文件。然后参考开发板DK60-STM32F412RE的4G-CAT模块链接:

4G-CAT模块与MCU通过USART6的PA11、PA12来进行数据交换。因为前面基础硬件配置中并没有配置USART6,所以这里需要先配置串口USART6。选择“串口通讯”选项卡,点击USART6:

  • 勾选“使能此串口模块”。
  • 勾选DMA硬件加速的“使能”。
  • 确定发送管脚为PA11,接收管脚为PA12。
  • 因为此串口为4G-CAT模块专用,其他协议自由口、MODBUS、PPI都不用使能。

配置好串口后,下一步我们添加EC600网卡。选择“TCP/IP通讯”选项卡,点击“添加”按钮下面的“添加EC600”命令:

选择网卡EC600A,在硬件选项卡中,选择串口为USART6,PEN管脚为PB2,PWK管脚为PA15:

选择网卡EC600A,在MQTT选项卡中,勾选“此硬件端口可以支持MQTT协议”:

点击确定即可生成蓝图。蓝图上传到服务器;完成开发板的烧录;PLC类型部署到本地后,便完成了硬件部署。

阿里云设备创建

登录阿里云

通过网址https://www.aliyun.com/可以登录到阿里云。在已经注册了阿里云账号的情况下,进入控制台:

在控制台产品与服务中,选择“物联网IoT”分类下的“物联网平台”:

作为测试,可以使用公共实例,如果没有开通,需要先开通公共实例:

点击公共实例,可以查看此实例下的产品,这里我们添加一个新的产品:

进入新建产品页面:

  • 因为我这里已经有一个产品“P001”了,这里产品名取名“P002”。
  • 所属品类选择为“自定义品类”。
  • 节点类型选择为“直连设备”。
  • 连网方式选择为“蜂窝(2G / 3G / 4G / 5G)”。
  • 数据格式选择为“ICA 标准数据格式(Alink JSON)”。
  • 其他设置不做修改。

点击“确认”添加产品后,返回产品列表。先查看产品属性:

为了测试阿里云与开发板的数据交换,先定义下产品的功能。点击产品“P002”下面的“功能定义”选项卡,点击“编辑草稿”按钮:

进入草稿编辑页面后,点击“添加自定义功能”按钮:

这里我们假设开发板DK60-STM32F412RE控制了一个水泵给管网增压,用户可以在远程读取当前的管网压力,根据压力调整水泵电机的工作频率。 因此我们需要定义两个属性,一个是电机频率,一个是出口压力:
 

添加好这两个属性后即可选择“发布上线”:

随后在产品列表中,点击“管理设备”按钮:

在设备列表中,点击“添加设备”按钮:

设备名输入D001,点击“确认”按钮:

在设备列表中,选择D001,点击“查看”按钮:

在设备D001的设备信息中,点击MQTT链接参数的“查看按钮”:

网站会给出设备D001的MQTT登录信息(客户ID、用户名、密码),同时给出服务器的访问地址和端口号:

妥善保管此信息,后面在开发板编程时需要用到。

开发板编程

开发板通过MQTT协议登录到阿里云

将KQD平台生成的固件下载到开发板后,开发板可以支持KQD Application Editor编程,也可以支持西门子软件STEP 7-MicroWIN SMART的编程。这里我们以西门子软件为例,如果正确安装了KQD平台提供的STEP 7-MicroWIN SMART扩展程序库,那么在软件STEP 7-MicroWIN SMART的最左边指令集里面,可以看到有KQD Mqtt指令集:

MQTT协议栈提供了三条指令:

  • Mqtt_Connect:连接到MQTT服务器。
  • Mqtt_Subsribe:订阅MQTT主题。
  • Mqtt_Public:发布MQTT消息。
指令的详细说明可以参考:特殊指令:MQTT协议

这里我们先尝试通过Mqtt_Connect连接阿里云,编写以下程序。注意指令里面用到的参数全部使用网站出的MQTT登录信息。将此程序下载到开发板,打开程序监控:

可以看到Status最后变成4,查阅指令说明可知,已经正确登录到阿里云MQTT服务器:

登录阿里云控制台,找到产品P002的设备列表,也可以看到设备D001被自动激活且在线:

向阿里云发布消息

可以使用Mqtt_Public指令向阿里云发布消息,找到产品P002的详细说明,点击“Topic类列表”选项卡,点击“物模型通信Topic”,重点关注两个Topic:

  • /sys/a1ld8rNE93c/${deviceName}/thing/event/property/post:用于设备属性上报。
  • /sys/a1ld8rNE93c/${deviceName}/thing/service/property/set:用于设备属性设置。
如果是针对设备D001,则需要将路径中的“${deviceName}”替换成“D001”。

属性上报的数据格式为JSON格式,例如:
{"params":{"OutletPressure":1000}}
表示设置属性OutletPressure为1000。

为了方便生成JSON格式的数据,KQD驱动平台提供了JSON数据读写指令,可参考:特殊指令:JSON数据操作

添加如下梯形图,网络2通过对SM0.5上升沿的计数,每2秒接通V52.0一个扫描周期。网络3按照阿里云JSON格式的要求,构造需要发送的JSON数据:

网络4将构造的JSON数据发送到设备属性上报主题上去:

将此程序下载,在状态表中输入VW100,设置值为1200:

登录阿里云控制台,找到产品P002的设备D001,在设备“物模型数据”选项卡下面,“运行状态”子选项卡中,可以查看到开发板上报的数据:

订阅阿里云的主题并接收消息

网络5使用订阅指令,订阅MQTT服务器的设备属性设置主题。网络6如果主题收到了消息,用JSON指令将JSON数据中的电机运行频率提取到PLC变量VW102:

登录阿里云控制台,在导航“运维监控”下找到“在线调试”,选择产品“P002”的设备“D001”,属性调试选项卡下面设置电机频率为30Hz,最后下拉菜单中点击设置:

在状态表中输入VW102,可以看到其值已经被修改为30:

开发板中模拟出口压力与电机频率的关系

因为没有实际的变频器和压力传感器,这里我们简单模拟下出口压力与电机频率,假设出口压力正比于电机频率,网络7完成了这个简单的计算:

阿里云可视化开发(IoT Studio)

点此连接可以进入IoT Studio的管理界面:https://studio.iot.aliyun.com/

IoT Studio的管理界面,导航栏选择“项目管理”,普通项目下面点击“新建项目”,选择项目名称“测试项目1”:

IoT Studio的管理界面,导航栏选择“应用开发”,在“Web应用”选项卡下面点击“新建”:

应用名称修改为W001,点击“确定”按钮:

因为需要绑定产品,先返回“应用开发”,在“Web应用”选项卡下面点击刚才新建的项目“测试项目1”:

在“测试项目1”的项目详情中,导航处点击“产品”,点击“关联物联网平台产品”:

勾选开始创建的产品“P002”,勾选“关联产品同时关联其下所有设备”,点击“确定”:

回到“测试项目1”的项目详情,点击Web应用W001的“编辑”按钮:

点击导航处的“组件”按钮,选择“基础组件”,拖动一个“仪表盘”,一个“滑条”到页面中去。

选中仪表盘,点击右侧样式中的“配置数据源”,在浮动窗口中数据源选择“设备”,产品选择“P002”,设备选择“D001”,数据项选择“设备属性”,属性选择“出口压力”,最后点击“确定”

选中滑条,点击右侧交互,新增“交互1”,事件设置为“值改变”,新增“动作1”,动作设置为“设置设备属性”,产品选择“P002”,设备选择“D001”,属性选择“电机频率”:

开发板LCD组态

打开KQD Application Editor,选择开始创建的PLC类型后,新建项目,在“系统扩展”下面新建“TinyLcd”:

在LCD的首页,创建两个变量,一个变量绑定VW100表示出口压力,一个变量绑定VW102表示电机频率:

将此程序下载到开发板,即完成了开发板LCD组态。

通讯验证

回到“测试项目1”的项目详情,点击Web应用W001的“预览”按钮:

Web页面加载成功后,在页面拖动滑块,可以看到压力相应的变化:

相关文件