Modbus RTU偶发CRC错误不等于CRC算法错。面试时应先分层:RS-485物理层、终端与偏置、收发方向、帧间隔、缓冲区与CRC计算范围。
排查顺序:先物理层,再协议层,再软件实现



90秒参考回答
“如果Modbus RTU偶发CRC错误,我先抓原始接收帧,不直接认为CRC算法有问题。第一层看RS-485:总线是不是菊链、末端是否正确终端、偏置是否合理、A/B有没有明显反射或共模超范围;第二层看收发器DE/RE切换,尤其最后一个停止位发完之前不能过早关闭发送;第三层看RTU帧间隔和串口接收逻辑,避免因为任务调度、DMA或中断延迟把两帧粘在一起或拆开;最后才查CRC计算的起止位置和低高字节顺序。这样能先判断是‘数据传输错’还是‘软件判断错’。”
面试官常追问:3.5个字符时间是干什么的?
Modbus RTU依靠静默时间区分帧边界。回答时不用死背所有毫秒数,但要说明:帧内不能出现过长空隙,帧与帧之间要有足够静默间隔。在高波特率下,工程实现还应参考协议规范对固定定时的建议,而不是简单用一个“万能延时”。
A:不是。典型总线终端应放在总线物理两端,所有节点都加会导致负载过重。实际还要结合线缆特性阻抗与拓扑。
A:支路形成阻抗不连续和反射点,波特率越高、线越长越明显。
A:记录错误帧原始字节、时间戳、UART状态、收发方向状态和重试次数,比只打一个“CRC ERROR”日志有效得多。
失分回答:“CRC错就重新算一遍,或者多重试几次。”——重试可以提高系统容错,但不能替代根因定位。

扫码关注





























