国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于MiniGUI 的梯形圖編程工具的設(shè)計(jì)與實(shí)現(xiàn)*

2013-12-23 04:45姚家慶陶耀東鄭一麟
關(guān)鍵詞:二叉樹梯形圖繪制

姚家慶,陶耀東,鄭一麟

(1.中國(guó)科學(xué)院 研究生院,北京 100049;2.中國(guó)科學(xué)院 沈陽計(jì)算技術(shù)研究所,沈陽 110004)

0 引言

當(dāng)前,開放式數(shù)控體系結(jié)構(gòu)已經(jīng)成為數(shù)控系統(tǒng)發(fā)展的主流。在這種形勢(shì)下,傳統(tǒng)的PLC 由于難以構(gòu)成開放式的硬件體系結(jié)構(gòu)、編程方法不相兼容等缺點(diǎn),無法滿足開放式數(shù)控系統(tǒng)的要求。相比而言,軟PLC 不僅可以充分利用PC 豐富的軟硬件資源,為用戶提供非常友好的人機(jī)交互界面,而且在編程語言上還有各個(gè)廠商可以遵循的標(biāo)準(zhǔn)——IEC61131-3 標(biāo)準(zhǔn)。這不僅能夠保證系統(tǒng)的開放性,而且在一定程度上方便用戶的使用。

MiniGUI 是一種面向?qū)崟r(shí)嵌入式系統(tǒng)輕量級(jí)圖形用戶界面的支持系統(tǒng)[1]具有以下的特點(diǎn)[1]:①較強(qiáng)的伸縮性;②占用資源較少,是一個(gè)輕量級(jí)的嵌入式圖形庫;③具有可配置性,方便定制。

此外,MiniGUI 還具有很強(qiáng)的跨系統(tǒng)操作特性。MiniGUI 的抽象層將底層的操作系統(tǒng)和硬件的差別隱藏起來,對(duì)上層的應(yīng)用程序提供一致的接口,使得上層應(yīng)用程序無需關(guān)心底層的差別。其系統(tǒng)的層次結(jié)構(gòu)大致如圖1 所示。

圖1 MiniGUI 系統(tǒng)層次結(jié)構(gòu)

MiniGUI 是一種輕量級(jí)的圖形界面支持系統(tǒng),不僅占用的系統(tǒng)資源少,還具優(yōu)良的跨平臺(tái)特性。因此,在開放式的數(shù)控系統(tǒng)中使用MiniGUI 實(shí)現(xiàn)系統(tǒng)界面,不僅可以節(jié)省大量的系統(tǒng)資源,而且還方便移植,本文使用MiniGUI1.6.10 開源版本。

本文主要是基于藍(lán)天數(shù)控系統(tǒng)以及IEC61131-3標(biāo)準(zhǔn)來設(shè)計(jì)PLC 編程系統(tǒng),其中涉及到的圖元包括:常開觸點(diǎn)、常閉觸點(diǎn)、輸出線圈、取反輸出線圈、復(fù)位和置位線圈、功能類型以及水平垂直連接線等等。

梯形圖是一種圖形化的語言,因而會(huì)涉及到以下的一些問題如梯圖圖元的設(shè)計(jì)、圖元與梯圖的顯示、梯圖轉(zhuǎn)換成IL 文本、梯圖的語法正確性檢查等等,本文在設(shè)計(jì)的過程中就以上的問題逐一進(jìn)行解決。

1 PLC 梯圖編輯界面的設(shè)計(jì)

1.1 圖元數(shù)據(jù)結(jié)構(gòu)以及繪制

由于界面大小的限制,一行顯示圖元的個(gè)數(shù)是有限的。在本程序中將梯形圖編輯區(qū)域劃分成等寬的9 列,同時(shí)將該區(qū)域劃分成等高的若干行,形成網(wǎng)格。一般結(jié)構(gòu)簡(jiǎn)單的圖元如觸點(diǎn)、線圈之類,占據(jù)的空間為一個(gè)網(wǎng)格。對(duì)于較為復(fù)雜的功能塊而言,由于包含的輸入輸出信息較多,可能會(huì)占據(jù)多個(gè)網(wǎng)格。圖2 所示是不同圖元所占網(wǎng)格大小的對(duì)比。

圖2 不同圖元所占網(wǎng)格大小的比較

為了描述梯形圖中使用到的各個(gè)圖元,程序中使用定義entity 和entityor 結(jié)構(gòu)體:

在entity 結(jié)構(gòu)體當(dāng)中,name、in 和out 數(shù)組用于保存圖元的名稱以及輸入輸出參數(shù)。m_type 值唯一標(biāo)記一個(gè)圖元。x_n 和y_n 來表示組成圖元各網(wǎng)格的位置,而各個(gè)圖形符號(hào)在整個(gè)梯形圖中的位置則使用分量x、y 來表示。

