外部设备对接记录一

外部设备对接记录之一

  • 背景
  • 现象
  • 分析现象

背景

OpenTCS 运行小车需要对接电梯,采用 Modbus 转 485 控制器设备进行梯控对接,使用一段代码执行心跳检测时,会发生自动打开控制器的指示灯现象(指示灯原本是通过 Socket 发送特定指令开启和关闭),两份代码分别如下
1.Socket Client ,socket 发送特定命令开启指示灯
2.基于Spring Boot实现的 modbus 心跳通信
https://github.com/yoloyl/modbusHb

使用工具
Modbus 转485控制器,串口连接设备

现象

正常现象
基于Spring Boot实现的 modbus 心跳通信,实时检测控制器是否在线,若在线返回连接成功,否则返回连接失败

异常现象描述
当物理电脑同时通过网线连接 Modbus 转 485 设备,串口连接设备工具插入电脑 USB 接口(同时另一端接入控制器的AB,作为将 Modbus 协议数据转为 485 通信),启动 Spring Boot的 modbus 心跳通信应用程序,几分钟后,Modbus 转 485 设备指示灯 DO1 和 DO2 同时亮起

分析现象

1.首次怀疑定时检测心跳程序会发送报文走串口设备,导致指示灯异常打开,通过使用串口监视工具,监视工具在指示灯亮起时未读取到命令数据。
2.经过分析,有可能是通过网线,数据经网络报文传输,导致设备灯异常亮起
于是通过 WireShark 抓包工具实时监测心跳检测应用启动发送过程
外部设备对接记录一_第1张图片
结果如上,当指示灯亮起时,wireshark 抓到一段含有 data 的数据包,将如上数据转存到本地,通过串口调试工具,发送保存下来的文件,果然,设备指示灯会打开
外部设备对接记录一_第2张图片
经过咨询设备供应商,该段报文为不完整的 RTU 数据,也即是说发出去一条 Modbus RTU 的数据,被设备识别并响应(打开指示灯)
发现最终原因是设备可以接收 Modbus RTU 的指令,且与心跳检测程序的数据包重合了部分
外部设备对接记录一_第3张图片

你可能感兴趣的:(OpenTCS,5.4,网络)