PC 和 PLC 怎麼互相通訊? 用 Node-RED 簡單建立工業物聯網

現今的工業自動化領域中,傳統 SCADA 系統雖為主流,但其「以點計費」的高昂成本與硬體授權綁定的僵化限制,常成為系統整合時的痛點。本文將深入探討如何利用開源工具 Node-RED 作為輕量化且高彈性的替代方案,突破封閉式架構的藩籬。

我們將從 PLC 乙太網通訊協議(如 Modbus TCP、MC Protocol)的基礎原理出發,解析如何無需依賴昂貴軟體即可實現設備數據採集與控制。文中將剖析兩個具體的實戰應用案例:「AOI 檢測影像的自動化歸檔整理」以及「即時生產履歷(Traceability)與 SQLite 資料庫串接」。無論您是尋求降低成本的自動化工程師,或是希望以低門檻導入工業物聯網(IIoT)的管理者,本文都將為您提供具體的技術路徑與實作思維。


霓可
「哇~上面的介紹看起來是不是有點嚴肅?其實說穿了,就是傳統 SCADA 實在太燒錢啦 ,為了我的自動化夢想,我們決定挑戰用 Node-RED 這個『省錢神器』來馴服工廠裡的機器們!

不管是把亂七八糟的 AOI 照片自動排好,還是把資料通通抓進資料庫,只要學會這一招,絕對能讓老闆(或是未來的自己?)對你刮目相看!一起把這些『不用花大錢』的絕招偷偷學起來吧!」

為什麼我想逃離傳統 SCADA?又貴又麻煩的辛酸淚

我記得第一次玩 SCADA 系統的時候就很好奇,既然系統可以把 PLC 的資料擷取出來,應該不是只能侷限在套裝的 SCADA 系統內,而是可以拿出來應用吧?

那時候使用的套裝 SCADA 系統還算方便,但就是侷限性多了一點,一來是想要採集的數據是以點為來做計費的(是的,用越多越貴!)軟體本身還需要透過授權並綁定在指定電腦上,而萬一如果電腦壞了或者電腦需要更換,要馬不是投入付諸流水、要馬就是要回去跟廠商盧半天很麻煩。

PLC 上的網路孔是拿來上網的嗎?

撇除比較舊型的 PLC (例如三菱 FX3U之前的機種 ),現在大多的 PLC 都有提供 RJ45(常見的網孔)的通訊埠,這些通訊埠大多除了支援基本的 Ethernet TCP/ UPT 協議,也會支援比較常見的工業協議如 Modbus TCP 或是 EthnetIP 等等,我自己以前有陣子倒是很困惑,明明都是網路孔那跟我們家用電腦的有什麼不一樣?這麼多奇奇怪怪的通訊協議、阿是只要一樣的就可以通嗎?

為什麼不能只用 I/O?通訊協議的強大之處

簡單來說,PLC 提供的通訊協議大多時候是為了能夠驅動、控制與讀取裝置或感測器,因為現今自動化工業上的許多元件,已經很難只用 I/O 或脈衝簡單做到想要的功能了,舉例來說位置校正 CCD 就是一個典型的例子,CCD 拍攝後取得座標回傳給 PLC 必定得是一大串數字,如果今天是 I/O 或串、序列通訊,一來不是通訊起來麻煩的要命、就是當元件多的時候擴充模組插不完;舉另一個例子,伺服馬達如果使用了網路訊,許許多多的設定資料就可以方便快速的傳送,PLC 程式在編寫上可以更直接的下命令或者變更參數給馬達控制器本身,也可以反過來讓馬達控制器提供馬達的狀態 (例如溫度),反搜回來的馬達參數就很適合拿還座故障排除或者故障預防。

Node-RED 居然能讓機器「聽懂」彼此的話!

那回到與 PC 通訊的話題,如果想要簡單方便的與 PLC 通訊,那可以怎麼辦?那就是-搞定通訊協議🤣

