Skip to content

MQTT Native

WAGO SCADA中的MQTT Native驱动程序基于MQTT协议设计和开发,支持满足MQTT协议的报文信息传输。同时系统自带一个MQTT Broker,支持用户通过系统提供的账户和密码连接,并通过MQTT Native驱动进行数据通信。

驱动连接到MQTT Broker

  1. 在“设备”->“MQTT Native”页面,点击“新增组”按钮。

    :组是用于组织设备的一种方式,通过将设备组织成组,可以更方便地进行管理和操作。

  2. 在新增页面中输入 组名

    alt text

  3. 点击“确认”按钮。此时该条数据将显示在MQTT Native的设备列表页面。

    alt text

  4. 在操作一栏中点击“添加节点”,输入节点名称,为当前组添加一个新的节点。

    节点:节点代表具体设备的实体,具有唯一标识符,用于区分各个设备。

    alt text

    a. 点击“确认”按钮。此时该条数据将显示在当前组的节点列表页面。

    alt text

  5. 在启用状态一栏点击启用按钮,启用该节点。

    alt text

    配置字段

    名称 描述
    组名称 驱动的组名称,在驱动列表中唯一。
    节点名称 组的某个节点名称,在组中唯一。
    用户名 用于与某节点连接的账号,系统自动生成,不可修改。
    密码 用于与某节点连接的密码,系统自动生成,支持重置。

注意事项

  1. 节点列表中,启用状态 表示设备是否已被启用,未启用的设备不会进行连接,启用的设备会尝试进行连接。

  2. 全部启用全部禁用,是对列表中的所有数据进行启用或禁用。

  3. 请妥善保管用户名和密码信息,避免泄露给未授权人员,如果发生泄露,请及时重置密码。

连接MQTT Broker

在使用 MQTT Native 驱动程序之前,您需要先连接到系统的 MQTT Broker。请按照以下步骤进行连接:

  1. 获取账户和密码:点击节点的“查看”按钮,可以看到系统提供的用户名和密码。

  2. 配置客户端:在您的应用程序或设备中,配置 MQTT 客户端以连接到系统的 MQTT Broker:

    • Broker 地址:填写系统 MQTT Broker 的地址。
    • Broker 端口:填写系统 MQTT Broker 的端口号。默认为 1884。
    • 客户端 ID:填写一个唯一的客户端标识符,用于在 MQTT Broker 上标识您的连接。
    • 用户名和密码:使用您获取到的账户和密码。
  3. 连接到 MQTT Broker:使用 MQTT 客户端,在应用程序或设备中连接到系统的 MQTT Broker。确认连接成功后,便可以开始使用配置的客户端与MQTT Native驱动程序进行设备数据的传输。

发布和订阅设备数据

MQTT Native驱动基于MQTT协议设计和开发,接入驱动的MQTT客户端发送的报文Topic需要遵循如下结构:

主题:Topic

wsV1.0/group_name/message_type/node_name/[device_name]

元素 描述
ws1.0 根元素,为固定内容。
group_name 此元素是对客户端的逻辑分组标识,对应系统中的**组名称** ,它可以按照逻辑或者实际使用要求进行分组,比如区分A/B 车间、a/b 产线等。此元素可以是任意合法的字符串,但不能包含特殊字符,比如*/+# 等,并且内容尽可能短。
message_type 此元素说明该如何处理payload 信息。
系统定义如下message_type :
1. NBIRTH – 设备测点信息,可初始化某Node 下所有设备信息和测点信息
2. NDATA – 测点数据,发送某设备下测点数据
3. NCMD – 测点命令,回写某设备下测点数据
node_name 此元素是客户端唯一标志,对应系统中的 节点名称 。此元素可以是任意合法的字符串,但不能包含特殊字符,比如 */+# 等,并且尽可能短。
device_name [可选] 此元素是设备的唯一标识,它可以是任意关联到节点的物理或逻辑设备。此元素是可选的,客户端可通过此元素将消息发送给指定设备。不同节点下的device_name 可以重复,且可以是任意合法字符,但不能包含特殊字符,比如*/+# 等,并且尽可能短。

