readme.md 28 KB

演示模块概述

1、main.lua:主程序入口;

2、param_field.lua:RTU 主站应用模块(字段参数方式);

3、raw_frame.lua:RTU 主站应用模块(原始帧方式);

4、temp_hum_sensor.lua:485温湿度传感器读取模块;

演示功能概述

本 demo 演示的核心功能为:

1、将设备配置为 modbus RTU 主站模式

2、与从站 1 和 从站 2 进行通信

  • 对从站 1 进行 2 秒一次的读取保持寄存器 0-1 操作
  • 对从站 2 进行 4 秒一次的写入保持寄存器 0-1 操作

3、读取温湿度传感器数据

  • 配置 modbus RTU 主站,读取温湿度传感器数据
  • 每 2 秒读取一次传感器数据并解析温度和湿度值

注意事项:

1、该示例程序需要搭配 exmodbus 扩展库使用

2、在 main.lua 中 require "param_field" 模块,可以演示标准 modbus RTU 请求报文格式的使用方式

3、在 main.lua 中 require "raw_frame" 模块,可以演示非标准 modbus RTU 请求报文格式的使用方式

4、在 main.lua 中 require "temp_hum_sensor" 模块,可以演示读取485温湿度传感器数值的使用方式

5、require "param_field"、require "raw_frame" 和 require "temp_hum_sensor",不要同时打开,否则功能会有冲突

特别说明:

关于 RTU 报文,exmodbus 扩展库支持通过 字段参数 或 原始帧 两种方式进行配置

这两种配置方式本质都由用户将其放入 table 中在调用接口时传入,区别如下:

1、字段参数方式

这种方式需要用户将请求报文进行解析后,将其放入 table 中,例如:

-- 读取请求:
local config = {
    slave_id = 1,                         -- 从站地址
    reg_type = exmodbus.HOLDING_REGISTER, -- 寄存器类型:保持寄存器
    start_addr = 0x0000,                  -- 寄存器起始地址
    reg_count = 0x0002,                   -- 寄存器数量
    timeout = 1000                        -- 超时时间
}

-- 写入请求:
local config = {
    slave_id = 2,                         -- 从站地址
    reg_type = exmodbus.HOLDING_REGISTER, -- 寄存器类型:保持寄存器
    start_addr = 0x0000,                  -- 寄存器起始地址
    reg_count = 0x0002,                   -- 寄存器数量
    data = {
        [start_addr] = 0x0012,            -- 寄存器 0 的值
        [start_addr + 1] = 0x0034,        -- 寄存器 1 的值
    }
    force_multiple = true, -- 是否强制使用多个寄存器写入操作(写多个线圈功能码:0x0F;写多个寄存器功能码:0x10)
    timeout = 1000                        -- 超时时间
}

2、原始帧方式

这种方式只需要用户将原始请求报文放入 table 中,例如:

-- 读取请求:
local config = {
    raw_request = string.char(
        0x01,       -- 从站地址
        0x03,       -- 功能码:读取保持寄存器
        0x00, 0x00, -- 寄存器起始地址
        0x00, 0x02, -- 寄存器数量
        0xC4, 0x0B  -- CRC16校验码
    )
    timeout = 1000  -- 超时时间
}

-- 写入请求:
local config = {
    raw_request = string.char(
        0x02,       -- 从站地址
        0x10,       -- 功能码:写入保持寄存器
        0x00, 0x00, -- 寄存器起始地址
        0x00, 0x02, -- 寄存器数量
        0x04,       -- 字节数量
        0x00, 0x12, -- 寄存器 0 的值
        0x00, 0x34, -- 寄存器 1 的值
        0x5D, 0x39  -- CRC16校验码
    )
    timeout = 1000  -- 超时时间
}

如果你需要发送的请求报文是符合 modbus RTU 标准格式,可以使用 字段参数 或者 原始帧 方式

如果你需要发送的请求报文是非标准格式,必须使用 原始帧 方式,使用 字段参数 方式会导致解析的数据不正确

演示硬件环境

1、Air8000 开发板一块