結(jié)構(gòu)體entityor 用于描述縱向連接線圖元,定義如下:

其中m_ortype 表示縱向連接線的類別,有左右兩種縱向連接線圖元。x 和y 則表示該圖元在梯形圖結(jié)構(gòu)體中的位置。

在程序當(dāng)中將每一個(gè)圖元的繪制封裝成一個(gè)接口。在接口中圖元被拆分成若干簡(jiǎn)單幾何圖形進(jìn)行繪制,通過調(diào)用MiniUI 中各個(gè)基本圖形繪制函數(shù)來完成整個(gè)圖元的繪制,以下是MiniGUI 繪制直線、圓、矩形的接口:

圖元的地址或輸入輸出參數(shù)可以通過MiniGUI的文本輸出接口來顯示:

1.2 梯圖的數(shù)據(jù)結(jié)構(gòu)與繪制

梯圖是由若干個(gè)圖元組成的,梯形圖程序?qū)?yīng)的數(shù)據(jù)結(jié)構(gòu)如下所示:

其中max_row 和max_col 為梯形圖的最大行數(shù)和最大列數(shù)。二維數(shù)組p 和po 用于存放一般圖元和連接線圖元結(jié)構(gòu)體指針。

由于窗口大小的限制,顯示的梯形圖往往是整個(gè)梯圖的一部分,因而有必要使用一個(gè)結(jié)構(gòu)來定位當(dāng)前顯示的梯圖位置,定義的結(jié)構(gòu)體如下所示:

其中,row 分量表示當(dāng)前顯示部分梯圖第一行在整個(gè)梯形圖中的行號(hào)。col 表示當(dāng)前焦點(diǎn)光標(biāo)所處位置的列號(hào)。focus_col 則表示當(dāng)前焦點(diǎn)光標(biāo)在當(dāng)前可視區(qū)域中的行號(hào),max_focus_col 則表示當(dāng)前編輯區(qū)域內(nèi)允許的最大行號(hào)。

在編輯梯形圖時(shí)可以根據(jù)Plc_ladder 結(jié)構(gòu)體中的內(nèi)容確定當(dāng)前編輯的位置,插入或者刪除圖元時(shí)就針對(duì)LIDoc 結(jié)構(gòu)體中的p 或po 數(shù)組中對(duì)應(yīng)的單元進(jìn)行處理。同樣,在刷新梯形圖時(shí),程序通過讀取Plc_ladder 結(jié)構(gòu)體中的內(nèi)容,確定當(dāng)前窗口顯示的梯形圖位于LIDoc 二維數(shù)組中的位置,并調(diào)用繪制函數(shù)將該部分的各個(gè)圖元繪制出來。

2 梯圖的語法檢查與保存

梯形圖在編輯完成之后必須要保存下來,為PLC的其他模塊使用。本程序?qū)⑻菪螆D程序轉(zhuǎn)換成一種文本——IL 程序形式保存。在保存之前必須進(jìn)行梯形圖的語法正確性檢查。

梯形圖的語法檢查主要針對(duì)的梯形圖程序中出現(xiàn)的語法錯(cuò)誤,如出現(xiàn)斷路、短路、沒有標(biāo)上組件地址、出現(xiàn)重復(fù)的標(biāo)簽、非法使用程序的結(jié)束標(biāo)記等等。對(duì)于短路可以在掃描并聯(lián)分支時(shí)檢查是否出現(xiàn)只有直線的分支,在掃描各個(gè)組件時(shí)檢查其對(duì)應(yīng)的結(jié)構(gòu)體輸入?yún)^(qū)域是否為空就可以檢查是否有組件沒有地址。而出現(xiàn)重復(fù)標(biāo)簽的情形只須在掃描時(shí)將標(biāo)簽記錄下來,每掃描到一個(gè)標(biāo)簽時(shí)就將其與已經(jīng)掃描到的標(biāo)簽進(jìn)行比較,檢查是否重復(fù)。對(duì)于一般的錯(cuò)誤,比如創(chuàng)建組件位置有誤、輸入錯(cuò)誤的參數(shù)等則在編輯梯形圖時(shí)通過掃描梯級(jí)就能檢測(cè)出來并阻止操作,例如為了避免在最后一列插入常開觸點(diǎn),程序可以在插入圖元時(shí)檢查插入位置的col 分量,若為最后一列的序號(hào),則提示該位置不可以插入圖元。

