資源描述:
《plc梯形圖編譯原理》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、PLC梯形圖編譯原理IL語(yǔ)言非常接近匯編語(yǔ)言,編碼后,PLC處理器能很容易識(shí)別,但是梯形圖是圖形元素,CPU不容易識(shí)別,所以要將梯形圖先編譯為IL語(yǔ)言。本文提供了一種遞歸編譯的方式,不完善的地方,還請(qǐng)見諒。轉(zhuǎn)換思路:將梯形圖以網(wǎng)絡(luò)為單位進(jìn)行遍歷,選擇一個(gè)網(wǎng)絡(luò)進(jìn)行分析,梯形圖本質(zhì)是塊和塊之間的串聯(lián),串聯(lián)的塊中又可能包含了并聯(lián)關(guān)系,但是并聯(lián)關(guān)系中,其實(shí)也是串聯(lián)塊的并聯(lián)。如圖1:??在整個(gè)梯形圖編譯的過程中,主要使用2個(gè)步驟(或者叫函數(shù)),一個(gè)步驟分析塊之間的串聯(lián)關(guān)系,一個(gè)步驟分析塊之間的并聯(lián)關(guān)系。?步驟0:先初始化開始行為網(wǎng)絡(luò)的第一行,開始列為
2、第一列,結(jié)束列為最后一列。然后進(jìn)去步驟1。步驟1、??????(1)建立一個(gè)塊堆棧BlockStack,輸出堆棧OutputStack。(2)首先將圖進(jìn)行串聯(lián)塊的分析。將分析到的塊壓入BlockStack,輸出塊壓入OutputStack.(3)遍歷BlockStack,對(duì)每一個(gè)塊進(jìn)行分析,1)如果塊的行數(shù)大于1,表示塊中有并聯(lián)關(guān)系,到步驟2分析該塊。?????????????如果塊不是第一個(gè)塊,則要在并聯(lián)關(guān)系解釋完后,加入ANB指令。2)如果塊的行數(shù)等于1,表示塊已經(jīng)是最簡(jiǎn)串聯(lián)塊,直接輸出塊的語(yǔ)句。?????????????如果塊是第一個(gè)
3、塊,使用LD加載第一個(gè)元素,依次往后使用AND。(至于使用LDI,還是ANI,請(qǐng)判斷元素的類型。)?????????????如果塊不是第一個(gè)塊,使用AND加載第一個(gè)元素,依次往后使用AND。(3)遍歷輸出塊。????????????如果輸出塊是多行,使用步驟2分析輸出塊。????????????如果輸出塊是單行,則直接輸出塊中元素:OUT、SET、RST。步驟2、??????(1)首先判斷傳入的塊是輸出塊還是普通塊。如果是輸出塊,建立一個(gè)記錄標(biāo)志。建立一個(gè)或堆棧.OrBlockStack.分析塊Blcok中由哪幾個(gè)串聯(lián)塊并聯(lián)而成,將塊壓入O
4、rBlockStack中.A、遍歷OrBlockStack,每一個(gè)串聯(lián)塊進(jìn)行步驟1串聯(lián)分析。B、為每一個(gè)串聯(lián)塊加上并聯(lián)關(guān)系。1)如果是輸出:如果一共有2個(gè)分支,則第一個(gè)分支加入MPS,第二個(gè)分支加入MPP。????????????如果分支大于2個(gè),則第一個(gè)分支加入MPS,最后一個(gè)分支加入MPP,其他分支加入MPR。2)如果不是輸出:如果串聯(lián)塊中橫線方向元素個(gè)數(shù)大于1個(gè),加入ORB,(來源:http://www.dqjsw.com.cn/)如果只有一個(gè)元素,加入OR,進(jìn)入步驟3檢查代碼。如果沒有元素,就是短路。報(bào)錯(cuò)。步驟3:全部完成后,對(duì)指令
5、進(jìn)行分析,如果有LDXnOR這樣的指令,要合并為:ORXn.舉例說明:梯形圖程序如圖1,可以劃分為3個(gè)塊:塊1,塊2,輸出塊。3個(gè)之間是串聯(lián)的關(guān)系。圖1(現(xiàn)在是在步驟1中)依次將塊1,塊2,輸出塊傳入步驟2,根據(jù)步驟1可知,塊2后面需要加入ANB指令。塊1傳入步驟2后,可以分析到塊1是由2個(gè)串聯(lián)塊A、B并聯(lián)組成的。如圖2:圖2(現(xiàn)在是在步驟2中)依次將A、B傳入步驟1,根據(jù)步驟2可知,B傳入步驟1后,要加上ORB指令。塊A傳入步驟1后,可以分析到塊A是由3個(gè)塊a,b,c串聯(lián)組成的,如圖3:(現(xiàn)在是在步驟1中)然后依次將a,b,c傳入到步驟2
6、中進(jìn)行分析,根據(jù)步驟1可知,b進(jìn)入步驟2后,要加入ANB指令,C進(jìn)入步驟2后,也要加入ANB指令。塊a可以分析得到是由3個(gè)單行的串聯(lián)a1,a2,a3塊并聯(lián)組成的。(現(xiàn)在是在步驟2中)再依次把a(bǔ)1,a2,a3傳入步驟1進(jìn)行串聯(lián)分析,根據(jù)步驟2可知,X2傳入步驟1后,要加入OR指令,X3傳入步驟1后,也要加入OR指令。a1進(jìn)入步驟1,可以得到a1只有一行,所以直接輸出a1為L(zhǎng)DX1a2傳入步驟1,可以得到LDX2ORa3傳入步驟1可以得到LDX3OR最后對(duì)指令進(jìn)行分析,只要有LDXnOr這樣的,都合并為ORXn.整理后得到指令為:??????L
7、DX1??????ORX2??????ORX3。依次往后遍歷,最后能得到所有的指令為:LDX1ORX2ORX3LDX4ORX5ANBLDX6ORX7ANBLDX9ORX10LDX11LDX12ANBORBLDX13ORX14LDX15ORX16ANBORX17ANBOUTY1在這個(gè)算法中,將梯形圖元素分塊,是最關(guān)鍵的,所以要處理好梯形圖元素的分塊,至于怎么分塊,就需要自己想了喲~