2、TYPE-C USB数据线一根

3、USB-RS485 串口板

此处购买链接仅为推荐,如有问题请直接联系店家

4、气体浓度变送器(RS485 版)

如果你是小白,建议直接购买同款变送器,由于不同型号的温湿度模块默认的参数也会有所区别

Air8000 与 USB-RS385 串口板接线图如下:

Air8000 与气体浓度变送器(RS-485 版)接线图如下:

演示软件环境

1、Luatools下载调试工具

2、Air8000 V2018 版本(理论上最新版本固件也可以,如果使用最新版本的固件不可以,可以烧录 V2018-1 固件对比验证)

3、摩尔信使(MThings)官网(用于模拟 modbus 从站设备)

演示核心步骤

RTU 主站应用模块(字段参数方式,对应 param_field.lua)

1、搭建硬件环境

  • 将 USB-RS485 串口板与 Air8000 开发板进行连接
  • 将 USB-RS485 串口板 与 Air8000 开发板的 USB 端同时接在电脑上
  • 参考图见 演示硬件环境

2、在摩尔信使上配置模拟 RTU 从站设备环境

  • 点击左上角的 “通道管理”按钮,在 “通道管理” 窗口选择对应的串口(USB-RS485 串口板与 Air8000 开发板进行 485 通信时的端口),点击对应串口后面的 “配置” 按钮,在 “串口参数配置” 窗口配置串口参数(要求与代码中调用 exmodbus.create 接口时填入的配置参数一致),操作流程图如下:

  • 点击左上角的 “添加设备”按钮,在 “添加设备” 窗口对通信设备参数进行配置,配置好后点击 “添加” 按钮,左侧栏即为添加后的效果,操作流程图如下:

  • 点击左侧的第一个从站(我这里显示为 “COM36-001”),点击中上部分的 “新增数据” 按钮,在 “新增数据配置” 窗口将 “数据条数” 、“区块” 、“起始数据地址” 按照下图中所示进行配置,最后点击 “确定” 按钮,此时便成功新增保持寄存器 0 和 保持寄存器 1,操作流程图如下:

  • 点击左侧的第二个从站(我这里显示为 “COM36-002”),点击中上部分的 “新增数据” 按钮,在 “新增数据配置” 窗口将 “数据条数” 、“区块” 、“起始数据地址” 按照下图中所示进行配置,最后点击 “确定” 按钮,此时便成功新增保持寄存器 0 和 保持寄存器 1,操作流程图如下:

  • 此时在摩尔信使上的配置操作已经完成,如果需要在摩尔信使上查看报文,那么操作流程图如下:

3、调整软件代码

  • 打开 require "param_field" ,注释掉 require "raw_frame" 和 require "temp_hum_sensor",操作流程图如下:

4、打开 Luatools 工具,根据要求烧录本次所需要的内核固件和脚本代码

5、烧录成功后,自动开机运行

6、开机运行后 Luatools 工具上记录的日志如下:

