1 引言
在計(jì)算機(jī)技術(shù)飛速發(fā)展的今天,數(shù)控系統(tǒng)由傳統(tǒng)的專(zhuān)用型封閉式系統(tǒng)向靈活的開(kāi)放式數(shù)控系統(tǒng)轉(zhuǎn)變已成為一種必然趨勢(shì)。與傳統(tǒng)的封閉式數(shù)控系統(tǒng)相比,開(kāi)放式數(shù)控系統(tǒng)有以下優(yōu)勢(shì):
可伸縮性,CNC系統(tǒng)的功能、規(guī)模(硬件或軟件模塊)可根據(jù)具體應(yīng)用靈活增減;
可移植性,系統(tǒng)的功能軟件與運(yùn)行平臺(tái)無(wú)關(guān),能運(yùn)行于不同供應(yīng)商提供的硬件平臺(tái)上;
可擴(kuò)展性,開(kāi)發(fā)者能有效地將自己的軟件集成到NC系統(tǒng)中,形成自己的專(zhuān)用系統(tǒng);
可互操作性,通過(guò)標(biāo)準(zhǔn)化接口,通信和交互機(jī)制,使不同功能模塊獲得相互操作能力,協(xié)調(diào)工作。
目前開(kāi)放式數(shù)控系統(tǒng)主要形式是基于PC的NC,即在PC的總線上插上具有NC功能的運(yùn)動(dòng)控制器完成實(shí)時(shí)性要求較高的NC內(nèi)核功能。本次課題基于步進(jìn)機(jī)電有限公司的MPC08運(yùn)動(dòng)控制器就是一款能滿足數(shù)控系統(tǒng)功能要求,性價(jià)比高的通用運(yùn)動(dòng)控制器,課題根據(jù)鉆床的工藝在此基礎(chǔ)上進(jìn)行數(shù)控系統(tǒng)軟件的研究。
2 系統(tǒng)總體結(jié)構(gòu)
本系統(tǒng)數(shù)控鉆床共有8個(gè)軸,分別為X,Y軸和Z1,Z2,Z3,Z4,Z5,Z6軸,其中X,Y軸控制平面兩個(gè)方向的定位, Z1,Z2,Z3,Z4,Z5,Z6則控制下鉆的進(jìn)給量,XYZ可聯(lián)動(dòng)控制。加工時(shí), 根據(jù)要加工工件上的孔坐標(biāo)、孔直徑、孔深等參數(shù), 編好工件的加工文件, 系統(tǒng)按加工文件控制機(jī)床完成鉆削加工。
為了對(duì)機(jī)床8個(gè)軸的進(jìn)行控制,我們采用了MPC08運(yùn)動(dòng)控制器作為系統(tǒng)控制的內(nèi)核,插在PC機(jī)的PCI插槽中。其系統(tǒng)硬件框圖如下:
工業(yè)PC機(jī)作為主控計(jì)算機(jī)來(lái)完成與MPC08控制器的通訊以及上層系統(tǒng)操作、調(diào)度管理、故障診斷、參數(shù)輸入等非實(shí)時(shí)性任務(wù)。
MPC08是一款開(kāi)放式通用運(yùn)動(dòng)控制器,所有指令均為立即指令,適合于PCB鉆床的高速度,定位準(zhǔn)的點(diǎn)位運(yùn)動(dòng),并具有足夠的專(zhuān)用和通用的IO通道供機(jī)床控制使用,軟件方面提供了豐富的運(yùn)動(dòng)控制函數(shù),以供用戶在Windows平臺(tái)自主開(kāi)發(fā),構(gòu)建所需要的數(shù)控系統(tǒng)。我們將MPC08插入PC的PCI插槽里,借助它完成整個(gè)系統(tǒng)的控制。
IO及反饋系統(tǒng)使用MPC08的專(zhuān)用和通用的輸入和輸出通道進(jìn)行各種機(jī)床電器IO信號(hào)的連接與控制;驅(qū)動(dòng)和伺服步進(jìn)電機(jī)單元?jiǎng)t是接收MPC08發(fā)出的脈沖及方向信號(hào)完成需要的運(yùn)動(dòng)。
變頻器和主軸轉(zhuǎn)動(dòng)控制部分是利用PC機(jī)的串口進(jìn)行和變頻器的通訊,由此完成主軸轉(zhuǎn)速的控制,此控制則是獨(dú)立于MPC08之外。
3 軟件結(jié)構(gòu)設(shè)計(jì)
為了滿足伸縮性,移植性,擴(kuò)展性和互操作性的要求,軟件采用了模塊化設(shè)計(jì)的思想,利用
VisualC++6.0開(kāi)發(fā)工具在Windows2000操作系統(tǒng)上開(kāi)發(fā)而成。軟件總體分為兩大部分,人機(jī)界面交互部分和系統(tǒng)控制部分,軟件的總體模塊結(jié)構(gòu)如下圖所示:
1)人機(jī)界面 人機(jī)界面模塊主要完成整個(gè)數(shù)控系統(tǒng)的狀態(tài)顯示和需求參數(shù)的輸入,除此以外應(yīng)該使界面友好,使用便捷。本程序設(shè)計(jì)借助了MFC庫(kù)中CWnd類(lèi)和CButton按鈕類(lèi)的強(qiáng)大功能,利用這兩個(gè)類(lèi)的成員函數(shù)以及類(lèi)派生的子類(lèi)構(gòu)造了友好便捷的界面。界面包括有加工過(guò)程中重要參數(shù)的顯示,主要功能按鈕和加工圖形的顯示。其中參數(shù)顯示有各軸的坐標(biāo),工作行程,下止點(diǎn),刀具代號(hào),直徑,偏移以及加工的孔數(shù)記錄,所在刀庫(kù)的記錄等;功能按鈕有啟動(dòng),回原點(diǎn),回停車(chē)位,導(dǎo)入文件,刀具參數(shù),刀具管理,加工參數(shù)等,其中刀具參數(shù),刀具管理和加工參數(shù)按鈕還可以打開(kāi)其他界面完成系統(tǒng)功能;圖形顯示則位于界面的中間部分用于顯示加工PCB孔的圖形,加工過(guò)程中還可以動(dòng)態(tài)顯示加工到某個(gè)孔。
2) 加工文件 加工文件功能模塊完成對(duì)外部輸入進(jìn)來(lái)的加工文件(PCB行業(yè)通用的Excellon格式文件)進(jìn)行譯碼,將加工文件的信息轉(zhuǎn)化為控制系統(tǒng)需要的數(shù)據(jù)形式。軟件具體實(shí)現(xiàn)辦法是將文件的每一行進(jìn)行解讀,根據(jù)解讀出來(lái)的信息將每個(gè)要加工的刀具節(jié)點(diǎn)數(shù)據(jù)放在一個(gè)WORK_NODE結(jié)構(gòu)里面,對(duì)應(yīng)在該刀具下的孔加工數(shù)據(jù)放在WORK_NODE里面的RECORD_NODE結(jié)構(gòu)體內(nèi),最后統(tǒng)一將每一個(gè)刀具節(jié)點(diǎn)存放到以WORK_NODE為類(lèi)型的加工鏈表gWorkList里。其中WORK_NODE和RECORD_NODE的數(shù)據(jù)結(jié)構(gòu)如下:
typedef struct _WORK_NODE
{
int Type; //刀具類(lèi)型,
int ToolNo; //刀具號(hào) T0,T1......
double Diameter; //mm直徑
double VelocityForZUp; //提升速度
double VelocityForZDown; //下鉆速度mm/min
double Offset; //下鉆允許偏移量mm
int Rev; //主軸轉(zhuǎn)速rpm/minute
int MaxLife, HitCount; //壽命
int ToolCurNo; //當(dāng)前刀具所在刀庫(kù)號(hào)jia
CRecordList *pList; //孔坐標(biāo)鏈表
}WORK_NODE,*PWORK_NODE;
typedef struct _RECORD_NODE
{
double x; //x坐標(biāo)
double y; //y坐標(biāo)
}RECORD_NODE,*PRECORD_NODE;
3) 加工參數(shù)管理 本功能完成在機(jī)床控制過(guò)程中各參數(shù)的管理,包括機(jī)器的軸參數(shù),系統(tǒng)參數(shù),加工參數(shù),刀具參數(shù),機(jī)床坐標(biāo)參數(shù)。為了方便管理和使用,以上參數(shù)程序里都定義全局變量存放,使用時(shí)對(duì)這些變量操作即可以進(jìn)行各參數(shù)的讀取和修改。每個(gè)參數(shù)變量都以一個(gè)自定義的結(jié)構(gòu)體為類(lèi)型,軸參數(shù)類(lèi)型內(nèi)包括每個(gè)軸的使能,最大速度,最大加速度,脈沖當(dāng)量,回零速度,回零方向,反向間隙等;系統(tǒng)參數(shù)包括插補(bǔ)精度,到位檢測(cè)周期,刀庫(kù)坐標(biāo)位置,深度檢測(cè)深度,深度檢測(cè)速度;加工參數(shù)包括進(jìn)給速度,提升速度,工作行程,主軸轉(zhuǎn)速,換刀方式,斷鉆檢測(cè)允許范圍;刀具參數(shù)包括刀具的類(lèi)型,直徑,壽命,已使用壽命,所在刀庫(kù)號(hào);機(jī)床坐標(biāo)參數(shù)則包括機(jī)床的絕對(duì)坐標(biāo)和相對(duì)坐標(biāo)參數(shù)。所有這些參數(shù)除了絕對(duì)和相對(duì)坐標(biāo)參數(shù)外都需要在加工前由使用者按需求輸入,加工過(guò)程中根據(jù)這些設(shè)置的數(shù)據(jù)進(jìn)行運(yùn)動(dòng)。下面是軸參數(shù)的數(shù)據(jù)結(jié)構(gòu)例子:
typedef struct _AXIS_PARAM_SET
{
int Installed; //軸是否安裝:TRUE——安裝
int Enable; //軸是否有效
int HomeDir; //機(jī)床回零方向:1——正向,-1——反向,0——無(wú)效
double Interval; //反向間隙
&nbs, p; double MaxSpeed; //最大速度(mm/min)(A)
double AccelSpeed; //最大加速度(mm/min︿2)3600000
double PulseFactor; //脈沖當(dāng)量(mm)
long PulseUp; //電子齒輪分子
long PulseDown; //電子齒輪分母
long PulseDir; //反饋方向
int SRatio; //S型加速度曲線系數(shù)
double HomeSpeed; //回零速度
double HomeCheckDis; //回零檢測(cè)長(zhǎng)度
double HomeOffsetDis; //回零后的移動(dòng)距離
double DepthCheckDis; //深度檢測(cè)的下降距離
}AXIS_PARAM_SET,*PAXIS_PARAM_SET;
4) 運(yùn)動(dòng)與換刀控制 運(yùn)動(dòng)與換刀控制是鉆床運(yùn)動(dòng)的核心部分,完成鉆床的孔加工(包括啟動(dòng),定位,下鉆,提升),回零,回停車(chē)位和換刀的動(dòng)作。本模塊的代碼都在專(zhuān)門(mén)建立的運(yùn)動(dòng)控制線程PubWorkThreadHandler(LPVOID pParam)里面執(zhí)行。
a) 孔加工 當(dāng)用戶加工準(zhǔn)備就緒,按下啟動(dòng)加工的按鈕的時(shí)候,線程開(kāi)始自動(dòng)讀取加工鏈表gWorkList里面已經(jīng)經(jīng)過(guò)譯碼的數(shù)據(jù),通過(guò)已知數(shù)據(jù)信息程序按照加工參數(shù)管理模塊設(shè)定的速度發(fā)送運(yùn)動(dòng)指令給MPC08運(yùn)動(dòng)控制器,控制器發(fā)出脈沖使機(jī)床快速運(yùn)動(dòng)并定位到該孔坐標(biāo),接著以給定的下鉆速度和下鉆深度進(jìn)行孔加工,然后再以給定的速度提升,提升的同時(shí)迅速定位到下一個(gè)加工孔的坐標(biāo)位置。
b) 回零 準(zhǔn)確的回零對(duì)機(jī)床的定位和加工起著重要的作用,本系統(tǒng)設(shè)計(jì)的回零方式借助于伺服電機(jī)的Z脈沖,當(dāng)按下回零按鈕后,程序的運(yùn)動(dòng)控制線程即按相應(yīng)步驟發(fā)出回零指令給控制器,使機(jī)床準(zhǔn)確的回零。設(shè)計(jì)的回零步驟為:各軸快速朝原點(diǎn)方向運(yùn)動(dòng)à碰到原點(diǎn)開(kāi)關(guān)后緩?fù)(ぞ復(fù):蠓聪虻退龠\(yùn)動(dòng)à當(dāng)接收到伺服電機(jī)的Z脈沖信號(hào)后停下來(lái)。機(jī)床即以停下來(lái)的坐標(biāo)位置作為機(jī)床的原點(diǎn)。程序里面對(duì)每個(gè)步驟定義了一個(gè)宏,以此來(lái)區(qū)分加工到那一步驟。
c) 回停車(chē)位 當(dāng)按下回停車(chē)位的按鈕后,發(fā)出回停車(chē)位的指令,使機(jī)床的XY軸分別運(yùn)動(dòng)到加工前設(shè)定到加工參數(shù)管理模塊的停車(chē)位坐標(biāo)。
d) 換刀 鉆床加工PCB板的時(shí)候需要加工不同直徑的孔,這就要求在加工過(guò)程中當(dāng)加工完一種直徑的孔以后進(jìn)行換刀,取到另外一直徑的刀具進(jìn)行加工。本系統(tǒng)的換刀方式有手動(dòng)換刀和自動(dòng)換刀兩種。手動(dòng)換刀就是在加工完一直徑的孔后或刀具壽命到了以后回到停車(chē)位,由加工者手動(dòng)把原刀具取下來(lái)并換上新的刀具然后恢復(fù)加工。手動(dòng)換刀效率比較,現(xiàn)在的機(jī)床一般都采取自動(dòng)換刀,本次設(shè)計(jì)的換刀流程如下:
Z軸回零——壓腳抬起——X軸移動(dòng)到原刀庫(kù)的位置——Y軸移動(dòng)到原刀庫(kù)的位置——Z軸移動(dòng)到換刀位置——張夾頭放刀——延時(shí)——Z軸回零——XY軸回到停頓位置——檢查刀具放回了——Z回零——回到停頓位置——X軸移動(dòng)到目標(biāo)刀具的位置——Y軸移動(dòng)到目標(biāo)刀具的位置——Z軸移動(dòng)到換刀位置——合夾頭取刀——延時(shí)——Z軸回零——回到停頓位置——檢查刀具取到了——Z軸回零——XY軸回到停頓位置——壓腳放下
換刀的軟件實(shí)現(xiàn)同樣是在運(yùn)動(dòng)控制線程里按以上步驟一步步完成,每個(gè)步驟類(lèi)似回零步驟一樣定義了一個(gè)宏來(lái)區(qū)分。當(dāng)整個(gè)換刀流程執(zhí)行完畢以后,機(jī)床繼續(xù)加工剩余的孔。
5) 自診斷檢測(cè) 自診斷模塊對(duì)機(jī)床的調(diào)試,檢測(cè),狀態(tài)監(jiān)視起著重要的作用。通過(guò)本模塊,使用者可以隨時(shí)的檢測(cè)到機(jī)床電器信號(hào)狀態(tài),包括機(jī)床輸入到控制器的信號(hào)和使用者通過(guò)控制器輸出到機(jī)床的控制信號(hào)。程序里是通過(guò)另一個(gè)輔助線程PubMonitorThreadHandler不斷的查詢MPC08控制器的狀態(tài)寄存器,并構(gòu)建如下的對(duì)話框顯示出來(lái):
4 應(yīng)用
該系統(tǒng)利用了MPC08運(yùn)動(dòng)控制器的強(qiáng)大功能,并在模塊化思想指導(dǎo)下進(jìn)行軟件編程,最終有效的應(yīng)用于PCB鉆床的控制系統(tǒng)中,運(yùn)行效果良好,并且通過(guò)了在PCB數(shù)控機(jī)床中高精度和速度的加工測(cè)試,加工使用0.1-0.3mm大小的刀徑,孔間距為0.5mm,其各軸的最大速度,以及每分鐘的鉆孔個(gè)數(shù)均達(dá)到了預(yù)期的要求。