閱讀 | 訂閱
閱讀 | 訂閱
激光芯片

數控係統軟件芯片的研製和開發

星之球激光 來源:中國自動化網2011-12-21 我要評論(0 )   

數控技術無疑是現代先進製造技術中最重要的技術基礎,從(cong) 某種意義(yi) 上說,數控技術的水平已成為(wei) 衡量一個(ge) 國家製造業(ye) 水平的重要標誌之一。出於(yu) 技術壟斷及獨占市場等原因,各...

數控技術無疑是現代先進製造技術中最重要的技術基礎,從(cong) 某種意義(yi) 上說,數控技術的水平已成為(wei) 衡量一個(ge) 國家製造業(ye) 水平的重要標誌之一。出於(yu) 技術壟斷及獨占市場等原因,各個(ge) 廠家生產(chan) 的數控係統在體(ti) 係結構上大多是封閉的,不能進行高可*性的軟件擴展。近年來,國內(nei) 外眾(zhong) 多的數控軟件開發者都在重複研究、開發相同或相似的數控係統,反複設計若幹基本模塊,造成了人力、物力和財力的巨大浪費,而且由於(yu) 缺乏統一的標準,不同的數控軟件開發者開發的軟件不能互相替換,缺乏兼容性,阻礙了數控軟件的升級換代,同時也阻礙了數控機床生產(chan) 者對市場和用戶的快速響應能力。 通過對數控係統軟件體(ti) 係結構的分析,我們(men) 設想如果把數控係統軟件中相同或類似的部分做成類似於(yu) 硬件電子芯片的軟件芯片(Software IC,SIC)[1,2],每一個(ge) 軟件芯片具有高度的功能獨立性、易移植性、易組裝性及易擴充性。這樣,當我們(men) 建立新的數控係統時,隻需從(cong) 芯片庫中取出所需的芯片進行組合即可,必要時加以擴充,使數控係統能夠重用,而不必從(cong) 頭開發整個(ge) 軟件係統。這樣就能改變目前數控係統的封閉型設計,為(wei) 適應未來車間麵向任務和訂單的生產(chan) 組織模式奠定良好的基礎,使底層生產(chan) 控製係統的集成更為(wei) 簡便和有效,從(cong) 而大大提高數控軟件的生產(chan) 力和可*性,減少生產(chan) 成本及開發周期。這是增強數控係統對市場的快速響應能力,促進數控產(chan) 業(ye) 快速、高效發展的必然之路。

1 數控係統軟件芯片的劃分

  合理的芯片劃分,是開發軟件芯片的首要步驟。數控係統軟件芯片庫中的各芯片以界麵的方式開放,通過接口參數和界麵信息的提示,用戶可掌握芯片的啟動、結束和運作。不同芯片的內(nei) 部為(wei) 黑箱封裝,外部接口開放,並在此基礎上實現新係統的構建。因此,如何定義(yi) 出合理的數控係統軟件芯片,使芯片的外部接口易於(yu) 標準化、規範化,內(nei) 部易於(yu) 進行黑箱封裝,是我們(men) 開發數控係統軟件芯片庫的關(guan) 鍵步驟。

  目前,盡管數控係統從(cong) 係統的設計方法到係統的實現方式千差萬(wan) 別,但是其基本原理和軟件的組成都是類似的。在對現有的數控係統[3]和用戶需求進行仔細而全麵分析的基礎上,同時,在總結現有係統控製結構的共有特征,並對其進行適當的歸類和抽象的基礎上,將數控係統劃分為(wei) 以下幾個(ge) 基本的功能模塊。

(1)人機交互界麵模塊 此模塊主要完成在係統運行前和運行中係統參數的修改和設定,如設定係統工作模式(自動、手動、點動等),圖形顯示模式,係統初始化設定,坐標偏置設定,G代碼程序的編輯等。
(2)零件代碼解釋模塊 負責根據用戶的係統配置,以及零件程序的語法規則對用戶編寫(xie) 的零件程序進行語法檢查,並進行解釋譯碼,將源代碼指令中給出的各種信息進行分離提取,變成各種狀態和數據,為(wei) 預處理芯片提供語法上正確的零件程序的中間代碼。
(3)刀補預處理模塊 負責對解釋後的數據進行預處理及插補前的準備工作。
(4)軌跡插補模塊 負責加減速的控製、插補、終點判別等工作,向位置控製器輸出通過軌跡運算後的進給量。
(5)軸伺服控製模塊 在從(cong) I/O及插補運算得到的信息的幫助下,通過精插補控製機床執行機構按NC指令指定的路徑和速度運動。
(6)I/O模塊 負責控製器的輸入和輸出(包括機床檢測信號及位置和相關(guan) 反饋信息的輸入、控製指令的輸出等)。
  以上這幾個(ge) 模塊間具有互操作性、可移植性和可擴展性,因而可作為(wei) 數控軟件芯片庫的基本芯片的劃分。

