數控系統軟件芯片的研制和開發
數控技術無疑是現代先進制造技術中最重要的技術基礎,從某種意義上說,數控技術的水平已成為衡量一個國家制造業水平的重要標志之一。出于技術壟斷及獨占市場等原因,各個廠家生產的數控系統在體系結構上大多是封閉的,不能進行高可*性的軟件擴展。近年來,國內外眾多的數控軟件開發者都在重復研究、開發相同或相似的數控系統,反復設計若干基本模塊,造成了人力、物力和財力的巨大浪費,而且由于缺乏統一的標準,不同的數控軟件開發者開發的軟件不能互相替換,缺乏兼容性,阻礙了數控軟件的升級換代,同時也阻礙了數控機床生產者對市場和用戶的快速響應能力。 通過對數控系統軟件體系結構的分析,我們設想如果把數控系統軟件中相同或類似的部分做成類似于硬件電子芯片的軟件芯片(Software IC,SIC)[1,2],每一個軟件芯片具有高度的功能獨立性、易移植性、易組裝性及易擴充性。這樣,當我們建立新的數控系統時,只需從芯片庫中取出所需的芯片進行組合即可,必要時加以擴充,使數控系統能夠重用,而不必從頭開發整個軟件系統。這樣就能改變目前數控系統的封閉型設計,為適應未來車間面向任務和訂單的生產組織模式奠定良好的基礎,使底層生產控制系統的集成更為簡便和有效,從而大大提高數控軟件的生產力和可*性,減少生產成本及開發周期。這是增強數控系統對市場的快速響應能力,促進數控產業快速、高效發展的必然之路。
1數控系統軟件芯片的劃分
合理的芯片劃分,是開發軟件芯片的首要步驟。數控系統軟件芯片庫中的各芯片以界面的方式開放,通過接口參數和界面信息的提示,用戶可掌握芯片的啟動、結束和運作。不同芯片的內部為黑箱封裝,外部接口開放,并在此基礎上實現新系統的構建。因此,如何定義出合理的數控系統軟件芯片,使芯片的外部接口易于標準化、規范化,內部易于進行黑箱封裝,是我們開發數控系統軟件芯片庫的關鍵步驟。
目前,盡管數控系統從系統的設計方法到系統的實現方式千差萬別,但是其基本原理和軟件的組成都是類似的。在對現有的數控系統[3]和用戶需求進行仔細而全面分析的基礎上,同時,在總結現有系統控制結構的共有特征,并對其進行適當的歸類和抽象的基礎上,將數控系統劃分為以下幾個基本的功能模塊。
(1)人機交互界面模塊此模塊主要完成在系統運行前和運行中系統參數的修改和設定,如設定系統工作模式(自動、手動、點動等),圖形顯示模式,系統初始化設定,坐標偏置設定,G代碼程序的編輯等。
(2)零件代碼解釋模塊負責根據用戶的系統配置,以及零件程序的語法規則對用戶編寫的零件程序進行語法檢查,并進行解釋譯碼,將源代碼指令中給出的各種信息進行分離提取,變成各種狀態和數據,為預處理芯片提供語法上正確的零件程序的中間代碼。
(3)刀補預處理模塊負責對解釋后的數據進行預處理及插補前的準備工作。
(4)軌跡插補模塊負責加減速的控制、插補、終點判別等工作,向位置控制器輸出通過軌跡運算后的進給量。
(5)軸伺服控制模塊在從I/O及插補運算得到的信息的幫助下,通過精插補控制機床執行機構按NC指令指定的路徑和速度運動。
(6)I/O模塊負責控制器的輸入和輸出(包括機床檢測信號及位置和相關反饋信息的輸入、控制指令的輸出等)。
以上這幾個模塊間具有互操作性、可移植性和可擴展性,因而可作為數控軟件芯片庫的基本芯片的劃分。
2數控系統軟件芯片的構建及工作原理
軟件芯片概念的提出是軟件重用發展過程中的里程碑。開發軟件芯片就是采用面向對象技術把特定類中的一些通用模塊做成獨立的可重用的對象類。由于面向對象具有封裝、分類、消息響應和繼承等很有價值的特點,使得軟件芯片和系統其它部分的耦合度得到盡可能的降低,這為軟件芯片的開發和使用提供了可*保證。同時,由于芯片都是對較成熟的技術進行封裝而實現的,在實踐上是經過了驗證的,也就是說一個成熟的芯片已經將錯誤率降到了最低點,所以可以利用數控軟件芯片來構造新的數控系統能最大程度地保證系統的可*性。 軟件芯片的構建就是將功能模塊的本體部分進行黑箱封裝,使之輸入接口和輸出接口盡量簡單、規范。由于C++語言的面向對象特性和封裝性較好[4],所以在本系統中將VC作為編程環境來進行芯片本體的構建。整個芯片是基于靜態庫創建的,最后生成一個Lib庫文件。所有功能的實現都封裝在Lib庫文件中。用戶使用時,不需要知道芯片內部的功能(如初始化、錯誤信息處理、數據分離)是怎樣實現的,只需將對應的.Lib文件和.H文件加入到自己的系統中,然后依照芯片說明提出的接口要求,通過接口參數調用相應的方法即可。接口參數和方法在Lib文件中定義為,用戶可以在外界通過它們和芯片進行交互。就如同用戶通過硬件IC的引腳來使用芯片內部的功能一樣。
下面就以零件程序解釋芯片為例,簡述數控系統軟件芯片的構建過程。
首先,對芯片的本體功能進行分析,定義出合適的接口。一般來說,一個完整的零件數控加工程序,由若干程序段組成,一個程序段又由若干個代碼字組成,最后以“;”結束。每個代碼字由文字符和數字符組成,代碼字之間用空格符隔開。
根據自上向下的原則,該部分又可劃分為以下幾個部分:
(1)詞法檢查對源程序的數據進行拼寫及位數檢查;
(2)語法檢查對程序段中的G代碼和其它功能碼的格式進行檢查,如G代碼的相容性檢查等;
(3)語義檢查對上下文相關的錯誤進行檢查,如I、J、K和R不能出現在同一行代碼中等;
(4)譯碼將程序段的信息進行提取,變成相應的狀態量和數據量,存儲在輸出緩沖區中。
在綜合考慮數控系統解釋器的內部邏輯關系和數控系統的運動控制的基礎上,將解釋芯片的輸入口數據定義為以字符串形式輸入的一行數控代碼段(char* LineStr);輸出口數據定義為一個包含各種信息量的結構。
輸出數據結構:
typedef struct{
int Gp01;∥1組G代碼
……
int Gp15;∥15組G代碼
int N,∥程序段號
G,∥準備功能
M,∥輔助功能
P,Q,L,D,H;∥其他參數字符
long T;∥刀具選擇
double F;∥進給速度
double S;∥主軸速度
double D;∥刀具半徑
double X,Y,Z,A,B,C,I,J,K,R,U,V,W;∥尺寸字
……
BOOL bLastCmnd;最后一行指示標志