梯形圖向IL 轉(zhuǎn)換的算法有很多,在文獻(xiàn)[2]中采用的方法是先構(gòu)造邏輯樹結(jié)構(gòu),通過遍歷樹結(jié)構(gòu)就能得到對(duì)應(yīng)的指令集。文獻(xiàn)[3]采用的方法是將構(gòu)成梯形圖的各個(gè)梯級(jí)分別轉(zhuǎn)換成二叉樹,構(gòu)成二叉樹森林,之后對(duì)二叉樹森林進(jìn)行遍歷,得到相應(yīng)的指令表。文獻(xiàn)[4]利用串并聯(lián)算法實(shí)現(xiàn)PLC 梯形圖到指令表的轉(zhuǎn)換,該算法將梯形圖轉(zhuǎn)化為有向無環(huán)圖,對(duì)圖中的串并聯(lián)關(guān)系進(jìn)行分類歸并,將串并聯(lián)結(jié)構(gòu)按層次存儲(chǔ)在廣義表中,根據(jù)廣義表生成指令表。文獻(xiàn)[5]通過將梯形圖映射為AOV 圖,并由其建立二叉樹來表示指令間的邏輯關(guān)系,通過遍歷二叉樹實(shí)現(xiàn)梯形圖向IL 的轉(zhuǎn)換。文獻(xiàn)[6]指出使用AOV圖來實(shí)現(xiàn)梯形圖向IL 文本的轉(zhuǎn)換效率不高,提出將梯形圖映射成森林,由森林建立對(duì)應(yīng)的二叉樹,通過遍歷二叉樹來實(shí)現(xiàn)梯形圖向IL 文本的轉(zhuǎn)換。在本程序中,梯形圖向IL 轉(zhuǎn)換所使用的方法是“正向深度掃描”方法[7],這種方法與手工掃描梯圖過程類似。它按照從左向右、從上向下的順序掃描梯圖,當(dāng)遇到比當(dāng)前更深的分支時(shí)則先掃描更深的分支,對(duì)每一個(gè)分支也執(zhí)行以上同樣的操作。以下圖3 是梯形圖梯級(jí)掃描的一個(gè)示例。

圖3 梯形圖梯級(jí)掃描示例

轉(zhuǎn)換后的IL 程序段為:

3 軟件實(shí)現(xiàn)與測(cè)試

3.1 系統(tǒng)界面布局

PLC 梯形圖編程系統(tǒng)界面由3 部分組成:信息提示和輸入?yún)^(qū)、梯圖編輯區(qū)和功能鍵區(qū)。信息提示區(qū)用于提示編輯梯圖時(shí)出現(xiàn)的錯(cuò)誤,輸入?yún)^(qū)用于輸入圖元的地址及參數(shù),功能鍵區(qū)則用于提示當(dāng)前可以進(jìn)行的操作。其布局大致如圖4 所示。

圖4 梯形圖編輯界面布局

由于界面寬度限制,諸多功能鍵選項(xiàng)需要分成多層,通過“下一頁”和“退出”按鍵在各個(gè)功能選項(xiàng)組之間切換。不同層次之間,同一個(gè)按鈕的動(dòng)作以及顯示的文本往往是不同的。因此,程序?yàn)椴煌膶哟卧O(shè)置了唯一的狀態(tài)標(biāo)記。在處理按鈕消息時(shí)可以根據(jù)當(dāng)前的狀態(tài)來確定按鈕的動(dòng)作以及按鈕顯示的文本。

在編輯瀏覽梯形圖時(shí),焦點(diǎn)的連續(xù)快速移動(dòng)會(huì)使得界面刷新的頻率增大,很可能會(huì)造成界面閃爍。為此,可以采用MiniGUI 下的的雙緩沖[7],具體的步驟如下:

(1)創(chuàng)建一個(gè)與當(dāng)前DC 兼容的內(nèi)存DC;

(2)每次刷新界面,調(diào)用繪制梯形圖的接口在內(nèi)存DC 上繪制當(dāng)前界面中梯形圖的可視部分;

(3)使用BitBlt 函數(shù)將內(nèi)存DC 中的內(nèi)容輸出到界面上;

3.2 實(shí)驗(yàn)測(cè)試

藍(lán)天數(shù)控系統(tǒng)使用的PLC 程序包括快邏輯、慢邏輯和子程序,實(shí)驗(yàn)中將梯圖程序作為快邏輯。下面針對(duì)梯圖編輯過程當(dāng)中出現(xiàn)的斷路、短路、空跳轉(zhuǎn)以及在并聯(lián)結(jié)構(gòu)中插入行等錯(cuò)誤進(jìn)行測(cè)試,并編寫一個(gè)完整的梯圖程序進(jìn)行轉(zhuǎn)換,結(jié)果如下圖5 ~8 所示。