2 數控係統軟件芯片的構建及工作原理
  
  軟件芯片概念的提出是軟件重用發展過程中的裏程碑。開發軟件芯片就是采用麵向對象技術把特定類中的一些通用模塊做成獨立的可重用的對象類。由於(yu) 麵向對象具有封裝、分類、消息響應和繼承等很有價(jia) 值的特點,使得軟件芯片和係統其它部分的耦合度得到盡可能的降低,這為(wei) 軟件芯片的開發和使用提供了可*保證。同時,由於(yu) 芯片都是對較成熟的技術進行封裝而實現的,在實踐上是經過了驗證的,也就是說一個(ge) 成熟的芯片已經將錯誤率降到了最低點,所以可以利用數控軟件芯片來構造新的數控係統能最大程度地保證係統的可*性。 軟件芯片的構建就是將功能模塊的本體(ti) 部分進行黑箱封裝,使之輸入接口和輸出接口盡量簡單、規範。由於(yu) C++語言的麵向對象特性和封裝性較好[4],所以在本係統中將VC作為(wei) 編程環境來進行芯片本體(ti) 的構建。整個(ge) 芯片是基於(yu) 靜態庫創建的,最後生成一個(ge) Lib庫文件。所有功能的實現都封裝在Lib庫文件中。用戶使用時,不需要知道芯片內(nei) 部的功能(如初始化、錯誤信息處理、數據分離)是怎樣實現的,隻需將對應的.Lib文件和.H文件加入到自己的係統中,然後依照芯片說明提出的接口要求,通過接口參數調用相應的方法即可。接口參數和方法在Lib 文件中定義(yi) 為(wei) ,用戶可以在外界通過它們(men) 和芯片進行交互。就如同用戶通過硬件IC的引腳來使用芯片內(nei) 部的功能一樣。

  下麵就以零件程序解釋芯片為(wei) 例,簡述數控係統軟件芯片的構建過程。
  首先,對芯片的本體(ti) 功能進行分析,定義(yi) 出合適的接口。一般來說,一個(ge) 完整的零件數控加工程序,由若幹程序段組成,一個(ge) 程序段又由若幹個(ge) 代碼字組成,最後以“;”結束。每個(ge) 代碼字由文字符和數字符組成,代碼字之間用空格符隔開。
根據自上向下的原則,該部分又可劃分為(wei) 以下幾個(ge) 部分:
  (1)詞法檢查 對源程序的數據進行拚寫(xie) 及位數檢查;
  (2)語法檢查 對程序段中的G代碼和其它功能碼的格式進行檢查,如G代碼的相容性檢查等;
  (3)語義(yi) 檢查 對上下文相關(guan) 的錯誤進行檢查,如I、J、K和R不能出現在同一行代碼中等;
  (4)譯碼 將程序段的信息進行提取,變成相應的狀態量和數據量,存儲(chu) 在輸出緩衝(chong) 區中。
  在綜合考慮數控係統解釋器的內(nei) 部邏輯關(guan) 係和數控係統的運動控製的基礎上,將解釋芯片的輸入口數據定義(yi) 為(wei) 以字符串形式輸入的一行數控代碼段(char* LineStr);輸出口數據定義(yi) 為(wei) 一個(ge) 包含各種信息量的結構。
  輸出數據結構:
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;  最後一行指示標誌
      }NCcode
如要對一行代碼段進行解釋譯碼,則先聲明一個(ge) 實例:
  CCode code;  //CCode為(wei) Lib文件所生成的類
然後調用其成員函數,
  code.InterCode(char* LineStr)
  完成對LineStr中代碼段的詞法、語法、語義(yi) 檢查和數據分離。在進行解釋過程中,如果發現代碼段中有語法或語義(yi) 錯誤,InterCode 會(hui) 給出相應的提示,並返回到編輯狀態重新編輯。#p#分頁標題#e#

  類似的,如要對結構中的標誌位進行初始化,則可通過調用code.FlagINI()實現。同時,還可以通過在外部對code.ENDED變量進行賦值來結束整個(ge) 芯片的運行。

  解釋完成後的各種狀態和數據信息存放在前麵定義(yi) 的數據結構中。用戶隻需按照一般結構的讀法去取相應的數據,如NCcode.G; NCcode.M ,也可以將整個(ge) 數據結構作為(wei) 下一個(ge) 芯片的入口,實現芯片與(yu) 芯片之間的數據傳(chuan) 遞。

  為(wei) 了防止在芯片進行譯碼時,外界對數據結構進行操作而產(chan) 生錯誤。本芯片使用了臨(lin) 界區的方法,即在方法InterCode()被調用時,就用 CcriticalSection的成員函數Lock進行加鎖處理,拒絕外界訪問正在更新的數據,以免出現新老數據同時被讀入的錯誤。解釋完成後,用 Unlock進行解鎖處理,使用戶能訪問更新以後的數據。

