Arduino Opta 與 Schneider Electric Modicon M171/M172 PLC 之間的軟體相容性

身為 DigiKey 應用工程師,我很高興能夠使用各種硬體和軟體。我的任務包括直接回覆該技術論壇上的客戶詢問,以及主動撰寫有關 DigiKey 客戶未來感興趣的主題的文章。有時,我會遇到令人驚訝的結果,例如 Arduino OptaSchneider Electric Modicon M171 和 M172 可編程邏輯控制器(PLC)之間的兼容性。

本工程簡報探討了用於 Opta 的 Arduino PLC IDE 與用於 Modicon M171/172 的 Schneider Electric EcoStructure Machine Expert – HVAC 之間的軟體共通性。我們將看到,這兩個 IDE 共享一個通用結構,從而允許跨平台共享 IEC 61131-3 程式組織單元(POU)。這種協同作用使得程式設計師能夠輕鬆地在 Opta WiFi 等設備與圖1所示的 Modicon TM172PDG28RI 等設備之間切換。

圖 1:Arduino Opta WiFi 和帶有整合顯示器的 Schneider Modicon M172 的圖片

各個 IDE 共享一個通用結構,允許跨系列共享 POU(軟體元件)。

什麼是 IEC 61131-3 程序組織單元 (POU)?

IEC 61131-3 標準定義了常用的 PLC 程式語言,包括梯形圖 (LD)、功能區塊圖 (FBD)、結構化文字 (ST)、指令清單 (IL) 和順序功能圖 (SFC)。該標準也描述了程序的組織方式。這些程序組織單元 (POU) 是 PLC 專案的基本組成部分。它們由程式、功能塊和用戶自訂功能塊 (UDFB) 組成。

技術提示:在 IEC 61131-3 標準中,「程序」一詞需要進一步解釋。有時,它指的是安裝在 PLC 上的所有軟體,這些軟體可能由許多獨立的 POU 組成。有時,它指的是一種特定類型的 POU。透過上下文線索,可以比較容易地區分這兩種情況。例如,圖 2 中的所有元件都用於建立 PLC 的程式。該程式由各個 POU 組成,例如程式 prgCtrl 和 prgComms。

圖 2:IEC 61131-3 軟體命名空間框圖

右側顯示了三種類型的 POU(程式、函數和使用者自訂功能區塊)。

內建函數與使用者自訂函數

所有現代 PLC 開發工具都包含預先定義函數。我們可以找到各種用於邏輯圖(LD)和功能塊圖(FBD)的圖形化函數塊,以及適用於偏好使用文字格式(ST)的程式設計師的文字對應函數。例如,定時器、計數器和三角函數等。

PLC 程式設計師透過使用這些內建函數以及他們自己設計的程式單元(POU)來建立 PLC 應用程式。在圖 2 中,我們可以看到使用者寫了兩個程序,分別是 prgCtrl 和 prgComms。作為分層設計流程的一部分,這些程式隨後實例化了各種使用者編寫的功能區塊和函數。圖 2 中總共有七個程式單元。

技術提示:使用者自訂功能塊(UDFB)和使用者函數是密切相關的程式單元。區別在於,UDFB 包含內存,並且會根據狀態(過去的交互)返回不同的值,而函數對於給定的輸入集始終返回相同的值。

使用者編寫函數和功能塊的用途是什麼?

每個 PLC 製造商都提供豐富的內建函數,適用於各種 PLC 應用。然而,使用者需要根據具體應用程式編寫使用者編寫函數(POU)。例如,程式設計師可以編寫一個函數來計算給定罐體直徑和液位高度下的總加侖數。程式設計師也可以編寫使用者編寫功能塊(UDFB)來封裝三相馬達啟動器/接觸器的操作。UDFB 及其關聯的記憶體用於追蹤實體機構的狀態。

在所有情況下,這些函數和 UDFB 都是程式設計師的智慧財產權。如果編寫得當,它們可以構成一個用於解決常見控制問題的函式庫。這使得經驗豐富的 PLC 程式設計師能夠利用大量編寫良好且經過測試的 POU 快速建立應用程式。

