如何将 MODBUS RTU 数据记录到 MySQL 数据库
轮询 MODBUS RTU 串口设备并将寄存器数据直接导出到 MySQL 数据库的完整指南。
1. 协议配置:MODBUS RTU
通信类型: 主动轮询(RS485/COM上的主站/从站)
由于MODBUS以二进制格式传输数据,解析器必须提取特定的保持寄存器(例如40001)或输入寄存器。如果您的传感器使用32位浮点数,请配置解析器读取两个相邻的16位寄存器,并应用正确的字节交换(字节序)来重建浮点数。
应用此基础配置进行串行连接:
{
"port": "COM3",
"baud_rate": 9600,
"data_bits": 8,
"stop_bits": 1,
"parity": "none",
"protocol": "modbus_rtu_serial",
"poll_interval_ms": 1000
}
用于查询和解析数据的MODBUS RTU插件选择

MODBUS RTU查询队列:用于读取不同寄存器的自定义配置
准备好将 MODBUS RTU 连接到 MySQL 了吗?
2. 数据库设置:MySQL
您需要在运行 Data Logger 的计算机上安装 MySQL Connector/ODBC。创建一个指向 MySQL 服务器实例的系统 DSN。
使用以下 SQL 脚本创建目标表。 我们建议使用 InnoDB 引擎来处理高频率并发插入,而无需锁定表。
CREATE TABLE sensor_data ( id INT AUTO_INCREMENT PRIMARY KEY, log_timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, device_id VARCHAR(50), register_value FLOAT ) ENGINE=InnoDB;

用于导出数据的 MySQL 插件。

MySQL 数据库连接设置。

带有自定义参数的 INSERT SQL 语句队列。
3. 协议特定故障排除
- 超时或CRC错误: 与TCP不同,串行MODBUS RTU依赖于严格的时序。请确认RS485 A/B导线未反接,并且软件中的波特率和设备ID与从站设备完全匹配。
- 设备返回“非法地址”错误代码: 请尝试在MODBUS请求中使用功能码3而非功能码4。否则,请确认您使用的是正确的寄存器地址。请尝试指定绝对偏移量(而非逻辑地址如40001)。
- 我有多个值想要导出到一行数据中。但现在记录器每行只写一个值: 您需要在MODBUS插件设置中启用“一次性导出所有数据”选项。
4. 数据库特定故障排除
- MySQL 服务器已断开连接: 如果您的串行设备在一夜之间处于空闲状态,MySQL 将断开连接。在 Data Logger 的 ODBC 导出模块中启用「保持连接活跃」设置。
- 如何为我的设备插入或更新数据行?: 您可以在我们的「SQL Database Pro」插件中使用任何 SQL 查询。在 MySQL 中,您可以轻松执行以下 SQL:「INSERT INTO ....... ON DUPLICATE KEY .... UPDATE ....」。
- 我想将每个设备的数据写入不同的表。如何做到?: 在「SQL Database Pro」插件中,您可以在 SQL 中使用占位符。例如「INSERT INTO SerialData%DEVICE_ID% (....)」。在执行 SQL 之前,记录器将 %DEVICE_ID% 替换为解析数据中的相应值,实际目标表将有所不同(SerialData1、SerialData2 等)。