如何查看 Arduino Opta 的 I/O 狀態

本文介紹一種梯形圖邏輯程式碼,使 Arduino Opta 能夠像影片 1 中所示那樣,在狀態 LED 上顯示輸入/輸出 (I/O) 狀態。這項技術可以減少通常與可編程邏輯控制器 (PLC) 相關的故障進行排查所需的時間。諸如識別損壞或錯位的感測器之類的任務將變得非常簡單。

下載程式碼 (5.8 MB)

本文假設讀者俱備一定的梯形圖邏輯 (LL) 知識,並且先前已使用梯形圖邏輯程式配置和程式設計過 Opta 系統。例如,本文假設讀者能夠編寫經典的三線馬達啟動器程式碼,該程式碼包含啟動和停止按鈕以及鎖存器。如果您是工業自動化領域的新手,建議您先閱讀這份簡短的詞彙表。

詞彙表

Arduino Opta

Arduino Opta:Opta 是 Arduino 家族的最新成員之一。它是一款可編程邏輯控制器 (PLC),專為幫助學生過渡到工業自動化領域而設計。它既可以使用傳統的 Arduino IDE 進行編程,也可以使用全新的 PLC 專用 IDE 進行編程,後者支援符合 IEC 61131-3 標準的梯形圖、功能區塊、結構化文字、指令列表和順序功能圖等程式語言。

全域變數(Global Variables)

PLC 代碼通常被分解成較小的程序組織單元 (POU)。全域變數通常用於這些程式之間的通訊。這類似於你在 Arduino 程式設計時學到的記憶體範圍概念。

加固型(Hardened )

該詞彙意味著 PLC 可以在惡劣的工業環境中運作。PLC 預計可在高溫下運作數十年。還有一種針對意外電氣連接的生存能力的衡量標準,包括施加到輸入端子的不正確電壓所導致的短路。

匈牙利命名(Hungarian Notation)

匈牙利命名法:此變數命名方案鼓勵程式設計師在變數名稱中包含資料類型和作用域。這種風格尚存爭議。然而,根據作者的經驗,初學者程式設計師會從中受益匪淺。它可以節省大量程式碼故障排除時間,尤其是在遇到用戶自訂函數區塊等進階主題時。

輸入/輸出(I/O)

請參閱螺絲端子。

梯形圖邏輯(Ladder Logic)

梯形圖邏輯是 IEC 61131-3 標準語言之一。它是一種圖形化語言,其符號與實體繼電器有共同之處。

對應(Mapping)

這種技術用於將一個記憶體位置的內容傳輸到另一個記憶體位置。通常,程式設計師不受 PLC 可用記憶體容量的限制;程式的清晰度優先於記憶體大小。對應是一種可靠的方法,可以提高程式的清晰度並減少故障排除時間。例如,程式設計師只需對物理 I/O 進行一次引用。這樣,當程式被修改時,無需費力地查找和更改所有對該 I/O 的引用,從而避免了出錯。如果 PLC 的某個觸點損壞,這種方法尤其有利,因為技術人員只需更改一行程式碼即可切換到仍然正常運作的接點。

螺絲端子(Screw-terminal )

PLC 的實體連接通常分為輸入區塊和輸出區塊。一個相關的術語是「現場設備」。這些感測器和執行器連接到 PLC 的螺絲端子上。

自文件程式碼(Self-Documenting Code)

PLC 的生命週期長達數十年。一般來說,它們不會像手機那樣每隔幾年就升級一次。在理想的設定中,將使用 PLC 執行的物理操作的清晰名稱來編寫程式。例如,梯形邏輯的一個梯級可以讀作「在夾緊感測器啟動後 2s 啟動鑽孔馬達」。

自重置(Self-Resetting)

就本文而言,對應於定時器和計數器。例如,定時器可以被編程產生規律的脈衝。計數器可以被編程計數到特定數字後自動重設。將二者結合,可以建構一個類似時鐘的結構,從 0 計數到 59,每次計數延遲一秒。

