專利名稱:梯形圖語言轉(zhuǎn)換為結(jié)構(gòu)文本語言的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種利用計(jì)算機(jī)軟件實(shí)現(xiàn)語言轉(zhuǎn)換的技術(shù),具體地說是一種梯形圖語 言轉(zhuǎn)換為結(jié)構(gòu)文本語言的方法。
背景技術(shù):
裝備制造業(yè)是國民經(jīng)濟(jì)和國防建設(shè)的基礎(chǔ)產(chǎn)業(yè),其核心技術(shù)是數(shù)控系統(tǒng)??删幊?控制器(PLC,Programmable Logic Controller)是數(shù)控系統(tǒng)的重要組成部分,它具有邏輯 運(yùn)算、算術(shù)運(yùn)算、計(jì)時(shí)、計(jì)數(shù)、數(shù)據(jù)處理、傳送、通訊、自診斷等功能。計(jì)算機(jī)技術(shù)的迅猛發(fā)展 以及IEC 61131-3標(biāo)準(zhǔn)的頒布,促進(jìn)了 PLC的進(jìn)一步發(fā)展。IEC 61131-3標(biāo)準(zhǔn)規(guī)定的5種 標(biāo)準(zhǔn)PLC編程語言包括3種圖形化語言和2種文本化語言,分別為梯形圖(LD)、順序功能 圖(SFC)、功能塊圖(FBD)、結(jié)構(gòu)文本(ST)、指令表(IL)。其中梯形圖與電氣控制系統(tǒng)的電 路圖很相似,具有直觀易懂的優(yōu)點(diǎn),很容易被工廠電氣人員掌握,是PLC主要編程語言。但 是,在目前許多數(shù)控系統(tǒng)中只能直接運(yùn)行文本化編程語言。文本化編程語言不直觀,編程門 檻高,限制了數(shù)控系統(tǒng)的發(fā)展和應(yīng)用。梯形圖是IEC 61131-3標(biāo)準(zhǔn)規(guī)定的一種圖形化編程語言,如圖1所示,可用來描述 功能,功能塊和程序即程序組織單元的行為,以及順序功能圖中的行為和轉(zhuǎn)移。它基于圖形 表示的繼電器邏輯,是PLC編程中被最廣泛使用一種圖形化語言。梯形圖程序的左、右兩側(cè) 有兩垂直的電力軌線,左側(cè)的電力軌線名義上為功率流從左向右沿著水平梯級(jí)通過各個(gè)觸 點(diǎn)、功能、功能塊、線圈等提供能量,功率流的終點(diǎn)是右側(cè)的電力軌線。每一個(gè)觸點(diǎn)代表了一 個(gè)布爾變量的狀態(tài),每一個(gè)線圈代表了一個(gè)實(shí)際設(shè)備的狀態(tài)。結(jié)構(gòu)文本是IEC 61131-3標(biāo)準(zhǔn)規(guī)定的一種高級(jí)的文本語言,如圖2所示,可以用來 描述功能,功能塊和程序的行為,還可以在順序功能流程圖中描述步、動(dòng)作和轉(zhuǎn)變的行為。 它是一個(gè)專門為工業(yè)控制應(yīng)用開發(fā)的編程語言,主要用于對(duì)變量賦值、回調(diào)功能和功能塊、 創(chuàng)建表達(dá)式、編寫條件語句和迭代程序等。結(jié)構(gòu)文本程序格式自由,可以在關(guān)鍵詞與標(biāo)識(shí)符 之間任何地方插入制表符、換行字符和注釋。對(duì)于熟悉計(jì)算機(jī)高級(jí)語言開發(fā)的人員來說,結(jié) 構(gòu)文本語言更是易學(xué)易用,但對(duì)于工廠的電氣工程人員來說就顯得不夠直觀,掌握困難。因此,實(shí)現(xiàn)梯形圖語言向結(jié)構(gòu)文本的轉(zhuǎn)換,在原來只能用結(jié)構(gòu)文本編程的環(huán)境下 實(shí)現(xiàn)梯形圖編程是一個(gè)很重要的問題,并且目前尚無公開的梯形圖語言向結(jié)構(gòu)文本語言轉(zhuǎn) 換的方法。
發(fā)明內(nèi)容
針對(duì)現(xiàn)有技術(shù)中存在的上述不足之處,本發(fā)明要解決的技術(shù)問題是提供一種梯形 圖語言轉(zhuǎn)換為結(jié)構(gòu)文本語言的方法,以實(shí)現(xiàn)任意梯形圖語言向結(jié)構(gòu)文本語言的快速轉(zhuǎn)換。為解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案是本發(fā)明一種梯形圖語言轉(zhuǎn)換為結(jié)構(gòu)文本語言的方法包括以下步驟將梯形圖語言存儲(chǔ)為有利于編輯和轉(zhuǎn)換的存儲(chǔ)結(jié)構(gòu),包括在豎線與梯形圖其他圖符即實(shí)結(jié)點(diǎn)的交點(diǎn)處引入虛結(jié)點(diǎn);對(duì)虛結(jié)點(diǎn)進(jìn)行合并,形成AOV圖;根據(jù)上述AOV圖,按照其拓?fù)渑判虻慕Y(jié)點(diǎn)順序,依據(jù)各結(jié)點(diǎn)不同類型分類處理,將 AOV圖轉(zhuǎn)換為結(jié)構(gòu)文本。所述有利于編輯和轉(zhuǎn)換的存儲(chǔ)結(jié)構(gòu)為用于存儲(chǔ)梯形圖語言的存儲(chǔ)裝置內(nèi)部指針 方向?yàn)橄蛴壹跋蛳聝煞N。所述對(duì)虛結(jié)點(diǎn)進(jìn)行合并是將梯形圖分支上的虛結(jié)點(diǎn)合并到該分支的在梯形圖平 面中Y坐標(biāo)最小的虛結(jié)點(diǎn)。所述按照其拓?fù)渑判虻慕Y(jié)點(diǎn)順序,依據(jù)各結(jié)點(diǎn)不同類型分類處理,將AOV圖轉(zhuǎn)換 為結(jié)構(gòu)文本包括以下步驟判斷AOV圖是否存在下一個(gè)虛結(jié)點(diǎn)或?qū)嵔Y(jié)點(diǎn);如存在,則判斷結(jié)點(diǎn)是什么類型;如果為實(shí)結(jié)點(diǎn)中的普通結(jié)點(diǎn),則進(jìn)行普通結(jié)點(diǎn)處理;如果為虛結(jié)點(diǎn),則進(jìn)行虛結(jié)點(diǎn)處理;如果為實(shí)結(jié)點(diǎn)中的輸出結(jié)點(diǎn),則進(jìn)行輸出結(jié)點(diǎn)處理。如果不存在下一個(gè)虛結(jié)點(diǎn)或?qū)嵔Y(jié)點(diǎn),則結(jié)束處理。所述進(jìn)行普通結(jié)點(diǎn)處理是對(duì)每個(gè)普通結(jié)點(diǎn)的各種條件進(jìn)行判斷,處理的法則如 下法則1 上次處理結(jié)點(diǎn)所在行號(hào)為-1,且當(dāng)前處理結(jié)點(diǎn)的入度為0時(shí),操作符為 空;法則2 當(dāng)前處理結(jié)點(diǎn)的行號(hào)與上次處理結(jié)點(diǎn)所在行號(hào)相同時(shí),操作符為“*” ;法則3 當(dāng)前處理結(jié)點(diǎn)為剛剛處理過的虛結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn)時(shí),操作符為空;法則4 當(dāng)前處理結(jié)點(diǎn)的行號(hào)與上次處理結(jié)點(diǎn)所在行號(hào)不相同,且當(dāng)前處理結(jié)點(diǎn) 往輸出端方向的第一個(gè)虛結(jié)點(diǎn)與上一個(gè)被處理結(jié)點(diǎn)的虛結(jié)點(diǎn)是同一個(gè)結(jié)點(diǎn),操作符為“ + ”;法則5 當(dāng)前處理結(jié)點(diǎn)的行號(hào)與上次處理結(jié)點(diǎn)所在行號(hào)不相同,且當(dāng)前處理結(jié)點(diǎn) 往輸出端方向的第一個(gè)虛結(jié)點(diǎn)與上一個(gè)被處理結(jié)點(diǎn)的虛結(jié)點(diǎn)不是同一個(gè)結(jié)點(diǎn),當(dāng)前處理結(jié) 點(diǎn)往輸出端方向的第一個(gè)虛結(jié)點(diǎn)的入度小于2,操作符為“ + ” ;法則6 當(dāng)前處理結(jié)點(diǎn)的行號(hào)與上次處理結(jié)點(diǎn)所在行號(hào)不相同,且當(dāng)前處理結(jié)點(diǎn) 往輸出端方向的第一個(gè)虛結(jié)點(diǎn)與上一個(gè)被處理結(jié)點(diǎn)的虛結(jié)點(diǎn)不是同一個(gè)結(jié)點(diǎn),當(dāng)前處理結(jié) 點(diǎn)往輸出端方向的第一個(gè)虛結(jié)點(diǎn)的入度大于等于2,操作符為“ + (” ;法則7 當(dāng)前處理結(jié)點(diǎn)往輸出端方向的第一個(gè)虛結(jié)點(diǎn)的入度大于2,當(dāng)前處理結(jié)點(diǎn) 往輸入方向的第一個(gè)虛結(jié)點(diǎn)不為空,當(dāng)前處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)的出度大于 1,當(dāng)前出度為0,當(dāng)前處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)的當(dāng)前入度不為0,該結(jié)點(diǎn)的下 一個(gè)結(jié)點(diǎn)為虛結(jié)點(diǎn)或橫線,該結(jié)點(diǎn)后面要再加上一個(gè)“)”。如果當(dāng)前處理結(jié)點(diǎn)往輸入方向的 第一個(gè)虛結(jié)點(diǎn)的行號(hào)大于當(dāng)前處理結(jié)點(diǎn)往輸出端方向的第一個(gè)虛結(jié)點(diǎn)的行號(hào),另外不存在 其他的結(jié)點(diǎn)滿足上述條件,且行號(hào)比該結(jié)點(diǎn)的行號(hào)大,這時(shí)在該結(jié)點(diǎn)后面再加上一個(gè)“)”; 記錄已加“),,的結(jié)點(diǎn)以及相應(yīng)的當(dāng)前處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)對(duì),供處理虛結(jié) 點(diǎn)時(shí)使用;法則8 當(dāng)前處理結(jié)點(diǎn)往輸出端方向的第一個(gè)虛結(jié)點(diǎn)的入度大于2當(dāng)前處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn),當(dāng)前處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)不為空,當(dāng)前處理 結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)的出度大于1,當(dāng)前出度和當(dāng)前入度為0,該結(jié)點(diǎn)的下一個(gè) 結(jié)點(diǎn)為虛結(jié)點(diǎn),此時(shí)該結(jié)點(diǎn)后面要再加上一個(gè)“)”。記錄已加“)”的結(jié)點(diǎn)以及相應(yīng)的當(dāng)前處 理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)對(duì),供處理虛結(jié)點(diǎn)時(shí)使用。所述進(jìn)行虛結(jié)點(diǎn)處理是對(duì)每個(gè)虛結(jié)點(diǎn)的各種條件進(jìn)行判斷,處理的法則如下η 當(dāng)前處理結(jié)點(diǎn);RightBracket 右括號(hào)判斷函數(shù);LeftBracket 左括號(hào)判斷函 數(shù);HL 橫線;OC 操作符,其中“*”表示AND,“ + ”表示OR ;法則1)當(dāng)前處理結(jié)點(diǎn)的入度和出度都為0,則該虛結(jié)點(diǎn)為在虛結(jié)點(diǎn)合并的過程 中丟棄的結(jié)點(diǎn),不用處理;法則2)當(dāng)前處理結(jié)點(diǎn)的入度為1時(shí),操作符加空;法則3)當(dāng)前處理結(jié)點(diǎn)的入度為2時(shí),加一個(gè)“),,;法則4)當(dāng)前處理結(jié)點(diǎn)的入度大于2時(shí),調(diào)用右括號(hào)判斷函數(shù)RightBracketO判 斷所要加“)”的個(gè)數(shù);法則5)當(dāng)前處理結(jié)點(diǎn)的入度大于等于1,且當(dāng)前處理結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn)不是橫 線時(shí),操作符要再加上“*”;法則6)當(dāng)前處理結(jié)點(diǎn)的出度為1時(shí),操作符加空;法則7)當(dāng)前處理結(jié)點(diǎn)的出度為2時(shí),操作符加“(”;法則8)當(dāng)前處理結(jié)點(diǎn)的出度大于2時(shí),調(diào)用左括號(hào)判斷函數(shù)LeftBracketO判 斷所要加“(”的個(gè)數(shù)。所述右括號(hào)判斷函數(shù)RightBracketO根據(jù)當(dāng)前處理結(jié)點(diǎn)的入弧的每個(gè)尾結(jié)點(diǎn) n2,逆向掃描到一個(gè)虛結(jié)點(diǎn)nl,該虛結(jié)點(diǎn)nl的行號(hào)小于或等于當(dāng)前處理結(jié)點(diǎn)η的行號(hào),刪 除在處理普通結(jié)點(diǎn)法則7和法則8處理過程當(dāng)中已記錄加過“)”的記錄已加“)”的結(jié)點(diǎn)以 及相應(yīng)的當(dāng)前處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)對(duì)nl、n2 ;累計(jì)剩余記錄已加“),,的結(jié) 點(diǎn)以及相應(yīng)的當(dāng)前處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)對(duì),并記錄,累計(jì)出現(xiàn)不同的已記 錄加過“),,的記錄已加“),,的結(jié)點(diǎn)以及相應(yīng)的當(dāng)前處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)對(duì) nl, n2的對(duì)數(shù)即為所要加“),,的個(gè)數(shù)。所述左括號(hào)判斷函數(shù)LeftBracketO根據(jù)當(dāng)前處理結(jié)點(diǎn)的出弧的每個(gè)頭結(jié)點(diǎn),正 向掃描到一個(gè)虛結(jié)點(diǎn)nl,該虛結(jié)點(diǎn)nl的行號(hào)等于或小于當(dāng)前處理結(jié)點(diǎn)η的行號(hào),累計(jì)出現(xiàn) 不同的虛結(jié)點(diǎn)nl的個(gè)數(shù),即為所要添加“(”的個(gè)數(shù)。所述輸出結(jié)點(diǎn)處理包括對(duì)普通結(jié)點(diǎn)處理和虛結(jié)點(diǎn)處理后形成的表達(dá)式的括號(hào)匹配進(jìn)行檢查,“)”更多則 在最前面補(bǔ)齊“(”,最后輸出完整結(jié)構(gòu)文本語句,結(jié)束處理過程。本發(fā)明具有以下有益效果及優(yōu)點(diǎn)1.本發(fā)明具有通用性,可正確、有效的轉(zhuǎn)換任何復(fù)雜梯形圖為結(jié)構(gòu)文本,在原本只 能使用結(jié)構(gòu)文本編程的地方實(shí)現(xiàn)形象直觀的梯形圖編程,方便了用戶的使用,降低了 PLC 編程的門檻,提高了 PLC的編程效率。
圖1為一個(gè)簡(jiǎn)單的梯形圖語句;
圖2為與圖1相對(duì)應(yīng)的結(jié)構(gòu)文本語句;圖3為一個(gè)邏輯復(fù)雜的梯形圖語句;圖4為圖3的梯形圖按本發(fā)明所采用數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)結(jié)構(gòu);圖5為圖4中梯形圖存儲(chǔ)結(jié)構(gòu)合并后形成的AOV圖;圖6為本發(fā)明轉(zhuǎn)換方法的流程圖;圖7為本發(fā)明裝置結(jié)構(gòu)框圖。
具體實(shí)施例方式本發(fā)明一種梯形圖語言轉(zhuǎn)換為結(jié)構(gòu)文本語言的方法包括以下步驟將梯形圖語言存儲(chǔ)為有利于編輯和轉(zhuǎn)換的存儲(chǔ)結(jié)構(gòu),包括在豎線與梯形圖其他圖 符即實(shí)結(jié)點(diǎn)的交點(diǎn)處引入虛結(jié)點(diǎn);對(duì)虛結(jié)點(diǎn)進(jìn)行合并,形成AOV圖;根據(jù)上述AOV圖,按照其拓?fù)渑判虻慕Y(jié)點(diǎn)順序,依據(jù)各結(jié)點(diǎn)不同類型分類處理,將 AOV圖轉(zhuǎn)換為結(jié)構(gòu)文本。本實(shí)施例以圖3所示梯形圖為例,在編輯該梯形圖的過程中,梯形符按串并 聯(lián)關(guān)系相連,可將梯形圖抽象為圖數(shù)據(jù)結(jié)構(gòu),其中圖符為圖的頂點(diǎn),連接關(guān)系為弧。為在對(duì) 節(jié)點(diǎn)分類處理中更方便的通過條件判斷選取合適的規(guī)則,本發(fā)明采用有利于編輯和轉(zhuǎn)換的 數(shù)據(jù)結(jié)構(gòu)存儲(chǔ),包括用于存儲(chǔ)梯形圖語言的存儲(chǔ)裝置內(nèi)部指針方向?yàn)橄蛴壹跋蛳聝煞N。typedef struct—node{
unsigned int type ;//結(jié)點(diǎn)類型
Pos ρ ;//結(jié)點(diǎn)位置
ParamLi st^Param ;//結(jié)點(diǎn)參數(shù)
void^firstin ;//入弧
void氺firstout ;//出弧
int In ;//入度
int Out ;//出度
int curln ;//當(dāng)前入度
int curOut ;//當(dāng)前出度
int visited ;Il是否已訪問標(biāo)識(shí)
struct—node氺next ;//下一結(jié)點(diǎn)
}Node ;Il結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)
以上Node數(shù)據(jù)結(jié)構(gòu)中,當(dāng)前入度curln和當(dāng)前出度curOut,在轉(zhuǎn)換過程中是可變的從而實(shí)現(xiàn)拓?fù)渑判蛞约爱?dāng)作結(jié)點(diǎn)處理過程中的判斷條件來選擇處理法則。
typedef struct—arc{
Node*tail ; ;//弧指向的尾結(jié)點(diǎn)
Node^head ; ;//弧指向的頭結(jié)點(diǎn)
struct_arc氺hi ink ;丨丨I指向弧頭相同的另一條弧
struct_arc氺tlink ;丨丨I指向弧尾相同的另一條弧
IArc ; /1I弧數(shù)據(jù)結(jié)構(gòu)
利用以上數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)圖3所示梯形圖,除代表各圖符的實(shí)結(jié)點(diǎn){1,2,3,4,5,6, 7,8,9,10,11,12,13,14,15}外,在有并聯(lián)相交的位置增加虛結(jié)點(diǎn){a, b,c,d,e,f,g, h,i, j, k, 1, m, n, o}。由此所得該梯形圖的存儲(chǔ)結(jié)構(gòu)如圖4所示,其弧指向只有向下或向右兩種。對(duì)虛 結(jié)點(diǎn)進(jìn)行合并是將梯形圖分支上的虛結(jié)點(diǎn)合并到該分支的在梯形圖平面中Y坐標(biāo)最小的 虛結(jié)點(diǎn),通過虛結(jié)點(diǎn)的合并,形成AOV圖,如圖5所示。以虛結(jié)點(diǎn){c,g,j}為例,掃描到虛結(jié) 點(diǎn)c時(shí),刪除弧<c,g>, g的入度減1,刪除弧<g,10>,g的出度減1,增加一條弧<c,10> ;刪 除弧<g,j>,j的入度減1,刪除弧<j,12>,j的出度減1,增加一條弧<c,12>,這樣就將虛結(jié) 點(diǎn)Ic,g,j}合并為虛結(jié)點(diǎn)c。其他虛結(jié)點(diǎn)合并同上處理。合并之后,有效虛結(jié)點(diǎn)僅剩{a, b,c,d,k,1},由此建立起AOV圖。按照其拓?fù)渑判虻慕Y(jié)點(diǎn)順序,依據(jù)各結(jié)點(diǎn)不同類型分類處理,將AOV圖轉(zhuǎn)換為結(jié) 構(gòu)文本包括以下步驟判斷AOV圖是否存在下一個(gè)虛結(jié)點(diǎn)或?qū)嵔Y(jié)點(diǎn);如存在,則判斷結(jié)點(diǎn)是什么類型;如果為實(shí)結(jié)點(diǎn)中的普通結(jié)點(diǎn),則進(jìn)行普通結(jié)點(diǎn)處理;如果為虛結(jié)點(diǎn),則進(jìn)行虛結(jié)點(diǎn)處理;如果為實(shí)結(jié)點(diǎn)中的輸出結(jié)點(diǎn),則進(jìn)行輸出結(jié)點(diǎn)處理;如果不存在下一個(gè)虛結(jié)點(diǎn)或?qū)嵔Y(jié)點(diǎn),則結(jié)束處理。拓?fù)渑判虻姆椒ㄊ?,從上往下從左到右檢索各結(jié)點(diǎn),處理當(dāng)前入度為0的結(jié)點(diǎn),并 將其訪問位標(biāo)識(shí),將其每個(gè)出弧指向的頭結(jié)點(diǎn)的當(dāng)前入度減1,并刪除該出弧,然后處理下 一個(gè)當(dāng)前入度為0的結(jié)點(diǎn)。這樣結(jié)點(diǎn)處理的順序便為{1,2,5, C,6,7, e, f, g,10,ll,d,8, h,i,j,12,k,13,m,n,15,1,14,a,3,9,b,4,ο}。將他們分為三種類型處理,普通結(jié)點(diǎn)的處 理順序?yàn)閧1,2,5,6,7,10,11,8,12,13,15,14,3,9,4},虛結(jié)點(diǎn)的處理順序?yàn)閧c,e,g, d, h, i,j,k,m,n,1,a,b,o},輸出結(jié)點(diǎn)為{4}。所述進(jìn)行普通結(jié)點(diǎn)處理是對(duì)每個(gè)普通結(jié)點(diǎn)的各種條件進(jìn)行判斷,處理的法則如 下處理過程中所用主要變量說明n 當(dāng)前處理結(jié)點(diǎn);m 結(jié)點(diǎn);VP 當(dāng)前處理結(jié)點(diǎn)η 往輸出端方向的第一個(gè)虛結(jié)點(diǎn);NV 保存上一個(gè)結(jié)點(diǎn)的VP ;LV 最近剛剛處理過的虛結(jié)點(diǎn); LFV 當(dāng)前處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn);LL 上次處理結(jié)點(diǎn)所在行號(hào),初始值為-1 ; VN 虛結(jié)點(diǎn);HL 橫線;OC 操作符,其中“*”表示AND,“ + ”表示OR ;OCR 部分特殊結(jié)點(diǎn)右側(cè) 的操作符。法則1 上次處理結(jié)點(diǎn)所在行號(hào)為-1,且當(dāng)前處理結(jié)點(diǎn)的入度為0時(shí),操作符為空 (0C = NULL iff LL = -1 Λ η- > In = 0);法則2 當(dāng)前處理結(jié)點(diǎn)的行號(hào)與上次處理結(jié)點(diǎn)所在行號(hào)相同時(shí),操作符為“*” (0C =“*” iff η- > ρ- > y = LL);法則3 當(dāng)前處理結(jié)點(diǎn)為剛剛處理過的虛結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn)時(shí),操作符為空(NULL iff η = LV- > next);法則4:當(dāng)前處理結(jié)點(diǎn)的行號(hào)與上次處理結(jié)點(diǎn)所在行號(hào)不相同,且當(dāng)前處理結(jié) 點(diǎn)往輸出端方向的第一個(gè)虛結(jié)點(diǎn)與上一個(gè)被處理結(jié)點(diǎn)的虛結(jié)點(diǎn)是同一個(gè)結(jié)點(diǎn),操作符為
9“ + ” (0C = “ + ” iff η- > ρ- > y 乒 LL Λ VP = NV Λ VP— > In < 2);法則5 當(dāng)前處理結(jié)點(diǎn)的行號(hào)與上次處理結(jié)點(diǎn)所在行號(hào)不相同,且當(dāng)前處理結(jié)點(diǎn) 往輸出端方向的第一個(gè)虛結(jié)點(diǎn)與上一個(gè)被處理結(jié)點(diǎn)的虛結(jié)點(diǎn)不是同一個(gè)結(jié)點(diǎn),當(dāng)前處理結(jié) 點(diǎn)往輸出端方向的第一個(gè)虛結(jié)點(diǎn)的入度小于2,操作符為“ + ” (0C :=“ + (” iff η- > ρ- > y 乒 LL Λ VP 乒 NV Λ VP— > In > 1);法則6 當(dāng)前處理結(jié)點(diǎn)的行號(hào)與上次處理結(jié)點(diǎn)所在行號(hào)不相同,且當(dāng)前處理結(jié)點(diǎn) 往輸出端方向的第一個(gè)虛結(jié)點(diǎn)與上一個(gè)被處理結(jié)點(diǎn)的虛結(jié)點(diǎn)不是同一個(gè)結(jié)點(diǎn),當(dāng)前處理結(jié) 點(diǎn)往輸出端方向的第一個(gè)虛結(jié)點(diǎn)的入度大于等于2,操作符為“ + (” (OCR = ") ” iff VP- > In > 2 Λ LFV 乒 NULL Λ LFV- > Out > 1 Λ η- > curln = 0 Λ VP- > curln 乒 0 Λ (η- > next = VN V η- > next = HL));。法則7:當(dāng)前處理結(jié)點(diǎn)往輸出端方向的第一個(gè)虛結(jié)點(diǎn)的入度大于2,當(dāng)前處理結(jié) 點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)不為空,當(dāng)前處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)的出度大 于1,當(dāng)前出度為0,當(dāng)前處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)的當(dāng)前入度不為0,該結(jié)點(diǎn)的 下一個(gè)結(jié)點(diǎn)為虛結(jié)點(diǎn)或橫線,該結(jié)點(diǎn)后面要再加上一個(gè)“)”。如果當(dāng)前處理結(jié)點(diǎn)往輸入方 向的第一個(gè)虛結(jié)點(diǎn)的行號(hào)大于當(dāng)前處理結(jié)點(diǎn)往輸出端方向的第一個(gè)虛結(jié)點(diǎn)的行號(hào),另外不 存在其他的結(jié)點(diǎn)滿足上述條件,且行號(hào)比該結(jié)點(diǎn)的行號(hào)大,這時(shí)在該結(jié)點(diǎn)后面再加上一個(gè) “),,;記錄已加“),,的結(jié)點(diǎn)以及相應(yīng)的當(dāng)前處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)對(duì),供處理 虛結(jié)點(diǎn)時(shí)使用(OCR = OCR+ “)” IffLFV- > p- > y > VP- > p- > y Λ ( m Ρ7 (m)= TURE Λ m- > ρ- > y > η- > ρ- > y)(記錄已加“),,的η以及相應(yīng)的LFV,供處理虛結(jié)點(diǎn) 時(shí)使用));法則8 當(dāng)前處理結(jié)點(diǎn)往輸出端方向的第一個(gè)虛結(jié)點(diǎn)的入度大于2當(dāng)前處理結(jié)點(diǎn) 往輸入方向的第一個(gè)虛結(jié)點(diǎn),當(dāng)前處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)不為空,當(dāng)前處理 結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)的出度大于1,當(dāng)前出度和當(dāng)前入度為0,該結(jié)點(diǎn)的下一個(gè) 結(jié)點(diǎn)為虛結(jié)點(diǎn),此時(shí)該結(jié)點(diǎn)后面要再加上一個(gè)“)”。記錄已加“)”的結(jié)點(diǎn)以及相應(yīng)的當(dāng)前處 理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)對(duì),供處理虛結(jié)點(diǎn)時(shí)使用(0CR:=“)”iff VP- > In > 2 Λ LFV 興 NULL Λ LFV- > out > 1 Λ η- > curln = 0 Λ η- > curOut = 0 Λ η- > next =VN(記錄已加“),,的η以及相應(yīng)的LFV,供處理虛結(jié)點(diǎn)時(shí)使用))。進(jìn)行虛結(jié)點(diǎn)處理是對(duì)每個(gè)虛結(jié)點(diǎn)的各種條件進(jìn)行判斷,處理的法則如下η 當(dāng)前處理結(jié)點(diǎn);RightBracket 右括號(hào)判斷函數(shù);LeftBracket 左括號(hào)判斷函 數(shù);HL 橫線;OC 操作符,其中“*”表示AND,“ + ”表示OR ;法則1)當(dāng)前處理結(jié)點(diǎn)的入度和出度都為0,則該虛結(jié)點(diǎn)為在虛結(jié)點(diǎn)合并的過程 中丟棄的結(jié)點(diǎn),不用處理(iff η- > curln = 0 Λ η- > curOut = 0(該虛結(jié)點(diǎn)為在虛結(jié)點(diǎn) 合并的過程中丟棄的結(jié)點(diǎn)));法則2)當(dāng)前處理結(jié)點(diǎn)的入度為1時(shí),操作符加空(0C: = NULLiff n-> In = 1);法則3):當(dāng)前處理結(jié)點(diǎn)的入度為2時(shí),加一個(gè)“)”(0(: = “)”土《 n- > In = 2);法則4)當(dāng)前處理結(jié)點(diǎn)的入度大于2時(shí),調(diào)用右括號(hào)判斷函數(shù)RightBracketO判 斷所要加“)”的個(gè)數(shù)(0C = RightBracketO iff η- > In > 2);法則5)當(dāng)前處理結(jié)點(diǎn)的入度大于等于1,且當(dāng)前處理結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn)不是橫 線時(shí),操作符要再加上“*” (0C = OC+ “*”iff η- > In > 0 Λ η- > next Φ HL);
法則6)當(dāng)前處理結(jié)點(diǎn)的出度為1時(shí),操作符加空(0C := OC+NULLiff η- > Out =1);法則7)當(dāng)前處理結(jié)點(diǎn)的出度為2時(shí),操作符加“(”(0C:= OC+ “(“iff n-> Out = 2);法則8)當(dāng)前處理結(jié)點(diǎn)的出度大于2時(shí),調(diào)用左括號(hào)判斷函數(shù)LeftBracketO判 斷所要加“(,,的個(gè)數(shù)(0C = OC+LeftBracket () iff η- > Out > 2)。所述右括號(hào)判斷函數(shù)RightBracketO根據(jù)當(dāng)前處理結(jié)點(diǎn)的入弧的每個(gè)尾結(jié)點(diǎn) n2,逆向掃描到一個(gè)虛結(jié)點(diǎn)nl,該虛結(jié)點(diǎn)nl的行號(hào)小于或等于當(dāng)前處理結(jié)點(diǎn)η的行號(hào),刪 除在處理普通結(jié)點(diǎn)法則7和法則8處理過程當(dāng)中已記錄加過“)”的記錄已加“)”的結(jié)點(diǎn)以 及相應(yīng)的當(dāng)前處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)對(duì)nl、n2 ;累計(jì)剩余記錄已加“)”的結(jié) 點(diǎn)以及相應(yīng)的當(dāng)前處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)對(duì),并記錄,累計(jì)出現(xiàn)不同的已記 錄加過“),,的記錄已加“),,的結(jié)點(diǎn)以及相應(yīng)的當(dāng)前處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)對(duì) nl, n2的對(duì)數(shù)即為所要加“),,的個(gè)數(shù)。所述左括號(hào)判斷函數(shù)LeftBracketO根據(jù)當(dāng)前處理結(jié)點(diǎn)的出弧的每個(gè)頭結(jié)點(diǎn),正 向掃描到一個(gè)虛結(jié)點(diǎn)nl,該虛結(jié)點(diǎn)nl的行號(hào)等于或小于當(dāng)前處理結(jié)點(diǎn)η的行號(hào),累計(jì)出現(xiàn) 不同的虛結(jié)點(diǎn)nl的個(gè)數(shù),即為所要添加“(”的個(gè)數(shù)。輸出結(jié)點(diǎn)處理是對(duì)普通結(jié)點(diǎn)處理和虛結(jié)點(diǎn)處理后形成的表達(dá)式的括號(hào)匹配進(jìn)行 檢查,“),,更多則在最前面補(bǔ)齊“(”,最后輸出完整結(jié)構(gòu)文本語句,結(jié)束處理過程。各結(jié)點(diǎn)按前文得出的處理順序選擇合適的法則進(jìn)行處理,如下所示
權(quán)利要求
一種梯形圖語言轉(zhuǎn)換為結(jié)構(gòu)文本語言的方法,其特征在于包括以下步驟將梯形圖語言存儲(chǔ)為有利于編輯和轉(zhuǎn)換的存儲(chǔ)結(jié)構(gòu),包括在豎線與梯形圖其他圖符即實(shí)結(jié)點(diǎn)的交點(diǎn)處引入虛結(jié)點(diǎn);對(duì)虛結(jié)點(diǎn)進(jìn)行合并,形成AOV圖;根據(jù)上述AOV圖,按照其拓?fù)渑判虻慕Y(jié)點(diǎn)順序,依據(jù)各結(jié)點(diǎn)不同類型分類處理,將AOV圖轉(zhuǎn)換為結(jié)構(gòu)文本。
2.按權(quán)利要求1所述的梯形圖語言轉(zhuǎn)換為結(jié)構(gòu)文本語言的方法,其特征在于所述有 利于編輯和轉(zhuǎn)換的存儲(chǔ)結(jié)構(gòu)為用于存儲(chǔ)梯形圖語言的存儲(chǔ)裝置內(nèi)部指針方向?yàn)橄蛴壹跋?下兩種。
3.按權(quán)利要求1所述的梯形圖語言轉(zhuǎn)換為結(jié)構(gòu)文本語言的方法,其特征在于所述對(duì) 虛結(jié)點(diǎn)進(jìn)行合并是將梯形圖分支上的虛結(jié)點(diǎn)合并到該分支的在梯形圖平面中Y坐標(biāo)最小 的虛結(jié)點(diǎn)。
4.按權(quán)利要求1所述的梯形圖語言轉(zhuǎn)換為結(jié)構(gòu)文本語言的方法,其特征在于所述按 照其拓?fù)渑判虻慕Y(jié)點(diǎn)順序,依據(jù)各結(jié)點(diǎn)不同類型分類處理,將AOV圖轉(zhuǎn)換為結(jié)構(gòu)文本包括 以下步驟判斷AOV圖是否存在下一個(gè)虛結(jié)點(diǎn)或?qū)嵔Y(jié)點(diǎn);如存在,則判斷結(jié)點(diǎn)是什么類型;如果為實(shí)結(jié)點(diǎn)中的普通結(jié)點(diǎn),則進(jìn)行普通結(jié)點(diǎn)處理;如果為虛結(jié)點(diǎn),則進(jìn)行虛結(jié)點(diǎn)處理;如果為實(shí)結(jié)點(diǎn)中的輸出結(jié)點(diǎn),則進(jìn)行輸出結(jié)點(diǎn)處理。
5.按權(quán)利要求4所述的梯形圖語言轉(zhuǎn)換為結(jié)構(gòu)文本語言的方法,其特征在于如果不 存在下一個(gè)虛結(jié)點(diǎn)或?qū)嵔Y(jié)點(diǎn),則結(jié)束處理。
6.按權(quán)利要求4所述的梯形圖語言轉(zhuǎn)換為結(jié)構(gòu)文本語言的方法,其特征在于所述進(jìn)行普通結(jié)點(diǎn)處理是對(duì)每個(gè)普通結(jié)點(diǎn)的各種條件進(jìn)行判斷,處理的法則如下 法則1 上次處理結(jié)點(diǎn)所在行號(hào)為-1,且當(dāng)前處理結(jié)點(diǎn)的入度為0時(shí),操作符為空; 法則2 當(dāng)前處理結(jié)點(diǎn)的行號(hào)與上次處理結(jié)點(diǎn)所在行號(hào)相同時(shí),操作符為“*” ; 法則3 當(dāng)前處理結(jié)點(diǎn)為剛剛處理過的虛結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn)時(shí),操作符為空; 法則4 當(dāng)前處理結(jié)點(diǎn)的行號(hào)與上次處理結(jié)點(diǎn)所在行號(hào)不相同,且當(dāng)前處理結(jié)點(diǎn)往輸 出端方向的第一個(gè)虛結(jié)點(diǎn)與上一個(gè)被處理結(jié)點(diǎn)的虛結(jié)點(diǎn)是同一個(gè)結(jié)點(diǎn),操作符為“ + ”;法則5 當(dāng)前處理結(jié)點(diǎn)的行號(hào)與上次處理結(jié)點(diǎn)所在行號(hào)不相同,且當(dāng)前處理結(jié)點(diǎn)往輸 出端方向的第一個(gè)虛結(jié)點(diǎn)與上一個(gè)被處理結(jié)點(diǎn)的虛結(jié)點(diǎn)不是同一個(gè)結(jié)點(diǎn),當(dāng)前處理結(jié)點(diǎn)往 輸出端方向的第一個(gè)虛結(jié)點(diǎn)的入度小于2,操作符為“ + ”;法則6 當(dāng)前處理結(jié)點(diǎn)的行號(hào)與上次處理結(jié)點(diǎn)所在行號(hào)不相同,且當(dāng)前處理結(jié)點(diǎn)往輸 出端方向的第一個(gè)虛結(jié)點(diǎn)與上一個(gè)被處理結(jié)點(diǎn)的虛結(jié)點(diǎn)不是同一個(gè)結(jié)點(diǎn),當(dāng)前處理結(jié)點(diǎn)往 輸出端方向的第一個(gè)虛結(jié)點(diǎn)的入度大于等于2,操作符為“ + (” ;法則7 當(dāng)前處理結(jié)點(diǎn)往輸出端方向的第一個(gè)虛結(jié)點(diǎn)的入度大于2,當(dāng)前處理結(jié)點(diǎn)往輸 入方向的第一個(gè)虛結(jié)點(diǎn)不為空,當(dāng)前處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)的出度大于1,當(dāng) 前出度為0,當(dāng)前處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)的當(dāng)前入度不為0,該結(jié)點(diǎn)的下一個(gè) 結(jié)點(diǎn)為虛結(jié)點(diǎn)或橫線,該結(jié)點(diǎn)后面要再加上一個(gè)“)”。如果當(dāng)前處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)的行號(hào)大于當(dāng)前處理結(jié)點(diǎn)往輸出端方向的第一個(gè)虛結(jié)點(diǎn)的行號(hào),另外不存在其他 的結(jié)點(diǎn)滿足上述條件,且行號(hào)比該結(jié)點(diǎn)的行號(hào)大,這時(shí)在該結(jié)點(diǎn)后面再加上一個(gè)“),,;記錄 已加“),,的結(jié)點(diǎn)以及相應(yīng)的當(dāng)前處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)對(duì),供處理虛結(jié)點(diǎn)時(shí) 使用;法則8 當(dāng)前處理結(jié)點(diǎn)往輸出端方向的第一個(gè)虛結(jié)點(diǎn)的入度大于2當(dāng)前處理結(jié)點(diǎn)往輸 入方向的第一個(gè)虛結(jié)點(diǎn),當(dāng)前處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)不為空,當(dāng)前處理結(jié)點(diǎn) 往輸入方向的第一個(gè)虛結(jié)點(diǎn)的出度大于1,當(dāng)前出度和當(dāng)前入度為0,該結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn) 為虛結(jié)點(diǎn),此時(shí)該結(jié)點(diǎn)后面要再加上一個(gè)“)”。記錄已加“)”的結(jié)點(diǎn)以及相應(yīng)的當(dāng)前處理結(jié) 點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)對(duì),供處理虛結(jié)點(diǎn)時(shí)使用。
7.按權(quán)利要求4所述的梯形圖語言轉(zhuǎn)換為結(jié)構(gòu)文本語言的方法,其特征在于所述進(jìn) 行虛結(jié)點(diǎn)處理是對(duì)每個(gè)虛結(jié)點(diǎn)的各種條件進(jìn)行判斷,處理的法則如下η 當(dāng)前處理結(jié)點(diǎn);RightBracket 右括號(hào)判斷函數(shù);LeftBracket 左括號(hào)判斷函數(shù); HL 橫線;OC 操作符,其中“*,,表示AND,“ + ”表示OR ;法則1)當(dāng)前處理結(jié)點(diǎn)的入度和出度都為0,則該虛結(jié)點(diǎn)為在虛結(jié)點(diǎn)合并的過程中丟 棄的結(jié)點(diǎn),不用處理;法則2)當(dāng)前處理結(jié)點(diǎn)的入度為1時(shí),操作符加空;法則3)當(dāng)前處理結(jié)點(diǎn)的入度為2時(shí),加一個(gè)“),,;法則4)當(dāng)前處理結(jié)點(diǎn)的入度大于2時(shí),調(diào)用右括號(hào)判斷函數(shù)RightBracketO判斷所 要加“)”的個(gè)數(shù);法則5)當(dāng)前處理結(jié)點(diǎn)的入度大于等于1,且當(dāng)前處理結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn)不是橫線時(shí), 操作符要再加上“*”;法則6)當(dāng)前處理結(jié)點(diǎn)的出度為1時(shí),操作符加空;法則7)當(dāng)前處理結(jié)點(diǎn)的出度為2時(shí),操作符加“(”;法則8)當(dāng)前處理結(jié)點(diǎn)的出度大于2時(shí),調(diào)用左括號(hào)判斷函數(shù)LeftBracketO判斷所 要加“(”的個(gè)數(shù)。
8.按權(quán)利要求7所述的梯形圖語言轉(zhuǎn)換為結(jié)構(gòu)文本語言的方法,其特征在于所述右 括號(hào)判斷函數(shù)RightBracketO根據(jù)當(dāng)前處理結(jié)點(diǎn)的入弧的每個(gè)尾結(jié)點(diǎn)n2,逆向掃描到一 個(gè)虛結(jié)點(diǎn)nl,該虛結(jié)點(diǎn)nl的行號(hào)小于或等于當(dāng)前處理結(jié)點(diǎn)η的行號(hào),刪除在處理普通結(jié)點(diǎn) 法則7和法則8處理過程當(dāng)中已記錄加過“)”的記錄已加“)”的結(jié)點(diǎn)以及相應(yīng)的當(dāng)前處理 結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)對(duì)nl、n2 ;累計(jì)剩余記錄已加“),,的結(jié)點(diǎn)以及相應(yīng)的當(dāng)前 處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)對(duì),并記錄,累計(jì)出現(xiàn)不同的已記錄加過“)”的記錄已 加“)”的結(jié)點(diǎn)以及相應(yīng)的當(dāng)前處理結(jié)點(diǎn)往輸入方向的第一個(gè)虛結(jié)點(diǎn)對(duì)nl,n2的對(duì)數(shù)即為所 要加“)”的個(gè)數(shù)。
9.按權(quán)利要求7所述的梯形圖語言轉(zhuǎn)換為結(jié)構(gòu)文本語言的方法,其特征在于所述左 括號(hào)判斷函數(shù)LeftBracketO根據(jù)當(dāng)前處理結(jié)點(diǎn)的出弧的每個(gè)頭結(jié)點(diǎn),正向掃描到一個(gè)虛 結(jié)點(diǎn)nl,該虛結(jié)點(diǎn)nl的行號(hào)等于或小于當(dāng)前處理結(jié)點(diǎn)η的行號(hào),累計(jì)出現(xiàn)不同的虛結(jié)點(diǎn)nl 的個(gè)數(shù),即為所要添加“(”的個(gè)數(shù)。
10.按權(quán)利要求4所述的梯形圖語言轉(zhuǎn)換為結(jié)構(gòu)文本語言的方法,其特征在于所述輸 出結(jié)點(diǎn)處理包括對(duì)普通結(jié)點(diǎn)處理和虛結(jié)點(diǎn)處理后形成的表達(dá)式的括號(hào)匹配進(jìn)行檢查,“),,更多則在最 前面補(bǔ)齊“(”,最后輸出完整結(jié)構(gòu)文本語句,結(jié)束處理過程。
全文摘要
本發(fā)明涉及一種梯形圖語言轉(zhuǎn)換為結(jié)構(gòu)文本語言的方法,包括以下步驟將梯形圖語言存儲(chǔ)為有利于編輯和轉(zhuǎn)換的存儲(chǔ)結(jié)構(gòu),包括在豎線與梯形圖其他圖符即實(shí)結(jié)點(diǎn)的交點(diǎn)處引入虛結(jié)點(diǎn);對(duì)虛結(jié)點(diǎn)進(jìn)行合并,形成AOV圖;根據(jù)上述AOV圖,按照其拓?fù)渑判虻慕Y(jié)點(diǎn)順序,依據(jù)各結(jié)點(diǎn)不同類型分類處理,將AOV圖轉(zhuǎn)換為結(jié)構(gòu)文本。本發(fā)明具有通用性,可正確、有效的轉(zhuǎn)換任何復(fù)雜梯形圖為結(jié)構(gòu)文本,在原本只能使用結(jié)構(gòu)文本編程的地方實(shí)現(xiàn)形象直觀的梯形圖編程,方便了用戶的使用,降低了PLC編程的門檻,提高了PLC的編程效率。
文檔編號(hào)G06F9/44GK101957745SQ20091001258
公開日2011年1月26日 申請(qǐng)日期2009年7月16日 優(yōu)先權(quán)日2009年7月16日
發(fā)明者劉偉, 劉占清, 黃柳文 申請(qǐng)人:沈陽高精數(shù)控技術(shù)有限公司;中國科學(xué)院沈陽計(jì)算技術(shù)研究所有限公司