Modbus通信无法正确接收应答的问题处理

问题现象:

现场反馈,modbus网关无法正确读取就地设备的温度信息。使用PC连接就地设备可以正常读取。

问题调查:

拿到末端设备后,故障现象可重复,不过使用PC的USB转485适配器也无法正常读取数据。

如下图:通过示波器查看AB线上面的通讯波形,可以看到发送和应答波形。不过发送和应答数据之间的间隔非常短,展开后只有大约100us,因为使用的波特率是9600bps,1bit的传输时间大约100us。

Modbus通信无法正确接收应答的问题处理_第1张图片初步断定是末端设备的应答时间不符合要求,应答太快造成的。

可是现场反馈,使用其他品牌的网关可正常连接末端设备。然后又继续调查,查看485隔离芯片内部靠近cpu端的RXD上面的波形,看是否和AB线上面一致。如下图:黄色为内部RXD的波形,绿色为AB线波形。

Modbus通信无法正确接收应答的问题处理_第2张图片可以看到黄色探针能够测量到接收到的数据。不过有一个现象,在网关发送轮询数据时,RXD的电平是拉低状态。不知道这个现象是否正常,继续追踪这个问题,把RXD的波形展开,如下图:Modbus通信无法正确接收应答的问题处理_第3张图片

可以看到RXD的波形在发送数据和接收数据中间有一个极短的上升时间,大约200ns。紧跟着后面就开始接收数据。在串口起始位开始要有一段高电平时间,可能和这个高电平时间太短有关系。RXD的波形为何在发送时,被拉低也不明原因。检查驱动,对RXD进行内部上拉后,可以正常接收到数据了。

问题总结:

经过调查,可以认为,这个问题是由于在串口发送时,RXD被拉低,当接收的串口数据传过来时,没有正确识别起始位,造成的。应该在起始位前有一段足够长的高电平。最少要满足3.5个字符的时间间隔。此次的终端设备,应答速度极快,刚接收完马上就应答数据,造成modbus主设备没有正确接收数据。

你可能感兴趣的:(网络,嵌入式,stm32)