跳到主要内容

介绍 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连接丢失
8TLS 协议版本错误
11认证错误
13未知错误
14系统调用错误
16代理错误
18格式错误
19keepalive 错误
23TLS 握手失败
24QoS 不支持
  • **控制:**控制连接服务器,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,如下图所示

三、工程示例

请点击此图标下载示例工程。