王美龍 梁廣潤


摘? ? 要:我司在碼頭設備調試中出現過發電機和機艙監測系統通信不暢的問題,通過使用筆記本電腦旁路監聽方法,很快找到了通信不暢的原因及解決方法。旁路監聽適合船用設備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測試規范