技術提示:PLC 程式設計師可以從物件導向程式設計(OOP)語言中獲益。雖然 IEC 61131-3 標準本身並不具備 OOP 功能,但 PLC 程式設計師可以採用 OOP 原則。例如,三相馬達啟動器是一個實體設備,PLC 可以對其進行控制和監控。透過精心的軟體設計,程式設計師可以將馬達啟動器的功能封裝到一個使用者自訂回饋物件 (UDFB) 中。該物件可以作為現實世界的抽象表示。 PLC 程式設計師將這些物件收集到一個庫中,從而加快程式設計速度,同時提供一個通用的結構,便於技術人員進行故障排除,並允許快速進行後續修改。

Opta 和 Modicon 之間可以共用哪些軟體元件?

現在我們對 IEC 61131-3 POU 有了深入的了解,我們可以確定哪些內容可以在 Arduino Opta 和 Schneider M171 /172 之間共享,哪些內容不能共享。作為一個簡單的語句,使用者編寫的 POU 可以共享,包括程式、函數和 UDFB。如圖 2 所示,我們必須對全域變數使用一致的命名方案。這是至關重要的,因為全域變數是圖 2 左側硬體依賴性和右側硬體獨立性之間的連結。

請注意,尚未對所有類型和情況進行完整的兼容性測試。然而,正如將要證明的那樣,有充分的理由相信大多數 POU 將會轉移。一個重要的線索是 Opta 和 M171/M172 的內建功能之間的重疊。 TON 是兩個套件共用的內建 POU 的範例。因此,包含定時器的使用者程式或 UFDB 預計是可移植的。

技術提示:在 Schneider Electric 的產品中,「Modicon」指的是從 Pico TM221C16R 到功能強大的 TM262M35MESS8T 等一系列 PLC。該名稱還包含一系列專為商用機器設計的控制器,稱為 Modicon M171/M172 系列。 Arduino Opta 的這種通用性僅限於 M171/172 系列。

為什麼全域變數對於可移植程式至關重要?

計算機科學專業的學生被要求避免全局變數。這是一個很好的建議,因為全域變數會使程式變得複雜。眾所周知,它們也很難排除故障,特別是當程式跨越多個頁面或程式分佈在多個 .h 和 .cpp 檔案時。

在 IEC 61131-3 環境中全域變數是不可避免的。即使是 Opta 171/172 最簡單的程式(使用單一按鈕控制單一輸出引腳)也需要兩個全域變數。這是正確的,因為螺絲端子 I/O 會對應到全域變量,然後可由 PLC 程式碼結構中的任何程式(小 POU)存取。

回顧圖 2,我們認識到更大的 PLC 程式由硬體相關配置(左側)和硬體獨立 POU 集合(右側)組成,其中包括內建 POU 以及用戶編寫的 POU。如圖 2 所示,PLC 程式的兩端透過這些全域變數進行通訊。

這是一個將硬體映射到特定變數名稱的問題。Opta 和 M171/M172 使用圖 3 所示的機制執行此操作。例如,我們看到 Opta 輸入 I1 和 I2 分別對應到 gxPB1 和 gxPB2。同樣,我們看到 M172 DIL1 和 DIL2 輸入也對應到 gxPB1 和 gxPB2。

這是一個值得重複的重要考慮因素。我們可以有不同的硬體但通用的全域變數名稱。這些通用名稱對於 prgCtrl 或 prgComms 等可移植 POU 至關重要。此策略是一個抽象層,為圖 2 右側的 POU 提供通用介面。

技術提示:強烈建議在基於標籤的環境中使用匈牙利表示法(Hungarian Notation)進行 PLC 編程,如本工程簡介中所介紹的。使用這種表示法,我們為每個變數添加資料類型前置,例如布林值的「x」。我們也包含「g」前置來指示變數在範圍內是全域的。根據我作為教育工作者的經驗,這些小細節可以節省大量的開發和故障排除時間,因為 PLC 程式設計師必須明確考慮每個變數的範圍和類型。人們很容易看到不屬於的東西。有關 PLC 程式設計的其他建議,請參閱 PLCopen 編碼指南

圖 3:Arduino(上)和 Schneider(下)的 gxPB1 和 gxPB2 的硬體特定會對應到全域變數。

POU 如何跨平台轉移?