圖5 PLC 程序斷路報(bào)警提示

圖6 PLC 程序短路報(bào)警提示

圖7 PLC 程序空跳轉(zhuǎn)報(bào)警提示

圖8 PLC 程序插入行錯(cuò)誤報(bào)警提示

以下是對(duì)梯形圖轉(zhuǎn)換成為指令表程序進(jìn)行測(cè)試,梯形圖程序如圖9 所示,轉(zhuǎn)換結(jié)果如圖10 所示。

圖9 梯形圖程序?qū)嵗?/p>

圖10 保存梯形圖生成的IL 程序

經(jīng)過實(shí)驗(yàn)測(cè)試,驗(yàn)證了本梯形圖編輯工具的正確性與可用性。

4 結(jié)束語

本文基于MiniGUI 設(shè)計(jì)并實(shí)現(xiàn)了梯形圖編輯工具,實(shí)現(xiàn)梯形圖的編輯、梯形圖的語法檢查以及保存等功能。在梯形圖保存時(shí)使用類似于樹深度優(yōu)先遍歷的“正向深度掃描法”,這種方法比較直觀、形象。本文實(shí)現(xiàn)的編輯器主要將直觀的梯圖程序轉(zhuǎn)換成為類似于匯編的IL 文本進(jìn)行保存,并且生成的IL 文件將作為系統(tǒng)PLC 編譯模塊的輸入文件[9]。鑒于MiniGUI 資源占用低、可移植性好等特點(diǎn),該系統(tǒng)具有一定的實(shí)用性。

[1]魏永明. MiniGUI 用戶手冊(cè)[Z]. 北京飛漫軟件技術(shù)有限公司,2003.

[2]莫易敏,章德平,周哲. PLC 梯形圖轉(zhuǎn)化為指令表算法及實(shí)現(xiàn)[J]. 控制工程,2006,13(6):573-576.

[3]黃晶晶,陳文薌,葉軍君,等. 基于二叉樹的PLC 梯形圖轉(zhuǎn)化為指令表的算法[J]. 現(xiàn)代電子技術(shù),2010(4):125-127.

[4]林懋愷,王曉芳,林亨. PLC 梯形圖的廣義表轉(zhuǎn)換[J]. 計(jì)算機(jī)工程,2007,33(13):75-78.

[5]Ge Fen,Wu Ning. A transformation algorithm of ladder diagram into instruction list based on AOV digraph and binary tree[C].IEEE Tencon 2006.

[6]裴峰,蔡啟先,郭森. 梯形圖與指令表互換算法的研究[J]. 廣西工學(xué)院學(xué)報(bào),2010,21(3):42-45.

[7]郭書杰. 軟件PLC 梯形圖編程系統(tǒng)的研究與實(shí)現(xiàn)[D].沈陽:中國(guó)科學(xué)院研究生院,2010.

[8]韓超. 嵌入式GUI 開發(fā)設(shè)計(jì)——基于MiniGUI[M]. 北京:電子工業(yè)出版社,2009.

[9]趙鴻玢,于東,李毅霞,等. 基于RTLinux 的軟PLC 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 小型微型計(jì)算機(jī)系統(tǒng),2007,28(3):470-473.

猜你喜歡
二叉樹梯形圖繪制
基于雙向二叉樹的多級(jí)菜單設(shè)計(jì)及實(shí)現(xiàn)
基于故障二叉樹的雷達(dá)發(fā)射機(jī)故障診斷*
二叉樹創(chuàng)建方法
基于Excel VBA和AutoCAD的滾動(dòng)軸承參數(shù)化比例圖繪制方法
一種基于SVM 的多類文本二叉樹分類算法?
超萌小鹿課程表
為雄安的交通繪制一張藍(lán)圖
PLC編譯功能的實(shí)現(xiàn)
S7—200PLC基本編程教學(xué)案例
數(shù)控機(jī)床梯形圖故障設(shè)置方法研究
昆山市| 同江市| 横峰县| 柳江县| 泰兴市| 西昌市| 伊通| 五大连池市| 罗定市| 开原市| 西乌珠穆沁旗| 咸丰县| 新安县| 潞西市| 开阳县| 黑水县| 汉源县| 堆龙德庆县| 香河县| 苗栗县| 黔西县| 花垣县| 延寿县| 大荔县| 布拖县| 望江县| 巧家县| 建湖县| 罗城| 米易县| 阜城县| 象山县| 临颍县| 吐鲁番市| 乐平市| 犍为县| 巫溪县| 南江县| 贺州市| 蚌埠市| 宣化县|