狀態機(State Machine)

PLC(可編程邏輯控制器)旨在控制實體機器或其他工業製程。通常,機器的運作取決於一系列物理步驟,例如工件進入機器、經過加工處理以及最終從機器中排出。狀態機指的是追蹤和控制這些步驟的 PLC 程式碼。一般來說,該術語可用於描述任何包含特定步驟的程式碼結構。

相關論壇文章

影片 1:Opta 輸入和輸出的狀態顯示在狀態 LED 中,綠色表示第一個輸入半字節,紅色表示第二個輸入半字節,藍色表示輸出半位元組。

引言

我們中的許多人都是在教育環境中接觸到 Arduino 的。我們都學習如何在試驗電路板上建立電路,並對微控制器進行編程,以實現各種巧妙、有趣且實用的功能。當我們從試驗電路板過渡到工業環境時,需要考慮不同的參考框架。

Arduino Opta 是一款可編程邏輯控制器 (PLC)。它是一款加固型工業計算機。這裡的「加固型」指的是 Opta 的設計旨在適應嚴苛的工業環境。其敏感的輸入經過特殊處理,使微控制器脆弱的 3.3V I/O 接腳能夠接受 24VDC 電壓,並能承受一定程度的衝擊。Opta 的基本單元具有四個基於繼電器的輸出,能夠直接驅動各種中等功率的負載,包括具有 120VAC 線圈的馬達啟動器。

保留所有熟悉的 Arduino 理念和習慣是一種自然的本能。然而,這可能會給我們帶來麻煩。例如,假設你設計了一台使用 Opta 控制器的微型機器。你成功地為 Opta 編程,並在值得慶祝的那天,機器調試完畢,開始在工廠車間投入生產。有些人會將這次調試視為辛勤工作的成功成果。

經驗豐富的工程師知道,這只是個開始。

這台機器現在已成為工廠基礎設施不可或缺的一部分。它需要可靠地運行。一旦(而不是如果)它發生故障,技術人員必須能夠迅速恢復機器的運作。這一點至關重要,因為機器故障會造成巨大的生產損失和人員閒置成本。

理想情況下,技術人員無需使用任何測試設備,當然也無需找到電腦開啟 IDE 並與之互動即可修復設備。事實上,技術人員完全無法存取 PLC 中儲存的智慧財產權的情況並不少見。鑑於現今複雜的工作環境,技術人員可能剛入職不久,對所用 PLC 缺乏經驗。

一種有效的輔助技術人員的方法是,對 Opta 進行編程,使其 I/O 狀態顯示在 Opta 的 LED 指示燈上。

本文將探討實現此目標的梯形圖邏輯解決方案。透過紅、綠、藍三色指示燈,技術人員可以快速確定每個螺絲端子輸入/輸出(I/O)的狀態。例如,如果接近感測器損壞或錯位,技術人員無需任何測試設備或電腦即可進行維修。這樣可以快速排除故障,最大限度地減少設備停機時間。

狀態指示燈

圖 1 展示了 Arduino Opta 的圖片。請注意,它有 4 個狀態指示燈。在 RESET 接腳孔上方還有一個綠色/紅色雙色指示燈,在 USER 按鈕上方還有一個藍色指示燈。這些指示燈共同用於向技術人員顯示所有 I/O 的狀態。

圖 1:Arduino Opta 是一款小型 PLC,非常適合向工業環境過渡的學習者。

為了方便討論,我們假設所有輸入均為數位訊號。總共有 12 個 I/O:8 個數位輸入和 4 個數字(繼電器)輸出。我們配備了 4 個狀態指示燈和 3 個指示指示燈,如果採用循環方式,則足以顯示所有 I/O 的狀態。

