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