跳转到内容

Arduino Modbus RTU 数据采集站提示词范例

接手当前 Arduino Mega 2560 工业采集站。控制器通过独立硬件串口和 RS-485
收发器轮询三台 Modbus RTU 仪表,将有效数据按统一时间戳输出到 USB 串口,
单台设备掉线不能拖垮整个轮询周期。
1. 总线配置
控制板:Arduino Mega 2560
串口:Serial1,19200 baud,8N1
物理层:隔离型 RS-485 模块,DE/RE 由一个 GPIO 控制
设备 1:地址 1,温湿度仪表
设备 2:地址 2,压力变送器
设备 3:地址 3,直流电表
协议:Modbus RTU,主要使用 0x03 Read Holding Registers
轮询周期:每台设备每 1 秒至少更新一次
寄存器地址、长度、数据类型、字节/字序和缩放系数必须来自项目寄存器表。
没有寄存器表时只能验证链路,不能猜测测量值含义。
2. 采集行为
基于 ArduinoModbus 官方库或项目锁定版本实现非阻塞轮询状态机。
每次请求前切换 DE/RE,发送完成后等待最后一位真正移出 UART 再转接收,
并满足 RTU 帧间隔。单次响应超时 150ms,最多重试两次,随后跳到下一站。
逐帧校验地址、功能码、长度、异常码和 CRC。每个点位带 value、timestamp、
quality 和 error_code;超过两倍更新周期未成功读取时 quality 变为 STALE,
不得继续输出旧值冒充新采样。
USB 串口每秒输出一条结构稳定的 CSV 或 JSON Line,同时记录每个从站的
成功、超时、CRC 错误、异常响应和连续失败次数。一个从站恢复后自动回到
正常轮询,但不重放离线期间的虚构数据。
3. 工程边界
- 不得在未知寄存器上执行写操作,不得使用广播写入;
- 不得用 delay 堵塞整个轮询周期等待单台设备;
- 不得忽略 CRC、异常响应或静默修改字节序以得到“看起来合理”的数值;
- 不得在总线中间随意增加 120Ω 终端,终端只允许位于物理两端;
- 没有示波器/分析仪时不得确认偏置、反射和 A/B 极性;
- 不得把 RS-485 A/B 直接连接到 Arduino TTL 串口引脚。
4. 验收
分别制造单站断电、CRC 错误、错误地址、慢响应和全部在线场景。
连续运行 8 小时,每站至少完成 10,000 次轮询;统计成功率、P95 响应时间、
最大轮询周期、CRC 错误和恢复时间。单站断电时另外两站更新周期不得超过
1.5 秒,恢复后 3 个周期内 quality 回到 GOOD。
交付寄存器映射、轮询状态机、DE/RE 时序、原始帧证据、8 小时统计和
仍需现场确认的终端、偏置、隔离与接地条件。