plc編程入門梯形圖
梯形圖是一種PLC編程語言,也被稱為梯形邏輯(Ladder Logic)。之所以稱為梯形圖,是因為這種程序由一條條水平線構(gòu)成,看起來很像梯子。
梯形圖是為電氣工程師發(fā)明的,它是一種圖形化的編程語言,這意味著編程的過程不是采用文本,而是組合各種不同的圖形符號,由于目標(biāo)用戶是電氣工程師,因此采用的符號非常類似于電路符號,以便于電氣工程師理解。
梯形圖主要用于位邏輯操作,其規(guī)范有PLCOpen負(fù)責(zé)制定,因此梯形圖是標(biāo)準(zhǔn)化的PLC編程語言,該標(biāo)準(zhǔn)為IEC 61131-3。
梯形圖基礎(chǔ)
創(chuàng)建梯形圖時,你首先看到的就是兩條豎線,就是在這兩條豎線之間進(jìn)行梯形圖的編制,其中每一條水平線被稱為一個Rung(橫線):
??
梯形邏輯符號就放置在這些水平線上,正如你在上圖中看到的,我在每一個水平線上標(biāo)記了數(shù)字,以便于理解PLC是如何執(zhí)行梯形邏輯的。你可能聽說過PLC掃描時間或掃描周期,簡單地說,PLC首先掃描其輸入,然后執(zhí)行程序,最后設(shè)置輸出。
但是PLC如何執(zhí)行我們的梯形邏輯?
一次一條水平線。
這可能是梯形邏輯的最重要的一條規(guī)則:PLC一次只能執(zhí)行一條水平線,然后才是下一條。實際上,PLC只能一次執(zhí)行一個邏輯符號。
編寫梯形邏輯
梯形邏輯中的每個符號都是一個指令,初看起來這相當(dāng)令人困惑。但是別擔(dān)心,我將用簡單的例子加以解釋。讓我給你一個簡單的實例,在這個例子當(dāng)中將引入兩個梯形邏輯符號。
那么,這些符號或指令到底是什么?
它們是基本的邏輯指令,讓你可以創(chuàng)建一小段邏輯,也就是你的PLC程序。如果你仔細(xì)看下面的示例,可以看到兩個指令(符號):
??
閉路檢查指令
第一個指令被稱為閉路檢查,指令的符號看起來是這樣:
??
這是一個條件指令,意思是說這個指令用來檢查某個條件是否滿足,例如檢查某個數(shù)據(jù)位是否處于ON的狀態(tài)。
閉路檢查指令用來檢查某個地址的特定位,在上圖中指的是一個數(shù)字輸入的特定位,它也可以是內(nèi)存位,甚至是輸出位。
閉路檢查指令也被稱為常開指令,基本上它類似于電路中的常開觸點,因此可以對應(yīng)于一個點動開關(guān)。
需要指出的是,每個閉路檢查指令必須要設(shè)置PLC中的一個地址。
輸入和輸出都是PLC中的內(nèi)存點位。在上面的示例中,閉路判斷指令設(shè)置地址I0.0作為條件,這個地址屬于PLC的第一個輸入。
其工作原理如下:
當(dāng)PLC掃描周期開始,PLC將首先檢查所有輸入的狀態(tài),然后將輸入狀態(tài)(0或1)寫入內(nèi)存中,如果輸入是LOW,那么對應(yīng)的內(nèi)存位置位0,如果輸入是HIGH,則對應(yīng)的內(nèi)存位置為1.
輸出線圈指令
每個指令本身在PLC內(nèi)存中也有個位置,PLC會將指令的結(jié)果存入。要了解PLC使用結(jié)果做什么,讓我們看下一個指令:
??
輸出線圈指令用來打開或關(guān)閉一個數(shù)據(jù)位。
正如你看到的,該符號位于水平線的右側(cè),意思是(同一水平線上)之前的指令作為該指令的條件。在我們的示例中,之前的指令就是閉路檢查指令。
讓我們檢查下該指令的最終結(jié)果,來了解其工作過程:
PLC 掃描 | 輸入 -》 I0 字節(jié)
程序執(zhí)行 | I0.0 -》 Xic結(jié)果
??
在上面的動畫中,你會看到PLC首先掃描所有的輸入,并將輸入狀態(tài)存入內(nèi)存。一個內(nèi)存字節(jié)是彼此相鄰的8位。
一旦PLC保存了所有輸入的狀態(tài),程序?qū)㈤_始運(yùn)行。第一個要執(zhí)行的指令是閉路檢查指令,該指令的結(jié)果與內(nèi)存位狀態(tài)一致 —— 這也是該指令被稱為常開指令的原因 —— 在正常狀態(tài)(內(nèi)存位為0),觸點將保持常開,結(jié)果將為0,但是如果內(nèi)存位為1,觸點將閉合,結(jié)果也變?yōu)?。
最后,讓我們看這條線的輸出:
XiC結(jié)果 -》 輸出線圈
輸出線圈 -》 輸出字節(jié)
現(xiàn)在,輸出線圈指令使用了前序指令的結(jié)果作為條件。這被稱為RLO(邏輯操作結(jié)果)。邏輯操作結(jié)果保存在PLC內(nèi)存中的特定位置。在西門子S7系列PLC中,這個位置被稱為狀態(tài)字。
在PLC術(shù)語中,一個WORD是16位,或2個字節(jié)。
輸出線圈指令很簡單,它只是將其結(jié)果設(shè)置為與條件相同的值。
在PLC中所有的數(shù)字輸出也映射到內(nèi)存地址。我們將其稱為輸出位,因此地址Q0對應(yīng)Q0.0 - Q0.7.輸出線圈指令的結(jié)果將被寫入內(nèi)存位Q0.0。
當(dāng)PLC執(zhí)行完整個程序,它將設(shè)置輸出。每個輸出被設(shè)置為與輸出內(nèi)存位一致的狀態(tài)。
掃描周期這個概念非常重要,當(dāng)你在編制梯形邏輯時一定要記住。否則你的程序可能會有奇怪的行為。我們將在下一個示例中展示這一點,同時引入3個新的梯形邏輯指令。
輸出鎖存
在前面的示例中,我們學(xué)會了如何讀取數(shù)字輸入的狀態(tài),并將數(shù)字輸出設(shè)置為同樣的狀態(tài)。需要指出數(shù)字輸入是一個暫態(tài)按鈕,因為它內(nèi)部有個彈簧,這意味著按鈕只有在你一直按下時才會保持激活。
上面的梯形圖可以正常工作,不過你可能注意到,只有輸入激活時輸出才會激活。因此你不得不用手指一直按住按鈕,才能讓輸出保持激活。但是想一下,如果輸出控制的是一個通風(fēng)系統(tǒng)里的風(fēng)機(jī),那么要求操作員一直按著按鈕就很不合理了。我們需要一個辦法來保持輸出激活,即使操作員已經(jīng)釋放了按鈕。
在梯形邏輯中,有兩種辦法實現(xiàn)這一點:
??
如果你熟悉電路,就會發(fā)現(xiàn)這很類似,這杯稱為鎖存(Latching)或者自我保持(self holding)。
這個名稱揭示了其工作原理:線圈簡單的維持自己前一個掃描周期的狀態(tài)。讓我們單步分析一下:
當(dāng)PLC第一次運(yùn)行這個梯形邏輯程序時(按下按鈕時),輸出將被激活,就像前一個例子一樣。有趣的事情發(fā)生在后續(xù)運(yùn)行邏輯的時候。因為這是一個暫態(tài)按鈕,它不會一直激活。依賴于PLC程序的運(yùn)行總時長,按鈕可能在第二次、第三次或第四次運(yùn)行時不再激活。
讓我們進(jìn)入按鈕釋放之后的第一個掃描周期。
輸出還處于激活狀態(tài),因為上一個掃描周期按鈕被按下。這時PLC將再次讀取輸入并存入對應(yīng)的內(nèi)存位。內(nèi)存位I0.0”這次將存入“0”。因此I0.0的閉路判斷指令結(jié)果為false或“0”。
但是你可以看到,還有另一個并行的閉路判斷指令,不過該指令的條件是輸出內(nèi)存位,因此其結(jié)果為true或“1”,因為這是輸出還處于激活狀態(tài)。只要輸出內(nèi)存位是“1”,輸出就會激活,它就像自己的條件一樣。
自保持指令與其他指令并聯(lián)的原因在于構(gòu)造一個OR條件,在這個示例當(dāng)中,I0.0或Q0.0中的一個為true都會激活輸出。
開路檢查指令
你剛學(xué)習(xí)了如何編制一個有用的PLC梯形圖程序。一個激活輸出的按鈕。在我們的示例中,這個可能是連接到一個風(fēng)機(jī)的觸點,輸出可以自保持。
但是這個程序有個問題,怎么關(guān)掉風(fēng)機(jī)?
我們希望能夠再次關(guān)掉風(fēng)機(jī)。最簡單的方法是添加一個停機(jī)按鈕,該按鈕將連接到PLC的第二個輸入,因此其內(nèi)存地址為I0.1。
問題是,我們?yōu)橥C(jī)按鈕使用什么指令?更重要的,我們應(yīng)當(dāng)將其放在梯形圖的哪里?
第一個問題的答案是另一個梯形邏輯指令:開路檢查指令,它看起來如下:
??
這個指令和閉路檢查指令的工作方式恰恰相反,其結(jié)果是條件的反轉(zhuǎn)。這意味著,如果條件
為“0”,那么結(jié)果為“1”,反之亦然。
如果你考慮一下,就會發(fā)現(xiàn)這恰恰就是我們希望停機(jī)按鈕做的事情。要關(guān)閉輸出線圈,我們必須給出條件“0”。
現(xiàn)在是第二個問題,在哪里放置這個指令?
我們需要將其放在自鎖指令之后,或者說,串聯(lián)起來。否則當(dāng)停機(jī)按鈕按下時,還是會輸出“1”。
現(xiàn)在,梯形邏輯如下:
??
你可以看到開路檢查指令將其條件的反轉(zhuǎn)結(jié)果傳遞給輸出線圈。要再次激活輸出,就需要再次按下啟動按鈕。
在上面的示例中,我使用了一個開路判斷指令作為停機(jī)按鈕。這不是好的實踐!
我們最終遵循最佳實踐,修改后的梯形圖如下:
??
雖然我們修改了指令,梯形圖的運(yùn)行沒有變化,這是因為我們同樣修改了物理停機(jī)按鈕的工作方式。
PLC梯形圖的結(jié)構(gòu)分析
采用一般編程方法還是采用順序功能圖編程方法;采用順序功能圖的單序列結(jié)構(gòu)還是選擇序列結(jié)構(gòu)、并行序列結(jié)構(gòu),使用啟/保/停電路、步進(jìn)順控指令進(jìn)行編程還是用置位/復(fù)位指令進(jìn)行編程。
梯形圖的分解由操作主令電路(如按鈕)開始,查線追蹤到主電路控制電器(如接觸器)動作,中間要經(jīng)過許多編程元件及電路,查找起來比較困難。
無論多么復(fù)雜的梯形圖,都是由一些基本單元構(gòu)成的。按主電路的構(gòu)成情況,利用逆讀溯源法,把梯形圖和指令語句表分解成與主電路的用電器(如電動機(jī))相對應(yīng)的幾個基本單元,然后一個環(huán)節(jié)、一個環(huán)節(jié)地分析,最后再利用順讀跟蹤法把各環(huán)節(jié)串起來。
?
?
(1)按鈕、行程開關(guān)、轉(zhuǎn)換開關(guān)的配置情況及作用
在PLC的I/O接線圖中有許多行程開關(guān)和轉(zhuǎn)換開關(guān),以及壓力繼電器、溫度繼電器等,這些電器元件沒有吸引線圈,它們的觸點的動作是依靠外力或其他因素實現(xiàn)的,因此必須先把引起這些觸點動作的外力或因素找到。其中行程開關(guān)由機(jī)械聯(lián)動機(jī)構(gòu)來觸壓或松開,而轉(zhuǎn)換開關(guān)一般由手工操作,從而使這些行程開關(guān)、轉(zhuǎn)換開關(guān)的觸點在設(shè)備運(yùn)行過程中便處于不同的工作狀態(tài),即觸點的閉合、斷開情況不同,以滿足不同的控制要求,這是看圖過程中的一個關(guān)鍵。
這些行程開關(guān)、轉(zhuǎn)換開關(guān)的觸點的不同工作狀態(tài)單憑看電路圖難以搞清楚,必須結(jié)合設(shè)備說明書、電器元件明細(xì)表,明確該行程開關(guān)、轉(zhuǎn)換開關(guān)的用途,操縱行程開關(guān)的機(jī)械聯(lián)動機(jī)構(gòu),觸點在不同的閉合或斷開狀態(tài)下電路的工作狀態(tài)等。
?
?
(2)采用逆讀溯源法將多負(fù)載(如多電動機(jī)電路)分解為單負(fù)載(如單電動機(jī))電路
根據(jù)主電路中控制負(fù)載的控制電器的主觸點文字符號,在PLC的I/O接線圖中找出控制該負(fù)載的接觸器線圈的輸出繼電器,再在梯形圖和指令語句表中找出控制該輸出繼電器的線圈及其相關(guān)電路,這就是控制該負(fù)載的局部電路。
在梯形圖和指令語句表中,很容易找到該輸出繼電器的線圈電路及其得電、失電條件,但引起該線圈的得電、失電及其相關(guān)電路就不容易找到,可采用逆讀溯源法去尋找:
在輸出繼電器線圈電路中串、并聯(lián)的其他編程元件觸點的閉合、斷開就是該輸出繼電器得電、失電的條件。
由這些觸點再找出它們的線圈電路及其相關(guān)電路,在這些線圈電路中還會有其他接觸器、繼電器的觸點……
?
?
如此找下去,直到找到輸入繼電器(主令電器)為止。值得注意的是:當(dāng)某編程元件得電吸合或失電釋放后,應(yīng)該把該編程元件的所有觸點所帶動的前、后級編程元件的作用狀態(tài)全部找出,不得遺漏。
找出某編程元件在其他電路中的動合觸點、動斷觸點,這些觸點為其他編程元件的得電、失電提供條件或者為互鎖、聯(lián)鎖提供條件,引起其他電器元件動作,驅(qū)動執(zhí)行電器。
(3)將單負(fù)載電路進(jìn)一步分解
控制單負(fù)載的局部電路可能仍然很復(fù)雜,還需要進(jìn)一步分解,直至分解為基本單元電路。
(4)分解電路的注意事項
若電動機(jī)主軸接有速度繼電器,則該電動機(jī)按速度控制原則組成停車制動電路。
若電動機(jī)主電路中接有整流器,表明該電動機(jī)采用能耗制動停車電路。
(5)集零為整,綜合分析
把基本單元電路串起來,采用順讀跟蹤法分析整個電路。
評論
查看更多