[2025-12-08 14:14:56.464][000000000.394] I/user.main RTU_MASTER 001.000.000
[2025-12-08 14:14:56.468][000000000.425] Uart_ChangeBR 1338:uart1, 115200 115203 26000000 3611
[2025-12-08 14:14:56.472][000000000.426] I/user.exmodbus 串口 1 初始化成功,波特率 115200
[2025-12-08 14:14:56.477][000000000.426] I/user.exmodbus_test rtu_master 创建成功
[2025-12-08 14:14:56.481][000000000.427] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 14:14:57.124][000000001.433] I/user.exmodbus_test 未收到从站 1 的响应(超时)
[2025-12-08 14:14:57.128][000000001.433] I/user.exmodbus_test 开始写入从站 2 保持寄存器 0-1 的值,寄存器 0 数值为 123 ,寄存器 1 数值为 456
[2025-12-08 14:14:58.135][000000002.437] I/user.exmodbus_test 未收到从站 2 的响应(超时)
[2025-12-08 14:15:00.139][000000004.438] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 14:15:01.139][000000005.441] I/user.exmodbus_test 未收到从站 1 的响应(超时)
[2025-12-08 14:15:03.144][000000007.442] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 14:15:04.140][000000008.445] I/user.exmodbus_test 未收到从站 1 的响应(超时)
[2025-12-08 14:15:04.146][000000008.446] I/user.exmodbus_test 开始写入从站 2 保持寄存器 0-1 的值,寄存器 0 数值为 123 ,寄存器 1 数值为 456
[2025-12-08 14:15:05.149][000000009.449] I/user.exmodbus_test 未收到从站 2 的响应(超时)
[2025-12-08 14:15:07.139][000000011.450] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 14:15:08.146][000000012.453] I/user.exmodbus_test 未收到从站 1 的响应(超时)
[2025-12-08 14:15:10.148][000000014.454] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 14:15:11.154][000000015.457] I/user.exmodbus_test 未收到从站 1 的响应(超时)
[2025-12-08 14:15:11.165][000000015.458] I/user.exmodbus_test 开始写入从站 2 保持寄存器 0-1 的值,寄存器 0 数值为 123 ,寄存器 1 数值为 456
[2025-12-08 14:15:12.160][000000016.461] I/user.exmodbus_test 未收到从站 2 的响应(超时)
[2025-12-08 14:15:14.150][000000018.462] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 14:15:15.158][000000019.465] I/user.exmodbus_test 未收到从站 1 的响应(超时)
[2025-12-08 14:15:17.166][000000021.466] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 14:15:18.160][000000022.469] I/user.exmodbus_test 未收到从站 1 的响应(超时)
[2025-12-08 14:15:18.163][000000022.470] I/user.exmodbus_test 开始写入从站 2 保持寄存器 0-1 的值,寄存器 0 数值为 123 ,寄存器 1 数值为 456
[2025-12-08 14:15:18.177][000000022.486] I/user.exmodbus_test 成功写入从站 2 保持寄存器 0-1 的值
[2025-12-08 14:15:20.178][000000024.487] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 14:15:20.207][000000024.503] I/user.exmodbus_test 成功读取到从站 1 保持寄存器 0-1 的值,寄存器 0 数值为 0 ,寄存器 1 数值为 0
[2025-12-08 14:15:22.197][000000026.504] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 14:15:22.228][000000026.519] I/user.exmodbus_test 成功读取到从站 1 保持寄存器 0-1 的值,寄存器 0 数值为 0 ,寄存器 1 数值为 0
[2025-12-08 14:15:22.231][000000026.520] I/user.exmodbus_test 开始写入从站 2 保持寄存器 0-1 的值,寄存器 0 数值为 123 ,寄存器 1 数值为 456
[2025-12-08 14:15:22.235][000000026.534] I/user.exmodbus_test 成功写入从站 2 保持寄存器 0-1 的值
[2025-12-08 14:15:24.224][000000028.534] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 14:15:24.255][000000028.550] I/user.exmodbus_test 成功读取到从站 1 保持寄存器 0-1 的值,寄存器 0 数值为 0 ,寄存器 1 数值为 0
[2025-12-08 14:15:26.246][000000030.551] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 14:15:26.257][000000030.569] I/user.exmodbus_test 成功读取到从站 1 保持寄存器 0-1 的值,寄存器 0 数值为 0 ,寄存器 1 数值为 0
[2025-12-08 14:15:26.265][000000030.570] I/user.exmodbus_test 开始写入从站 2 保持寄存器 0-1 的值,寄存器 0 数值为 123 ,寄存器 1 数值为 456
[2025-12-08 14:15:26.275][000000030.583] I/user.exmodbus_test 成功写入从站 2 保持寄存器 0-1 的值
[2025-12-08 14:15:28.284][000000032.584] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 14:15:28.289][000000032.598] I/user.exmodbus_test 成功读取到从站 1 保持寄存器 0-1 的值,寄存器 0 数值为 0 ,寄存器 1 数值为 0
[2025-12-08 14:15:30.292][000000034.599] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 14:15:30.309][000000034.614] I/user.exmodbus_test 成功读取到从站 1 保持寄存器 0-1 的值,寄存器 0 数值为 0 ,寄存器 1 数值为 0
[2025-12-08 14:15:30.322][000000034.615] I/user.exmodbus_test 开始写入从站 2 保持寄存器 0-1 的值,寄存器 0 数值为 123 ,寄存器 1 数值为 456
[2025-12-08 14:15:30.334][000000034.634] I/user.exmodbus_test 成功写入从站 2 保持寄存器 0-1 的值

