亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        軟PLC梯形圖編輯與指令表生成方法研究

        2015-03-11 03:49:20吳亞山

        吳亞山, 陸 陽, 徐 謙

        (1.合肥工業(yè)大學 計算機與信息學院,安徽 合肥 230009;2.潞安新疆煤化工(集團)有限公司,新疆 哈密 839003)

        傳統(tǒng)可編程邏輯控制器(programmable logic controller,PLC)是20世紀發(fā)展起來并被廣泛采用的一種自動化控制裝置,具有良好的功能性、高可靠性和強大的工業(yè)環(huán)境適應能力。實際應用中,不同廠家的PLC硬件結構、編程方法均有差異,PLC體系不具備很好的開放性和兼容性[1],大大限制了傳統(tǒng)PLC的發(fā)展。國際電工委員會(International Electrotechnical Commission,IEC)頒布的IEC 61131標準[2-3],對 PLC軟硬件平臺作了統(tǒng)一規(guī)范,符合此標準的軟PLC技術應運而生。

        軟PLC不但具備傳統(tǒng)PLC的各方面優(yōu)點,而且克服了兼容性缺陷,程序僅需作少量修改即可在其他符合IEC 61131-3語言標準的硬件平臺上運行,同時成本低廉。

        IEC 61131-3部分共定義了5種編程語言,包括指令表、結構化文本、梯形圖、功能塊圖和順序功能圖[4],其中指令表和梯形圖使用頻率最高。梯形圖與電氣邏輯控制圖相似,形象直觀,對編程人員友好;指令表則類似匯編語言,可作為軟PLC解釋執(zhí)行的目標語言,對硬件平臺友好。2種語言元素間存在一一對應的關系。因此實現(xiàn)梯形圖編輯和將梯形圖轉換為指令表,對于推動PLC標準化、通用化,提高控制系統(tǒng)編程效率尤為重要。

        本文提出一種基于雙向循環(huán)鏈表和十字鏈表的梯形圖編輯和指令表生成算法,實現(xiàn)了一個軟PLC開發(fā)系統(tǒng),并分析了軟PLC運行系統(tǒng)實現(xiàn)思想。

        1 梯形圖與指令表簡介

        梯形圖(ladder diagram,LD)是一種圖形化編程語言,引入了電氣系統(tǒng)中電源軌線、繼電器、觸點、線圈等概念,以“能量流動”描述數(shù)據(jù)傳遞過程,直觀性強,易于學習。一個電動機啟保停控制邏輯梯形圖示例如圖1所示。

        按動START觸點對應的按鈕,線圈 MOTOR對應的電動機將持續(xù)運轉,直到按動STOP觸點對應的按鈕,電動機停止運轉。

        由圖1梯形圖生成的指令表如圖2所示。

        圖1 梯形圖

        圖2 指令表

        指令表(IL,instruction list)以一系列指令作為編程語言,由操作符、修正符和操作數(shù)等組成。LD指令讀取相應觸點狀態(tài),ST指令將運算后的結果輸出到線圈MOTOR對應的輸出點,從而控制電動機啟停。

        2 雙向循環(huán)鏈表與十字鏈表

        雙向循環(huán)鏈表每個節(jié)點中有2個指針,*next指向后繼節(jié)點,*previous指向前驅節(jié)點,因此在查找前驅節(jié)點和后繼節(jié)點時非常高效,如圖3所示。

        圖3 雙向循環(huán)鏈表

        十字鏈表是表示正交關系的一種鏈式存儲結構,可用于存儲有向圖和稀疏矩陣等,如圖4所示。

        圖4 十字鏈表

        3 梯形圖的數(shù)據(jù)結構

        3.1 梯形圖基本元素定義

        梯形圖的基本元素包括電源軌線、連接線、觸點、線圈等,具體分類見表1所列。

        表1 梯形圖基本元素及圖例

        為便于擴展梯形圖基本元素,提高程序模塊化程度,降低不同基本元素處理復雜度,可將所有梯形圖基本元素的共同特征抽象為一個公共基類[5]。LD-BaseElem基類的定義描述如下:

        class LD-BaseElem

        {CString Caption;//標簽名、變量名,如I0.0,X0,Y1

        CString s[4];//參數(shù)名

        CString v[4];//參數(shù)值

        int LD-Type;//元素類型

        int mRow,mCol;//行列坐標

        LD-BaseElem*next;//指向后繼梯形圖元素

        LD-BaseElem*previous;//指向前驅梯形圖元素

        LD-BaseElem*up;//指向上方梯形圖元素

        LD-BaseElem*down;//指向下方梯形圖元素

        BOOL visited;//元素是否被遍歷

        BOOL outputed;//元素IL是否已輸出

        LD-BaseElem(int LD-Type,int tRow,int tCol){}

        virtual void setValue(){}//賦值函數(shù)

        virtual void Draw(CDC*pDC){}//繪圖函數(shù)

        virtual CString toIL(){}//IL指令轉換函數(shù)

        };

        基類中定義了基本元素的類型、輸入輸出參數(shù)、對應的變量名、在梯形圖中的坐標等信息。同時以虛函數(shù)的方式定義了賦值函數(shù)、繪圖函數(shù)和IL指令轉換函數(shù)。每個基本元素繼承自基類,并按照各自特點重新實現(xiàn)虛函數(shù)。如豎直連接線元素,不需要賦值,也不用輸出IL指令,只需重寫Draw()函數(shù),在指定行列坐標畫出該連接線即可。

        3.2 梯形圖的存儲方式

        梯形圖的存儲,可采用數(shù)組、鏈表、二叉樹以及AOV網(wǎng)等方式實現(xiàn)[6-8]。一些研究中,基于二叉樹、有向圖等存儲方式,需要二次構造數(shù)據(jù)結構,建立過程復雜。

        求解梯形圖的輸出值時,應遵從PLC“循環(huán)掃描,順序執(zhí)行”的工作方式,從左電源軌線開始,各基本元素依次按照從左向右、從上到下的順序求值,遇到并聯(lián)塊時,優(yōu)先求解并聯(lián)塊,最后通過線圈輸出求值結果;一輪求值結束后,又從左電源軌線開始新一輪求值。

        根據(jù)梯形圖求值特點,可將梯形圖中的基本元素作為鏈表節(jié)點,按行建立雙向循環(huán)鏈表,在此基礎上,為行之間的連接線元素建立十字鏈接。這種雙向循環(huán)十字鏈表數(shù)據(jù)結構,前后查找效率高,增刪、遍歷節(jié)點方便,同時鏈式指針邏輯結構符合梯形圖求值規(guī)則,便于繪制梯形圖和生成指令表。圖1對應的雙向循環(huán)十字鏈表如圖5所示。

        圖5 梯形圖的雙向循環(huán)十字鏈表示例

        雙向循環(huán)十字鏈表定義描述如下:

        typedef LD-BaseElem Node;

        class LinkList

        {Node*header;//頭節(jié)點

        int maxRow;//繪圖網(wǎng)格行數(shù)

        int maxCol;//繪圖網(wǎng)格列數(shù)

        LinkList(){}//構造函數(shù)

        //指定位置插入新節(jié)點

        void addNode(int LD-Type,int tRow,int tCol)

        {//建立左右指針關聯(lián)

        //建立上指針關聯(lián)

        //建立下指針關聯(lián)}

        Node* getNode(int tRow,int tCol){}//查找節(jié)點

        void removeNode(int tRow,int tCol){}//刪除節(jié)點

        void Draw(CDC*pDC){}//遍歷繪制整個梯形圖

        CString outPutIL(){}//整個梯形圖生成指令表

        };

        定義中,addNode()方法最為重要,其根據(jù)不同基本元素類型,動態(tài)創(chuàng)建新元素節(jié)點,并建立*next、*previous、*up、*down雙向十字指針。需要注意的是,觸點和線圈節(jié)點與不在同一行的其他節(jié)點沒有直接關系,故其*up和*down指針均保持為NULL;而具有豎直導向作用的連接線(包括左電源軌線、豎電源軌線、右電源軌線、豎直連接線、中層右接線、中層左接線、向下連接線、左下承接線和右下承接線),起到行間連接和控制程序走向的作用,在梯形圖編輯過程中其*up和*down指針需按實際情況指向對應的節(jié)點。

        3.3 梯形圖編輯

        筆者自主開發(fā)了軟PLC編程環(huán)境,梯形圖編輯器如圖6所示。

        圖6 梯形圖編輯界面

        該編輯器采用多文檔窗口開發(fā),可同時編輯多個梯形圖程序。主界面分為3部分,左側用樹狀結構顯示了梯形圖基本元素,中間部分為梯形圖編輯區(qū),右側輸出梯形圖生成的指令表程序。梯形圖編輯過程中,調(diào)用addNode()函數(shù)不斷維護節(jié)點和指針,Draw()函數(shù)可動態(tài)更新編輯區(qū)的梯形圖,outPutIL()函數(shù)則實時將當前梯形圖轉換為指令表。

        梯形圖的編輯,也就是插入和刪除基本元素節(jié)點的過程。如圖7所示,以刪除常閉觸點為例,斷開其與前驅和后繼之間的指針,并且在前驅和后繼之間建立鏈接,再將常閉觸點釋放即可;插入節(jié)點亦然??梢婋p向循環(huán)十字鏈表在梯形圖編輯中的便捷性。

        圖7 刪除梯形圖元素

        4 梯形圖生成指令表

        4.1 梯形圖元素與指令的關系

        梯形圖按照從左向右、從上到下的順序求解輸出值。從左向右,各元素執(zhí)行“AND”運算指令;遇到并聯(lián)塊時,從上到下,并聯(lián)的部分之間執(zhí)行“OR”運算指令;連接線控制程序走向;觸點用于讀取數(shù)據(jù),對應“LD”運算指令;線圈用于輸出數(shù)據(jù),對應“ST”運算指令。

        4.2 梯形圖生成指令表實例

        為便于描述,將圖5梯形圖雙向循環(huán)十字鏈表各節(jié)點命名如下:v[i]表示電源軌線和連接線,X[i],Y0表示觸點和線圈,如圖8所示。

        圖8 梯形圖生成指令表過程

        借助棧記錄遍歷過的電源軌線和連接線節(jié)點,編寫梯形圖outPutIL()遍歷算法,按圖8所示中箭頭及標號順序表示的路徑依次訪問節(jié)點。分別調(diào)用各基本元素節(jié)點的toIL()方法輸出該元素代表的具體IL指令,最終組成完整的指令表語言程序。

        5 相關算法對比

        梯形圖的編輯和指令表轉換,已有算法主要采用鏈表、二叉樹、AOV網(wǎng)相結合的方式實現(xiàn)。

        5.1 鏈表與二叉樹結合算法

        文獻[9]以AOV網(wǎng)的節(jié)點表示梯形圖元素,AOV網(wǎng)的弧表示梯形圖元素間的連接關系,對梯形圖進行存儲;再將AOV網(wǎng)轉換為二叉樹,以二叉樹的非葉節(jié)點表示梯形圖串聯(lián)、并聯(lián)邏輯關系,對轉換后的二叉樹進行一定的裁剪,通過中序遍歷輸出指令表語句。以圖1所示梯形圖為例,該算法對應的存儲結構和轉換示意如9所示。

        圖9 AOV網(wǎng)及二叉樹示例

        此算法的AOV網(wǎng)將連接線元素統(tǒng)一作為虛節(jié)點,梯形圖元素間的串聯(lián)、并聯(lián)邏輯關系隱含在節(jié)點的出度、入度信息中,需要對AOV網(wǎng)進行一次遍歷,構建出二叉樹,裁剪虛節(jié)點,才能進行指令表的轉換。AOV網(wǎng)發(fā)生變化后,二叉樹需要重建。

        5.2 雙向鏈表與AOV網(wǎng)結合算法

        文獻[10]以行雙向鏈表作為梯形圖數(shù)據(jù)結構,用于存儲和顯示數(shù)據(jù);根據(jù)行雙向鏈表生成AOV網(wǎng),對梯形圖節(jié)點進行拓撲排序,再轉換為指令表語句。以圖1所示梯形圖為例,該算法對應的存儲結構和轉換示意如圖10所示。

        此算法的行雙向鏈表僅保留了行內(nèi)元素之間和行與行之間的邏輯關系,卻丟失了處于不同行的元素之間的邏輯關系。因此在將梯形圖轉換為指令表前,需要對整個鏈表進行一次掃描,在適當位置添加虛節(jié)點(圖10中的vp1節(jié)點),構建AOV網(wǎng),再進行拓撲排序和輸出。一旦對梯形圖進行編輯,建立AOV網(wǎng)的過程需要重新進行。

        5.3 本文算法優(yōu)勢

        本文提出的雙向循環(huán)十字鏈表有以下優(yōu)勢:(1)動態(tài)存儲。編輯過程中,動態(tài)將梯形圖按雙向循環(huán)十字鏈表存儲。梯形圖編輯只需針對鏈表中的部分節(jié)點(4個以內(nèi))進行增刪和指針重定向操作,而不需要二次構造數(shù)據(jù)結構。

        (2)繪圖簡單。繪制梯形圖元素時,無需考慮各元素間的邏輯關系,只需按照網(wǎng)格坐標將各節(jié)點繪制在編輯區(qū)。忽略行間十字鏈接的情況下,雙向循環(huán)十字鏈表就是一個簡單的雙向循環(huán)鏈表,通過調(diào)用Draw()函數(shù)對其進行一次單向順序遍歷即可完成梯形圖繪制刷新。

        (3)實時轉換。雙向循環(huán)十字鏈表數(shù)據(jù)結構保留了梯形圖元素間的邏輯關系和層次關系,按outPutIL()指定的遍歷算法直接遍歷雙向循環(huán)十字鏈表,即可按路徑順序輸出對應的指令表。

        圖10 行雙向鏈表及AOV網(wǎng)示例

        由于繪圖和生成指令表時無需將雙向循環(huán)十字鏈表數(shù)據(jù)結構轉換為另一種數(shù)據(jù)結構,在處理復雜梯形圖時,能有效節(jié)約系統(tǒng)資源,提高處理效率。

        6 軟PLC運行系統(tǒng)實現(xiàn)思想

        6.1 PLC執(zhí)行方式

        傳統(tǒng)PLC按周期運行,每周期分為輸入采樣、執(zhí)行程序、輸出刷新3個階段,遵循“循環(huán)掃描,順序執(zhí)行”的工作方式。① 輸入采樣,從I/O口讀取輸入信號,并在整個周期內(nèi)保持讀取的數(shù)據(jù)不變,直至下次采樣;②執(zhí)行程序,根據(jù)輸入采樣得到的數(shù)據(jù),執(zhí)行控制程序,并將執(zhí)行結果寫到輸出映像區(qū);③輸出刷新,第2階段執(zhí)行結束后,將輸出映像區(qū)的執(zhí)行結果反饋到I/O口,實現(xiàn)目標控制。

        6.2 軟PLC運行系統(tǒng)實現(xiàn)方式

        PLC執(zhí)行程序階段的實現(xiàn),有編譯執(zhí)行和解釋執(zhí)行2種方式[11-12]。編譯執(zhí)行需將PLC程序轉換為具體硬件平臺可直接識別的二進制指令。考慮到PLC程序的兼容性和可移植性,可采用解釋執(zhí)行方式,為硬件平臺編寫以IEC 61131-3標準規(guī)定的指令表語言為目標語言的虛擬機程序。該虛擬機模擬一臺PLC設備,從硬件I/O口讀取輸入信號,并分步解釋執(zhí)行用戶指令表程序,執(zhí)行完成后,將結果輸出到硬件I/O口,從而實現(xiàn)指令表語言的“順序執(zhí)行”;虛擬機不斷重復讀取數(shù)據(jù)、解釋指令、輸出數(shù)據(jù)的過程,即可模擬傳統(tǒng)PLC“循環(huán)掃描”工作方式。這種解釋執(zhí)行的方案,僅需對虛擬機程序進行少量修改,就可使已編寫的PLC代碼在不同硬件平臺上運行,且擴展方便。

        7 結束語

        本文提出一種基于雙向循環(huán)鏈表和十字鏈表的梯形圖數(shù)據(jù)結構,正確實現(xiàn)了梯形圖編輯和梯形圖生成指令表算法。該數(shù)據(jù)結構能直觀地表現(xiàn)梯形圖各元素間邏輯關系,對實現(xiàn)完整的軟PLC控制系統(tǒng)具有一定意義。

        [1] 任繼鋒.基于IEC61131標準的PLC設計與實現(xiàn)[D].沈陽:沈陽理工大學,2012.

        [2] 杉布,王蔚庭.IEC 61131-3國際標準簡介[J].國內(nèi)外機電一體化技術,2001(1):54-57.

        [3] IEC 61131-3,Programmable controllers,part 3:programming language[S].

        [4] 彭 瑜,何衍慶.IEC 61131-3編程語言及應用基礎[M].北京:機械工業(yè)出版社,2009:6-10.

        [5] 郭書杰.軟件PLC梯形圖編程系統(tǒng)的研究與實現(xiàn)[D].沈陽:中國科學院研究生院沈陽計算技術研究所,2010.

        [6] 雷云飛,童 懷,伍世元.基于“邏輯二叉樹”的PLC梯形圖與指令表互換算法[J].數(shù)字技術與應用,2011(4):9-10.

        [7] 潘庭龍,沈學芹,紀志成.基于AOV圖及因果圖的梯形圖與語句表互換算法[J].測控技術,2008(11):64-66.

        [8] 畢 翔,韓江洪,王躍飛,等.面向PLC的離散事件控制系統(tǒng)設計方法研究[J].合肥工業(yè)大學學報:自然科學版,2010,33(9):1333-1337.

        [9] 葛 芬,吳 寧.基于AOV圖及二叉樹的梯形圖與指令表互換算法[J].南京航空航天大學學報,2006,38(6):754-758.

        [10] 畢 輝,程良鴻.關于軟PLC梯形圖向語句表轉換方法的研究[J].微計算機信息,2007(25):63-65.

        [11] 卓保特,欒 勇,劉 偉,等.PLC源程序編碼方法與解釋執(zhí)行算法設計[J].計算機工程與應用,2012(14):68-73.

        [12] 李慧強.編譯型PLC編譯系統(tǒng)的研究與實現(xiàn)[D].山東:山東輕工業(yè)學院,2010.

        久久亚洲一级av一片| 亚洲日韩av无码| 秋霞鲁丝片av无码| 青青草视频华人绿色在线| 日本一区二三区在线中文| 国产一区二区三区视频网| 青楼妓女禁脔道具调教sm| 国产av天堂成人网| 国产熟女乱综合一区二区三区 | 久久亚洲网站中文字幕| 久久久久88色偷偷| 一本一本久久a久久精品综合麻豆| 999久久久免费精品国产牛牛 | 日本妇女高清一区二区三区| 人妻精品久久久久中文字幕69| 免费a级毛片无码a| 乱人伦人妻中文字幕不卡| 国产激情一区二区三区不卡av| 宅男66lu国产在线观看| 99久久久无码国产aaa精品| 女人被躁到高潮嗷嗷叫| 美女扒开腿露内裤免费看| 国产l精品国产亚洲区久久| 亚洲综合伊人制服丝袜美腿| 丝袜美腿av免费在线观看| 亚洲av成人一区二区三区本码| 老师脱了内裤让我进去| 国产精品中文第一字幕| 亚洲天堂av黄色在线观看| 丁香美女社区| 三上悠亚免费一区二区在线| 黄色国产一区在线观看| 亚洲国产精品成人天堂| 久久久久亚洲av无码专区体验| 韩国无码精品人妻一区二| 少妇爽到高潮免费视频| 国精产品推荐视频| 中文字幕久久久久久精| 日本成人精品一区二区三区| 国产人妻大战黑人20p| 97无码人妻Va一区二区三区|