數控體系的數值解決措施

才智咖 人氣:2.76W

編輯預處理與譯碼分離傳統的資料系統都提供了一個程式編輯器,它的功能只是對數控源程式進行編輯和修改,且操作不方便,而NC程式格式分析及詞、語法分析(這些工作通常稱為預處理)均由譯碼模組處理。在譯碼過程中,無論程式是否有錯,都必須進行分析,浪費了CPU的時間。因此,我們在開發資料處理模組時,把預處理功能從譯碼子模組中分離出來,且融入編輯器子模組,使編輯器既能輸入和編輯NC程式,又能對整個源程式一次性分析查錯。當發現錯誤後及時修改,避免了加工過程中出現錯誤不得不停機的情況發生。微軟的VisualC++5.0中的MFC提供一個文字編輯類CEditView,利用它幾乎不用編寫什麼程式碼,便能生成一個類似Windows中WordPad的文字編輯器,雖然它沒有Word的'文書處理功能強大,但用來編輯數控系統清單已經足夠。文字編輯器主要由兩個子視窗組成,一個為編輯視窗,數控程式的所有編輯操作均在此進行;另一個為資訊視窗,顯示預處理過程中各種資訊(包括各種錯誤資訊),大大方便了程式的修改。

數控體系的數值解決措施

由於NC是以ASCII碼形式存放,讀入緩衝區前必須進行一定轉換。另外,為加速預處理,要求源程式一次性讀入記憶體。為此我們定義一種資料結構和一個數組:structNCFormat{LPTSTRNCLineS;程式段存放的陣列UINTNCLength;預處理過程中,每個程式段均要經過兩次掃描。第一次掃描是進行格式分析和詞法分析,第二次掃描是進行語法分析。在兩次掃描過程中每當發現錯誤,輸出出錯資訊到資訊視窗。其中出錯資訊是一種資料結構,其定義如下:structErrorInfo{UINTNCLineNO;出現錯誤的行charNOChar;出現錯誤的字元CStringLineStr;錯誤所在的程式段UINTErrorKind;錯誤種類編譯與解釋方法相結合單純使用編譯方法或解釋方法都有不可避免的缺點,因此,我們把兩種方法結合起來,取長補短。在開始加工前首先開闢一段記憶體作為緩衝區(一般不宜過大,如256K),然後一次性編譯若干程式段,直到緩衝區滿。在這裡,編譯的結果並不是機器能識別的最終程式碼,而是另外一種資料結構,其定義如下:structNCTemp{UINTNCLineNO;程式段行號CstringArrayModeAddress;存放模態字CstringArrayNoModeAddress;存放非模態字BOOLAbsReCord;絕對座標或相對座標標誌UINTInterpG0123;插補型別CuterComG4012;刀具半徑補償型別LenthComG434;刀具長度補償型別EntMsgWorkPiece;零件實體座標資訊BOOLDowithFlag;程式被解釋處理過的標誌;緩衝區滿後,啟動解釋處理程式,每次從緩衝區中取出一個用上述資料結構存放的程式段,並將其處理成系統能識別的目的程式,再依次進行運動軌跡計算、進給速度計算、插補和位控。每個被解釋處理過的程式段必須置標誌DowithFlag為TRUE。

訊息驅動是Windows95的根本執行機制,而多工多執行緒操作又是其最大優點。在這裡把編譯定義成一個執行緒;解釋、運動軌跡計算、進給速度計算定義成一個執行緒;插補、位控定義為一個執行緒。編譯執行緒優先順序最低,三個執行緒通過訊息互動。一旦CPU空閒,且緩衝區中有被解釋處理過的程式段,則啟動編譯執行緒,從源程式中讀入程式段來重新整理這些被解釋處理過的程式段。如此交替,直至整個數控程式執行完畢,從巨集觀上看構成了時間上的資源重疊。