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