可靠性試驗(yàn)室里,恒溫恒濕箱、高低溫試驗(yàn)箱的控制器(儀表)需要通過RS485把溫濕度數(shù)據(jù)上傳到上位機(jī)軟件,實(shí)現(xiàn)程序下發(fā)、數(shù)據(jù)記錄和遠(yuǎn)程監(jiān)控。但現(xiàn)場用得最多的不是"一插就通",而是折騰半天連不上——上位機(jī)軟件報(bào)"通訊超時(shí)""無響應(yīng)""CRC校驗(yàn)錯誤"。這種問題十次有八次出在下面幾個環(huán)節(jié),按順序拆,基本都能解決。
一、先確認(rèn)物理層:線有沒有接對
RS485通訊只需要兩根線:A和B(有的儀表標(biāo)為D+和D-)。最常見的問題是接反了——A接了B,B接了A。表現(xiàn)就是上位機(jī)讀不到數(shù)據(jù),通訊狀態(tài)燈不閃。處理方法是把兩根線對調(diào),對調(diào)后如果立刻有數(shù)據(jù)返回,說明就是極性反了。
另一個高頻問題是用了普通電線代替屏蔽雙絞線。RS485雖然抗干擾能力比RS232強(qiáng),但在實(shí)驗(yàn)室環(huán)境里變頻器、壓縮機(jī)啟停會產(chǎn)生大量電磁干擾,普通電線沒有屏蔽層,信號傳不遠(yuǎn)就失真。必須用帶屏蔽層的雙絞線,屏蔽層單端接地(一般接在控制柜端,上位機(jī)端懸空,避免地環(huán)路)。
還有接線端子松動。實(shí)驗(yàn)室設(shè)備長期振動,端子螺絲慢慢松脫,接觸電阻變大,信號時(shí)斷時(shí)續(xù)。用螺絲刀重新緊固所有通訊端子,這個動作看似簡單,但能解決至少兩成的"間歇性掉線"問題。
二、檢查參數(shù)配置:兩邊必須對得上
物理層沒問題,下一步看通訊參數(shù)。儀表和上位機(jī)必須保證以下四項(xiàng)一致,有一個不對就連不上:
波特率:常見9600、19200、38400。儀表菜單里查,上位機(jī)軟件里設(shè)成一樣的。
數(shù)據(jù)位:一般是8位。
停止位:一般是1位。
校驗(yàn)位:無校驗(yàn)(None)、奇校驗(yàn)(Odd)、偶校驗(yàn)(Even),儀表說明書寫的是哪種就用哪種。
很多上位機(jī)軟件默認(rèn)參數(shù)是9600-8-N-1(9600波特率、8數(shù)據(jù)位、無校驗(yàn)、1停止位),如果儀表側(cè)設(shè)的是19200-8-E-1,兩邊就對不上。進(jìn)儀表通訊參數(shù)菜單逐項(xiàng)核對,改一致后重新連接。
還有一個容易忽略的:儀表站號(從站地址)。RS485是總線型網(wǎng)絡(luò),一條線上掛多臺設(shè)備,每臺必須有固定的站號。如果兩臺設(shè)備站號相同,上位機(jī)發(fā)查詢幀后兩臺同時(shí)回復(fù),數(shù)據(jù)幀碰撞,通訊報(bào)錯。檢查每臺儀表的站號設(shè)置,確保不重復(fù),一般從1開始順序編號。
三、終端電阻:長距離通訊的關(guān)鍵
RS485標(biāo)準(zhǔn)規(guī)定,當(dāng)通訊距離超過50米或波特率較高時(shí),總線兩端需要加120歐姆終端電阻,用來匹配線路阻抗、消除信號反射。
現(xiàn)場常見兩種情況:一種是短距離(十幾米)沒加終端電阻,通訊基本正常,但偶爾丟包;另一種是長距離(上百米)也沒加,信號反射嚴(yán)重,數(shù)據(jù)大量出錯。處理方法是用萬用表測總線兩端A和B之間的電阻,正常應(yīng)該在120歐姆左右(如果兩端都加了終端電阻,并聯(lián)后是60歐姆)。沒有終端電阻就加一個120歐姆電阻在總線最遠(yuǎn)端,靠近上位機(jī)端的A和B之間也加一個。
注意:終端電阻不能加太多。如果一條總線上掛了十臺設(shè)備,只在最遠(yuǎn)和最近的兩端各加一個,中間的設(shè)備不要加,否則并聯(lián)電阻過小,驅(qū)動能力不夠反而通訊失敗。
四、接地與干擾:最隱蔽的坑
實(shí)驗(yàn)室里變頻器、壓縮機(jī)、加熱管都是大電流設(shè)備,啟停瞬間會產(chǎn)生強(qiáng)烈的電磁干擾。如果RS485屏蔽層兩端都接地,不同接地點(diǎn)之間存在電位差,屏蔽層里流過地環(huán)路電流,反而把干擾引入信號線。
正確的做法是屏蔽層單端接地:控制柜端接保護(hù)地,上位機(jī)端懸空或用絕緣膠帶包好。如果現(xiàn)場干擾特別嚴(yán)重,可以在通訊線上串共模扼流圈,或者在A、B線之間加TVS管做防雷防浪涌保護(hù)。
還有一個干擾源是通訊線和動力線走同一根線槽。強(qiáng)電產(chǎn)生的交變磁場會在通訊線上感應(yīng)出噪聲電壓,嚴(yán)重時(shí)直接淹沒有用信號。布線時(shí)必須把通訊線和動力線分開走線槽,交叉時(shí)垂直穿過,不能平行走線。
五、協(xié)議與幀格式:最后一道關(guān)
物理層和參數(shù)都沒問題,但上位機(jī)仍然讀不到數(shù)據(jù),就要看協(xié)議層了。儀表網(wǎng)后臺投稿的技術(shù)文章里,最常見的問題是用戶自己寫的Modbus輪詢程序幀格式不對。
比如功能碼03讀保持寄存器,發(fā)送幀是:站號+功能碼+起始地址高字節(jié)+起始地址低字節(jié)+寄存器數(shù)量高字節(jié)+寄存器數(shù)量低字節(jié)+CRC低字節(jié)+CRC高字節(jié)。很多用戶CRC校驗(yàn)算錯了,儀表收到幀后校驗(yàn)不通過直接丟棄,不回復(fù)。用串口調(diào)試助手抓包看一下發(fā)送和接收的十六進(jìn)制數(shù)據(jù),對照Modbus協(xié)議文檔逐項(xiàng)核對。
另外,不同品牌儀表的Modbus地址映射不一樣。有的儀表溫度設(shè)定值寄存器地址是40001,有的是0x0000,有的是0x1000。查儀表通訊協(xié)議手冊,確認(rèn)地址偏移量,不要憑經(jīng)驗(yàn)猜。
你在現(xiàn)場遇到過最離譜的通訊故障是什么?最后怎么查出來的?歡迎評論區(qū)交流。