1.数据互联简介
物联终端设备( HMI/CBOX/IPC) 和互联工具之间的数据互联皆是通过 MQTT 协议来完成的, 通过它们之间的配合, 可以实现, 1. 数据上报及数据库存储( 实现历史记录存入数据库) 2. 多设备的可异地集中式控制( 即远程写入) 3. 第三方软件的数据对接( MQTT 对接或者数据库对接) 上图主要展示了各设备和互联工具之间基于 MQTT 协议实现的主题订阅和发布的结构。其中的 sub 和 pub 分别是订阅( subscribe) 和发布( publish) 的缩写,紧跟其后的是主题格式。 项目标识, 用以区分不同的项目, 也为了让多个项目可以共用一个Broker。 组标识, 一个工程, 可能有多个数据组, 用以区分数据组。 终端编号 这里的终端你可以简单理解成物联终端, 一个组态工程可能需要 下载到多台物联终端上, 这个编号就是用来区分物联终端的, 从而实现精准 的定位。这是一个系统变量$TerminalCode, 若值为空, 主题中会自动补充为 PN 码。 data, 意寓数据的意思。 cmd, 意寓指令的意思。 result, 意寓 cmd 执行成功与否返回的结果。 下面就如何实现 数据上报及数据库存储 、 远程写入作详细的阐述, 而第三方软件的数据对接, 在介绍的过程中也有做了说明
2.数据上报 物联终端(HMI/CBOX/IPC/SCADA) 中的工程的“数据组”功能, 是一个即可以实现本地历史记录, 也可以实现数据上报的功能, 通过数据组的配置, 可以实现定时上报、 触发上报等数据上报机制。 只要数据组被触发上报, 物联终端就会把数据发送到 MQTT 服务器, 互联工具同时会从 MQTT 服务器取得这份数据, 并写入数据库, 如果有第三方软件需要通过QTT 获取数据, 则可以模拟互联工具, 订阅相同主题, 即可获取到数据。我们直接以一个具体的例子来讲解下上述的过程。
当 被 触 发 时 , 物 联 终 端 就 会 发 布 数 据 , 主 题 为:
data/hmi013ae9b56fe1bf0/Gp1/5150818675711870453
把终端编号改为a.
修改数据。
监控发现已经修改成功
Topic[result/hmi013ae9b56fe1bf0/Gp1/a] {
"success": 1,
"type": "set_var",
"payload": {
"Modbus_1_测试MQ": "57"
}
}
注:通道标识 就是用以区分不同的变量, 下同。 当 被 触 发 时 , 物 联 终 端 就 会 发 布 数 据
内容格式是 json, 其中_terminalTime 由物联终端在发布时自动生成, 它表示发布的时间。_groupName 也是由物联终端自动生成, 它表示数据组名。注意, 为方便处理, json 中所有条目的数据格式都是字符串。
3.远程写入
绿色部分, 普通工程发布的数据内容和格式已在上面阐述过, MQTT 工程订阅拿到数据后, 会进行解析, 并显示在对应变量的图元上。 橙色部分, 即远程写入的部分。MQTT 工程和互联工具都可以进行远程写入的功能。注意, 要想该变量能被远程控制写入, 必须在普通工程的数据组里将该变量勾选为“允许远程写入” 。
对于 MQTT 工程而言, 当界面的变量被改动, 会生成一条消息, 并进行发布。
如 果 要 远 程 写 入 变 量 的 值 , 则 需 要 向 MQTT 服 务 器 发 布 的 主 题 为
数据格式为 json。“type” 表示 cmd 命令的类型, “set_var” 表示修改变量, “payload” 是要修改的变量通道标识和要修改的值。 如果是第三方软件需要通过 MQTT 实现数据写入, 则发布该条指令即可。
普通工程收到后, 修改本地变量, 修改成功与否, 会通过 result 前缀主题反馈给 MQTT 工程, MQTT 工程收到后, 若判断到已成功修改, 就会把该变量对应的新值更新到界面。以上为例, 若普通工程成功修改本地的 V0 变量, 则会发布主题为:
success 为 0 表示失败, 但目前, 修改失败不会发布数据, 只在成功时发布。 对于互联工具而言, 用户需要在任务设置里启用远程写入, 才能使用该功能。