計到調(diào)試落地的完整方法論)
做了幾年的自動化項目我發(fā)現(xiàn)一個挺諷刺的現(xiàn)象很多 FX5U 項目程序是在上一個項目基礎(chǔ)上刪刪改改拼出來的能跑但三個月后連寫程序的人自己都要花半天才能看懂改哪兒。三菱 FX5U PLC 功能樣板程序的價值不在于拿來就能用而在于把整個程序框架、注釋規(guī)范、軟元件分配、調(diào)試入口全部固定下來讓新項目從第一天起就看到終點。這篇文章我打算完整聊聊這套樣板程序的思路和玩法從選型盤點、程序分區(qū)、注釋命名到快速移植、結(jié)構(gòu)化文本和 FB 封裝、內(nèi)置定位和以太網(wǎng)通信最后再把幾年現(xiàn)場調(diào)試?yán)锊冗^的坑一并倒出來。不管你是剛接觸 FX5U還是已經(jīng)在 GX Works3 里折騰了不短時間這套東西都能直接照搬省掉大量重復(fù)勞動。1. 樣板程序到底解決什么問題為什么要花力氣維護(hù)它先說個我常被問的問題三菱官方不是給了一堆示例程序和手冊嗎為什么還要自己做一套樣板官方示例確實齊全但它們是功能演示不是工程組織。演示程序只告訴你這個指令怎么用不告訴你整套設(shè)備程序該怎么分區(qū)、哪些信號放哪個地址、操作工按下啟動后邏輯從哪兒一路跑到輸出。真實項目里最耗時的不是寫一條指令而是把所有 IO、報警、模式、步序、通信、參數(shù)堆在一起之后系統(tǒng)還能被清晰讀懂、快速修改。樣板程序解決的核心問題有三個。第一是降低重復(fù)搭建成本。每臺設(shè)備都要初始化、手動自動切換、報警互鎖、輸出映射、觸摸屏對接這些骨架邏輯占整個程序工作量的六成。把它們做成樣板新項目等于先繼承六成完成度剩下的只是工藝段和參數(shù)差異。第二是統(tǒng)一團(tuán)隊的代碼習(xí)慣。自動化項目經(jīng)常是今天 A 寫、明天 B 改、后天 C 維護(hù)。沒有統(tǒng)一框架時每個人的軟元件命名風(fēng)格都不一樣有人用 M0 表示運行有人用 M100 表示運行注釋愛寫不寫修改時全靠猜。樣板把這套規(guī)則定死誰進(jìn)來都按同一個套路走。第三是把調(diào)試入口前置。程序里設(shè)計了專門的設(shè)備狀態(tài)區(qū)、報警保持區(qū)、參數(shù)區(qū)設(shè)備在現(xiàn)場出了問題維護(hù)人員可以直接通過觸摸屏或者 GX Works3 監(jiān)視界面定位到具體分區(qū)而不是打開一整張?zhí)菪螆D對著觸點一個個找。我見過不少團(tuán)隊喊著做個樣板結(jié)果做成一個什么功能都往里面塞的大雜燴最后比不做好。合格的樣板必須滿足三個條件結(jié)構(gòu)穩(wěn)定、注釋完整、占位清晰。結(jié)構(gòu)穩(wěn)定是說分區(qū)骨架長期不變注釋完整是說每個軟元件、每個網(wǎng)絡(luò)塊都寫明白占位清晰是說預(yù)留的備用 IO 和參數(shù)區(qū)在圖紙上一眼能看到。達(dá)不到這三點的樣板用一兩個項目就會被廢棄。2. 動手前的資源盤點FX5U 選型決定了樣板的天花板開始寫程序之前先做硬件資源的盤點。同樣是 FX5U不同型號的差異非常大樣板程序如果一開始沒留夠擴(kuò)展量后面會非常被動。2.1 CPU 型號里的門道三菱 FX5U 的型號命名看起來一串字符其實信息量很大。常見的是 FX5U-32MT/ES、FX5U-64MT/ESS 這類。中間的 32、64 指的是本體 IO 點數(shù)比如 32 一般是 16 點輸入加 16 點輸出。后面的 M 是晶體管輸出R 是繼電器輸出最后一個字母組合代表供電方式和漏型源型差異。選型上我要強(qiáng)調(diào)一句如果設(shè)備上有步進(jìn)或者伺服一定要選晶體管輸出型。晶體管輸出響應(yīng)快可以輸出高速脈沖給驅(qū)動器繼電器輸出只能做低頻開關(guān)脈沖定位想都不用想。樣板程序我默認(rèn)按晶體管輸出設(shè)計如果項目確實用了繼電器輸出只要把脈沖相關(guān)的軸配置刪掉其他框架不動。FX5U 相對老款 FX3U 的一大優(yōu)勢是通信能力大幅增強(qiáng)。CPU 本體自帶以太網(wǎng)口可以走 Modbus TCP、SLMP 這類協(xié)議也支持 CC-Link IE Field Basic 網(wǎng)絡(luò)。這意味著觸摸屏、上位機(jī)甚至遠(yuǎn)程維護(hù)都可以通過網(wǎng)口直連不用再單獨加通信模塊。樣板程序里通信區(qū)的設(shè)計都是基于這個網(wǎng)口展開的。2.2 本體資源、擴(kuò)展模塊和遠(yuǎn)程 IO 的取舍FX5U 本體上有內(nèi)置的高速計數(shù)輸入晶體管型還支持高速脈沖輸出用于定位。不同批次和型號的具體通道數(shù)有差異選型時以官方硬件手冊為準(zhǔn)。我在樣板上留了這部分的軟元件分配實際項目按真實硬件調(diào)整。IO 點不夠時FX5U 支持右側(cè)擴(kuò)展模塊的方式增加 IO 和特殊功能模塊比如 FX5-16EX/16EYT 這類數(shù)字量擴(kuò)展FX5-4AD/4DA 這類模擬量模塊。如果點數(shù)需求更大或者現(xiàn)場分布比較散可以考慮 CC-Link IE Field Basic 遠(yuǎn)程站網(wǎng)線串聯(lián)就行接線量比傳統(tǒng)并行擴(kuò)展小很多。這里有個經(jīng)驗樣板里默認(rèn)給本體 IO 地址留出余量不要一上來就把 X0-X7、Y0-Y7 全部占完。設(shè)備調(diào)試階段總會有臨時增加近接開關(guān)、改個急?;芈返那闆r預(yù)留地址能讓你在不動整個框架的前提下完成接線變更。我在每個分區(qū)里都留了兩到三個備用輸入和備用輸出注釋直接寫成備用 1、備用 2誰看了都知道這里是空位。2.3 隔離清單哪些資源屬于樣板哪些必須項目自定義樣板程序容易犯的毛病是過度設(shè)計。我把資源分成兩類一類是設(shè)備無關(guān)的公共資源比如模式管理、報警記錄、參數(shù)區(qū)、通信緩沖區(qū)這些必須在樣板中定義清楚另一類是設(shè)備相關(guān)的工藝資源比如工位步序、氣缸動作、伺服定位表格、模擬量上下限這些只保留占位和示例具體內(nèi)容由項目程序填充。隔離清楚的好處是移植時有一個明確的換內(nèi)臟不換骨架的過程。骨架錯誤是全局性的內(nèi)臟錯誤只影響單個設(shè)備調(diào)試定位的時候范圍一下子就縮小了。3. 程序框架與地址規(guī)劃先在紙面上把整臺機(jī)器的邏輯鋪開在 GX Works3 里建工程之前我習(xí)慣先在表格里把地址規(guī)劃和程序分區(qū)畫出來。這一步看起來費時間實際是后面省時間最多的一步。3.1 八個基本分區(qū)的劃分邏輯樣板程序按功能劃分為八個基本區(qū)順序很重要因為 PLC 循環(huán)掃描是從上到下執(zhí)行的分區(qū)功能典型位置初始化區(qū)上電首掃描處理清中間狀態(tài)、恢復(fù)保持參數(shù)程序開頭模式管理區(qū)手動/自動切換、運行允許條件初始化之后自動步序區(qū)各工藝段的順序控制邏輯模式區(qū)之后報警與互鎖區(qū)故障檢測、報警保持、急停處理輸出映射之前手動輸出區(qū)點動、單步動作的驅(qū)動邏輯自動步序之后自動輸出映射區(qū)把自動步序結(jié)果映射到實際輸出輸出前通信區(qū)以太網(wǎng)、Modbus 數(shù)據(jù)交換讀寫緩沖區(qū)中后段參數(shù)與狀態(tài)區(qū)觸摸屏顯示、調(diào)試監(jiān)視用的數(shù)據(jù)集中區(qū)任意位置集中為宜初始化在最前是因為上電后必須先把中間繼電器清零、把上一次掉電遺留的狀態(tài)處理掉再進(jìn)入正常的邏輯掃描。模式管理要在自動步序之前因為步序的啟動條件要先拿到當(dāng)前是自動模式還是手動模式這個結(jié)果。報警互鎖放在輸出映射之前是為了確保報警發(fā)生時能直接掐斷輸出映射的出口而不是等輸出已經(jīng)置位之后再補(bǔ)救。自動輸出映射單獨拉一個區(qū)是我特別想強(qiáng)調(diào)的設(shè)計。很多新手喜歡在步序里直接寫 Y0、Y1這樣看起來直觀但改線時就要翻遍整段程序。樣板里做了分層自動步序只操作中間標(biāo)志位比如 M101 表示工位一前進(jìn)最后由輸出映射區(qū)統(tǒng)一把中間標(biāo)志轉(zhuǎn)換成物理輸出 Y0。這樣接線變更只改一個地方。3.2 保持區(qū)與非保持區(qū)最容易埋雷的地方三菱 FX5U 的軟元件有一部分可以通過參數(shù)設(shè)置為斷電保持。樣板程序?qū)@個區(qū)域的劃分有嚴(yán)格規(guī)矩參數(shù)類速度設(shè)定、溫度上下限、配方號放在保持 D 區(qū)斷電后不丟上電后直接使用。累計類總產(chǎn)量、運行時間放在保持 D 區(qū)但配合報警歷史一起管理。中間狀態(tài)當(dāng)前步號、氣缸伸出標(biāo)志、報警瞬時信號放在非保持區(qū)上電時先清一次防止設(shè)備停在上次的中間狀態(tài)導(dǎo)致誤動作。這個規(guī)矩執(zhí)行不到位會出現(xiàn)一個經(jīng)典故障設(shè)備斷電再上電后步序直接延續(xù)斷電前的步號氣缸突然按照舊狀態(tài)動作現(xiàn)場維護(hù)人員往往第一反應(yīng)是程序邏輯錯了實際上是保持區(qū)沒規(guī)劃好。我在樣板初始化區(qū)寫了一段注釋很明顯的程序上電后把步序區(qū)整段清零只恢復(fù)參數(shù)和累計值。3.3 標(biāo)簽還是軟元件地址我為什么兩者混用GX Works3 里 FX5U 是支持標(biāo)簽編程的用標(biāo)簽寫程序肉眼看著很舒服隨時能跳轉(zhuǎn)定義類型檢查也嚴(yán)格。但純標(biāo)簽在觸摸屏對接和三菱傳統(tǒng)習(xí)慣上會遇到一些摩擦。很多觸摸屏組態(tài)軟件直接通過地址訪問標(biāo)簽如果沒綁定軟元件HMI 那邊就要多一層變量映射。樣板里我的做法是全局標(biāo)簽為主、軟元件映射為輔。關(guān)鍵 IO 和中間變量定義全局標(biāo)簽標(biāo)簽名規(guī)范可讀同時把它映射到固定的軟元件地址觸摸屏和上位機(jī)通信時直接訪問映射好的軟元件不依賴標(biāo)簽名。這里有個實際好處在線修改時GX Works3 對軟元件地址的監(jiān)視和強(qiáng)制非常直觀現(xiàn)場維護(hù)人員不一定熟悉標(biāo)簽跳轉(zhuǎn)但一定看得懂 M0、D100 的批量監(jiān)視窗口。4. 注釋體系和命名規(guī)范讓注釋全變成可復(fù)制的方法論樣板程序最大的賣點是注釋全。但注釋全不等于每行都加字更不等于廢話連篇。真正有效的注釋體系應(yīng)該是在關(guān)鍵位置出現(xiàn)、說明狀態(tài)含義、解釋非常規(guī)寫法的原因、并和軟元件命名互相印證。4.1 GX Works3 的三類注釋各干各的活GX Works3 中針對梯形圖有三種常用注釋網(wǎng)絡(luò)注釋、軟元件注釋、行注釋。樣板里對它們進(jìn)行了明確分工網(wǎng)絡(luò)注釋寫在每個網(wǎng)絡(luò)塊的上方說明這個塊做什么、入口條件是什么。比如設(shè)備空閑判定無報警、無自動運行、手動無輸出三條件同時成立開放啟動許可。軟元件注釋寫在觸點或線圈的下方說明這個軟元件的物理含義和置位狀態(tài)。比如 X0 的注釋是啟動按鈕常開按下為 ON。行注釋寫在指令旁邊一般只用于解釋為什么這么寫。比如某處不是簡單讀取輸入而是先做了濾波行注釋會寫近接開關(guān)抖動大采樣 10ms 濾波后再參與互鎖。實際維護(hù)中我在定位問題時根本不看梯形圖主體先看網(wǎng)絡(luò)注釋和軟元件注釋。排查路線通常是報警區(qū)看到設(shè)備急停為 ON再跳到急停輸入確認(rèn) X 狀態(tài)然后去查硬件接線有沒有斷開。這一套注釋邏輯下來維護(hù)效率比無注釋程序高幾倍。4.2 前綴和命名的固定寫法樣板里所有軟元件和全局標(biāo)簽都采用前綴_含義_編號的格式。約定如下前綴含義示例G_全局標(biāo)簽前綴跨程序可引用G_Main_StartedX / Y輸入輸出本體地址注釋寫物理含義X0 壓料到位近接Alm_報警類信號Alm_Overload_1Para_參數(shù)類軟元件Para_Speed_MM_SStat_設(shè)備狀態(tài)字Stat_DeviceCnt_計數(shù)器或累計值Cnt_TotalQtyTmp_臨時計算用Tmp_Buf1命名有個容易被忽視的細(xì)節(jié)同一類軟元件編號盡量按功能分區(qū)連續(xù)分配。比如 M0-M99 歸模式管理M100-M199 歸自動步序M200-M299 歸報警M300-M399 歸手動。這樣在批量監(jiān)視窗口里只要掃一眼編號區(qū)間就知道屬于哪部分邏輯。單位也要寫進(jìn)注釋或命名里。速度參數(shù)寫成 Para_Speed_MM_S 而不是 Para_Speed溫度寫成 Alm_Temp_Above_Limit 而不是簡單的 Alm_Temp等于把量綱和閾值方向都固化下來后面改程序的人不需要再翻工藝文檔。4.3 注釋維護(hù)的日常工作流注釋最怕寫了不更新。樣板維護(hù)里面有兩條硬規(guī)矩第一任何一次在線修改必須同步改網(wǎng)絡(luò)注釋和軟元件注釋。如果只是臨時強(qiáng)制測試而不需要改邏輯那不動注釋一旦修改了線圈、觸點、比較值注釋必須立刻跟隨。第二定期做注釋導(dǎo)出檢查。GX Works3 支持把注釋導(dǎo)出成文件在電腦里批量檢查哪些軟元件有使用沒有注釋、哪些注釋內(nèi)容超過長度顯示不全。我和團(tuán)隊大概每個項目調(diào)試末期做一次導(dǎo)出對照報警表把軟元件注釋過一遍。有個小技巧GX Works3 里可以直接把注釋復(fù)制粘貼到 Excel 批量編輯再導(dǎo)回去。硬件接線表在 Excel 里維護(hù)的團(tuán)隊尤其適合這個方式IO 注釋先從 Excel 整列生成再批量導(dǎo)入工程省掉逐條打字。5. 快速上手從樣板到實際設(shè)備的移植流程樣板做得再好到了新項目還是要做一次移植手術(shù)。移植不是復(fù)制粘貼就完事而是有一套固定操作流程照做能避開大量隱性坑。5.1 第一步建立 IO 映射表先改地址不改邏輯拿到設(shè)備的電氣圖紙后先把圖紙上的物理信號填進(jìn)一張映射表信號名稱、圖紙線號、PLC 輸入或輸出地址、對應(yīng)樣板里的邏輯用途。滿表之后逐條把樣板里的 X0、Y0 地址替換成實際地址。這一步我嚴(yán)格要求只改地址不改邏輯結(jié)構(gòu)。樣板的自動步序、互鎖關(guān)系、報警邏輯都是經(jīng)過驗證的骨架任何工藝差異都不應(yīng)該先動骨架而是先看能否通過參數(shù)和地址適配。比如樣板上某個工位用了兩步動作實際設(shè)備少了一步那就先保留空的步序只把沒用的步序?qū)?yīng)的輸出注釋掉等整體跑通后再清理。5.2 第二步調(diào)整參數(shù)區(qū)范圍和器件參數(shù)開工程前檢查 PLC 參數(shù)的軟元件保持設(shè)置確認(rèn)保持區(qū)域覆蓋了參數(shù)區(qū)和累計區(qū)且沒有覆蓋到中間狀態(tài)區(qū)。然后根據(jù) CPU 型號調(diào)整保持范圍不同型號的默認(rèn)保持范圍不一樣樣板里的默認(rèn)值不一定適用你的 CPU這一步必須人工比對硬件手冊。模擬量模塊也要在這時確認(rèn)。樣板上模擬量通道默認(rèn)是 4AD 和 4DA 各一個實際項目可能是 8 路輸入或者沒有模擬量那就把對應(yīng)讀取程序整段禁用不要讓模擬量指令在沒有模塊的情況下報錯。5.3 第三步把三段式調(diào)試法變成流程紀(jì)律移植完成后首臺設(shè)備調(diào)試我堅持按三段走不允許跳級離線模擬在 GX Works3 的模擬器里跑一遍完整流程手動切換自動、跑幾個步序、觸發(fā)報警確認(rèn)邏輯狀態(tài)流轉(zhuǎn)符合預(yù)期。這一步能攔住六成低級錯誤。輸出禁止空機(jī)測試下載程序后先把輸出禁止功能打開意思是 PLC 邏輯照常跑但所有物理輸出被禁住外部設(shè)備不會動作。這時候在觸摸屏上把點動、自動模式全部操作一遍監(jiān)視軟元件狀態(tài)變化確認(rèn)輸出映射區(qū)的信號按照預(yù)期翻轉(zhuǎn)。單機(jī)聯(lián)動解除輸出禁止先手動單步動作再空機(jī)自動循環(huán)。空機(jī)自動循環(huán)至少連續(xù)跑 20 個周期無異常才允許接入真實負(fù)載。這套流程的要點在于輸出禁止和強(qiáng)制監(jiān)視是現(xiàn)場調(diào)試最安全的手段。很多人上來就直接解除輸出禁止做聯(lián)動結(jié)果邏輯里的一個互鎖寫反氣缸直接頂出去輕則撞夾具重則傷設(shè)備。用輸出禁止把邏輯層和物理層切開是成本最低的安全保障。5.4 移植中最常見的三個注意移植中還有一些小坑我單獨列出來觸摸屏地址要和 PLC 一致。樣板上 HMI 變量已經(jīng)按 G_ 標(biāo)簽或者軟元件地址映射好了新項目如果改了地址觸摸屏組態(tài)同步改否則看起來通信正常但按鈕點了沒反應(yīng)。備用地址不要移作他用。樣板預(yù)留的備用輸入輸出和備用 D 區(qū)在任何情況下都不得被臨時程序占用。一旦占用下個項目繼承樣板時會多出一堆看不懂的殘留邏輯。首次下載前做好程序備份。GX Works3 工程文件、導(dǎo)出的注釋、參數(shù)配置各存一份命名帶上項目號和日期。調(diào)試期一天改三版是常態(tài)沒有備份就只能靠記憶回滾。6. 高級玩法ST 混合編程、FB 封裝、內(nèi)置定位和通信擴(kuò)展樣板程序滿足基本設(shè)備控制需求之后我一直在往里面塞高級模塊讓樣板不只是入門框架還能直接支撐中型自動化設(shè)備。6.1 梯形圖為主、ST 為輔的混合編程GX Works3 里同一個工程可以同時使用梯形圖和結(jié)構(gòu)化文本。樣板的骨架部分我用梯形圖因為現(xiàn)場電工和維護(hù)人員對梯形圖最熟但數(shù)學(xué)運算、批量數(shù)據(jù)處理、通信報文解析這類邏輯梯形圖寫起來又長又難改我改用 ST。舉一個濾波算法的例子。模擬量采集值抖動大不能直接用需要在程序里寫滑動平均// 模擬量滑動平均濾波每 10 個掃描周期輸出一次平均值 IF bReset THEN SumVal : 0; CntVal : 0; END_IF; SumVal : SumVal RawAnalog; CntVal : CntVal 1; IF CntVal 10 THEN AvgAnalog : SumVal / 10; SumVal : 0; CntVal : 0; END_IF;梯形圖寫這段循環(huán)累加很別扭ST 幾行就搞定。關(guān)鍵在于ST 程序和梯形圖程序在同一個任務(wù)里順序執(zhí)行數(shù)據(jù)可以直接復(fù)用軟元件和標(biāo)簽不需要做復(fù)雜的接口轉(zhuǎn)換。用 ST 的另一個場景是數(shù)組處理。多段溫度數(shù)據(jù)求最大值、把一組報警字按位拆成獨立標(biāo)志這類邏輯在 ST 里可以寫成循環(huán)梯形圖只能展開重復(fù)寫。樣板里我把所有報警字的位解析統(tǒng)一改用 ST報警數(shù)量增加時只改數(shù)組長度不用把梯形圖復(fù)制十遍。6.2 FB 功能塊把電機(jī)、閥門、軸封裝成可復(fù)用積木FX5U 在 GX Works3 里支持功能塊FB和結(jié)構(gòu)化文本函數(shù)這是高級玩法里投入產(chǎn)出比最高的一項。我在樣板里封裝了一組常用 FBFB_MotorControl電機(jī)啟??刂戚斎胗袉?、停止、過載反饋、復(fù)位輸出有運行中、故障、啟動許可。內(nèi)部做好了啟動互鎖、故障保持、復(fù)位延時。FB_ValveControl閥門控制帶開到位、關(guān)到位、超時報警可以適配單電控或雙電控閥門。FB_AxisMove單軸定位控制輸入軸號、目標(biāo)位置、速度、加減速時間輸出定位中、定位完成、報警。FB 的好處是內(nèi)部邏輯只寫一次實例化多個副本時各自占用不同的內(nèi)部軟元件區(qū)域。比如設(shè)備上有四臺電機(jī)就調(diào)用四次 FB_MotorControl每個實例的名字是 FB_Motor_1 到 FB_Motor_4內(nèi)部互鎖邏輯完全一樣但端子接線和參數(shù)相互獨立。程序里不再是四段幾乎相同的梯形圖而是四個 FB 調(diào)用可讀性一下子提升很多。封裝 FB 要注意一個原則FB 內(nèi)部不要直接訪問物理地址。所有物理 IO 應(yīng)該從外部通過輸入輸出參數(shù)傳給 FB這樣 FB 才能在不同設(shè)備上通用。比如電機(jī)啟動按鈕的地址變了只需要在調(diào)用 FB 時改傳參FB 內(nèi)部一行不動。6.3 內(nèi)置定位功能FX5U 晶體管型的高速脈沖軸FX5U 晶體管型 CPU 支持內(nèi)置高速脈沖輸出可以直接驅(qū)動步進(jìn)或脈沖型伺服定位相關(guān)指令在 GX Works3 里集中配置。樣板中軸控制的分層是這樣的觸摸屏或 SCADA 給出目標(biāo)位置、速度兩類參數(shù)寫入?yún)?shù) D 區(qū)PLC 邏輯判斷軸當(dāng)前狀態(tài)和允許條件后觸發(fā)定位啟動指令定位完成后回讀完成標(biāo)志再進(jìn)入下一步工藝。接線層面脈沖信號和方向信號要接到伺服驅(qū)動器的對應(yīng)端子原點信號接到高速計數(shù)或中斷輸入端子具體端子號和通道號在樣板注釋里留了醒目提醒。很多新手容易在脈沖信號接了但方向信號沒接這種問題上卡住只要兩路信號一起檢查就很快。多軸運動時樣板里強(qiáng)制要求軸間互鎖。意思是任何時候不能直接對所有軸同時發(fā)啟動指令而是先判斷各軸狀態(tài)確認(rèn)全部就緒后再啟動防止兩臺伺服帶著工件互相撞。軸數(shù)超過 FX5U 本體能力時不要硬塞。高復(fù)雜度軌跡插補(bǔ)、CNC 類應(yīng)用已經(jīng)不是 FX5U 的定位范疇老老實實換運動控制器樣板的通信區(qū)可以過渡銜接但不要在 FX5U 上極限壓榨安全性和穩(wěn)定性都不劃算。6.4 以太網(wǎng)和 Modbus TCP讓上位機(jī)和設(shè)備輕松對話FX5U 自帶以太網(wǎng)口樣板上直接把 Modbus TCP 從站功能配好。設(shè)備區(qū)的 D 寄存器映射到 Modbus 地址觸摸屏、上位機(jī)通過網(wǎng)口直接讀寫不用額外加協(xié)議轉(zhuǎn)換模塊。我習(xí)慣把通信數(shù)據(jù)分成三個區(qū)只讀區(qū)、可寫區(qū)、命令區(qū)。只讀區(qū)放運行狀態(tài)、報警、產(chǎn)量、實時溫度上位機(jī)和觸摸屏只能讀可寫區(qū)放參數(shù)設(shè)定值比如速度、溫度上下限命令區(qū)放啟動、停止、復(fù)位指令上位機(jī)對命令區(qū)寫入之后由 PLC 側(cè)判斷條件再執(zhí)行。三塊區(qū)分開極大減少了通信沖突。如果所有數(shù)據(jù)都放在一個區(qū)上位機(jī)一頓亂寫可能會把運行狀態(tài)覆蓋掉出現(xiàn)明明在運行觸摸屏卻顯示停止的詭異現(xiàn)象。分區(qū)雖然犧牲了一點地址連續(xù)性但換來的是穩(wěn)定和可排查性。對于遠(yuǎn)程維護(hù)FX5U 的以太網(wǎng)口配合適當(dāng)?shù)穆酚膳渲每梢宰審S商遠(yuǎn)程連到 PLC 上做監(jiān)控和程序上下載。注意遠(yuǎn)程維護(hù)的安全策略需要提前規(guī)劃好不要裸奔到公網(wǎng)至少做一層訪問控制。6.5 數(shù)據(jù)記錄和簡單報表用樣板積累產(chǎn)量的過程數(shù)據(jù)FX5U 支持 SD 存儲卡和部分?jǐn)?shù)據(jù)記錄功能樣板里我把關(guān)鍵數(shù)據(jù)做了周期搬運產(chǎn)量、運行時間、報警時間戳、溫度曲線通過 ST 程序?qū)懭雰?nèi)存緩沖區(qū)再由通信區(qū)統(tǒng)一上傳到上位機(jī)或觸摸屏保存。如果上位機(jī)沒連可以在觸摸屏上做簡單的記錄查詢數(shù)據(jù)源還是 PLC 的 D 區(qū)。樣板程序在注釋里寫明了這些數(shù)據(jù)區(qū)的刷新周期和用途上位機(jī)開發(fā)工程師拿到注釋表就能對接不用反復(fù)問地址。7. 現(xiàn)場多年攢下來的調(diào)試驗證經(jīng)驗讓樣板程序真正扛住生產(chǎn)這一章寫一些沒寫在手冊里的東西都是實際項目里踩出來的。樣板程序框架合理只是一方面真正能扛住生產(chǎn)考驗靠的是細(xì)節(jié)。7.1 一個定位到崩潰又極其經(jīng)典的偶發(fā)停機(jī)說一個我印象很深的排查過程。那臺設(shè)備運行時偶爾停止有時一小時一次有時半天一次沒有任何規(guī)律。報警區(qū)顯示的是互鎖條件不滿足。一開始懷疑是某近接開關(guān)松動重新緊固后故障依舊。然后在 GX Works3 里對裝置狀態(tài)做了長時間監(jiān)視最終發(fā)現(xiàn)是觸摸屏組態(tài)里一個啟動按鈕的地址和 PLC 里運行中標(biāo)志的地址重合了。操作員按觸摸屏?xí)r上位機(jī)把運行中狀態(tài)瞬間改成 0互鎖條件斷掉設(shè)備停下但 100 毫秒以后觸摸屏又被 PLC 刷新回 1所以肉眼根本看不出來。這類問題的排查思路是先確認(rèn)報警區(qū)里的具體條件再逐條回看這些條件依賴哪些地址最后檢查這些地址有沒有被通信區(qū)或觸摸屏重復(fù)占用。樣板里通信區(qū)做只讀/可寫區(qū)隔離的原因就在這里如果當(dāng)初沒隔離這類故障會更難查。7.2 強(qiáng)制輸出和輸出禁止的使用紀(jì)律我見過不止一次調(diào)試人員用 GX Works3 強(qiáng)制功能去試輸出結(jié)果把繼電器控制的氣缸給頂出去了。原因是強(qiáng)制功能直接繞過程序邏輯把 Y 點鎖死為 ON而此時輸出禁止未必開啟。樣板程序里配了一個專門的輸出禁止開關(guān)軟元件調(diào)試時先把它置 ON程序里的輸出映射區(qū)就會整體封鎖。在這個前提下做強(qiáng)制操作物理輸出不會動作只會看到軟元件狀態(tài)變化。現(xiàn)場調(diào)試的默認(rèn)姿勢是先開輸出禁止再做任何強(qiáng)制操作確認(rèn)無誤后解除輸出禁止。這個習(xí)慣必須從樣板程序使用第一天就養(yǎng)成不然遲早出事。7.3 在線修改之后注釋和程序神同步的問題GX Works3 支持在線修改調(diào)試效率很高。但有個隱蔽問題在線修改時有時只改了梯形圖忘了改注釋或者注釋改了但程序沒保存。等第二天重新打開工程屏幕上顯示的程序內(nèi)容和注釋對不上人就會陷入信程序還是信注釋的困惑。我的做法是每輪在線修改結(jié)束立即把工程文件另存一個新版本命名方式帶日期時間。等到整個調(diào)試期結(jié)束再把最新版本導(dǎo)出全部注釋和報警表、IO 表做一次聯(lián)合檢查確保注釋里沒有殘留的舊信息。7.4 掉電保持帶來的復(fù)原陷阱前面說過保持區(qū)和非保持區(qū)要分開這里再補(bǔ)一個實際案例。某設(shè)備參數(shù)放在保持區(qū)步序放在非保持區(qū)理論上斷電再上電后步序清零設(shè)備應(yīng)該從初始狀態(tài)開始。結(jié)果上電后設(shè)備直接執(zhí)行了前進(jìn)動作因為是初始化區(qū)沒把某個中間標(biāo)志清干凈。問題出在步序清零了但輸出映射區(qū)使用的緩存標(biāo)志沒有跟著清而這個緩存標(biāo)志恰好放到了保持區(qū)。所以樣板初始化區(qū)里我增加了一段**強(qiáng)制全復(fù)位清單**把輸出映射緩存、步序緩存、報警瞬態(tài)標(biāo)志全部列出來上電后統(tǒng)一復(fù)位一條都不能少。這個清單每個項目都要檢查一遍新加的中間變量如果忘了進(jìn)清單下次就會重現(xiàn)這個坑。7.5 與上位機(jī)通信時最容易忽視的時間戳Modbus TCP 通信時上位機(jī)一般需要知道 PLC 的數(shù)據(jù)有沒有更新尤其是故障狀態(tài)這種關(guān)鍵信息。樣板里單獨維護(hù)了一個數(shù)據(jù)刷新計數(shù)器每掃描一次加一上位機(jī)只要發(fā)現(xiàn)這個值沒有變化就知道鏈路或程序出了問題。這比上位機(jī)直接判斷數(shù)據(jù)本身更可靠。因為故障狀態(tài)在復(fù)位之后會歸零光看狀態(tài)值無法區(qū)分設(shè)備正常和通信中斷導(dǎo)致數(shù)據(jù)凍結(jié)。數(shù)據(jù)刷新計數(shù)器是個永遠(yuǎn)增長的軟元件一眼就能看出通信是否活著。現(xiàn)在再回到樣板程序這件事上。一個真正可復(fù)用的樣板交付時最重要的不是梯形圖本身而是那幾張映射表和注釋清單。工程文件會變軟元件地址會換但哪個區(qū)管什么、每個標(biāo)志符怎么命名、調(diào)試時第一步看哪里這些規(guī)矩不會變。我希望每個拿到這套 FX5U 樣板的開發(fā)者都能少走半年彎路把精力花在解決設(shè)備本身的問題上而不是永遠(yuǎn)在對地址、猜注釋、翻舊程序。