圖 2 展示了一種實作方式。請注意,每個半位元組(4 個二進位值)都用不同的顏色編碼。當綠色 LED(位於重設針孔上方)亮起時,輸入 I1 到 I4 的值會回顯到四個狀態指示燈。延遲 2s 後,程式會切換到紅色 LED,狀態指示燈將顯示輸入 I5 到 I8 的值。最後,再延遲 2s 後,藍色 LED 亮起,PLC 的輸出值會回顯到狀態指示燈。

圖 2:Opta I/O 與狀態指示燈的顏色對應關係。

例如,當 Opta 的紅色 LED 亮起時,狀態指示燈會顯示 I5 至 I8。

梯形圖邏輯

有幾種不同的方法可以對 Opta 進行程式設計以執行此功能。本文重點介紹梯形圖邏輯,因為它是 PLC 的傳統語言,並且如技術提示中所述,使用這種符合 IEC 61131-3 標準的語言是有充分理由的。

技術提示:關於梯形圖邏輯 (LL) 存在一些爭議。有人認為 LL 是一種過時的技術,應該被現代程式語言取代。或許如此,但它仍然被廣泛使用,並且很可能在未來幾十年內繼續如此。即使我們從今天起就完全禁止 LL 進行 PLC 編程,我們也可以預期現有的機器在其 20 到 30 年的自然生命週期內仍將繼續使用 LL。另外,LL 與繼電器及其與現實世界設備的實體連接非常相似。所有 PLC 程式設計師和技術人員都需要掌握這些資訊才能有效地完成各自的工作。

圖 3 展示了程式碼概要。由於 prgStatusDisplay 函數需要編寫一次,然後在多個專案中重複使用,因此設計較為複雜。這就要求對變數進行仔細命名,也解釋了對應操作看似冗餘的原因。

圖 3:用於顯示 I/O 狀態的程式位於自文件程式碼之外。

讓我們從圖的中心開始,逐步向外分析。PLC 程式設計的核心是自文件程式。在這裡,我們可以找到輸入對應程式 (prgInMap)、控制程式 (prgCtrl) 和輸出對應程式 (prgOutMap)。請注意,我們使用的是匈牙利命名法。

為了便於理解,我們將「自文件化」定義為包含與物理世界相關的描述性名稱的程式碼。例如,實體控制面板可能包含一個選擇開關、一個啟動按鈕和一個停止按鈕。在內部,它們可以分別命名為 gxEnable、gxStart 和 gxStop。其中,字母 g 表示全域記憶體位址,x 表示布林類型,後面跟著描述性名稱。梯形圖邏輯表示如圖 4 所示,我們可以看到,當啟用開關被啟動時,gxMotor 會透過啟動/停止鎖存器被啟動。

技術提示:對於任何語言,即使是像 LL 這樣「簡單」的語言,保持一致的程式設計風格都至關重要。您的工作場所可能已經制定了風格指南。如果沒有,PLCopen 提供的編碼指南文件是一個很好的起點。這份開源文件解釋了使用 prg 等前置以及使用 gxPBStart 等匈牙利命名法的理由。

圖 4:馬達啟動電路的梯形邏輯鎖存器

技術提示:熟悉梯形圖邏輯的人可能已經注意到與 gxStop 相關的常閉觸點。這可能會引起擔憂,因為物理停止開關應具有常閉觸點。換句話說,停止機器的東西必須包含常閉觸點,作為防止電線斷裂或鬆動的故障保護裝置。為了防止混淆,prgCtrl 中使用了正邏輯思維。由於 prgInMap 會翻轉停止開關的極性,因此無需同時考慮開關類型及其在電路中的安裝方式。相反,我們可以簡單地說「如果不停止」。

對應挑戰

PLC 程式設計的一個重要挑戰是將這些自文件化的名稱對應到實體「螺絲端子」I/O。在圖 3 中,我們可以看到 prgInMap 和 prgOutMap 分別位於 prgCtrl 的兩側。我們也可以看到 Arduino Opta 程式碼空間中的輸入輸出對應,其中包含對系統資源的特定參考。

