采用旁路监听方法测试分析船用设备RS485通信故障
2019-12-10王美龙梁广润
王美龙 梁广润
摘 要:我司在码头设备调试中出现过发电机和机舱监测系统通信不畅的问题,通过使用笔记本电脑旁路监听方法,很快找到了通信不畅的原因及解决方法。旁路监听适合船用设备RS485通信的故障测试和问题分析,可以清楚地看到通信总线上数据流,方便查找和判断问题。
关键词:MODBUS RTU模式;MODBUS ASCII模式;RS485组网通信
中图分类号:U665.11 文献标识码:A
Analysis of RS485 Communication Fault of Marine Equipment by Parallel Monitoring
WANG Meilong, LIANG Guangrun
( Jiangmen Nanyang Ship Engineering Co., Ltd. Jiangmen 529145 )
Abstract: In the equipment debugging of mooring test, the RS485 communication fault between generator and engine room monitoring system occurred. Through parallel monitoring by connecting a notebook computer, the cause for the fault was found and the problem was solved. Parallel Monitoring of communication is suitable for debugging and problem analysis of RS485 communication of marine equipment. It is easy to find and judge the problem by clearly seeing the data flow on the communication bus.
Key words: MODBUS RTU mod; MODBUS ASCII mode; RS485 network communication
1 概述
RS485通信在船舶设备上广泛使用,如机舱监测数据采集、航行数据记录仪、子母钟系统、主机遥控系统、通信导航设备、压载水管理系统、阀门遥控及液位遥测系统等。船舶设备间数据使用RS485通信有很多优点:RS485收发器采用平衡发送和差分接收,具有抑制共模干扰能力,加上收发器具有高灵敏度,能检测到低达200 mV的电压,可靠通信传输距离可达千米以上;RS485通信只需一根2芯双绞屏蔽电缆,简单可靠且容易调试分析,通信速率符合船舶数据通信要求,很适用于设备间通信使用。其缺点是调试过程需要对RS485通信原理和数据帧有相当了解的专业工程师。我司32 000 t系列散货船出现过一次通信数据不通的情况,我们通过使用笔记本电脑旁路监听方法很快发现并解决了问题。本文介绍采用此方法测试并解决问题的过程,供大家参考。
2 RS485通信故障现象
32 000 t系列散货船发电机和机舱监测系统通信使用RS485连接,前六艘船机舱监测系统都可以顺利接受到发电机的数据,但第七艘船,由于机舱监测系统更换了厂家和设备型号,虽然新的机舱监测系统也交换了RS485通信的协议,使用标准的MODBUS协议,每个字段定义都和以前的船一样,但当设备调试时机舱监测系统界面始终没有收到发电机数据,三台发电机都同样没有数据发送到机舱监测系统。
3 RS485通信故障分析
發电机型号与前序船一样,前六艘船通信都正常,如果发电机有故障应该不会三台发电机同时有故障,故发电机通信应该是没有问题的。而机舱监测系统服务工程师多次独立测试过机舱监测RS485通信也都正常,那么问题出在哪里?此时我想到以前在仪表行业产品设计时用到的RS485通信旁路监听方法可以在这里试一试,旁路监听可以清楚地观察到主、从设备双方的每个通信数据的交流。
4 RS485通信旁路监听
RS485通信为主从模式,可以点对点通信,也可以组成总线网通信,组网通信可以接收100多个站点,每个从站有不一样的地址。在组网通信中,同时只能有一个站点发送数据,主站问询、地址匹配的从站应答,如图1所示。
利用RS485的组网通信功能,用笔记本电脑作为另外一个从站旁听监测主站与从站的通信数据,旁听的笔记本电脑不要主动发送数据,以免干扰正常通信;笔记本电脑需要配置一个USB到RS485的转换接头,接头插上电脑USB口后,电脑的操作系统会为其自动分配串口号,这样RS485口就可以在笔记本电脑上作为一般的串口操作。其连接方式如图2所示,电脑上再拷贝一个通用的串口测试工具就可以使用了;在笔记本电脑上串口测试工具的数据接收区,可以清楚地看到总线上的主、从站发送所有的数据交流。
5 测试过程及效果
首先,我们在发电机与机舱监测的RS485通信线路中按上述方法接上笔记本电脑的RS485接口,以及按设备资料中通信协议设置好串口;选择串口为笔记本电脑USB口自动分配的串口号、波特率9600、数据位8、无效验、1个停止位;打开串口,机舱监测系统作为通信主站,只要机舱监测系统打开,电脑上就可以看到机舱监测发送给发电机的数据帧:010340020014A6
如果没有收到发电机数据,是否发电机通信有故障?由于码头还停有一艘前序船没有交付,其机舱监测系统界面可以正常显示发电机的各项数据,这两艘船发电机是一样的,可以去旁听一下前序船的通信数据情况。我们将笔记本电脑拿到前序船,同样按图2将笔记本RS485转换头并联接上发电机和机舱监测系统的RS485通信口。终于发现了数据的不同:在前序船上串口测试工具接收数据显示区域使用字符模式时数据为乱码,但是使用十六进制模式可以清楚地观察到双方正确的通信数据:
机舱监测发送数据:01 03 40 02 00 14 F1 C5
发电机应答数据:01 03 28 00 00 FF FF 00 00 00 00 00 00 00 00 00 00 01 6B 01 6B 01 6E 00 28 00 00 00 00 00 00 9E C9
通过测试,很明显看到两条船RS485通信使用的MODBUS模式不一样,前序船通信数据都是十六进制数据帧,使用的是MODBUS RTU模式;新调试船上机舱监测系统发出的是冒号开头,自动回车换行的字符型数据帧是MODBUS ASCII模式数据,而发电机协议选用的是RTU模式,所以发电机没有反应。
在MODBUS协议中,RTU模式和ASCII模式表示的信息和字段定义完全一样,只是信息的表示方法不一样:RTU模式全部使用十六进制数据,每个数据帧之间有不少于3.5字节传送时间的间隔,使用CRC效验;ASCII模式是将RTU模式中从第一个地址字节到CRC效验字节之前的每个字节的十六进制数据用两个字节的ASCII码表示,例如十六进制数6B表示成字符6和字符B两个ASCII码字节为36、42。增加冒号作为帧起始符,换行回车作为帧结束符,改用LRC效验(补码效验)即可;在测试工具数据显示区域,RTU通信数据只有用十六进制模式显示才能看到通信数据,而ASCII模式可以用字符模式显示字符,也可以用十六进制模式显示字符的ASCII码。
发现了问题所在,解决问题的方法有两个:第一个方法是机舱监测系统修改程序,因为发电机使用的是MODBUS RTU模式,机舱监测系统也需改用MODBUS RTU模式;第二个方法是发电机改用MODBUS ASCII模式。通过核查发电机通信资料,发电机通信协议两种模式都可以使用,有一位拨码开关可以选择。于是,现场找到发电机电路板上拨码开关的模式选择位,根据资料说明改选为ASCII模式。这样机舱监测和发电机双方都选用MODBUS ASCII模式通信,重新旁听测试,清楚的观察到了双方通信数据,按字符模式显示为:
机舱监测发送数据为::010340020014A6
发电机应答数据为::0103280000FFFF00000000000000000000016B016B016E002800000000000086
若按十六進制模式显示,则显示为这些字符的ASCII码:
机舱监测发送数据为:3A 30 31 30 33 34 30 30 32 30 30 31 34 41 46 0D 0A
发电机应答数据位:3A 30 31 30 33 32 38 30 30 30 30 46 46 46 46 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31 36 42 30 31 36 42 30 31 36 45 30 30 32 38 30 30 30 30 30 30 30 30 30 30 30 30 38 36 0D 0A
其中:3A为冒号的ASCII码,0D 0A为换行键和回车键的ASCII码。在字符模式中表现为换行回车操作,这是MODBUS ASCII模式数据帧的首、尾标示。
这时,机舱监测系统界面上也看到了此发电机的各项数据,这个通信问题得到了解决。
但是,在调试第二、三台发电机通信时,出现了新的问题:机舱监测系统界面还是收不到这两台发电机的数据。为此,用笔记本电脑旁听测试机舱监测系统对第二、三台发电机通信,同样只监测到机舱监测系统发送的数据,没有发电机的应答数据,两边都是选择的ASCII模式,都是一样的发电机和机舱监测系统。用同样的方法旁听测试对比前序船,发现由于前序船通信时三个发电机使用了不同的通信地址,分别为01、02、03。发电机出厂时三台发电机设置的地址不同,但新的机舱监测系统使用了三个相互独立的RS485接口,都使用01作为通信地址,所以二、三号发电机因地址不匹配没有应答数据。对此,我们在发电机资料中找到了地址选择方法,在电路板上找到地址设置拨码开关,将这两台发电机通信地址都改为01, 这样三台发电机通信都正常了,机舱监测系统的界面上也看到了三台发电机的各项数据。
6 结束语
本次发电机和机舱监测系统RS485通信故障采用笔记本电脑旁听测试方法,很快找到了问题所在,没有依赖设备厂家服务工程师。事实证明,船舶设备间RS485通信都可以使用这种方式测试,并且笔记本电脑不仅可以旁听测试,还可以根据设备资料上的通信协议模拟主站或者从站单独测试任何一个设备的R485通信是否正常,船厂调试人员可以不依赖设备厂家自己调试各种设备的RS485通信。
参考文献
[1] GB/T 25919.1 -2010. MODBUS测试规范