1 引言
隨著制造業(yè)發(fā)展,對(duì)數(shù)控機(jī)床的柔性和通用性提出了更高的要求,同時(shí)伴隨著計(jì)算機(jī)技術(shù)的迅速發(fā)展,開(kāi)放式數(shù)控系統(tǒng)應(yīng)運(yùn)而生,并已經(jīng)成為當(dāng)前研究的熱點(diǎn)。此類系統(tǒng)分為“PC嵌入NC”結(jié)構(gòu)、“PC嵌入NC”結(jié)構(gòu)、全軟件型結(jié)構(gòu)。第一種系統(tǒng)硬件結(jié)構(gòu)較復(fù)雜,系統(tǒng)價(jià)格十分昂貴。第二種,采用運(yùn)動(dòng)控制卡+PC機(jī)構(gòu)成。最后一種,所有的數(shù)控功能全部都由計(jì)算機(jī)軟件來(lái)實(shí)現(xiàn)。
本文采用NC嵌入PC的開(kāi)放式數(shù)控結(jié)構(gòu)形式,由運(yùn)動(dòng)控制器完成數(shù)控實(shí)時(shí)響應(yīng)和控制,PC完成數(shù)控人機(jī)界面功能。在人機(jī)界面的處理中采用了多線程技術(shù)。
本系統(tǒng)所采用的數(shù)控系統(tǒng)結(jié)構(gòu)圖如圖1所示。用研華公司的運(yùn)動(dòng)控制卡+PC機(jī),以JZ位的Whdows98/NT 4.0/Win-dows2000操作系統(tǒng)為開(kāi)發(fā)平臺(tái);并采用支持可視化編程的集成環(huán)境Visual C++6.0作為算法語(yǔ)言和界而設(shè)計(jì)上具,利用封裝性,繼承性和可重用性作為特征的而向?qū)ο蟮木幊碳夹g(shù)。
圖1 數(shù)控系統(tǒng)結(jié)構(gòu)示意圖
2 數(shù)控加土過(guò)程的控制
機(jī)床的數(shù)控系統(tǒng)是以程序指令為依據(jù)來(lái)控制機(jī)床的運(yùn)動(dòng)。首先就要對(duì)程序指令進(jìn)行檢查,并進(jìn)行預(yù)處理轉(zhuǎn)化為刀具的運(yùn)行軌跡。
2.1 數(shù)據(jù)結(jié)構(gòu)
由于數(shù)控加上程序是由程序段組成,每一個(gè)程序段又由各個(gè)指令構(gòu)成,所以用一個(gè)鏈表結(jié)構(gòu)來(lái)存儲(chǔ)、管理這些代碼比較有效。
1)用DotList表示點(diǎn)數(shù)據(jù)。首先用從CObject派生的CDot類記錄程序指令信息。采用鏈表結(jié)構(gòu)記錄程序加上點(diǎn)的數(shù)據(jù),選用MFC的數(shù)據(jù)結(jié)構(gòu)CTypedPtrList模板類定義一個(gè)點(diǎn)的鏈表類DotList}鏈表結(jié)構(gòu)易于遍歷和插入操作,可以提高效率。
2)用SubFuncList棧類進(jìn)行子程序調(diào)用。在數(shù)控加上時(shí),用子程序編寫經(jīng)常重復(fù)進(jìn)行的加上,比如某一確定的輪廓形狀。子程序位于卞程序中適當(dāng)?shù)牡胤?,在需要時(shí)進(jìn)行調(diào)用。棧的特點(diǎn)就是后進(jìn)先出,正好符合子程序,所以采用鏈?zhǔn)綏ubFuncList來(lái)表示。棧的每個(gè)元素('SubFuncInfo由四部分構(gòu)成:
CString szSubFuncName//子程序名
int iSubFuncAddress;//子程序的起始位置
int iSubFuncRetAddress;//子程序返回卞程序的位置
int iLoopNum;//子程序循環(huán)次數(shù)
考慮到Windows操作系統(tǒng)并不是一個(gè)嚴(yán)格意義上的實(shí)時(shí)操作系統(tǒng),為了提高實(shí)時(shí)響應(yīng)速度,本系統(tǒng)首先對(duì)程序指令進(jìn)行翻譯,全部轉(zhuǎn)換成最后加上的點(diǎn)的信息,既先對(duì)程序指令掃描一邊記錄下信息,再進(jìn)行掃描一邊,把子程序調(diào)用插入到第一次掃描的結(jié)果中而得到最后的掃描結(jié)果。圖2所示是第1次掃描的流程圖。
圖2 程序指令讀入流程圖
2.2 運(yùn)動(dòng)控制
在機(jī)床手動(dòng)控制運(yùn)行中分為JOG和MDA方式。JOG方式中可以點(diǎn)動(dòng)坐標(biāo)軸運(yùn)行,在 MDA方式中可以分別輸入零件程序段加以執(zhí)行。在進(jìn)行加上前要進(jìn)行對(duì)刀,一般在對(duì)刀的時(shí)候采用J (X=方式。線程是計(jì)算機(jī)應(yīng)用程序?qū)嵗械囊粭l執(zhí)行路徑,外加一組操作系統(tǒng)分配的資源(堆棧、寄存器狀態(tài)等)。一個(gè)應(yīng)用程序?qū)嵗梢酝瑫r(shí)啟動(dòng)多個(gè)線程,從用戶的角度看一,程序中的線程是廈時(shí)運(yùn)行的。操作系統(tǒng)通過(guò)線程間反復(fù)地快速切換控制來(lái)達(dá)到并行計(jì)算這一效果。數(shù)控系統(tǒng)中存在加上程序和控制程序,采用多線程技術(shù)將每個(gè)任務(wù)放在不同的線程中,即可達(dá)到對(duì)該系統(tǒng)的控制日的。事件是一種Window、為線程同步提供的核心對(duì)象,本系統(tǒng)采用事件使線程同步。在點(diǎn)動(dòng)運(yùn)動(dòng)中,用戶界而作為主線程,點(diǎn)動(dòng)運(yùn)動(dòng)作為輔助線程。點(diǎn)動(dòng)運(yùn)動(dòng)控制中有如下三個(gè)事件:
CEvent g-JogStartC FALSE TRUE);//點(diǎn)動(dòng)運(yùn)動(dòng)啟動(dòng)事件
CEvent g-JogPause( FALSE TRUE);//點(diǎn)動(dòng)運(yùn)動(dòng)折停事件
CEvent g-JogExit} FALSE } TRUE ) ;//點(diǎn)動(dòng)運(yùn)動(dòng)退出事件
在數(shù)控加上控制中,將用戶控制界而作為一個(gè)線程,叫做控制線程,作為本系統(tǒng)的卞線程,數(shù)控加上程序作為另一個(gè)線程,叫做加上線程,作為輔助線程。加上過(guò)程中有如下三個(gè)全局事件對(duì)象:
CEvent g-ControlStartCFALSE,TRUE);//加上啟動(dòng)事件
CEvent g-ControlPause(FALSE,TRUE);//加上折停事件
CEvent g- ControlExi (FALSE,TRUE) ;//加上停止事件
圖3為我們完成的用于西門子802系列數(shù)控教學(xué)的PC軟件,其中按鈕①、②、③分別為復(fù)位、中斷、啟動(dòng),分別對(duì)應(yīng)加上控制中的三個(gè)事件的。此系統(tǒng)已經(jīng)運(yùn)用于實(shí)際中。
圖3 數(shù)控系統(tǒng)的界面控制
3 結(jié)論
基于上業(yè)標(biāo)準(zhǔn)的Pc'機(jī)進(jìn)行數(shù)控系統(tǒng)開(kāi)發(fā)已經(jīng)成為當(dāng)前數(shù)控技術(shù)發(fā)展的一個(gè)重要方向,特別是在Window、系列平臺(tái)上進(jìn)行數(shù)控系統(tǒng)的人機(jī)界而設(shè)計(jì)具有界而友好,可以多線程操作等優(yōu)點(diǎn)。
對(duì)數(shù)控系統(tǒng)來(lái)說(shuō),采用NC+ PC機(jī)數(shù)控系統(tǒng)能發(fā)揮Windows操作系統(tǒng)的優(yōu)勢(shì),并能最大限度的滿足客戶的各種特殊功能要求。
(審核編輯: 智匯胡妮)
分享