7、如下图所示,鼠标右键点击 “通道” 下方的按钮,当我们把摩尔信使上由上位机与 Air8000 之间的串口通道关闭后,此时 Air8000 在发送请求时便会收不到响应,Luatools 工具上显示的日志如下:

[2025-12-08 14:14:56.481][000000000.427] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 14:14:57.124][000000001.433] I/user.exmodbus_test 未收到从站 1 的响应(超时)
[2025-12-08 14:14:57.128][000000001.433] I/user.exmodbus_test 开始写入从站 2 保持寄存器 0-1 的值,寄存器 0 数值为 123 ,寄存器 1 数值为 456
[2025-12-08 14:14:58.135][000000002.437] I/user.exmodbus_test 未收到从站 2 的响应(超时)

8、如下图所示,鼠标右键点击 “通道” 下方的按钮,当我们把摩尔信使上由上位机与 Air8000 之间的串口通道打开后,此时 Air8000 在发送请求时便会接收到响应,Luatools 工具与摩尔信使上显示的日志如下:

[2025-12-08 14:15:18.163][000000022.470] I/user.exmodbus_test 开始写入从站 2 保持寄存器 0-1 的值,寄存器 0 数值为 123 ,寄存器 1 数值为 456
[2025-12-08 14:15:18.177][000000022.486] I/user.exmodbus_test 成功写入从站 2 保持寄存器 0-1 的值
[2025-12-08 14:15:20.178][000000024.487] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 14:15:20.207][000000024.503] I/user.exmodbus_test 成功读取到从站 1 保持寄存器 0-1 的值,寄存器 0 数值为 0 ,寄存器 1 数值为 0

9、关于 Air8000 执行读取和写入请求后,摩尔信使上位机的数值变化如下图所示:

RTU 主站应用模块(原始帧方式,对应 raw_frame.lua)

1、搭建硬件环境

  • 将 USB-RS485 串口板与 Air8000 开发板进行连接
  • 将 USB-RS485 串口板 与 Air8000 开发板的 USB 端同时接在电脑上
  • 参考图见 演示硬件环境

2、在摩尔信使上配置模拟 RTU 从站设备环境

  • 点击左上角的 “通道管理”按钮,在 “通道管理” 窗口选择对应的串口(USB-RS485 串口板与 Air8000 开发板进行 485 通信时的端口),点击对应串口后面的 “配置” 按钮,在 “串口参数配置” 窗口配置串口参数(要求与代码中调用 exmodbus.create 接口时填入的配置参数一致),操作流程图如下:

  • 点击左上角的 “添加设备”按钮,在 “添加设备” 窗口对通信设备参数进行配置,配置好后点击 “添加” 按钮,左侧栏即为添加后的效果,操作流程图如下:

  • 点击左侧的第一个从站(我这里显示为 “COM36-001”),点击中上部分的 “新增数据” 按钮,在 “新增数据配置” 窗口将 “数据条数” 、“区块” 、“起始数据地址” 按照下图中所示进行配置,最后点击 “确定” 按钮,此时便成功新增保持寄存器 0 和 保持寄存器 1,操作流程图如下:

  • 点击左侧的第二个从站(我这里显示为 “COM36-002”),点击中上部分的 “新增数据” 按钮,在 “新增数据配置” 窗口将 “数据条数” 、“区块” 、“起始数据地址” 按照下图中所示进行配置,最后点击 “确定” 按钮,此时便成功新增保持寄存器 0 和 保持寄存器 1,操作流程图如下:

  • 此时在摩尔信使上的配置操作已经完成,如果需要在摩尔信使上查看报文,那么操作流程图如下:

3、调整软件代码

  • 打开 require "raw_frame" ,注释掉 require "param_field" 和 require "temp_hum_sensor",操作流程图如下:

4、打开 Luatools 工具,根据要求烧录本次所需要的内核固件和脚本代码

5、烧录成功后,自动开机运行

6、开机运行后 Luatools 工具上记录的日志如下:

[2025-12-08 15:14:13.691][000000000.703] I/user.main RTU_MASTER 001.000.000
[2025-12-08 15:14:13.695][000000000.736] Uart_ChangeBR 1338:uart1, 115200 115203 26000000 3611
[2025-12-08 15:14:13.699][000000000.737] I/user.exmodbus 串口 1 初始化成功,波特率 115200
[2025-12-08 15:14:13.702][000000000.737] I/user.exmodbus_test rtu_master 创建成功
[2025-12-08 15:14:13.706][000000000.738] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 15:14:14.595][000000001.743] I/user.exmodbus_test 未收到从站 1 的响应(超时)
[2025-12-08 15:14:14.600][000000001.743] I/user.exmodbus_test 开始写入从站 2 保持寄存器 0-1 的值
[2025-12-08 15:14:15.602][000000002.747] I/user.exmodbus_test 未收到从站 2 的响应(超时)
[2025-12-08 15:14:17.591][000000004.747] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 15:14:18.591][000000005.750] I/user.exmodbus_test 未收到从站 1 的响应(超时)
[2025-12-08 15:14:20.591][000000007.750] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 15:14:21.602][000000008.754] I/user.exmodbus_test 未收到从站 1 的响应(超时)
[2025-12-08 15:14:21.611][000000008.754] I/user.exmodbus_test 开始写入从站 2 保持寄存器 0-1 的值
[2025-12-08 15:14:22.607][000000009.758] I/user.exmodbus_test 未收到从站 2 的响应(超时)
[2025-12-08 15:14:24.603][000000011.758] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 15:14:25.612][000000012.762] I/user.exmodbus_test 未收到从站 1 的响应(超时)
[2025-12-08 15:14:27.618][000000014.762] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 15:14:28.616][000000015.766] I/user.exmodbus_test 未收到从站 1 的响应(超时)
[2025-12-08 15:14:28.620][000000015.766] I/user.exmodbus_test 开始写入从站 2 保持寄存器 0-1 的值
[2025-12-08 15:14:29.623][000000016.770] I/user.exmodbus_test 未收到从站 2 的响应(超时)
[2025-12-08 15:14:31.615][000000018.770] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 15:14:31.646][000000018.790] I/user.exmodbus_test 成功读取到从站 1 保持寄存器 0-1 的值,寄存器 0 数值为 0 ,寄存器 1 数值为 0
[2025-12-08 15:14:33.633][000000020.790] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 15:14:33.651][000000020.808] I/user.exmodbus_test 成功读取到从站 1 保持寄存器 0-1 的值,寄存器 0 数值为 0 ,寄存器 1 数值为 0
[2025-12-08 15:14:33.656][000000020.808] I/user.exmodbus_test 开始写入从站 2 保持寄存器 0-1 的值
[2025-12-08 15:14:33.662][000000020.821] I/user.exmodbus_test 成功写入从站 2 保持寄存器 0-1
[2025-12-08 15:14:35.670][000000022.821] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 15:14:35.682][000000022.839] I/user.exmodbus_test 成功读取到从站 1 保持寄存器 0-1 的值,寄存器 0 数值为 0 ,寄存器 1 数值为 0
[2025-12-08 15:14:37.692][000000024.839] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 15:14:37.699][000000024.854] I/user.exmodbus_test 成功读取到从站 1 保持寄存器 0-1 的值,寄存器 0 数值为 0 ,寄存器 1 数值为 0
[2025-12-08 15:14:37.705][000000024.854] I/user.exmodbus_test 开始写入从站 2 保持寄存器 0-1 的值
[2025-12-08 15:14:37.716][000000024.870] I/user.exmodbus_test 成功写入从站 2 保持寄存器 0-1
[2025-12-08 15:14:39.717][000000026.870] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 15:14:39.748][000000026.887] I/user.exmodbus_test 成功读取到从站 1 保持寄存器 0-1 的值,寄存器 0 数值为 0 ,寄存器 1 数值为 0
[2025-12-08 15:14:41.737][000000028.887] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 15:14:41.753][000000028.902] I/user.exmodbus_test 成功读取到从站 1 保持寄存器 0-1 的值,寄存器 0 数值为 0 ,寄存器 1 数值为 0
[2025-12-08 15:14:41.755][000000028.902] I/user.exmodbus_test 开始写入从站 2 保持寄存器 0-1 的值
[2025-12-08 15:14:41.758][000000028.916] I/user.exmodbus_test 成功写入从站 2 保持寄存器 0-1
[2025-12-08 15:14:43.765][000000030.916] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 15:14:43.795][000000030.934] I/user.exmodbus_test 成功读取到从站 1 保持寄存器 0-1 的值,寄存器 0 数值为 0 ,寄存器 1 数值为 0
[2025-12-08 15:14:45.788][000000032.934] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 15:14:45.795][000000032.949] I/user.exmodbus_test 成功读取到从站 1 保持寄存器 0-1 的值,寄存器 0 数值为 0 ,寄存器 1 数值为 0
[2025-12-08 15:14:45.801][000000032.949] I/user.exmodbus_test 开始写入从站 2 保持寄存器 0-1 的值
[2025-12-08 15:14:45.812][000000032.964] I/user.exmodbus_test 成功写入从站 2 保持寄存器 0-1

