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