问题现象:
现场反馈,modbus网关无法正确读取就地设备的温度信息。使用PC连接就地设备可以正常读取。
问题调查:
拿到末端设备后,故障现象可重复,不过使用PC的USB转485适配器也无法正常读取数据。
如下图:通过示波器查看AB线上面的通讯波形,可以看到发送和应答波形。不过发送和应答数据之间的间隔非常短,展开后只有大约100us,因为使用的波特率是9600bps,1bit的传输时间大约100us。
初步断定是末端设备的应答时间不符合要求,应答太快造成的。
可是现场反馈,使用其他品牌的网关可正常连接末端设备。然后又继续调查,查看485隔离芯片内部靠近cpu端的RXD上面的波形,看是否和AB线上面一致。如下图:黄色为内部RXD的波形,绿色为AB线波形。
可以看到黄色探针能够测量到接收到的数据。不过有一个现象,在网关发送轮询数据时,RXD的电平是拉低状态。不知道这个现象是否正常,继续追踪这个问题,把RXD的波形展开,如下图:
可以看到RXD的波形在发送数据和接收数据中间有一个极短的上升时间,大约200ns。紧跟着后面就开始接收数据。在串口起始位开始要有一段高电平时间,可能和这个高电平时间太短有关系。RXD的波形为何在发送时,被拉低也不明原因。检查驱动,对RXD进行内部上拉后,可以正常接收到数据了。
问题总结:
经过掉调查,可以认为,是由于在串口发送时,RXD被拉低,造成对接收的串口数据,传过来时,没有正确识别起始位,造成的。应该在起始位前有一段足够长的高电平。之前没有发现是由于发送和应答之间按照modbus要求,最少要满足3.5个字符的时间间隔。
而此次的中断设备,应答速度极快,刚接收完马上就应答数据,造成modbus主设备没有正确接收数据。