7、如下图所示,鼠标右键点击 “通道” 下方的按钮,当我们把摩尔信使上由上位机与 Air8000 之间的串口通道关闭后,此时 Air8000 在发送请求时便会收不到响应,Luatools 工具上显示的日志如下:

[2025-12-08 15:14:13.706][000000000.738] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 15:14:14.595][000000001.743] I/user.exmodbus_test 未收到从站 1 的响应(超时)
[2025-12-08 15:14:14.600][000000001.743] I/user.exmodbus_test 开始写入从站 2 保持寄存器 0-1 的值
[2025-12-08 15:14:15.602][000000002.747] I/user.exmodbus_test 未收到从站 2 的响应(超时)

8、如下图所示,鼠标右键点击 “通道” 下方的按钮,当我们把摩尔信使上由上位机与 Air8000 之间的串口通道打开后,此时 Air8000 在发送请求时便会接收到响应,Luatools 工具与摩尔信使上显示的日志如下:

程序设计为每隔 2 秒执行一次读取,每隔 4 秒执行一次写入,在日志上呈现出现就是先执行两次读取再执行一次写入

[2025-12-08 15:14:31.615][000000018.770] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 15:14:31.646][000000018.790] I/user.exmodbus_test 成功读取到从站 1 保持寄存器 0-1 的值,寄存器 0 数值为 0 ,寄存器 1 数值为 0
[2025-12-08 15:14:33.633][000000020.790] I/user.exmodbus_test 开始读取从站 1 保持寄存器 0-1 的值
[2025-12-08 15:14:33.651][000000020.808] I/user.exmodbus_test 成功读取到从站 1 保持寄存器 0-1 的值,寄存器 0 数值为 0 ,寄存器 1 数值为 0
[2025-12-08 15:14:33.656][000000020.808] I/user.exmodbus_test 开始写入从站 2 保持寄存器 0-1 的值
[2025-12-08 15:14:33.662][000000020.821] I/user.exmodbus_test 成功写入从站 2 保持寄存器 0-1

9、关于 Air8000 执行读取和写入请求后,摩尔信使上位机的数值变化如下图所示:

485 温湿度传感器读取模块(对应 temp_hum_sensor.lua)

