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