介绍 MQTT(自定义),教您在海为 HMI 上如何使用 MQTT 配置化连接服务器通讯。
一、MQTT 配置
MQTT 配置分为服务器配置和数据组配置。
1. 新建工程
打开 SCADA 并新建工程,建立变量,这些变量在后面步骤中可用于 MQTT(自定义)功能配置。
2. 服务器配置
双击打开“工程浏览器”中的“数据上报中心”节点,点击“添加服务器”,服务器选择“MQTT(自定义)”。
服务器配置分为 4 项,“基本”、“控制”、“TLS”、“主题”。
2.1 基本
配置 MQTT 服务器的地址、端口号和客户端 ID 等相关信息。
-
**服务器描述:**此项可随意填写。
-
**服务器地址:**有固定和自定义方式,固定地址为固定的 IP 或域名,自定义地址需绑定变量,支持最多 128 个字符。
-
**端口:**有固定和自定义方式,固定地址为固定的端口号,自定义地址需绑定变量。
-
**客户端 ID:**有固定和自定义方式,固定地址为固定的 ID,自定义地址需绑定变量,支持最多 128 个字符。
-
**上报验证:**如果服务器对设备端有身份认证,需要在此处启用上报验证,有固定和自定义方式。
2.2 控制
可以通过绑定的变量来获取服务器连接状态和状态信息,以及控制服务器是否连接。
-
**状态:**连接服务器状态,绑定变量,ON-连接,OFF-未连接
-
**信息:**连接服务器状态信息,绑定变量,以状态值来表示,如下:
状态值 | 信息 |
---|---|
-4 | 连接认证错误 |
-1 | 等待连接 |
0 | 连接成功 |
1 | 内存错误 |
2 | 协议错误 |
3 | 参数错误 |
4 | 未连接 |
5 | 拒绝连接 |
6 | 找不到服务端 |
7 | 连接丢失 |
8 | TLS 协议版本错误 |
11 | 认证错误 |
13 | 未知错误 |
14 | 系统调用错误 |
16 | 代理错误 |
18 | 格式错误 |
19 | keepalive 错误 |
23 | TLS 握手失败 |
24 | QoS 不支持 |
- **控制:**控制连接服务器,ON-连接,OFF-不连接
2.3 TLS
配置是否启用 TLS/SSL 加密。
2.4 主题
包含发布主题、订阅主题和系统主题,发布主题和订阅主题会自动读取数据组配置的主题进行显示。
- **发布主题:**自动读取数据组中配置的发布主题。
- **订阅主题:**自动读取数据组中配置的订阅主题和回执主题(订阅到服务器下发的内容后给服务器回复消息内容)。
- **系统主题:**当设备检测到与服务器的连接非正常地断开时,就会响应一条遗嘱主题里面发布的消息。
3. 数据组配置
3.1 新增数据组
双击打开“工程浏览器”中的“数据组”节点,点击“添加数据组”弹出数据组窗口。
在此处,存储方式必须勾选上“远程上报”并选择“MQTT(自定义)”,根据需要勾选并配置发布主题、订阅主题和回执主题,并设置 QoS 和记录方式。
**组名:**数据组的组名,此处可以任意填写。
**启停控制变量:**绑定控制是否启用数据组的变量。
**存储方式:**此处必须勾选“远程上报”并选择“MQTT(自定义)”。
**发布:**发送信息时,MQTT 服务器收到的主题。支持固定格式和自定义格式。(勾选发布主题后,右侧方可对内容进行配置)。
**订阅:**订阅分为订阅和回执两个部分。
**Qos:**上报服务质量,有两种方式:固定格式和自定义格式。
**记录方式:**按照不同的方式上报数据,有间隔记录、固定时间段记录、触发式记录、变化式记录四种方式。
设定指定间隔时间推送内容数据至指定服务器
设定在指定时间段中,以指定频率推送内容数据至指定服务器
绑定开关型变量,当变量触发时,推送内容数据至指定服务器。变化类型有:开到关、关到开、切换三种
绑定的数值型变量,当变量值发生发生变化时,推送内容数据至指定服务器
3.2 配置主题内容
我们提供【配置式】和【JS 脚本式】两种方法供用户选择。
**配置式:**采用树状结构,支持对象,数组等方式。用户可自定义数据名称以及时间戳,是一种可灵活调整的设计方法。
【增加对象】:增加一个对象。对象内可以存放多个数据格式,每个数据格式具有独自的名称和值。对象使用大括号{}包裹数据。
【增加数组】:增加一个数组。数组内可以存放多个数据格式,但是名称只有一个。数组使用中括号"[]"包裹数据。
【增加数值】:点击增加数值弹出【数值编辑器】,可增加一个数值、字符串、表达式或时间戳。
当选择“固定值”和“字符串”时,可以选择使用固定值或者取自变量值。 当选择“表达式”时,可以使用简单的数值四则运算或字符串拼接。
注意:一个数值最多可使用255个字。【批量增加数值】:点击打开变量选择器,可选择多个变量,添加多个数值。
【删除】:删除所选的字段。
【范本】:在范本中粘贴JSON文本,系统将会排编成相应的JSON格式架构,节约自行排布格式的时间。
【预览】:使用方便易懂的JSON格式展示出【内容配置(表格)】中所配置的内容。
**JS 脚本式:**可编写 JS 脚本,完全由用户自定义内容,具有极高自由度。
【编译】:对编写的脚本内容进行编译检测。
【测试】:对编写的脚本内容进行语法格式检测。
【示例】:提供【发布】和【订阅】两种不同格式的脚本示例。
【内容编辑】:用于编写JS脚本的区域。
接下来我们以“配置式”举个例子,通过点击“增加对象”、“增加数组”、“增加数值”、“批量增加数值”添加 MQTT 消息内容(Payload)。右侧的“预览(Json)”窗口可以预览内容格式,所见即所得,确保上报的内容格式不出错。
本文以下面的主题内容作为例子进行配置。
{
"type": "2023-04-25T02:54:57.285874",
"link": {
"slug": "内部变量_2.变量1",
"type": 1682391297,
"collap": "($内部变量_2.变量2+100)/20-5"
},
"Array2": ["内部变量_2.变量2"]
}
以上 Json 报文如何在内容配置中进行配置呢?这条报文内容里面包含有数值、对象、数组,如下图:
我们开始在内容配置中进行配置,内容配置(表格)默认有一个名称为上报内容的对象,如下图:
首先在报文中添加数值。
"type": "2023-04-25T02:54:57.285874"
鼠标选中“上报内容”项,点击“增加数值”,编辑名称、数据类型和内容,然后点击确定。
选择“增加数值”或者右键点击数值并选择“编辑”时,会弹出“数值编辑器”,如下图:
字符串 | 数字 | 布尔 | |
---|---|---|---|
固定值 | 最多可使用 255 个字 | 最多可使用 255 个字 | TRUE 或 FALSE |
变量 | 只能绑定字符串变量 | 只能绑定字变量(字符串除外) | 只能绑定位变量 |
表达式 | 支持字符串变量的四则运算 | 支持字变量(字符串除外)的四则运算 | 不支持 |
时间戳 | 格式:Unix 时间戳(ISO 8601 规范) | 格式:格林威治时间 | 不支持 |
接下来我们需要添加一个对象。
"link": {
"slug": "内部变量_2.变量1",
"type": 1682391297,
"collap": "($内部变量_2.变量2+100)/20-5"
}。
鼠标选中“上报内容”项,点击“增加对象”,修改名称 link,如下图:
然后鼠标再选中对象“link”项,点击“增加数值”,编辑名称"slug"、数据类型"数字"和内容“变量”,点击确定。
再依次增加数值名称"type"、数据类型"数字"和内容“时间戳”和名称"collap"、数据类型"数字"和内容“变量”。
最后我们需要添加一个数组。
"Array2": [
"内部变量_2.变量2"
]
鼠标选中“上报内容”项,点击“增加数组”,修改名称 Array2,如下图:
然后鼠标再选中数组“Array2”项,点击“增加数值”,编辑名称默认、数据类型"bool"和内容“变量”,点击确定,如下图:
上面步骤操作完后,上报服务器的内容格式为下图预览(Json)中的格式。
除了“配置式”,我们也提供自由度更高的“JS 脚本式”进行内容配置,具体请参考自定义 MQTT 脚本。
4. 下载工程
新建画面,添加图元,并绑定相关变量,如下图:
下载工程到 HMI,如下图:
二、通过 MQTT 服务器验证
本文通过部署在云平台上的 EMQ 服务器进行验证。
1. HMI 连接 MQTT 服务器
在 HMI 上点击连接 MQTT 服务器开关,假如连接成功,连接状态指示灯会亮,如下图:
此时,在 MQTT 服务器连接管理中会显示 HMI 的设备,如下图所示:
2. 订阅及发布验证
启动 MQTT 服务器 WebSocket 客户端,启动连接,如下图所示:
配置主题,如下图所示:
配置好主题后进行订阅,将 HMI 上数据的值改为 7,此时 MQTT 服务器上就会监控到如下图所示:
MQTT 服务器数据将数据(HMI 订阅的主题格式)下发到 HMI,MQTT 服务器上就会监控到如下图所示:
此时 HMI 上数据的值也已被改为 9,如下图所示
三、工程示例
请点击此图标下载示例工程。