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