為什么對PLC編程這么感興趣?可以說,因為PLC是大多數工業自動化系統的支柱,所以理解使用這種設備的復雜性當然很重要。這引出了一個重要的問題:為什么PLC首先成為如此重要的控制架構?
關于這件事有很多值得商榷的觀點,但我最堅定的一個觀點是梯形邏輯編程結構;能夠在看起來和感覺上都像運行工廠的電氣原理圖的環境中編程。電工、工程師和技術人員都可以很容易地理解和排除這些程序的故障。
今天,我們將稍微擴展一下梯形邏輯的范圍。AutomationDirect以包括PLC在內的大量自動化設備而聞名,它提供了一種稱為ProOpen的模型,這是一種模塊化PLC,具有Arduino MKR Zero微控制器的大腦。
圖一。
我的工作臺設置包括電源、以太網適配器、CPU和I/O模塊。你可以只用CPU和I/O模塊來完成這個項目!
Arduino與PLC有何不同?
這是一個重大的根本性問題。一;一個Arduino只是一塊板子這提供了對處理器芯片的I/O引腳的簡單訪問。但除此之外,編程環境是免費的、簡單的、基于文本的,用戶社區是巨大的和全球性的。
如果我們想得到具體的,有兩個主要的區別。Arduino是用C++(基于文本,而不是梯形邏輯)的變體編程的,Arduino也沒有簡單的卡扣式I/O模塊,除了可以放置在可堆疊接頭上的某些“屏蔽”,但這些看起來不太像任何控制工程師都會認識的PLC I/O模塊。
然而,ProOpen結合了Arduino MKR板的功能和靈活性,并將其封裝到DIN導軌安裝的CPU、電源和I/O模塊系列中,與Productivity 100 PLC系列兼容。如果我們能利用這一點,我們就有了一個非常強大的PLC。
開始:我需要什么?
這個項目,雖然不像市場上的一些PLC那樣昂貴,但仍然需要幾個項目才能成功。我們將使用P1AM-100 CPU和組合輸入/輸出模塊P1-16CDR。在我的設置中,我還包括了一個以太網模塊和一個電源,但這個介紹性項目將成功沒有這些。
除了PLC本身,我們還需要一個24伏電源和微型USB電纜,包括電源和數據(您的計算機應該在設備管理器中注冊一個新設備)。
由于編程使用Arduino軟件,您可以在Windows、Mac或Linux上對該PLC進行編程!本教程是在軟件版本1.8.19上測試的(向下滾動并找到“傳統IDE”按鈕在下載頁面上).我個人沒有在Arduino最新的2.0版本平臺上測試過。
硬件設置非常簡單。I/O模塊連接在CPU的右側,并固定在DIN導軌上。電源已連接,在將USB電纜連接到CPU之前,我接通了24伏電源。
圖二。
所需硬件:P1AM-100 CPU和P1-16CDR I/O模塊,以及用于接線的端子板。
配置軟件
要正確使用Arduino軟件,您需要添加兩個元素:
這圖書館提供對運行I/O和通信功能的所有命令的方便訪問。
這董事會經理提供有關P1AM硬件本身的信息。
這些說明已經很好地提供了手冊中的步驟從AutomationDirect開始,從第1-5頁開始,一直到第1-6頁的底部。
對于本教程,我只使用Arduino IDE,而不是附加的ProdictivityBlocks軟件。當您加載代碼時,您可能會遇到即使是那些使用過Arduino產品的人也不熟悉的錯誤,所以請務必查看解決紛爭一節。
設計您的代碼
如果您不熟悉C++編程的基礎,它包含了梯形邏輯的所有相同元素,但格式完全不同。
假設我使用相同的硬件設置,我提供了一個模板來幫助我開始編寫任何代碼。下面是代碼,從一開始就包含了庫。我將對它進行分解,并解釋每個組件以及它與梯形邏輯項目的關系。
標簽名稱變量
在這個IDE中,變量名在整個代碼中使用,可能很多次,就像標簽一樣。在每一個實例中刪除和重新鍵入新的標記名將是一場噩夢,所以在代碼的最頂端,我創建了一個部分來定義我的輸入和輸出變量名。
在我的第一個簡單項目中,我有一個藍色按鈕連接到輸入終端1,一個綠色按鈕連接到輸入終端2。輸出模塊上還有標準的紅色LED指示燈。你可以按照我的例子,輸入你想使用的標簽名。
帶“int”的行是指每個I/O點的整數值。這些必須在代碼的頂部全局定義,就像PLC程序中所有I/O地址的控制器范圍標記一樣。
圖3。
定義標記名變量。前兩個已經為我的程序設置好了。我們還需要8倍的輸出。
例行程序:設置
所有PLC都包含第一周期掃描邏輯。我們通常會忽略該例程并將其留空,但C++中的設置例程包括通信通道的初始化和PLC響應的驗證。
圖4。
設置例程初始化串行通信(如果我們最終需要它)并驗證CPU狀態。
子程序:readModules
在典型的PLC掃描中,在執行任何邏輯之前,檢測所有輸入點的狀態。這個簡單的子程序將獲得這個組合模塊上的所有輸入地址(它有8個輸入和8個輸出)。
如果其他模塊(甚至模擬輸入)被添加到項目中,它們也可以被添加到readModules例程中。
圖5。
該子程序讀取所有輸入模塊點。為了方便起見,我們在程序的頂部定義了槽號。
主例程:循環
主例程按此順序執行三項基本任務:
運行readModules子程序
檢查我們代碼中的所有邏輯指令
運行writeModules子例程。
在步驟2中,我們唯一需要進行代碼編輯的地方是在所示的//注釋標記之間。
與其重新散列這個If/Else語句邏輯,不如看看我們以前的文章,描述如何在C++編碼環境中重新創建梯形邏輯.
對于我的簡單測試,代碼檢查紅色和綠色按鈕,如果兩個按鈕都通電,輸出LED也將通電。
圖6。
主例程實際執行用戶定義的邏輯。它不一定是梯形格式,但這可能會有所幫助。
子程序:寫模塊
一旦邏輯被執行,所有I/O點的臨時狀態被存儲,但尚未寫入I/O模塊。這個最后的子例程的目的是寫入這些值。
這意味著隨著代碼長度的增加,會有輕微的延遲,這與傳統的PLC更相似,而與典型的微控制器代碼有點不同,后者可以隨時寫入值。
C++環境的靈活性允許程序員對輸出響應邏輯條件的時間、方式和原因有更多的控制。
圖7。
這個例程接收所有更新的標簽值,并將它們寫入適當的輸出終端。
ProOpen故障排除提示
由于內置MKRZero板,有一些小技巧可以幫助編程。
首先,在使用箭頭按鈕上傳之前,請始終按下“驗證”復選標記按鈕。這樣,您可以將錯誤隔離到代碼錯誤或加載錯誤。首先解決代碼錯誤。
圖8。
加載代碼時可能出現COM錯誤。
重新啟動Arduino IDE
由于COM端口當前正被某個現有項目使用,因此存在一些錯誤。關閉和打開IDE可以清除一些問題并刷新板和端口標識。如果這不起作用,請繼續下一步。
圖9。
這顯示了如何為Windows機器正確選擇板和端口。
COM端口號
如果程序在加載過程中報告錯誤,請驗證板的選擇是否正確,以及COM端口是否正確。下圖顯示了正確的值(盡管您的COM端口號可能不同)。
圖10。
如果遇到此錯誤,請雙擊重置按鈕,選擇COM端口,然后再次上傳。
引導加載程序模式的重置按鈕
加載程序時,可能會出現通信錯誤。與熟悉的Arduino Uno板相比,處理CPU USB和串行通信之間轉換的芯片有所不同。簡單地再次按“上傳”或重啟可能無法解決問題。
一個常見的解決方法是快速按下CPU上的“重置”按鈕兩次,然后選擇適當的COM端口(它可能會改變),并再次上傳。
這個重置按鈕將CPU置于停止代碼執行并允許加載的模式,有點像將PLC置于停止模式。
代碼停止執行
在一些罕見的情況下,代碼似乎會在一段時間后停止執行(我的經驗是大約12小時)。在我的情況下,CPU在此期間通過USB連接到計算機。拔下USB并按下“重置”1次后,代碼仍然無法執行,需要重新上傳代碼。
在第二個測試中,成功上傳后立即斷開USB連接,代碼繼續無限期執行(至少在撰寫本節前幾天)。
將微控制器用作PLC
將微處理器嵌入PLC機箱的過程與大多數PLC的現實并沒有太大的差距。然而,許多人會認為這一目的限制了微控制器的潛力,盡管這可能是真的,但PLC軟件無疑在工業領域提供了一些極端的優勢,迎合了不熟悉基于文本的編碼的操作員和技術人員的需求。這種PLC是一個很好的折衷方案,具有一些獨特的靈活性優勢。
審核編輯 黃宇
-
微控制器
+關注
關注
48文章
7487瀏覽量
151042 -
mcu
+關注
關注
146文章
16984瀏覽量
350293 -
plc
+關注
關注
5008文章
13150瀏覽量
462049 -
Arduino
+關注
關注
187文章
6464瀏覽量
186642
發布評論請先 登錄
相關推薦
評論