1、搭建硬件环境

  • 将气体浓度变送器(RS-485 版)的 '+' 和 '-' 与供电设备(稳压电源等)进行连接,供电范围 8V ~ 36V DC

  • 将气体浓度变送器(RS-485 版)与 Air8000 开发板进行连接

  • 将 Air8000 开发板的 USB 端接在电脑上

  • 参考图见 演示硬件环境

2、了解气体浓度变送器(RS-485 版)

  • 该变送器模块上电后默认输出数据,从站地址默认为 1,波特率默认为 9600
  • 温度传感器数值通过保持寄存器地址 0x001E 输出,输出数据为 16 位有符号整数(-0x7FFF ~ +0x7FFF),
    • 数据范围为 -40℃ ~ +85℃,分辨率为 0.1℃
    • 注:寄存器值为 235,实际温度值为 235 * 0.1 = 23.5
  • 湿度传感器对应保持寄存器地址 0x001F 输出,输出数据为 16 位无符号整数(0 ~ 0xFFFF)
    • 数据范围为 0%RH ~ 85%RH,分辨率为 0.1%RH
    • 注:寄存器值为 653,实际湿度值为 653 * 0.1 = 65.3

3、调整软件代码

  • 打开 require "temp_hum_sensor" ,注释掉 require "raw_frame" 和 require "param_field" ,操作流程图如下:

4、打开 Luatools 工具,根据要求烧录本次所需要的内核固件和脚本代码,为气体浓度变送器(RS-485 版)进行供电(提前通电也可以)

5、烧录成功后,自动开机运行

6、开机运行后 Luatools 工具上记录的日志如下:

[2025-12-09 22:11:43.077][000000000.588] I/user.main RTU_MASTER 001.000.000
[2025-12-09 22:11:43.092][000000000.620] Uart_ChangeBR 1338:uart1, 9600 9600 26000000 43333
[2025-12-09 22:11:43.101][000000000.621] I/user.exmodbus 串口 1 初始化成功,波特率 9600
[2025-12-09 22:11:43.112][000000000.621] I/user.temp_hum_sensor RTU 主站创建成功
[2025-12-09 22:11:43.123][000000000.622] I/user.temp_hum_sensor 开始读取温湿度传感器数据
[2025-12-09 22:11:43.138][000000000.724] I/user.temp_hum_sensor 读取成功,温度为 16.70000 ℃,湿度为 83.20000 %RH
[2025-12-09 22:11:43.154][000000002.724] I/user.temp_hum_sensor 开始读取温湿度传感器数据
[2025-12-09 22:11:43.166][000000002.761] I/user.temp_hum_sensor 读取成功,温度为 16.80000 ℃,湿度为 82.90000 %RH
[2025-12-09 22:11:43.172][000000004.761] I/user.temp_hum_sensor 开始读取温湿度传感器数据
[2025-12-09 22:11:43.178][000000004.793] I/user.temp_hum_sensor 读取成功,温度为 16.60000 ℃,湿度为 83.50000 %RH
[2025-12-09 22:11:43.388][000000006.794] I/user.temp_hum_sensor 开始读取温湿度传感器数据
[2025-12-09 22:11:43.399][000000006.828] I/user.temp_hum_sensor 读取成功,温度为 16.90000 ℃,湿度为 82.70000 %RH
[2025-12-09 22:11:45.096][000000008.828] I/user.temp_hum_sensor 开始读取温湿度传感器数据
[2025-12-09 22:11:45.128][000000008.858] I/user.temp_hum_sensor 读取成功,温度为 17.00000 ℃,湿度为 82.30000 %RH
[2025-12-09 22:11:47.116][000000010.858] I/user.temp_hum_sensor 开始读取温湿度传感器数据
[2025-12-09 22:11:47.148][000000010.890] I/user.temp_hum_sensor 读取成功,温度为 16.80000 ℃,湿度为 83.00000 %RH
[2025-12-09 22:11:49.156][000000012.890] I/user.temp_hum_sensor 开始读取温湿度传感器数据
[2025-12-09 22:11:49.188][000000012.920] I/user.temp_hum_sensor 读取成功,温度为 16.70000 ℃,湿度为 83.40000 %RH