讓我們先建立一個簡單的 POU,如圖 4 所示的 prgCtrl。這是一個非常簡單的程序,用於監視兩個按鈕。如果按下 gxPB2 且 gxPB1 已啟動至少 1s,面板燈將會亮起。在此範例中,我們將 1s延遲硬編碼到 TON 計時器中。回想一下,Opta 的計時器以 1ms 的速率計時。當編程時間 (PT) 設定為 1000 時,我們有 1s 的延遲。

一旦建置並測試了該程序,我們就可以將其匯出到庫中。為此,我們右鍵單擊 POU 並選擇「匯出到庫」。這將在您選擇的位置建立一個 *.plclib 檔案。請注意,許多 POU(包括程式、功能和功能塊)可以放置在公共 *.plclib 檔案中。這是非常理想的,因為您的 POU 具有高度可移植性。

建立庫檔案後,您可以將其用於下一個 Opta 專案。若要匯入 POU,請選擇「匯入物件」,然後從資料庫中選擇所需的 POU。這是一個非常簡單的過程,可以識別 POU 版本並能夠新增或覆蓋專案樹中的現有 POU。

圖 4:Arduino Opta 實作的共享 prgCtrl POU。

Opta 和 Modicon 的跨平台功能

Opta 和 M171/M172 似乎是基於相同平台建置。例如,仔細觀察圖 4(Arduino)和圖 5(Schneider),可以發現它們擁有相同的程式樹。我們也在 prgCtrl POU 中看到了相同的元素。

事實上,它們是同一個 POU!在特定環境下,庫的運作過程與跨平台運行過程相同。

在本例中,prgCtrl 是在 Arduino PLC IDE 中編寫的,傳遞給一個庫,然後導入到 Schneider Electric EcoStructure Machine Expert – HVAC 系統中。您可以點擊此處下載範例 POU(庫),親自體驗:

POUDemo.plclib (2.1 KB)

圖 5:Modicon M172 實作共享 prgCtrol POU

跨平台相容性意味著什麼?

就我個人而言,我認為這是一種令人欣喜的協同效應。 PLC 可以用所有 IEC 61131-3 語言編程是一回事,而各個 POU 可以完整地跨多個平台傳輸則是另一回事。社區有很大的潛力來建立和共享 POU 庫。大量相關設備的存在激勵了社區的參與,因為它不再局限於特定的硬體。在某些方面,這就像用 C 語言程式設計一樣,因為我們現在擁有一個有效的抽象層,提供了非常理想的硬體獨立性。

從教育的角度來看,這非常有益。正如我之前所論述的,Arduino 在微控制器開發領域擁有近二十年的領先地位。Arduino 在高等教育領域廣為人知,並被技術人員、技術專家和工程師廣泛使用,其中也包括相當一部分電氣和機械專業的學生。

回想一下,Opta 的獨特優勢在於它能夠充分利用現有的微控制器使用者群體,因為它既可以使用傳統的 Arduino IDE 進行編程,也可以使用支援所有 IEC 61131-3 語言的新型 Arduino PLC IDE 進行編程。從教育角度來看,這種靈活性為 PLC 程式設計提供了多種切入點。它還便於平行程式設計作業,使學生能夠探索各種 IEC 61131-3 語言以及傳統 Arduino IDE 的優勢和挑戰。

憑藉這種互通性,所有這些教育優勢和良好口碑都將立即轉移到 Schneider Modicon M171 和 M172 產品上。

回到 POU 的基本建置模組,我設想一個由教育工作者和其他相關合作夥伴組成的社區,共同建置和維護用於特定應用的 POU 程式庫。如前所述,其中許多 POU 可以採用類似物件導向程式設計 (OOP) 的物件形式,用於與 PLC Connect 硬體進行互動和控制。這具有巨大的潛力,可以降低 PLC 程式設計的門檻,從而使更多程式設計師能夠參與其中。

請分享您對 PLC 程式設計和培訓的意見、問題和疑慮。此外,可能還有其他尚未被發現的 PLC 也使用這種通用介面。感謝您提前補充完善清單。

:books: 繼續探索更多工業控制系統資訊

如果您覺得本次討論對您有幫助,您可能還想了解以下內容:

:world_map: DigiKey 導航