message_type详细解释

  1. NBIRTH – 传输设备配置信息

    Topic :wsV1.0/group_name/NBIRTH/node_name

    当成功接入 SCADA 后,客户端可以通过此 Topic 将当前 node_name 下的所有设备配置信息和测点配置信息推送给系统。

  2. NDATA – 传输测点数据

    Topic :wsV1.0/group_name/NDATA/node_name/[device_name]

    当成功推送测点配置信息后,客户端可以通过此 Topic 将测点数据推送给系统。

  3. NCMD – 回传测点数据

    Topic :wsV1.0/group_name/NCMD/node_name/device_name

    当客户端需要并且允许某些测点可以接收来自系统下发的值时,客户端可通过订阅此 Topic 来接收数据。

payload结构

  1. Topic :wsV1.0/group_name/NBIRTH/node_name

    payload结构

    属性 类型 描述
    DeviceName String 设备名称
    Tags 集合 测点信息
    Name String 测点名称
    Description String 测点描述
    Address ulong 测点地址/别名
    **  **DataType integer 测点数据类型

    Name 可以是测点的名称,也可以是测点的路径。当需要对测点进行分组归类的时候,可以按照以下格式,如:“Name”:“first/second/testTag” ,即可将testTag测点归属于second目录,同时second归属于first目录。

    DataType 集合如下

    类型 说明
    0 Unknown 未知的数据类型
    1 Int8 8位有符号整数
    2 Int16 16位有符号整数
    3 Int32 32位有符号整数
    4 Int64 64位有符号整数
    5 UInt8 8位无符号整数
    6 UInt16 16位无符号整数
    7 UInt32 32位无符号整数
    8 UInt64 64位无符号整数
    9 Float 单精度浮点数
    10 Double 双精度浮点数
    11 Boolean 布尔值
    12 String 字符串
    13 DateTime 日期

    报文示例:

    [
        {
            "DeviceName": "Device1",
            "Tags": [
                {
                    "Name": "Temp",
                    "Description": "Temperature",
                    "Address": 1,
                    "Value": 35,
                    "DataType": 1
                },
                {
                    "Name": "Voltage",
                    "Description": "Voltage",
                    "Address": 2,
                    "Value": 10,
                    "DataType": 1
                }
            ]
        },
        {
            "DeviceName": "Device2",
            "Tags": [
                {
                    "Name": "Temp",
                    "Description": "Temperature",
                    "Address": 1,
                    "Value": 35,
                    "DataType": 1
                },
                {
                    "Name": "FolderA/Items/TagA",
                    "Description": "TagA",
                    "Address": 2,
                    "Value": 35,
                    "DataType": 1
                }
            ]
        }
    ]
    
  2. Topic :wsV1.0/group_name/NDATA/node_name/[device_name]

    payload结构

    属性 类型 描述
    Name string 测点的名称/ 路径
    Value string 测点值
    Timestamp int 测点时间戳

    报文示例:

    {
        "Tags": [
            {
                "Name": "Temp",
                "Value": 45,
                "Timestamp": 1687858118
            },
            {
                "Name": "Voltage",
                "Value": 10,
                "Timestamp": 1687858118
            }
        ]
    }
    

    考虑到节约带宽和提高传输性能,所有测点的时间戳可以单独用一个属性表示,优先使用测点的 Timestamp ,若测点不存在 Timestamp ,则使用顶层对象的 Timestamp, 以下是一个例子:

    {
        "Timestamp": 1687858118,
        "Tags": [{
                "Name": "Temp",
                "Value": 45
            },
            {
                "Name": "Voltage",
                "Value": 10
            }
        ]
    }
    
  3. Topic :wsV1.0/group_name/NCMD/node_name/device_name

    payload结构:

    属性 类型 描述
    Name string 测点的名称/ 路径
    Value string 测点值

    报文示例:

    {"Name":"Voltage","Value":120}
    

与变量绑定

将变量与客户端测点进行绑定。

  1. 创建一个I/O变量。

    alt text

  2. 在变量的编辑界面,点击数据源的 设置 按钮。

    alt text

  3. 选择需要绑定的组、节点、设备和目录,并勾选数据类型匹配的测点。

    alt text

  4. 点击“确认”按钮,完成配置。