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