文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2012)06-0141-04
計算機(jī)科學(xué)的快速發(fā)展和IEC61131-3標(biāo)準(zhǔn)的制定有力推動了軟PLC(Programmable Logic Controller)技術(shù)的發(fā)展。軟PLC技術(shù)是一種基于PC的新型控制技術(shù),相對于傳統(tǒng)的硬PLC而言,軟PLC具有開放的體系結(jié)構(gòu),、強(qiáng)大的網(wǎng)絡(luò)通信能力和數(shù)據(jù)處理能力, 能較好地滿足工業(yè)自動化領(lǐng)域中控制系統(tǒng)開放性和柔性的要求,是目前工業(yè)自動化領(lǐng)域研究的熱點(diǎn)之一,。所謂軟PLC技術(shù)[1],就是以PC作為硬件支撐平臺,利用軟件實(shí)現(xiàn)傳統(tǒng)PLC的基本功能,即將PLC的控制運(yùn)算功能封裝在軟件內(nèi),運(yùn)行于PC的環(huán)境中,。這樣的控制系統(tǒng)在提供了PLC相同功能的同時,,也具備了PC的各種優(yōu)點(diǎn)。
本文介紹的軟PLC編程系統(tǒng)軟件采用Windows多任務(wù)環(huán)境下的多線程技術(shù),,以C++ Builder為主要開發(fā)平臺,,利用其強(qiáng)大的軟件功能,使人機(jī)交互界面更為友好,。由于C++ Builder固有的面向?qū)ο髾C(jī)制,可方便地設(shè)計梯形圖數(shù)據(jù)結(jié)構(gòu),,并結(jié)合相應(yīng)的算法,完成軟PLC編程系統(tǒng)設(shè)計,。本文設(shè)計了界面友好的編輯環(huán)境和方便靈活的編輯方式,,實(shí)現(xiàn)了可視化、規(guī)范化的梯形圖設(shè)計,,方便用戶使用,,提高了PLC編程效率。對提高當(dāng)前軟PLC梯形圖編程軟件通用化和標(biāo)準(zhǔn)化做出了有益的嘗試和探索,。
1 總體設(shè)計
1.1軟PLC系統(tǒng)的體系結(jié)構(gòu)
軟PLC系統(tǒng)包括編程系統(tǒng)和運(yùn)行系統(tǒng),如圖1所示[1-2],。編程系統(tǒng)是基于Windows環(huán)境的編程工具,運(yùn)行于普通PC機(jī)上,。它獨(dú)立于運(yùn)行系統(tǒng),主要完成PLC源程序的編輯,、編譯以及仿真功能。編程系統(tǒng)最終產(chǎn)生一份滿足控制要求的目標(biāo)代碼,,運(yùn)行系統(tǒng)在啟動時就可以加載該目標(biāo)代碼,,對其進(jìn)行解釋執(zhí)行,,并控制對象進(jìn)行交互,完成輸入,、輸出處理等工作,,最終實(shí)現(xiàn)控制功能。
1.2 功能分析
經(jīng)分析,編程系統(tǒng)軟件應(yīng)具有以下功能:(1)編程和仿真功能:編程功能主要包括程序錄入,、修改,、文件存取和語法檢查功能;仿真功能包括模擬開關(guān)控制,、模擬脫機(jī)運(yùn)行過程,。(2)提供菜單和工具欄兩種操作方式,輸入輸出采用直觀的圖形方式,,便于用戶直觀地編輯梯形圖程序,。(3)順序控制功能、邏輯控制功能,、數(shù)據(jù)控制功能,、定時/計數(shù)功能和監(jiān)控功能。(4)可對PLC用戶程序進(jìn)行正確性檢查(包括編程元件的使用,、語法和邏輯關(guān)系正確性檢查),。(5)實(shí)現(xiàn)常見PLC的內(nèi)部編程元件的仿真,實(shí)現(xiàn)PLC指令解釋器的仿真。(6)與Windows界面一致,,提供中英文兩種語言界面與隨機(jī)幫助,支持對程序的注釋,。
1.3 模塊劃分
根據(jù)功能需求分析,采用模塊化的思想進(jìn)行軟件設(shè)計,,將編輯系統(tǒng)軟件劃分為主模塊,、輸入模塊、支持模塊,,仿真模塊和通信模塊,。軟件的組成及其相互間的關(guān)系如圖2所示。
主模塊完成軟件運(yùn)行參數(shù)的初始化,,協(xié)調(diào)其他各模塊調(diào)用控制,,程序打開、顯示,、保存等,。支持模塊進(jìn)行類、對象和結(jié)構(gòu)體的定義,。輸入模塊通過對具體的指令類對象的調(diào)用,對數(shù)據(jù)成員進(jìn)行賦值,、修改等操作,,錄入,、編輯PLC應(yīng)用程序。仿真模塊模擬PLC中的繼電器,、寄存器及相關(guān)I/O變量,,有效模擬現(xiàn)場被控對象信號輸入,直觀地描述各個繼電器的相互控制關(guān)系,,通過時序圖實(shí)時監(jiān)控所有(或部分) 程序使用的繼電器的通斷狀態(tài),。通信模塊在編輯系統(tǒng)和運(yùn)行系統(tǒng)間進(jìn)行通信,把經(jīng)過編譯和脫機(jī)調(diào)試后的目標(biāo)代碼文件下載到運(yùn)行系統(tǒng)中,。
2 存儲與加載的實(shí)現(xiàn)
IEC61131-3標(biāo)準(zhǔn)[3]規(guī)定了5種編程語言,,其中梯形圖(Ladder Diagram)是應(yīng)用最廣泛的編程語言,是PLC編程的最重要編程語言,,因此本系統(tǒng)采用梯形圖(LD),,其他語言待以后進(jìn)一步加入和完善。梯形圖程序的保存采用操作系統(tǒng)自帶的記事本,由此需要制定編碼規(guī)則,并按照這個固定的規(guī)則存儲數(shù)據(jù)或打開顯示梯形圖,。
2.1 編碼規(guī)則制定
PLC程序中需要表示的控件主要有常開觸點(diǎn)NO,常閉觸點(diǎn)NC,輸出觸點(diǎn)OP,記時器觸點(diǎn)TM,記數(shù)器觸點(diǎn)CT,、MC、MCE,、跳轉(zhuǎn)控制觸點(diǎn)JP,、LAL,上升沿觸點(diǎn)DF、下降沿DF/,進(jìn)棧ANS,、ORS,、PUSH、RDS,、POPS,、置位觸點(diǎn)SET,復(fù)位觸點(diǎn)RST,保持觸點(diǎn)KEEP,橫線及豎線等[3-4]。必須為每個觸點(diǎn)設(shè)定一個專用的標(biāo)志符號,,以便于保存,、打開程序時能夠識別這些控件。采用字符串與數(shù)字組合表示每一個觸點(diǎn)控件的相關(guān)信息,制定規(guī)則如圖3所示,。
文件加載時,通過制定的規(guī)則進(jìn)行譯碼,,執(zhí)行的順序與存儲文件基本相同。
3 多線程技術(shù)的應(yīng)用
Windows多任務(wù)環(huán)境下的多線程技術(shù)是將CPU的時間劃分成許多時間片段,,并按照一定的優(yōu)先級將時間片段分配給各個線程,,各線程在各自的時間片段內(nèi)共享CPU,從而實(shí)現(xiàn)微觀上的輪次執(zhí)行宏觀上并發(fā)運(yùn)行的多任務(wù)機(jī)制,。多線程技術(shù)的主要優(yōu)勢在于充分利用了CPU的空閑時間片,,用盡可能少的時間對用戶的要求做出響應(yīng),使得進(jìn)程的整體運(yùn)行效率得到較大提高,同時增強(qiáng)了應(yīng)用程序的靈活性,。
PLC的工作原理是一個“順序掃描,、不斷循環(huán)”的單線程循環(huán)過程[4]。如果軟件采用單線程,,一旦開始執(zhí)行PLC程序,,CPU將被這個死循環(huán)完全占用,軟件的其他事件得不到系統(tǒng)響應(yīng),,無法運(yùn)行,。因此,決定采用多線程機(jī)制[5-6],。仿真模塊占用2個線程:(1)控制程序在“在線模式”與“離線模式”之間轉(zhuǎn)換;(2)精確地實(shí)時監(jiān)控,。加上系統(tǒng)本身的主線程,共有3個線程,。在C++Builder中,,通過File/New/Other下new頁面的“Thread Object” 即可輕松地建立多個線程[5]。
實(shí)時監(jiān)控線程的作用是不斷地讀取程序運(yùn)行中各個繼電器的狀態(tài),,并將狀態(tài)的值返回到時序圖,,以控制時序圖的輸出。線程對各繼電器狀態(tài)的讀取采用鏈表的形式,,依次讀各節(jié)點(diǎn)的屬性,。當(dāng)啟動線程時,線程會執(zhí)行Execute()函數(shù)中的程序,,GO按鈕調(diào)用Resume()函數(shù)啟動線程,,STOP按鈕調(diào)用Suspend()函數(shù)暫停線程。運(yùn)行時,,從頭開始遍歷讀取各個繼電器的通電狀態(tài)的powered屬性,,如果powered=true,則在時序圖上做高為20,、以淡綠色填充的矩形,,表示繼電器處于通電狀態(tài);如果powered=false,,則在梯形圖上作高為20的矩形,,將矩形設(shè)置為與窗體相同的顏色,使視覺上感覺好像沒有畫矩形圖,,以達(dá)到顯示不通電狀態(tài)的效果,。矩形左上角的X坐標(biāo)用一個xstart變量來取值,xstart的值為powered 改變的那一刻的Image1的水平位置,;右下角的X坐標(biāo)始終為Image1的水平位置,,不停地變化,。為了限制時序圖的大小,等到Image1走到一定的位置,,即將它復(fù)位到起始點(diǎn),,重新開始畫圖,。程序片段如下[5]:
if(powered)
{TimingmapForm->Canvas->Brush->Color=clLime; TimingmapForm->Canvas->Pen->Style=psSolid; }
else
{TimingmapForm->Canvas->Brush->Color=clWhite; TimingmapForm->Canvas->Pen->Style=psClear;}
TimingmapForm->Canvas->Rectangle(xstart,count*30+50,left-1,count*30+70),。
以C++ Builder為開發(fā)平臺,采用面向?qū)ο蠛投嗑€程技術(shù),實(shí)現(xiàn)了在PC機(jī)上進(jìn)行PLC程序的編制,、調(diào)試和邏輯結(jié)果的仿真,使PLC程序編制,、調(diào)試與硬件脫離。軟件提供了菜單和工具欄兩種操作方式,,操作簡單,,便于用戶直觀地畫梯形圖程序,具有較高的應(yīng)用和實(shí)踐價值, 對其他類似模擬系統(tǒng)的設(shè)計也具有參考價值,。
參考文獻(xiàn)
[1] 吳玉香,周東霞,林錦赟.嵌入式軟PLC系統(tǒng)的研究和實(shí)現(xiàn)[J].計算機(jī)工程,2009,35(10):235-237.
[2] 賀無名,余強(qiáng)國.基于嵌入式軟PLC的礦井提升機(jī)控制系統(tǒng)設(shè)計[J].煤礦機(jī)械,2011,32(6):244-246.
[3] 彭瑜,何衍慶.IEC 61131-3編程語言及應(yīng)用基礎(chǔ)[M].北京:機(jī)械工業(yè)出版社,2009.
[4] 吳建強(qiáng).可編程控制器原理及其應(yīng)用(第2版)[M].北京:高等教育出版社,2004.
[5] 陸衛(wèi)忠,劉文亮.C++Builder 6程序設(shè)計教程(第2版)[M].北京:科學(xué)出版社,2009.
[6] 章德賓,胡斌,張金隆.多線程技術(shù)與分布式并發(fā)離散事件仿真[J].計算機(jī)仿真,2007,24(1):97-100.
[7] 王紀(jì)森,王俊,周宇.基于多線程的電液伺服加載系統(tǒng)測控軟件設(shè)計[J].機(jī)床與液壓,2009,37(10):159-160.