王美龍 梁廣潤
摘? ? 要:我司在碼頭設(shè)備調(diào)試中出現(xiàn)過發(fā)電機和機艙監(jiān)測系統(tǒng)通信不暢的問題,通過使用筆記本電腦旁路監(jiān)聽方法,很快找到了通信不暢的原因及解決方法。旁路監(jiān)聽適合船用設(shè)備RS485通信的故障測試和問題分析,可以清楚地看到通信總線上數(shù)據(jù)流,方便查找和判斷問題。
關(guān)鍵詞:MODBUS RTU模式;MODBUS ASCII模式;RS485組網(wǎng)通信
中圖分類號: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通信在船舶設(shè)備上廣泛使用,如機艙監(jiān)測數(shù)據(jù)采集、航行數(shù)據(jù)記錄儀、子母鐘系統(tǒng)、主機遙控系統(tǒng)、通信導(dǎo)航設(shè)備、壓載水管理系統(tǒng)、閥門遙控及液位遙測系統(tǒng)等。船舶設(shè)備間數(shù)據(jù)使用RS485通信有很多優(yōu)點:RS485收發(fā)器采用平衡發(fā)送和差分接收,具有抑制共模干擾能力,加上收發(fā)器具有高靈敏度,能檢測到低達200 mV的電壓,可靠通信傳輸距離可達千米以上;RS485通信只需一根2芯雙絞屏蔽電纜,簡單可靠且容易調(diào)試分析,通信速率符合船舶數(shù)據(jù)通信要求,很適用于設(shè)備間通信使用。其缺點是調(diào)試過程需要對RS485通信原理和數(shù)據(jù)幀有相當了解的專業(yè)工程師。我司32 000 t系列散貨船出現(xiàn)過一次通信數(shù)據(jù)不通的情況,我們通過使用筆記本電腦旁路監(jiān)聽方法很快發(fā)現(xiàn)并解決了問題。本文介紹采用此方法測試并解決問題的過程,供大家參考。
2? ?RS485通信故障現(xiàn)象
32 000 t系列散貨船發(fā)電機和機艙監(jiān)測系統(tǒng)通信使用RS485連接,前六艘船機艙監(jiān)測系統(tǒng)都可以順利接受到發(fā)電機的數(shù)據(jù),但第七艘船,由于機艙監(jiān)測系統(tǒng)更換了廠家和設(shè)備型號,雖然新的機艙監(jiān)測系統(tǒng)也交換了RS485通信的協(xié)議,使用標準的MODBUS協(xié)議,每個字段定義都和以前的船一樣,但當設(shè)備調(diào)試時機艙監(jiān)測系統(tǒng)界面始終沒有收到發(fā)電機數(shù)據(jù),三臺發(fā)電機都同樣沒有數(shù)據(jù)發(fā)送到機艙監(jiān)測系統(tǒng)。
3? ?RS485通信故障分析
發(fā)電機型號與前序船一樣,前六艘船通信都正常,如果發(fā)電機有故障應(yīng)該不會三臺發(fā)電機同時有故障,故發(fā)電機通信應(yīng)該是沒有問題的。而機艙監(jiān)測系統(tǒng)服務(wù)工程師多次獨立測試過機艙監(jiān)測RS485通信也都正常,那么問題出在哪里?此時我想到以前在儀表行業(yè)產(chǎn)品設(shè)計時用到的RS485通信旁路監(jiān)聽方法可以在這里試一試,旁路監(jiān)聽可以清楚地觀察到主、從設(shè)備雙方的每個通信數(shù)據(jù)的交流。
4? ?RS485通信旁路監(jiān)聽
RS485通信為主從模式,可以點對點通信,也可以組成總線網(wǎng)通信,組網(wǎng)通信可以接收100多個站點,每個從站有不一樣的地址。在組網(wǎng)通信中,同時只能有一個站點發(fā)送數(shù)據(jù),主站問詢、地址匹配的從站應(yīng)答,如圖1所示。
利用RS485的組網(wǎng)通信功能,用筆記本電腦作為另外一個從站旁聽監(jiān)測主站與從站的通信數(shù)據(jù),旁聽的筆記本電腦不要主動發(fā)送數(shù)據(jù),以免干擾正常通信;筆記本電腦需要配置一個USB到RS485的轉(zhuǎn)換接頭,接頭插上電腦USB口后,電腦的操作系統(tǒng)會為其自動分配串口號,這樣RS485口就可以在筆記本電腦上作為一般的串口操作。其連接方式如圖2所示,電腦上再拷貝一個通用的串口測試工具就可以使用了;在筆記本電腦上串口測試工具的數(shù)據(jù)接收區(qū),可以清楚地看到總線上的主、從站發(fā)送所有的數(shù)據(jù)交流。
5? ?測試過程及效果
首先,我們在發(fā)電機與機艙監(jiān)測的RS485通信線路中按上述方法接上筆記本電腦的RS485接口,以及按設(shè)備資料中通信協(xié)議設(shè)置好串口;選擇串口為筆記本電腦USB口自動分配的串口號、波特率9600、數(shù)據(jù)位8、無效驗、1個停止位;打開串口,機艙監(jiān)測系統(tǒng)作為通信主站,只要機艙監(jiān)測系統(tǒng)打開,電腦上就可以看到機艙監(jiān)測發(fā)送給發(fā)電機的數(shù)據(jù)幀:010340020014A6
如果沒有收到發(fā)電機數(shù)據(jù),是否發(fā)電機通信有故障?由于碼頭還停有一艘前序船沒有交付,其機艙監(jiān)測系統(tǒng)界面可以正常顯示發(fā)電機的各項數(shù)據(jù),這兩艘船發(fā)電機是一樣的,可以去旁聽一下前序船的通信數(shù)據(jù)情況。我們將筆記本電腦拿到前序船,同樣按圖2將筆記本RS485轉(zhuǎn)換頭并聯(lián)接上發(fā)電機和機艙監(jiān)測系統(tǒng)的RS485通信口。終于發(fā)現(xiàn)了數(shù)據(jù)的不同:在前序船上串口測試工具接收數(shù)據(jù)顯示區(qū)域使用字符模式時數(shù)據(jù)為亂碼,但是使用十六進制模式可以清楚地觀察到雙方正確的通信數(shù)據(jù):
機艙監(jiān)測發(fā)送數(shù)據(jù):01 03 40 02 00 14 F1 C5
發(fā)電機應(yīng)答數(shù)據(jù):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模式不一樣,前序船通信數(shù)據(jù)都是十六進制數(shù)據(jù)幀,使用的是MODBUS RTU模式;新調(diào)試船上機艙監(jiān)測系統(tǒng)發(fā)出的是冒號開頭,自動回車換行的字符型數(shù)據(jù)幀是MODBUS ASCII模式數(shù)據(jù),而發(fā)電機協(xié)議選用的是RTU模式,所以發(fā)電機沒有反應(yīng)。
在MODBUS協(xié)議中,RTU模式和ASCII模式表示的信息和字段定義完全一樣,只是信息的表示方法不一樣:RTU模式全部使用十六進制數(shù)據(jù),每個數(shù)據(jù)幀之間有不少于3.5字節(jié)傳送時間的間隔,使用CRC效驗;ASCII模式是將RTU模式中從第一個地址字節(jié)到CRC效驗字節(jié)之前的每個字節(jié)的十六進制數(shù)據(jù)用兩個字節(jié)的ASCII碼表示,例如十六進制數(shù)6B表示成字符6和字符B兩個ASCII碼字節(jié)為36、42。增加冒號作為幀起始符,換行回車作為幀結(jié)束符,改用LRC效驗(補碼效驗)即可;在測試工具數(shù)據(jù)顯示區(qū)域,RTU通信數(shù)據(jù)只有用十六進制模式顯示才能看到通信數(shù)據(jù),而ASCII模式可以用字符模式顯示字符,也可以用十六進制模式顯示字符的ASCII碼。
發(fā)現(xiàn)了問題所在,解決問題的方法有兩個:第一個方法是機艙監(jiān)測系統(tǒng)修改程序,因為發(fā)電機使用的是MODBUS RTU模式,機艙監(jiān)測系統(tǒng)也需改用MODBUS RTU模式;第二個方法是發(fā)電機改用MODBUS ASCII模式。通過核查發(fā)電機通信資料,發(fā)電機通信協(xié)議兩種模式都可以使用,有一位撥碼開關(guān)可以選擇。于是,現(xiàn)場找到發(fā)電機電路板上撥碼開關(guān)的模式選擇位,根據(jù)資料說明改選為ASCII模式。這樣機艙監(jiān)測和發(fā)電機雙方都選用MODBUS ASCII模式通信,重新旁聽測試,清楚的觀察到了雙方通信數(shù)據(jù),按字符模式顯示為:
機艙監(jiān)測發(fā)送數(shù)據(jù)為::010340020014A6
發(fā)電機應(yīng)答數(shù)據(jù)為::0103280000FFFF00000000000000000000016B016B016E002800000000000086
若按十六進制模式顯示,則顯示為這些字符的ASCII碼:
機艙監(jiān)測發(fā)送數(shù)據(jù)為:3A 30 31 30 33 34 30 30 32 30 30 31 34 41 46 0D 0A
發(fā)電機應(yīng)答數(shù)據(jù)位: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碼。在字符模式中表現(xiàn)為換行回車操作,這是MODBUS ASCII模式數(shù)據(jù)幀的首、尾標示。
這時,機艙監(jiān)測系統(tǒng)界面上也看到了此發(fā)電機的各項數(shù)據(jù),這個通信問題得到了解決。
但是,在調(diào)試第二、三臺發(fā)電機通信時,出現(xiàn)了新的問題:機艙監(jiān)測系統(tǒng)界面還是收不到這兩臺發(fā)電機的數(shù)據(jù)。為此,用筆記本電腦旁聽測試機艙監(jiān)測系統(tǒng)對第二、三臺發(fā)電機通信,同樣只監(jiān)測到機艙監(jiān)測系統(tǒng)發(fā)送的數(shù)據(jù),沒有發(fā)電機的應(yīng)答數(shù)據(jù),兩邊都是選擇的ASCII模式,都是一樣的發(fā)電機和機艙監(jiān)測系統(tǒng)。用同樣的方法旁聽測試對比前序船,發(fā)現(xiàn)由于前序船通信時三個發(fā)電機使用了不同的通信地址,分別為01、02、03。發(fā)電機出廠時三臺發(fā)電機設(shè)置的地址不同,但新的機艙監(jiān)測系統(tǒng)使用了三個相互獨立的RS485接口,都使用01作為通信地址,所以二、三號發(fā)電機因地址不匹配沒有應(yīng)答數(shù)據(jù)。對此,我們在發(fā)電機資料中找到了地址選擇方法,在電路板上找到地址設(shè)置撥碼開關(guān),將這兩臺發(fā)電機通信地址都改為01, 這樣三臺發(fā)電機通信都正常了,機艙監(jiān)測系統(tǒng)的界面上也看到了三臺發(fā)電機的各項數(shù)據(jù)。
6? ?結(jié)束語
本次發(fā)電機和機艙監(jiān)測系統(tǒng)RS485通信故障采用筆記本電腦旁聽測試方法,很快找到了問題所在,沒有依賴設(shè)備廠家服務(wù)工程師。事實證明,船舶設(shè)備間RS485通信都可以使用這種方式測試,并且筆記本電腦不僅可以旁聽測試,還可以根據(jù)設(shè)備資料上的通信協(xié)議模擬主站或者從站單獨測試任何一個設(shè)備的R485通信是否正常,船廠調(diào)試人員可以不依賴設(shè)備廠家自己調(diào)試各種設(shè)備的RS485通信。
參考文獻
[1]? GB/T 25919.1 -2010. MODBUS測試規(guī)范