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