Node-RED 的本質,有點像是流程化的機器翻譯、動作程式,用好理解的拖拉流程圖,定義你想要引入的觸發或訊號來源,接著再根據你定義的流程,進行出發後的信號轉換、顯示畫面、或者運算。Node-RED 強大的地方在於社群開源,除了基本常見的通訊以外,那怕是各種 Modbus TCP、 MC、Modbus TCP 等等工業網路,你都能在社群找到節點(這裡姑且當作是外掛)或者範例,甚至我自己也嘗試了將收集到的資料直接透過資料庫節點寫入 SQLite 的 DB 檔案,這都沒有問題!

實戰演練一:告別人工分類!AOI 生產紀錄自動整理術

這是一個內含 AOI (機器視覺辨識) 的設備,這個設備的主要邏輯控制使用 PLC ,而 AOI 則使用工業 PC 來處理,每次的生產過程 AOI 都會產生產品辨識的照片,一切都很美好,但唯一的問題就是這些照片的檔案名稱只有時間序,只看檔案名稱根本就沒有辦法分辨它是哪個批號生產出來的東西,於是作業員只能比對生產的時間記錄,手動將每一個照片分類歸類。

而這支 Node-RED 程式,解決的就是分類照片的問題,在設備運作的過程中,程式會自己去撈出 AOI 拍出的照片,接著去讀取 PLC 的生產參數判斷目前的生產批號,最後將生產批號寫回撈出照片的檔案名稱。

這個簡單的動作省下了作業員每次生產後 80% 整理資料的時間,也避免了人工操作失誤的可能,如果後續加入更多節點,我相信節省 100% 整理資料的時間都是合理的。

實戰演練二:打造專屬戰情室!設備生產履歷與即時控制

這不是一個實裝在正式生產設備的 Node-RED 程式,目前只有進行 DEMO 測試。程式的目的在於即時監控設備的生產狀態,並加入了簡單控制設備的功能(很適合用來在實裝的時候與 PLC 做互鎖保護 ),並且所有的生產資訊都會寫入地端的資料庫系統。

這支 Node-RED 程式寫起來就稍微複雜了一點,我用到了 MC 節點主要用來與 PLC 通訊,也加入了看板節點來建立一個 web 顯示窗口,還有資料庫的節點用來讀取紀錄 SQLite 的 DB 檔案 。

硬要說的話,我覺得的整個節點弄起來一開始花最多時間的是 PLC 通訊,因為每家的 PLC 通訊協議稍稍有點不一樣,有的需要指定位置、有的預設就在那裏、有的通訊埠不給用,最後我實際弄起來,暫時是覺得 MC 協議還算方便通用。再來第二麻煩的就是資料庫的讀取輸入,因為生產資料不是無腦全部直接存進去的,每筆資料在生產的過程都有時間差,也有程式需要先”讀取資料庫看要存哪裡”才動作的情況,因此整個節點的規畫過程就需要再用一些 JSON Function 做資料判斷,最後資料庫的架構規劃,那又是另一件事了。

不用買大電腦也能跑?認識「工業閘道器」這個省空間神器

我覺得 Node-RED 程式非常適合快速地進行工業物聯網(IIOT)的測試,甚至如果使用到的節點穩定,真的部屬在生產機器上應該也是沒有問題,或許有些讀者會問:那如果我要架一個 Node-RED 做設備的工業物聯網,就非得要一台設備放一台電腦嗎?那豈不是太佔空間又太浪費了?其實也不盡然,除 PC 或工業電腦的選擇之外, 解決相同問題的產品目前是有的,它叫做”工業閘道器”,通常它的體積不大容易安裝,甚至有一些工業閘道器內就是使用 Node-RED 的程式。

結尾

最後,如果你對範例的兩個應用有更多的疑問,或者想了解更多 Node-RED 程式的細節或者應用,請在下面留言跟我說。