通常情況下,prgInMap 和 prgOutMap 並非必要。例如,我們可以將連接到螺絲端子 I1 的實體啟動開關與 Arduino Opta 輸入對應區塊中的 gxStart(圖 3 中從左數第二個)關聯起來。

prgInMap 和 prgOutMap 的存在是為了實現 prgISStatusDisplay 的乾淨且永不更改的實例化。我們的目標是編寫一次狀態顯示程序,並且永遠不再修改它。如果我們在 Arduino Opta 的資源部分執行對應操作,則無法實現這一點。

對應如圖 5 所示。請注意,所有變數的作用域均為全域布林值。雖然這可能會讓一些追求完美的程式設計師感到不快,但對於梯形圖程式來說,這是必要且正常的操作。全域變數用於在圖 3 所示的程式區塊之間進行通訊。例如,在圖 4 的中間部分,我們可以看到 Opta 的 I_O_mapping-ProgInp 部分。我們可以清楚地看到,八個螺絲端子輸入已對應到 gxI1 到 gxI8。同樣,I_O_mapping_RelayOut 的輸出已對應到 gxO1 到 gxO4。

圖 5:Opta 資源部分中執行的對應操作

對應概要

如圖 3 所示,IOStatusDisplay 程式接收變數 gxI1 至 gxI8 以及 gxO1 至 gxO4。程式有七個輸出;其中四個驅動狀態指示燈,三個驅動圖 2 中所示的綠色、紅色和藍色指示燈。我們希望 prgIOStatusDisplay 程式只需寫一次,之後無需再修改。這需要圖 4 中所述的嚴格對應操作。

在圖 5 所示的 Opta 資源中,我們將始終使用 I_O_mappings_ProgInp、I_O_mappings_ProgOut 和 I_O_mapping_LEDOut 中給定的變數名稱。因此,我們使用者定義的 prgInMap 和 prgOutMap 用於將固定的資源名稱對應到通常與 PLC 程式設計相關的、易於理解的名稱。例如,連接到 I1 的實體啟動開關在傳遞給 prgCtrl 時,其名稱變為 gxI1,而傳遞給 prgCtrl 時,其名稱變為 gxSWStart。

顯示 I/O 狀態程序

prgIOStatusDisplay 的實際梯形圖邏輯程式碼相對簡單,如圖 6 所示(位於本文末)。它由 6 行程式碼組成。前兩行構成一個簡易的狀態機。自重設定時器 TON_1 每 2s 發出一個脈衝。自重設計數器 CTU_1 提供從 0 到 2 的計數。請注意,在一次程式掃描中,它會提供 3 的計數。但是,這對於此應用來說無關緊要。

第 0002 行包含一系列比較器。這些比較器將根據 CTU_1 中儲存的狀態啟動紅色、綠色和藍色指示燈。

行 0003 清除四個狀態指示燈。然後,根據機器所處的狀態,在 0004 到 0006 行設定狀態 LED。例如,如果 I1 和 I3 為真,則當 gxLEDGreen 輪到時,狀態 LED gxLED1 和 gxLED3 將被設定。

圖 6:prgIOStatusDisplay 的梯形圖邏輯實現

結論

本文介紹的技術能夠幫助技術人員快速排除 PLC 故障。他們無需使用測試設備,也無需花費時間連接筆記型電腦查看 PLC 代碼。程式本身相對簡單,但在變數對應方面需要相當的嚴謹性。

我們期待您在設計、建造、排除故障和維修工業控制系統的過程中與我們交流。您的回饋對我們和我們的讀者都至關重要。請在本頁面或 DigiKey 的主技術論壇頁面上分享您對本文的評論和問題。

下載程式碼 (5.8 MB)

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

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

:world_map: DigiKey 導航