http://www.henanjusheng.com 2026-07-09 09:12 廣州市微嵌計(jì)算機(jī)科技有限公司
做工控的兄弟們應(yīng)該都有過(guò)這種經(jīng)歷——現(xiàn)場(chǎng)PLC突然連不上了,串口通信斷斷續(xù)續(xù),報(bào)文丟失,數(shù)據(jù)跳變。你檢查了線沒(méi)斷、電源沒(méi)掉、軟件沒(méi)改,但就是通信不上。
串口通信這個(gè)老技術(shù)用了幾十年了,按理說(shuō)應(yīng)該很成熟了吧?但恰恰因?yàn)?quot;老",它的問(wèn)題也最隱蔽。今天這篇文章就從頭到尾梳理一下,串口通信故障到底怎么排查。
## 第一層:物理層——先把線查明白
別笑,物理層的問(wèn)題占了串口通信故障的六成以上。
RS485是最常用的工業(yè)串口通信方式,兩根線A和B,差分信號(hào)傳輸。最容易出問(wèn)題的地方就這幾個(gè):
**接線反了。** A和B接反是最低級(jí)的錯(cuò)誤,但也是最常見(jiàn)的問(wèn)題。新裝設(shè)備第一次調(diào)試的時(shí)候,如果完全通信不上,第一件事就是檢查AB有沒(méi)有接反。有些廠家的端子標(biāo)識(shí)不統(tǒng)一,有的叫A/B,有的叫D+/D-,有的叫TX+/TX-,很容易搞混。
記住一個(gè)規(guī)律:RS485的A(D+)是正端,B(D-)是負(fù)端。不同設(shè)備廠家可能標(biāo)反,最靠譜的辦法是看手冊(cè)上的引腳定義,而不是看標(biāo)識(shí)。
**共地問(wèn)題。** RS485雖然用的是差分信號(hào),理論上來(lái)需要共地,但實(shí)際上當(dāng)不同設(shè)備供電來(lái)自不同電源時(shí),地電位差會(huì)導(dǎo)致通信異常。尤其是上位機(jī)和PLC不在同一個(gè)電控柜里的時(shí)候,這個(gè)問(wèn)題很常見(jiàn)。解決辦法是加一條地線把兩端的地連起來(lái),或者在兩端各加一個(gè)隔離器。
**終端電阻。** RS485總線長(zhǎng)度超過(guò)幾十米的時(shí)候,末端要接120歐姆的終端電阻,用來(lái)消除信號(hào)反射。但很多人不接,或者兩頭都接(只應(yīng)該接總線兩端各一個(gè))。結(jié)果就是通信距離稍微遠(yuǎn)一點(diǎn)就開(kāi)始丟包。
終端電阻的判斷方法:斷開(kāi)所有設(shè)備電源,用萬(wàn)用表量總線A和B之間的電阻。正常應(yīng)該是120歐姆(終端電阻并聯(lián)了多個(gè)設(shè)備,但終端電阻只在兩端各一個(gè),并聯(lián)后約為60歐姆)。如果量出來(lái)無(wú)窮大,說(shuō)明沒(méi)接終端電阻;如果是零或者很小的值,說(shuō)明線短路了。
**線材選擇。** RS485要用雙絞線,最好帶屏蔽。用普通平行線也能通,但距離一長(zhǎng)干擾就上來(lái)了。屏蔽層要單端接地,別兩端都接地,否則形成地環(huán)路反而引入干擾。
## 第二層:電氣層——電壓夠不夠
線接對(duì)了,信號(hào)也不一定對(duì)。
RS485的差分信號(hào)電壓,正常應(yīng)該在±1.5V到±5V之間(A和B之間的電壓差)。如果電壓太低,說(shuō)明信號(hào)衰減厲害或者驅(qū)動(dòng)能力不夠。
怎么量?示波器接在A和B上,看波形。正常應(yīng)該是方波,高電平1.5V以上,低電平-1.5V以下。如果波形是鋸齒狀、幅度很小,可能是線路太長(zhǎng)、分叉太多、或者設(shè)備輸出能力不夠。
沒(méi)有示波器的話,萬(wàn)用表也能做個(gè)粗略判斷。量A和B之間的直流電壓,正常應(yīng)該在1-2V左右(通信空閑時(shí)A比B高)。如果量出來(lái)0V,要么是線斷了,要么是設(shè)備沒(méi)電。
廣州微嵌的工業(yè)一體機(jī)COM口都做了隔離設(shè)計(jì),光電隔離1500V以上。這在實(shí)際使用中能避免大部分因?yàn)榈仉娢徊顚?dǎo)致的通信損壞。我們碰到過(guò)不少客戶,換了非隔離的工控機(jī)之后COM口頻繁燒毀,換回帶隔離的就好了。
## 第三層:參數(shù)層——配置對(duì)不對(duì)
物理和電氣都正常,通信還是不通,那就該查參數(shù)了。
串口通信有幾個(gè)核心參數(shù)必須兩端一致:
**波特率。** 9600是最常見(jiàn)的,也有用19200、38400、115400的。上位機(jī)和PLC的波特率必須一致,差一個(gè)都不行。這個(gè)最容易查,但也容易忽略——有些PLC的默認(rèn)波特率不是9600,比如有些西門(mén)子PLC默認(rèn)是187.5K,不查手冊(cè)你根本想不到。
**數(shù)據(jù)位/停止位/校驗(yàn)位。** 常見(jiàn)的是8-N-1(8位數(shù)據(jù)位,無(wú)校驗(yàn),1位停止位),但有些設(shè)備默認(rèn)是7-E-1或者8-E-1。校驗(yàn)位不一致的時(shí)候通信表現(xiàn)是:偶爾能收到數(shù)據(jù)但全是亂的,或者完全收不到。
**站號(hào)。** Modbus RTU協(xié)議里,每個(gè)從站有唯一的站號(hào)。如果兩個(gè)設(shè)備設(shè)了同一個(gè)站號(hào),總線會(huì)沖突,表現(xiàn)就是時(shí)通時(shí)斷。如果上位機(jī)查的站號(hào)和PLC實(shí)際設(shè)的不一樣,完全通信不上。
**超時(shí)設(shè)置。** 上位機(jī)發(fā)送請(qǐng)求后等待響應(yīng)的超時(shí)時(shí)間,不能設(shè)太短。波特率9600的時(shí)候,一個(gè)Modbus請(qǐng)求幀大概十幾毫秒發(fā)完,PLC處理+響應(yīng)一般在50-100毫秒。超時(shí)設(shè)100毫秒以下就太緊張了,網(wǎng)絡(luò)抖動(dòng)一下就超時(shí)。建議設(shè)300-500毫秒比較保險(xiǎn)。
## 第四層:協(xié)議層——報(bào)文對(duì)不對(duì)
參數(shù)全對(duì),還是通信異常,就該抓報(bào)文了。
**抓報(bào)文工具。** 串口調(diào)試助手是最基礎(chǔ)的,能手動(dòng)發(fā)Modbus幀看響應(yīng)。更專(zhuān)業(yè)的是用串口抓包工具,把總線上所有報(bào)文都錄下來(lái)分析。
**Modbus報(bào)文結(jié)構(gòu)。** RTU模式下,一幀報(bào)文的格式是:站號(hào)(1字節(jié)) + 功能碼(1字節(jié)) + 數(shù)據(jù)區(qū) + CRC校驗(yàn)(2字節(jié))。
常見(jiàn)的故障表現(xiàn)和對(duì)應(yīng)原因:
| 故障現(xiàn)象 | 可能原因 | 排查方向 |
|---------|---------|---------|
| 完全無(wú)響應(yīng) | 站號(hào)不對(duì)/波特率不對(duì)/線接反 | 查參數(shù)和接線 |
| 偶爾丟包 | 終端電阻缺失/干擾/超時(shí)太短 | 加終端電阻/查干擾源 |
| CRC校驗(yàn)錯(cuò)誤 | 線路干擾/波特率偏差 | 查線材和波特率精度 |
| 響應(yīng)數(shù)據(jù)全0 | 寄存器地址不對(duì)/PLC程序沒(méi)寫(xiě)數(shù)據(jù) | 查寄存器映射表 |
| 響應(yīng)異常碼83 | 非法功能碼 | 查PLC支持的功能碼 |
| 響應(yīng)異常碼84 | 非法數(shù)據(jù)地址 | 查寄存器地址是否超范圍 |
| 響應(yīng)異常碼86 | 設(shè)備忙 | 查詢頻率太快/PLC處理不過(guò)來(lái) |
**CRC校驗(yàn)。** 這是判斷通信質(zhì)量的關(guān)鍵指標(biāo)。如果CRC錯(cuò)誤率高,說(shuō)明線路質(zhì)量有問(wèn)題。不是干擾太強(qiáng)就是線路太長(zhǎng)或者線材太差。廣州微嵌的工控機(jī)COM口標(biāo)配TVS防浪涌,能一定程度抑制線路上的瞬態(tài)干擾,降低CRC錯(cuò)誤率。
## 第五層:環(huán)境層——干擾因素排查
有時(shí)候通信參數(shù)全對(duì),線路也沒(méi)問(wèn)題,但就是在特定時(shí)段或者特定條件下出故障。這時(shí)候要考慮環(huán)境因素了。
**變頻器干擾。** 這是現(xiàn)場(chǎng)最常見(jiàn)的干擾源。變頻器輸出的PWM波形含有大量高頻諧波,通過(guò)空間輻射和共地耦合干擾RS485總線。如果發(fā)現(xiàn)通信在變頻器啟動(dòng)時(shí)變差,停機(jī)時(shí)正常,基本就是變頻器干擾。
解決辦法:變頻器輸出端加磁環(huán)、RS485線用帶屏蔽的雙絞線且屏蔽層接地、變頻器和通信設(shè)備分相供電、必要時(shí)加信號(hào)隔離器。
**接地不良。** 工業(yè)現(xiàn)場(chǎng)的接地系統(tǒng)如果不規(guī)范,不同設(shè)備的"地"之間可能有幾伏甚至幾十伏的電位差。這個(gè)電位差直接反映在RS485的共模電壓上,超過(guò)-7V到+12V的范圍就會(huì)損壞收發(fā)器芯片。
**溫度影響。** 溫度太高會(huì)導(dǎo)致芯片特性漂移,通信時(shí)鐘偏差增大。如果發(fā)現(xiàn)夏天通信比冬天差,可能是設(shè)備散熱不行。這點(diǎn)選工控機(jī)的時(shí)候要注意,-10℃到60℃寬溫標(biāo)稱的設(shè)備在高溫下通信更穩(wěn)定,因?yàn)樗钠骷x型本身就考慮了溫度裕量。
## 一個(gè)實(shí)戰(zhàn)案例
之前有個(gè)客戶,用的是廣州微嵌的工業(yè)一體機(jī)做上位機(jī),通過(guò)RS485連8臺(tái)PLC。裝好后前三天一切正常,第四天開(kāi)始頻繁丟包,每天早上8-9點(diǎn)最嚴(yán)重。
排查過(guò)程:
第一步,檢查接線——沒(méi)發(fā)現(xiàn)問(wèn)題,終端電阻也接了。
第二步,抓報(bào)文——發(fā)現(xiàn)丟包表現(xiàn)為超時(shí)無(wú)響應(yīng),不是CRC錯(cuò)誤,排除線路干擾。
第三步,排查時(shí)間規(guī)律——早上8-9點(diǎn)是什么特殊時(shí)段?后來(lái)發(fā)現(xiàn)工廠8點(diǎn)交接班,所有產(chǎn)線同時(shí)啟動(dòng),變頻器集中上電,瞬間產(chǎn)生大量電磁干擾。
第四步,驗(yàn)證——讓客戶在8點(diǎn)前啟動(dòng)變頻器,8點(diǎn)后再開(kāi)工控機(jī),通信果然正常了。
第五步,解決——在RS485總線兩端各加了一個(gè)信號(hào)隔離器,同時(shí)在變頻器輸出端加了磁環(huán)。之后再也沒(méi)有出現(xiàn)過(guò)問(wèn)題。
這個(gè)案例說(shuō)明,串口通信故障排查不能只盯著一臺(tái)設(shè)備看,得從整個(gè)系統(tǒng)的角度去找原因。
## 總結(jié)
串口通信排查的思路就是逐層排除:物理層→電氣層→參數(shù)層→協(xié)議層→環(huán)境層。每層都有對(duì)應(yīng)的檢查手段和判斷標(biāo)準(zhǔn),按順序來(lái)不要跳步,大部分問(wèn)題都能定位到。
選硬件的時(shí)候也要注意,COM口帶隔離、帶TVS防護(hù)的工控機(jī)在工業(yè)現(xiàn)場(chǎng)用起來(lái)更省心。廣州微嵌的工業(yè)一體機(jī)COM口全部做了光電隔離,出廠前每一路都做實(shí)際通信測(cè)試,不是那種插上沒(méi)測(cè)就發(fā)貨的。做工控項(xiàng)目,硬件底子打好,后面排查也能少走很多彎路。