3 芯片間的同步和協調

  當若幹個(ge) 芯片組成一個(ge) 實用係統後,芯片之間的同步問題就變得格外重要,尤其是像數控係統這樣對實時性要求比較高的係統。在使用軟件芯片構建數控係統時,每一個(ge) 有具體(ti) 功能的芯片,如譯碼、插補等,都是一個(ge) 單獨的線程。線程與(yu) 線程之間的通信,是利用事件對象的方式來實現的。本係統由於(yu) 是在VC環境下開發的,所以可以利用MFC庫中的CEvent類及其成員函數來完成。每一個(ge) 事件對象可以有兩(liang) 種狀態:信號態和非信號態。事件可以監控線程是否被置於(yu) 信號態,並由此決(jue) 定在適當的時候運行相應的線程。使用事件對象進行線程通信的另一個(ge) 原因是事件對象的聲明十分容易,就像聲明一個(ge) 全局變量一樣簡單。如 CEvent InterCodedStart;事件對象創建以後,是處於(yu) 非信號態的,要是事件對象處於(yu) 信號態,隻需調用事件對象的成員函數 SetEvent(),即InterCodeStart.SetEvent();

  在執行了上麵的語句後,事件對象InterCodeStart便處於(yu) 信號態。線程監視事件是否處於(yu) 信號態可利用下麵的Windows API 函數實現。

  WaitForSingleObject(InterCodeStart.mhObject, 0);在此情況下,如果函數返回的是值為(wei) WAITOBJECT0,則事件已被置於(yu) 信號態,否則,事件仍處於(yu) 非信號態。通過這些消息和方法,我們(men) 就可以實現係統各線程之間的通信,也可以通過這些事件對象間的通信控製將若幹芯片“粘連”成一個(ge) 有機的實用係統。

4 結束語

  本係統全部是在 Windows NT下的VC環境中開發的,所以利用了很多MFC中的基本類,這些都大大提高了整個(ge) 係統的靈活性,增強了整個(ge) 係統的功能。如,數控代碼的編輯器是基於(yu) CEditView類創建的,因此在使用時,它可以利用CEditView類本身所帶的一些編輯功能,如 New、Open、Save、Copy、Cut、Paste等,這使數控程序的編輯及管理變得和Windows下的文件管理一樣方便容易。同時,VC中各種控件的使用,不但增加了係統控製的易操作性,還使控製界麵變得美觀、友好。這些都是值得進一步深入探討的地方。利用可重用構件技術來開發軟件芯片,並利用其構建新的數控係統的思想已用於(yu) 國家自然科學基金項目“高可*性數控係統軟件芯片庫及其運行環境”的研究,取得了良好的效果,不但很好地實現了數控係統的開放性設計和資源重用,而且由於(yu) 是基於(yu) Windows NT和IPC等通用環境下開發的,對數控係統的升級換代和對市場的及時響應,都具有良好的開發前景。

參考文獻
1 王芙清.麵向對象程序設計.北京:北京大學出版社,1992:56~57,88~107,142~159
2 Lenz ManFred.IEEE SOFTWARE,1987,4(4):34~42
3 畢承恩.現代數控機床.北京:機械工業(ye) 出版社,1991:1~50
4 Kate Gregory著,康博工作室譯.Visual C++ 5開發使用手冊(ce) .北京:機械工業(ye) 出版社,1998:543~563

轉載請注明出處。

免責聲明

① 凡本網未注明其他出處的作品,版權均屬於(yu) fun88网页下载,未經本網授權不得轉載、摘編或利用其它方式使用。獲本網授權使用作品的,應在授權範圍內(nei) 使 用,並注明"來源:fun88网页下载”。違反上述聲明者,本網將追究其相關(guan) 責任。
② 凡本網注明其他來源的作品及圖片,均轉載自其它媒體(ti) ,轉載目的在於(yu) 傳(chuan) 遞更多信息,並不代表本媒讚同其觀點和對其真實性負責,版權歸原作者所有,如有侵權請聯係我們(men) 刪除。
③ 任何單位或個(ge) 人認為(wei) 本網內(nei) 容可能涉嫌侵犯其合法權益,請及時向本網提出書(shu) 麵權利通知,並提供身份證明、權屬證明、具體(ti) 鏈接(URL)及詳細侵權情況證明。本網在收到上述法律文件後,將會(hui) 依法盡快移除相關(guan) 涉嫌侵權的內(nei) 容。

網友點評
0相關評論
精彩導讀