入門:配線、軟元件與通信程序排查)
在實(shí)訓(xùn)室里帶新人最常聽到的一句抱怨是“程序我照著敲完了機(jī)器就是不動”。拆開柜子看輸入點(diǎn)的公共端接反了、輸出端接著感性負(fù)載卻只掛一個中間繼電器、通信線兩頭都壓了屏蔽層。這類問題跟指令集毫無關(guān)系全落在 PLC 硬件基礎(chǔ)這塊地板上。我習(xí)慣把它切成三塊來講基本配線、軟元件、通信程序?;九渚€決定電能不能進(jìn)得去、信號能不能傳得準(zhǔn)軟元件決定你有沒有一張清晰的內(nèi)部地址地圖通信程序決定這臺機(jī)器是孤島還是網(wǎng)絡(luò)里的一個節(jié)點(diǎn)。三塊任何一塊塌了程序?qū)懙迷倨炼际前状?。這篇內(nèi)容面向剛接觸小型機(jī)的新手也面向那些“能改程序但不敢動柜子”的朋友主線用 FX3U/FX5U 這類實(shí)訓(xùn)里出鏡率極高的小型機(jī)來講其他品牌歐系的小型機(jī)、國產(chǎn)的幾個主流系列思路完全一樣差別只在軟元件名字和通信參數(shù)的填法上。1. 三塊劃分背后的邊界邏輯1.1 為什么是這三塊而不是按“硬件/軟件”分多數(shù)教材按“硬件組成—指令系統(tǒng)—編程方法”來排章學(xué)完一輪你會發(fā)現(xiàn)知識是連著的但故障是分層的?,F(xiàn)場出問題第一件事是判斷問題落在哪一層是電沒送到配線層是程序里的地址邏輯錯了軟元件層還是這臺機(jī)和別人說不上話通信層。按這三塊切最大的好處是排查時有明確的收斂路徑——先量電壓再看監(jiān)控最后抓報文不用一上來就懷疑程序。我見過太多人一停機(jī)就打開編程軟件盯著梯形圖看半小時實(shí)際上柜門上那顆急停按鈕根本沒復(fù)位。配線層的問題用眼睛和萬用表三分鐘能定位軟元件層的問題用在線監(jiān)控五分鐘能定位通信層的問題才需要抓數(shù)據(jù)。把這三層分開效率差好幾倍。另一個理由是學(xué)習(xí)成本。配線層的知識是通的學(xué)一次 FX 的接線邏輯換任何品牌的繼電器輸出型 PLC 都能遷移軟元件層是半通的編號規(guī)則不同但“輸入不可寫、輸出唯一驅(qū)動、保持區(qū)要規(guī)劃”這些原則通用通信層最不通但通了協(xié)議層的思維之后換品牌只是查手冊的事。按這三塊學(xué)投入產(chǎn)出比最高。1.2 用 FX 系列做主線跨品牌怎么遷移選 FX3U/FX5U 當(dāng)主線不是因?yàn)樗詈檬且驗(yàn)樗诟黝悓?shí)訓(xùn)場景里保有量大、資料全、擴(kuò)展模塊便宜出問題容易找到人問。FX3U 是典型的“經(jīng)典小型機(jī)”軟元件編號是八進(jìn)制混十進(jìn)制的老傳統(tǒng)特殊繼電器用 M8xxx通信參數(shù)全靠往數(shù)據(jù)寄存器里寫數(shù)值——這套做法略顯笨拙但極其鍛煉你對“參數(shù)就是內(nèi)存里的一串位”的理解。FX5U 則往前走了一步內(nèi)置以太網(wǎng)口特殊軟元件改名叫 SM/SD通信大多在工程軟件里圖形化配置。遷移到其他品牌時你只需要做三張對照表。第一張是軟元件對照X/Y 在多數(shù)品牌里還叫 I/Q 或 X/Y輔助繼電器 M 對應(yīng) DB 或 M保持寄存器對應(yīng) VW 或 D。第二張是特殊繼電器對照常 ON、初始脈沖、時鐘脈沖這三個是剛需任何品牌都有只是地址不同。第三張是通信格式寄存器對照有的品牌叫通信格式字有的直接在硬件組態(tài)里選波特率和校驗(yàn)。提示跨品牌遷移時最容易被忽略的是“輸入編號是否八進(jìn)制”。FX 系列的 X/Y 是八進(jìn)制X7 之后是 X10不是 X8。新手在紙上排點(diǎn)位表時按十進(jìn)制寫一到現(xiàn)場就錯位。2. 基本配線把電送對把信號接對2.1 先分清主回路和控制回路別一上來就接 PLC我見過最典型的新手錯誤是把接觸器線圈直接串在 PLC 的輸出點(diǎn)上或者把 220V 直接引到輸入端子上。開柜第一件事永遠(yuǎn)是畫清楚兩條線主回路走的是電機(jī)、加熱管、電磁閥這類功率負(fù)載控制回路走的是 PLC 本體、傳感器、指示燈。這兩條線在物理上要分開走線槽在電氣上只通過接觸器、繼電器、固態(tài)繼電器這些器件耦合。FX3U 本體一般吃 AC100~240V 或 DC24V本體上有一路 DC24V 輔助輸出容量通常幾百毫安夠帶幾個接近開關(guān)和光電開關(guān)但別拿它去帶電磁閥。我習(xí)慣的做法是控制回路單獨(dú)配一個 DC24V 開關(guān)電源PLC 的 24V 輸出只做傳感器供電并且加一路 2A 保險。這樣即使傳感器側(cè)短路也只燒保險不至于把本體電源拖垮。主回路的進(jìn)線側(cè)要有斷路器接觸器線圈側(cè)要有浪涌吸收RC 或者壓敏變頻器、伺服驅(qū)動器這類干擾源要單獨(dú)走線并且和 PLC 的信號線保持至少 20 厘米距離實(shí)在避不開就交叉走不要平行走長距離。這些是配線層的“地基”做不好后面所有排查都是徒勞。2.2 輸入側(cè)漏型源型接反是最常見的“燈不亮”FX3U 的輸入側(cè)有一個 S/S 公共端這一個端子決定了整組輸入是漏型還是源型。S/S 接 DC24V 正極輸入點(diǎn)就要接 0V 側(cè)信號NPN 型傳感器、干接點(diǎn)另一端接 0V這叫漏型輸入S/S 接 0V輸入點(diǎn)接 24V 側(cè)信號PNP 型傳感器這叫源型輸入。接反了不會燒但輸入指示燈永遠(yuǎn)不亮很多人第一次遇到會以為模塊壞了。實(shí)操上我給新人一個口訣看傳感器銘牌NPN 配漏型PNP 配源型。NPN 型傳感器輸出的是低電平有效也就是動作時輸出端被拉到 0V所以 PLC 的公共端必須接 24V形成從 24V 經(jīng) PLC 內(nèi)部光耦經(jīng)輸入點(diǎn)經(jīng)傳感器到 0V 的回路。PNP 反之。還有兩個數(shù)值需要記一下。FX3U 的輸入 ON 電流門檻大約在 3.5mA 左右OFF 電流要低于 1.5mA 才可靠關(guān)斷輸入回路的額定電流在 7mA 上下24V 時。這兩個數(shù)字解釋了兩類常見怪病一是輸入點(diǎn)微亮但程序不認(rèn)屬于漏電流在門檻附近游走二是輸入點(diǎn)斷開后不滅多半是線間電容或者傳感器漏電流太大?,F(xiàn)象常見原因處理辦法輸入燈完全不亮S/S 接反、傳感器類型不匹配對照銘牌改公共端接線輸入燈微亮不動作漏電流在 3~5mA 之間輸入端并聯(lián)泄放電阻常見 2.2kΩ 左右或改用干接點(diǎn)輸入燈斷開后不滅長線感應(yīng)電壓、相鄰強(qiáng)電串?dāng)_換雙絞線、縮短走線、加中間繼電器隔離輸入偶爾抖動機(jī)械觸點(diǎn)抖動、線纜接觸不良程序里加 10~20ms 濾波或查端子壓接輸入信號線長距離走的時候我一直用雙絞線并且把雙絞線的一端懸空、另一端在 PLC 側(cè)單點(diǎn)接地。別兩頭都接兩頭都接就形成了地環(huán)路干擾反而更大。這一點(diǎn)在傳感器離柜子二三十米的時候特別明顯。2.3 輸出側(cè)繼電器、晶體管、可控硅選錯就是返工FX3U 的輸出類型在型號里就寫著了MR 是繼電器輸出MT 是晶體管輸出MS 是可控硅輸出。這三種的差別不是“貴不貴”是“帶什么負(fù)載、要多快”。類型負(fù)載能力響應(yīng)速度適合負(fù)載不適合繼電器輸出每點(diǎn)約 2A阻性感性打折約 10ms接觸器線圈、電磁閥、指示燈、交流負(fù)載高頻動作、大電流直驅(qū)電機(jī)晶體管輸出每點(diǎn)約 0.5ADC 24V1ms 以內(nèi)步進(jìn)/伺服脈沖、固態(tài)繼電器、DC 電磁閥交流負(fù)載、大電流可控硅輸出每點(diǎn)約 0.5~1AAC半周波交流電磁閥、加熱感性沖擊大的負(fù)載繼電器輸出最大的價值是隔離和通用最大的坑是壽命。機(jī)械壽命上千萬次聽著多但電氣壽命在額定負(fù)載下往往只有十萬次量級帶接觸器線圈這種感性負(fù)載還要再打折。我見過包裝機(jī)上一個輸出點(diǎn)一天動作兩千次兩個月觸點(diǎn)就粘死了。這種情況要么換晶體管輸出加中間繼電器要么在繼電器輸出端加 RC 吸收把觸點(diǎn)火花壓下去。輸出側(cè)接線有兩個必做動作。第一是每個公共端加保險FX3U 的輸出是分組的每組一個 COM 端子比如四點(diǎn)或八點(diǎn)共用一組具體分組看端子蓋上的印字不要憑記憶。每個 COM 上串一個 2A 保險成本幾毛錢能救一塊幾百塊的板子。第二是感性負(fù)載加吸收直流感性負(fù)載反并聯(lián)續(xù)流二極管交流感性負(fù)載并聯(lián) RC 吸收或者壓敏電阻。缺了這一步輸出點(diǎn)燒毀只是時間問題。還有一個隱蔽的坑輸出點(diǎn)的 COM 端沒接電源。程序里 Y 點(diǎn)亮了模塊上的 LED 也亮了但負(fù)載不動因?yàn)楣捕藨铱栈芈犯静煌?。這個錯誤在新手第一次獨(dú)立接線時出現(xiàn)率高得驚人因?yàn)?LED 指示的是“內(nèi)部驅(qū)動已經(jīng)動作”不是“外部回路已經(jīng)閉合”。2.4 保護(hù)、接地與抗干擾的落地做法接地這件事教科書上寫“第三種接地接地電阻小于 100Ω”但現(xiàn)場真正要命的是“接在哪兒”。PLC 的接地端子必須單獨(dú)接地不能和變頻器、伺服、大功率接觸器共用一根接地排否則變頻器開關(guān)產(chǎn)生的高頻噪聲會順著地線灌進(jìn) PLC。如果一個柜子里實(shí)在只有一根接地母排那就把 PLC 的接地線單獨(dú)引到母排的最遠(yuǎn)端并且加粗線徑別隨便擰在接觸器旁邊的螺絲上。急?;芈返淖龇ㄖ档脝为?dú)說。我的原則是急停不經(jīng)過 PLC 程序。急停按鈕用常閉觸點(diǎn)直接切斷主回路接觸器的線圈同時把一路信號送進(jìn) PLC 作為狀態(tài)檢測。這樣即使 PLC 死機(jī)、程序跑飛拍下急停依然能斷動力。如果確實(shí)需要通過 PLC 控制也要做雙通道或者加安全繼電器靠單點(diǎn)軟件邏輯實(shí)現(xiàn)急停是不可接受的。線徑和端子也順便說一句。主回路按負(fù)載電流選控制回路 0.5~1.5mm2 夠用端子壓接一定要用壓線鉗壓緊再插不要用螺絲刀把散線硬擰進(jìn)去虛接引起的間歇故障最難查。所有端子擰完之后拉一遍這是最土但最有效的檢查方法。注意柜內(nèi)布線時PLC 的輸入輸出信號線與動力線保持距離實(shí)在要走同一個線槽中間加隔板。這不是講究是解決 80% 莫名抖動的根本手段。3. 軟元件PLC 內(nèi)部的一張地址地圖3.1 八類軟元件分別管什么軟元件這個概念說白了就是“PLC 內(nèi)存里的具名地址”。你寫的每一行梯形圖本質(zhì)上都是在讀寫這些地址。FX 系列把它分成八類每一類有明確的用途邊界理解邊界比記住編號更重要。輸入繼電器 X是只讀的反映外部端子狀態(tài)程序里只能當(dāng)觸點(diǎn)用不能寫線圈。輸出繼電器 Y是唯一的執(zhí)行出口一個 Y 點(diǎn)在整個程序里只能出現(xiàn)一次 OUT出現(xiàn)兩次就是雙線圈實(shí)際生效的是最后執(zhí)行的那一處這是新手最常見的邏輯黑洞。輔助繼電器 M是中間變量用來做狀態(tài)記憶、步進(jìn)標(biāo)記、條件中轉(zhuǎn)分通用區(qū)和斷電保持區(qū)。狀態(tài)繼電器 S主要給步進(jìn)順控用做順序流程時比一堆 M 清爽得多。定時器 T和計數(shù)器 C是帶功能的軟元件T 有不同時基100ms、10ms、1ms選錯時基會導(dǎo)致定時精度差十倍C 分 16 位和 32 位還分通用和保持累計計數(shù)必須用保持型或者 32 位。數(shù)據(jù)寄存器 D是 16 位字兩個連續(xù)的 D 可以拼成 32 位用來存參數(shù)、存通信數(shù)據(jù)、存計算結(jié)果。變址寄存器 V/Z是間接尋址用的做批量處理時能省掉大量重復(fù)邏輯但可讀性會下降我不建議新手一上來就用。指針 P/I用在跳轉(zhuǎn)和中斷一般的邏輯控制用不上做高速計數(shù)或者定位的時候才會碰。3.2 FX 系列軟元件編號與容量速查FX3U 的編號規(guī)則是“X/Y 八進(jìn)制其余十進(jìn)制”這是最容易栽跟頭的地方。X0 到 X7 之后是 X10不是 X8。你在紙上排點(diǎn)位表的時候如果按十進(jìn)制寫接線上機(jī)必然錯位。軟元件功能FX3U 常用范圍斷電保持X輸入X0~X177八進(jìn)制否Y輸出Y0~Y177八進(jìn)制否M輔助繼電器M0~M499 通用M500~M3071 保持后者保持S狀態(tài)S0~S9 初始S10~S999 通用部分可設(shè)T定時器T0~T199100msT200~T24510ms累計型保持C計數(shù)器C0~C9916位通用C200~C23432位C100 起保持D數(shù)據(jù)寄存器D0~D199 通用D200~D7999 保持后者保持V/Z變址V0~V7Z0~Z7否特殊軟元件是另一套體系用 M8xxx 和 D8xxx 表示。剛需的有這么幾個M8000 是運(yùn)行監(jiān)視常 ON所有需要“一直執(zhí)行”的指令都串它M8002 是初始脈沖只在 RUN 后的第一個掃描周期 ON 一個周期用來做初始化M8013 是 1 秒時鐘脈沖做閃爍和計時很方便M8011 是 10ms 時鐘。D8010 里是當(dāng)前掃描周期時間調(diào)性能的時候瞄一眼就知道程序是不是太重。D8000 是看門狗定時器默認(rèn) 200ms程序掃描超時就直接報錯停機(jī)。換成 FX5U這套名字全變了常 ON 變成 SM400初始脈沖變成 SM402特殊寄存器統(tǒng)一用 SD 開頭。很多從 FX3U 轉(zhuǎn)過來的人第一次寫程序找不到 M8002就是因?yàn)檫@個。做跨機(jī)型移植時我建議單開一個“特殊軟元件對照”注釋塊貼在程序開頭比查手冊快。3.3 軟元件分配表一個能省掉一半調(diào)試時間的習(xí)慣我?guī)У拿總€項目開工第一件事不是寫程序是畫一張軟元件分配表。左邊寫點(diǎn)位號中間寫功能描述右邊寫備注比如“常閉”“帶濾波”“上位機(jī)讀取”。這張表打印出來貼在柜門上接線的人按表接編程的人按表寫調(diào)試的人按表查。這張表最重要的作用是防止雙線圈和地址沖突。一個中等規(guī)模的設(shè)備M 點(diǎn)用到兩三百個很正常如果沒有表寫到第三天你自己都不記得 M120 是干什么的。等現(xiàn)場出現(xiàn)“某個動作偶爾不執(zhí)行”你要在一堆網(wǎng)絡(luò)里找哪個 M 被重復(fù)驅(qū)動那才叫絕望。具體寫法上我習(xí)慣按功能分塊每塊預(yù)留 20%~30% 的余量。輸入輸出按物理順序排M 點(diǎn)按工位排上料區(qū) M0~M99加工區(qū) M100~M199下料區(qū) M200~M299D 點(diǎn)按用途排參數(shù)區(qū) D100~D199通信區(qū) D200~D299報警區(qū) D300~D399。這樣定位問題時看地址就知道大概位置不用滿程序搜。保持區(qū)的規(guī)劃要單獨(dú)提一句。斷電保持的 M 和 D 在設(shè)備重啟后仍然保留原值用得好是“記住上次狀態(tài)”用不好就是“上次的故障狀態(tài)一直卡著”。我的做法是真正需要記憶的累計產(chǎn)量、配方參數(shù)、機(jī)械原點(diǎn)偏移放保持區(qū)純邏輯中間變量一律放通用區(qū)并且在初始化程序里對保持區(qū)做一次“合理性檢查”超出范圍的參數(shù)強(qiáng)制復(fù)位成默認(rèn)值。提示雙線圈問題在梯形圖里不容易看出來因?yàn)楹芏嗑幊誊浖粫箦e。查的辦法是在軟元件使用列表里搜這個地址看出現(xiàn)了幾處 OUT。養(yǎng)成這個習(xí)慣能省掉大量“為什么這段邏輯不生效”的困惑。4. 通信程序讓這臺機(jī)器不再是一座孤島4.1 三種通信形態(tài)先選對再動手小型機(jī)的通信需求基本落在三類里。第一類是編程和調(diào)試通信就是你的電腦連 PLC 下載程序這條鏈路平時不用管。第二類是無協(xié)議通信有的品牌叫自由口PLC 只負(fù)責(zé)把一串字節(jié)發(fā)出去、把一串字節(jié)收進(jìn)來協(xié)議內(nèi)容自己定適合對接條碼槍、稱重儀表、老式變頻器這類“對方協(xié)議很簡單但非標(biāo)準(zhǔn)”的設(shè)備。第三類是標(biāo)準(zhǔn)協(xié)議通信比如 Modbus RTU、Modbus TCP以及各家自己的鏈接網(wǎng)絡(luò)適合 PLC 之間、PLC 與觸摸屏、PLC 與上位機(jī)之間交換數(shù)據(jù)。選型的判斷標(biāo)準(zhǔn)很樸素對方設(shè)備支持標(biāo)準(zhǔn)協(xié)議就走標(biāo)準(zhǔn)協(xié)議別自己造輪子對方設(shè)備只吐一串 ASCII 或者固定格式的二進(jìn)制就走無協(xié)議兩臺 PLC 之間數(shù)據(jù)量不大又不想寫握手邏輯用現(xiàn)成的鏈接網(wǎng)絡(luò)最省事但如果跨品牌還是老老實(shí)實(shí) Modbus。FX3U 的串口資源是這樣分布的本體上有一個編程口擴(kuò)展可以加一塊 485 通信板或者通信適配器。加板子和加適配器的區(qū)別在于占用位置和電氣隔離適配器一般隔離更好、走線更遠(yuǎn)做長距離通信我都建議用適配器。硬件接好之后A/B 兩線是差分信號必須雙絞屏蔽層單端接地總線兩端各接一個 120Ω 終端電阻——注意是“兩端”中間站不要接接多了會把信號衰減掉。4.2 通信參數(shù)寄存器一串位決定能不能說上話FX3U 的串口通信格式靠一個 16 位寄存器設(shè)定常見的是 D8120。這個寄存器的每一位都有含義寫錯一位就通不上而且現(xiàn)象往往是“收不到任何數(shù)據(jù)”沒有報錯提示特別打擊人。位含義常用取值bit0數(shù)據(jù)長度07 位18 位bit1~2校驗(yàn)方式00 無01 奇11 偶bit3停止位01 位12 位bit4~7波特率1000 對應(yīng) 96001001 對應(yīng) 19200最常用的組合是 9600、8 位數(shù)據(jù)、偶校驗(yàn)、1 位停止位對應(yīng)寫入十六進(jìn)制 87。19200 同參數(shù)則是十六進(jìn)制 89。這幾個數(shù)值我建議直接背下來現(xiàn)場改參數(shù)時不用翻手冊。這里有個操作細(xì)節(jié)必須強(qiáng)調(diào)通信格式寄存器改完之后要復(fù)位生效。很多人在 RUN 狀態(tài)下直接改改完發(fā)現(xiàn)還是不通以為改錯了其實(shí)是沒生效。穩(wěn)妥的做法是在初始脈沖M8002里寫一次然后斷電重啟讓參數(shù)在冷啟動時被加載。同理站號、超時時間這些參數(shù)也建議寫在初始化塊里別散落在程序各處。還有一個坑是通信超時時間。FX 系列用 D8129 設(shè)超時單位是 10ms默認(rèn)值往往偏小。波特率低、數(shù)據(jù)幀長的時候默認(rèn)超時會頻繁誤判我一般的起步值是 100即 1 秒再根據(jù)實(shí)際響應(yīng)時間往下調(diào)。超時設(shè)太短的后果不是“通不上”而是“時通時不通”這種間歇故障排查成本極高。4.3 無協(xié)議通信的程序骨架無協(xié)議通信的程序我習(xí)慣拆成四段初始化、組幀、發(fā)送、接收。這四段的順序和掃描周期的關(guān)系必須想清楚否則會出現(xiàn)“數(shù)據(jù)發(fā)出去了但被下一次掃描覆蓋”的問題。初始化段在 M8002 里寫通信格式、超時時間、接收緩沖區(qū)清零。組幀段把要發(fā)送的數(shù)據(jù)按對方協(xié)議拼到一段連續(xù)的數(shù)據(jù)寄存器里比如 D100 開始前面加幀頭、后面加校驗(yàn)。發(fā)送段用一個上升沿觸發(fā)發(fā)送請求配合發(fā)送指令或者發(fā)送請求標(biāo)志位。接收段用接收完成標(biāo)志位觸發(fā)把收到的數(shù)據(jù)搬到處理區(qū)處理完立刻清標(biāo)志位為下一幀做準(zhǔn)備。一個關(guān)鍵認(rèn)知是通信是異步的。PLC 的掃描周期是毫秒級串口一幀數(shù)據(jù)可能要幾十毫秒所以你不能在同一個掃描周期里“發(fā)完立刻處理結(jié)果”。正確的做法是狀態(tài)機(jī)發(fā)送觸發(fā)后進(jìn)入等待狀態(tài)接收完成標(biāo)志置位后進(jìn)入處理狀態(tài)處理完回到空閑。用步進(jìn)標(biāo)記一個 M 點(diǎn)或者一個 D 里的步驟號來管理狀態(tài)比用一堆定時器硬等要可靠得多。還有一個容易被忽略的點(diǎn)發(fā)送和接收用的緩沖區(qū)不能重疊。我見過有人把發(fā)送數(shù)據(jù)放在 D100 開始接收數(shù)據(jù)也放在 D100 開始結(jié)果發(fā)送還沒發(fā)完接收數(shù)據(jù)已經(jīng)把發(fā)送緩沖覆蓋了對方收到的是一堆亂碼。緩沖區(qū)分開中間留出足夠空間這是基本紀(jì)律。4.4 Modbus 輪詢從站一多邏輯就要講究多從站輪詢是通信程序里最能體現(xiàn)功力的地方。假設(shè)一條 485 總線上掛了五臺從站你不可能同時問只能一臺一臺來。輪詢程序的核心是三件事當(dāng)前站在哪、這一步做什么、失敗了怎么辦。我的寫法是用一個步驟號寄存器比如 D500。D5000 時空閑檢查是否有輪詢請求D5001 時裝載當(dāng)前從站號和功能碼D5002 時觸發(fā)發(fā)送D5003 時等待完成標(biāo)志D5004 時處理數(shù)據(jù)并切到下一站D500 回到 0。每一步都有明確的進(jìn)入條件和退出條件任何時候看監(jiān)控都能知道卡在哪。輪詢間隔要留夠。從站響應(yīng)需要時間緊接著發(fā)下一幀會讓總線沖突或者從站來不及處理。我一般在兩幀之間留 20~50ms 的空隙用定時器或者步驟號延時都行。波特率越低、從站越多這個間隔越要留足。失敗處理決定系統(tǒng)的健壯性。每個從站要有獨(dú)立的失敗計數(shù)器和超時計數(shù)器連續(xù)失敗 N 次N 一般取 3就標(biāo)記該站為離線跳過它繼續(xù)輪詢其他站同時給出報警。跳過而不是整體停擺這一點(diǎn)很重要——一臺從站掉線不應(yīng)該讓整條線的數(shù)據(jù)采集全部癱瘓。等它恢復(fù)響應(yīng)了再自動把在線標(biāo)志置回來。CRC 校驗(yàn)這塊用標(biāo)準(zhǔn)協(xié)議時指令內(nèi)部會處理用無協(xié)議自己拼 Modbus 幀的時候才需要手算。手算 CRC 的常見錯誤是把高低字節(jié)順序搞反或者把 CRC 本身也算進(jìn)校驗(yàn)范圍。這兩種錯誤的現(xiàn)象都是“對方不響應(yīng)”很難從現(xiàn)象反推原因所以第一次調(diào)試時寧可拿一個已知正確的幀做比對。注意RS485 總線上站號不能重復(fù)。兩臺設(shè)備設(shè)了同一個站號現(xiàn)象是“有時能通有時不能通”因?yàn)閮膳_設(shè)備都在應(yīng)答總線上信號打架。這個坑我踩過查了兩個小時。5. 常見故障與排查實(shí)錄5.1 配線類故障先量電壓再看程序配線故障的排查順序永遠(yuǎn)是電源電壓 → 公共端電位 → 輸入點(diǎn)電位 → 輸出點(diǎn)電位 → 負(fù)載電位。這五步用萬用表走一遍五分鐘內(nèi)能鎖定絕大多數(shù)問題。舉一個我遇到過的典型案例。一臺設(shè)備所有輸入點(diǎn)都不亮新人第一反應(yīng)是 PLC 壞了。我讓他量本體電源端子電壓正常量 S/S 端子對 0V是 0V再看傳感器全是 NPN 型。問題很清楚——S/S 應(yīng)該接 24V 才能配 NPN接成 0V 就變成了源型輸入NPN 傳感器給不出高電平。改一根線全部恢復(fù)。另一個案例是輸出點(diǎn)帶電磁閥燒觸點(diǎn)。負(fù)載是 DC24V 電磁閥繼電器輸出直驅(qū)一個月燒了兩個輸出點(diǎn)。原因是沒有續(xù)流回路電磁閥斷電瞬間的反電動勢在觸點(diǎn)上打火。加一個反向并聯(lián)的二極管問題消失。這類問題的成本對比很懸殊一個二極管幾毛錢一塊輸出板幾百塊。排查時還要注意一件事LED 指示不等于回路閉合。輸入 LED 亮只說明光耦導(dǎo)通了輸出 LED 亮只說明內(nèi)部驅(qū)動動作了兩者都不代表外部回路真的通了。判斷外部回路要用萬用表量負(fù)載兩端電壓或者用個燈泡當(dāng)假負(fù)載試。5.2 軟元件類故障看得見程序看不見地址軟元件層面的故障特點(diǎn)是“程序邏輯看著沒錯就是不按預(yù)期走”。最常見的三個來源是雙線圈、保持區(qū)污染、時基選錯。雙線圈的表現(xiàn)是“某個輸出時而正常時而不正常”因?yàn)閮商?OUT 都在寫同一個 Y 點(diǎn)實(shí)際生效的是掃描順序靠后的那個。這種情況用交叉引用查最快搜一次地址看有幾處寫操作。有的編程軟件會在編譯時給出警告別忽略那個警告。保持區(qū)污染的表現(xiàn)更隱蔽。設(shè)備斷電重啟后某個流程莫名其妙跳過一步或者產(chǎn)量計數(shù)從一個奇怪的數(shù)字開始。原因是這個 M 點(diǎn)落在保持區(qū)上次停機(jī)時它是 ON重啟后仍然 ON初始化的條件判斷直接繞過去了。解決辦法是在初始脈沖里對所有保持區(qū)做一次顯式初始化別指望“上電默認(rèn)是 OFF”。時基選錯是個純知識性錯誤但很常見。用 100ms 時基的定時器去卡 50ms 的動作精度根本不夠用 1ms 時基的定時器去卡 10 秒的延時雖然能實(shí)現(xiàn)但占用高速定時器資源。選型原則是延時精度要求小于 100ms 用 10ms 或 1ms 時基大于 1 秒用 100ms 時基中間地帶看具體需求。5.3 通信類故障速查現(xiàn)象可能原因檢查手段處理完全收不到數(shù)據(jù)A/B 接反、波特率不匹配、格式寄存器未生效量差分電壓、核對雙方參數(shù)、斷電重啟調(diào)線、統(tǒng)一參數(shù)、復(fù)位生效偶爾丟一幀無終端電阻、屏蔽層兩端接地、超時太短查總線兩端電阻、查屏蔽接地兩端各加 120Ω、單端接地、加大超時收到的數(shù)據(jù)是亂碼數(shù)據(jù)位/校驗(yàn)位不一致、字節(jié)序理解反了抓原始字節(jié)比對統(tǒng)一格式、明確大小端多站輪詢時好時壞站號重復(fù)、輪詢間隔不夠逐站斷開測試改站號、留間隔通信一段時間后中斷干擾累積、緩沖區(qū)溢出看錯誤計數(shù)、看接收標(biāo)志是否未清加隔離、及時清標(biāo)志、加看門狗通信排查的核心工具是“抓原始字節(jié)”。別一上來就懷疑協(xié)議邏輯先確認(rèn)物理層通不通、字節(jié)對不對。我習(xí)慣先用一個最簡單的讀指令讀一個寄存器打通單站確認(rèn)能收到正確響應(yīng)之后再往上疊加多站輪詢和數(shù)據(jù)解析。一次只改一個變量這是通信調(diào)試的鐵律。干擾問題單獨(dú)說一句。變頻器、伺服、中頻加熱設(shè)備旁邊走 485 線出問題的概率極高。解決辦法按成本從低到高改用屏蔽雙絞線并單端接地、降低波特率、縮短距離、加磁環(huán)、換隔離型通信模塊。很多時候把波特率從 19200 降到 9600 就能穩(wěn)定代價只是響應(yīng)慢一點(diǎn)對于非實(shí)時數(shù)據(jù)采集完全可以接受。6. 上手路徑與踩坑心得6.1 一套可以照抄的練手順序如果你手上有一臺 FX3U 或者任何一臺小型機(jī)我建議按這個順序練每一步都能獨(dú)立驗(yàn)證不至于一上來就被綜合項目勸退。第一步只接電源和急停確認(rèn)本體上電、RUN 燈亮、編程軟件能連上。第二步接兩個輸入點(diǎn)一個按鈕、一個接近開關(guān)和兩個輸出點(diǎn)一個指示燈、一個中間繼電器驗(yàn)證輸入指示燈和程序監(jiān)控一致、輸出能驅(qū)動繼電器動作。第三步用定時器和計數(shù)器做一個“按三下按鈕燈亮五秒”的小邏輯把軟元件的基本用法過一遍。第四步加一塊 485 板用兩臺設(shè)備做單站 Modbus 讀寫把參數(shù)配置和收發(fā)流程走通。第五步加到三臺從站做輪詢把失敗重試和離線標(biāo)記加上。這五步走完基本配線、軟元件、通信程序三塊的核心動作你都親手做過一遍比看十篇教程有用。每一步都要做記錄接了什么線、改了什么參數(shù)、遇到什么問題、怎么解決的。這份記錄就是你自己的排查手冊。6.2 幾個用錢和時間換來的經(jīng)驗(yàn)第一個經(jīng)驗(yàn)接線前先拍照。柜子原狀拍一張改完再拍一張。設(shè)備出問題需要恢復(fù)原狀時照片比記憶可靠。我在一個改造項目里因?yàn)闆]拍照恢復(fù)接線時把一組輸入的公共端接錯了又多花了半天。第二個經(jīng)驗(yàn)參數(shù)要寫進(jìn)程序不要只靠手調(diào)。通信格式、站號、超時時間這些如果在觸摸屏上讓操作工調(diào)一定要在程序里做合法性檢查非法值直接拒絕并提示。我見過操作工把波特率調(diào)成 115200 而總線上其他設(shè)備都是 9600整條線癱瘓最后查了兩天才發(fā)現(xiàn)是屏上的一個參數(shù)。第三個經(jīng)驗(yàn)任何一個輸出點(diǎn)動作前先問自己“它壞了會怎樣”。驅(qū)動一個氣缸動作很簡單但這個氣缸在沒有氣壓、在限位沒到位、在急停拍下的情況下動作會不會撞壞東西配線層面加不加限位開關(guān)做硬件互鎖程序?qū)用婕硬患觿幼鳁l件這些判斷比寫指令重要得多。第四個經(jīng)驗(yàn)調(diào)試用的臨時短接線當(dāng)天必須拆。臨時短接是排查利器也是事故源頭。我給自己定的規(guī)矩是短接線用醒目的紅色并且在線頭掛一張紙條寫明“臨時調(diào)試后拆除”。設(shè)備交付前專門有一道工序叫“清點(diǎn)臨時線”一道一道過。帶新人時我常說PLC 這東西程序?qū)懙迷倩ㄉ谧罱K還是要靠一根線把電送過去、靠一個地址把狀態(tài)記住、靠一幀報文把數(shù)據(jù)傳出來。這三件事做扎實(shí)了剩下的是時間問題。