项目案例
水质数据监测

水质数据监测

一、项目要求

  • 实现 Modbus 协议的传感器采集。
  • 实现 MQTT 协议的数据转发。
  • 实现本地数据中心的建立。

二、实现 Modbus 协议的传感器采集

1、新建设备

点击设备接入,进入设备管理界面,再点击新建,进入设备创建界面。

water-monitoring

进入设备建设界面后。选择 Modbus 设备类型。开启轮询,实现不断从传感器获取数据。设定最大点位,这是设定可以从传感器获取最多不同的数据点位。选择 UART 的工作模式,因为本项目传感器和终端之间是通过串口通信。选择传感器和终端设备相连的串口编号。在设备配置完成后,就可点击提交。(详细的设备配置说明可见: 设备接入

water-monitoring

2、配置点位表

提交完后回到设备管理界面,可以看到我们创建好的设备。然后设备的高级操作中点击点位表配置。

water-monitoring

在点位表配置界面我们有两种配置方式:手动单个配置点位与通过点位表批量配置点位

  • 手动单个配置点位:首先要点击添加点位,然后开始设置点位参数,下面进行参数说明:

water-monitoring

提交后,如果设定正确过段时间即可看到采集的数据。

water-monitoring

  • 1、设置传感器设备地址。

  • 2、设置读取数据的标签。这个标签的设定与后面配置设备规则中对数据处理时是相关的。

  • 3、设置读取数据的别名。

  • 4、选择 Modbus 功能。因为我们是读取数据,只要用 4 个功能码分别是 01:读取线圈状态;02:读取离散输入;03:读取保持寄存器;04:读取输入寄存器。选择哪个功能码需要根据对应的设备文档。 water-monitoring

  • 5、选择数据类型和排序。数据类型主要可以分为两类。占 2 个字节的数据类型和占 4 个字节的数据类型。2 个字节的数据类型例如:int16、short、uint16等,它们的数据排序只有两种正序 AB、倒序 BA。还有 4 个字节的数据类型例如:float、uint、int、RAW 等。RAW 类型只有一种排序就是 DCBA。其他 4 字节的类型排序有三种分别是:ABCD、DCBA、CDAB。 water-monitoring

  • 6、设置读取数据的起始寄存器地址,也就是数据的起始地址。

  • 7、读取数量在设定数据类型时就确定好了。与数据类型所占字节数一致。

  • 8、设定权重系数。与小数位相关。

  • 9、设定采样频率,即多久进行一次数据采集。单位是 ms

  • 10、点击保持即可提交设定的点位。

提交后,如果设定正确过段时间即可看到采集的数据。

water-monitoring

  • 批量配置点位首先要制作点位表,

先建里如下的 excel 表,在表中填入相关数据.其中每一列依次是数据的标签、数据的别名、Modbus 功能码、采样频率、设备地址、起始寄存器地址、寄存器个数(一个寄存器两个字节)、数据类型、排序、权重系数。

water-monitoring

点位制作完成之后,点击导入点位表,找到我们建好表的文件,点击打开,然后确定。如果配置正确,大概5秒钟后可以看到采集的数据。

water-monitoring

water-monitoring

water-monitoring

water-monitoring

三、实现 MQTT 协议的数据转发

1、创建 MQTT 协议的北向资源

点击左侧的北向资源,进入北向资源创建界面。点击新建,开始新建资源。

water-monitoring

选择 MQTT Borker 的资源类型。配置实现mqtt通信的相关配置。点击提交。(相关配置介绍详情可见:北向资源)。

water-monitoring

提交之后。我们的北向资源界面就可看到我们创建好的资源。复制好对应资源的 UUID,这个参数在配置规则中有作用。

water-monitoring

2、创建mqtt转发规则

回到设备接入界面,在对应设备的高级配置中点击规则配置。

water-monitoring

进入规则配置界面,点击新建规则。

water-monitoring

编写规则回调代码(lua 语言),编写方法详情可在规则实例中的数据推送实例查看。也可以点击Lua 规范查看相关规则代码编写的实例。编写完规则后即可点击提交。

Lua
Actions = {
    function(args)
        local dataT, err = json:J2T(args);
        if err ~= nil then
            Throw(err);
            return true, args;
        end;
        local params = {};
        for _, value in pairs(dataT) do
            params[value.tag] = value.value;
        end;
        local json = json:T2J({
            id = time:TimeMs(),
            method = "thing.event.property.post",
            params = params
        });
        Debug(json);
        local err = data:ToMqtt("OUTJVENZSGC", json);
        if err ~= nil then
            Throw(err);
        end;
        return true, args;
    end
};

water-monitoring

点击提交后就可以在规则配置界面看到我们新建的规则

water-monitoring

在编写规则的 lua 代码中我们如果有写打印转发的数据(Debug(json)),就可以在首页的运行日志部分看到我们转发的数据。

water-monitoring

四、实现本地数据中心的建立

1、建立数据模型

点击左侧数据模型,进入到创建模型的界面。点击模型列表的新建,然后会弹出填写模型信息的框,必须输入名称然后点击提交。

water-monitoring

我们可以在模型列表中看到新建的数据模型,选中模型,点击新建,开始给模型添加属性。

water-monitoring

填写属性的基本信息,如图所示。然后点击确定。然后重复以上操作添加完所有数据模型的属性。

water-monitoring

添加完成后,此时我们的数据模型就可以点击发布,点击确定。

water-monitoring

water-monitoring

模型发布完成之后,我们可以点击模型列表的模型或者数据中心进入到数据中心。复制好对应资源的 UUID,这个参数在配置规则中有作用。

water-monitoring

因为还没有对设备配置存储到本地的规则,所以现在的数据模型对应的数据中心还是空的。接下来我们就要对设备创建本地数据中心存储规则。

water-monitoring

2、创建本地存储规则

回到设备接入界面,点击规则配置。

water-monitoring

在规则配置界面点击新建。

water-monitoring

编写规则回调代码(lua 语言),编写方法详情可在规则实例中的数据推送实例中查看。也可以点击Lua 规范查看相关规则代码编写的实例。编写完规则后即可点击提交即可。

Lua
Actions = {
    function(args)
        local dataT, err = json:J2T(args);
        if err ~= nil then
            Throw(err);
            return true, args;
        end;
        local schemaData = {};
        for _, row in ipairs(dataT) do
            schemaData[row.tag] = row.value;
        end;
        local err = rds:Save("SCHEMAZ848ZRDG", {
            temp = (schemaData.t1 + schemaData.t2 + schemaData.t3) / 3,
            resistivity = schemaData.resistivity,
            conductivity = schemaData.conductivity,
            dissolved_oxygen = schemaData.dissolved_oxygen,
            ph_value = schemaData.ph_value
        });
        if err ~= nil then
            Throw(err);
            return 0;
        end;
        return true, args;
    end
};

water-monitoring

点击提交后就可以在规则配置界面看到我们新建的规则。

water-monitoring

此时再回到我们的数据中心,就可以看到存入本地数据中心的数据。在这个界面可以进行清空数据和导出数据的操作。

water-monitoring

© 2023-2025 RHILEX Technologies Inc. All rights reserved.