數控系統內部控制邏輯是由通用或內裝式可編程控制器(PLC)來實現的。目前,PLC的編程方法主要有專用編程器和基于PC的軟件編程器兩種。當前,華中數控系統PLC控制是基于DOS環境使用C語言而設計的,該軟件已經不太符合現代計算機大多采用Windows操作系統的實際要求,設計人員使用起來不直觀、不方便,而且使用C語言編程同使用梯形圖編程相比,對編程人員要求較高。根據這些情況,有必要研發一個基于個人計算機的能為用戶提供直觀、方便、高效的編程環境的PLC軟件開發平臺,使數控實驗臺在最大程度上發揮它的積極效用,使學生能夠直觀、方便地了解和掌握數控系統中PLC的編程和仿真操作。
1 華中數控系統中的可編程控制器
華中數控世紀星采用的是“內裝型”PLC。和CNC共用一個CPU、輸A./輸出、電源。該PLC是從屬于CNC裝置的一部分,與CNC之間的信號傳送在CNC內部實現,PC與機床側的信息傳送則通過CNC的I/O接口電路實現。由于CNC的功能和PLC的功能一起考慮,因而這種類型的系統在硬件和軟件的整體結構上合理、實用、性能價格比高。PLC和CNC之間沒有多余的連線,而且PLC上的信息可以在CNC的顯示器上顯示,PLC的編程更為方便,故障的診斷功能也有所提高。
2 數控PLC編程系統的整體設計
2.1 整體設計方案
在數控器系統中,CNC和PLC協調配合共同完成對數控機床的控制。PLC主要完成與邏輯運算有關的一些動作,沒有軌跡上的具體要求,它接受CNC的控制代碼M、S、T等順序動作信息。對其進行譯碼,轉換成對應的控制信號控制輔助裝置完成機床相應的開關動作,如工件的裝夾、刀具的更換等一些輔助動作;它還接受機床操作面板的指令,一方面直接控制機床的動作,另一方面將一部分指令送往CNC用于加工過程的控制。PLC內嵌在數控裝置中,可以進行讀寫操作,借助CNC系統的全部硬件資源,具有友好的界面接口,便于用戶編程和操作。基于Windows系統的圖形開發系統,進行圖形化編程。
2.2 開發工具的選擇
根據設計需要選擇C++Builder 5.0為開發工具,該工具是基于Microsoft公司的32位Windows系列操作系統的可視化開發工具,使用的程序語言是C++語言,既可進行過程化程序設計,又可進行面向對象的程序設計,強調對高級抽象的支持,用它開發出的應用程序具有可重用的特點。采取面向對象技術,高質量的代碼能有效降低軟件的復雜度和提高開發效率。
2.3 數據結構的選擇
數據結構類型的選擇首先要滿足對于待處理的數據元素及其關系的描述;其次在能夠完整描述問題空間所有數據元素及它們之間關系的基礎上,應采用盡可能簡單的數據結構,以避免復雜數據結構帶來的復雜操作;同時,應考慮與其他模塊之間數據結構的通用性。基于以上考慮,作者采用具有線性特性的數據結構來實現梯形圖編輯過程中元件添加、刪除及修改時設計數據的保存和讀取數據的高效性。
系統采用了標準模板庫(STL)中的標準順序容器list來存儲設計過程中涉及到的梯形圖數據,主要對象容器定義如下:
(1)梯級鏈表:Tyr,edef list<CRung*>CRungList;
(2)行鏈表:Typedef list<CRow*>CRowList;
(3)元件鏈表:Typedef list<CElement*>CEle—mentList o
通過list容器模板自帶的push—back成員函數將要加入的對象壓入到相應種類容器中,通過這樣的操作把各對象逐一地放人容器中,再通過其他成員函數如ecase、insert等對它們進行操作,實現各對象數據的集中管理。
當用梯形圖編程系統繪制梯形圖時,每在計算機屏幕上畫一個梯級,就會生成該梯級類的一個對象,同時程序把該對象加入到梯形圖類中的CRungList鏈表當中;每畫一個行,就會生成該行類的一個對象,同時程序把該對象加入到對應的梯級對象中的CRowList鏈表當中;每畫一個元件,就會生成該元件類的一個對象,同時程序把該對象加入到對應行對象中的CElementList鏈表當中。所以,在CElementList鏈表中的一個結點對應梯形圖中一個水平連線、元件或功能塊等。
3 數控PLC編程系統中的梯形圖元件基類設計
梯形圖一般由多個不同的梯級組成,每一個梯級又可以由“一行”或“數行”組成,每行由一個或幾個輸入元件及一個輸出元件組成。輸出元件應出現在梯級的最右邊,而輸入元件則出現在輸出指令的左邊。
從計算機角度看,梯形圖是一幅位圖,它由一個個像素組成。計算機沒有能力分析梯形圖并判斷出每個元件之間的邏輯關系,所以,需要找到一種描述方法,讓計算機能“看懂”梯形圖。為此,作者采用面向對象設計方法來開發梯形圖編輯器。
首先分析和識別梯形圖中的不同對象。根據對象的性質和功能抽象歸并為不同類,建立類的層次結構。面向對象軟件設計主要是類的設計,而不是對象的設計,因為各種對象是在梯形圖對應的編輯過程中動態產生的。通過對系統的梯形圖對象、梯級對象、行對象及元件對象進行抽象,建立了梯形圖編程系統的類層次結構,其類層次結構中六大類對象為:梯形圖類、梯級類、行類、梯形圖畫布類、梯形圖文檔類。元件庫模型的基類CElement是從梯形圖編程系統所支持的所有元件抽象出來的一個類,它定義了其他類的共有操作接口和屬性,是其他圖元類的父類。模塊中所有的元件子類都根據C++的繼承機制繼承了基類的屬性,并根據自己支持的圖元形狀有選擇地重載基類相應的操作,以滿足子類的需要。所以基類的定義在梯形圖編輯模塊的實現過程中是非常關鍵的一步。
作者采用的規則是:將具有相同性質,包括相同外部性質和內部處理能力的對象歸為一類作為最低層次,然后采用自下而上逐步抽象的方法,將具有共性的類的公共性質再并人一個相對于被抽取共性的類的基類中;被抽取共性的類便為導出類,抽取成形的類為基類。如此類推,不斷產生更多的基類,最終建立了類的層次結構。在對所有梯形圖元件進行共性抽象之前,做了如下處理:
(1)梯形圖元件除元件自身信息外,還應包含其連接線的信息;
(2)把梯形圖的空格和水平連接線作為特殊元件;
(3)在梯形圖中,常開觸點、常閉觸點等元件有一個操作參數;定時器、計數器等元件有兩個操作參數;空格和水平連接線等元件沒有操作參數。為了對所有梯形圖元件進行共性的抽象表示,作者為每個元件設置了兩個操作參數。例如常開觸點只有一個操作參數時,另外一個操作參數設置為空。
拋開梯形圖的圖像表象,梯形圖中每個元件包含的共同屬性如圖1所示。元件基類定義元件的所在位置、持久化和事件處理等操作,其定義描述如下:
圖1基類元件的共同屬性
(1)標識信息:元件唯一的功,類型及元件的操作參數;
(2)位置信息:元件的頂點位置、長度等;
(3)繪制行為:繪制元件圖符,繪制元件包含的線型;
(4)命中測試行為:鼠標的位置是否命中圖元以及具體部位;
(5)持久化行為:存盤和讀取。
梯形圖元件基類的關鍵代碼如下:
4 結束語
以整體設計為基礎,有了元件基類,就可以以其為父類,根據每個元件的不同特性,為每個元件設計一個子類。作者把各元件類以相應的英文單詞來命名,如常開觸點類(Normally Open Contact)命名為CContactNO。每一種元件都在該程序的工程組當中單列一個單元,并把相應元件類的定義寫進去,為編輯器的具體實現打下基礎。
(審核編輯: 滄海一土)
分享