劉雄,李蔚洋,劉杰
(1.江鉆股份有限公司,湖北潛江433124;2.江漢油田勘探開(kāi)發(fā)研究院,湖北武漢430223)
在數(shù)控機(jī)床加工過(guò)程中,實(shí)時(shí)采集加工數(shù)據(jù)對(duì)加工過(guò)程進(jìn)行控制與補(bǔ)償是十分必要的。但對(duì)成熟的數(shù)控系統(tǒng)如西門(mén)子、FUNUC等而言,加工數(shù)據(jù)采集是十分困難的,用戶(hù)無(wú)法進(jìn)行進(jìn)一步的監(jiān)測(cè)與控制。基于PC的開(kāi)放式數(shù)控系統(tǒng),是對(duì)傳統(tǒng)封閉式數(shù)控系統(tǒng)的根本突破,是當(dāng)今數(shù)控技術(shù)的發(fā)展主流和研究熱點(diǎn)[1]。因此,采用NC嵌入PC型結(jié)構(gòu)對(duì)開(kāi)放式數(shù)控系統(tǒng)進(jìn)行了開(kāi)發(fā)研究。
在數(shù)控機(jī)床系統(tǒng)的應(yīng)用過(guò)程中,為了了解機(jī)床性能或進(jìn)行一步控制,有許多數(shù)據(jù)參數(shù)需要采集,如機(jī)床各軸的運(yùn)動(dòng)參數(shù)、機(jī)床正在執(zhí)行的命令、在線(xiàn)測(cè)量尺寸等[2]。在基于PMAC卡數(shù)控機(jī)床的數(shù)據(jù)實(shí)時(shí)采集過(guò)程中,采取了多線(xiàn)程技術(shù)與PMAC option2提供雙端口技術(shù)相結(jié)合的采集方式,取得了滿(mǎn)意的效果。
可編程多軸控制器(programmablemulti-axis controller,PMAC)是美國(guó)DeltaTau公司20世紀(jì)90年代推出的基于PC平臺(tái)的開(kāi)放式多軸運(yùn)動(dòng)控制器。它采用了Motorola公司的DSP56系列高性能數(shù)字信號(hào)處理器作為CPU,是目前世界上功能最強(qiáng)大的運(yùn)動(dòng)控制器之一,一個(gè)PMAC可以同時(shí)控制1~8根軸,多個(gè)PMAC級(jí)聯(lián)最多可以控制128根軸,能夠精確定位,在包裝、裝配、醫(yī)藥工業(yè)、機(jī)床等行業(yè)應(yīng)用廣泛。
該數(shù)控機(jī)床為非圓磨床,運(yùn)動(dòng)方式為:x軸砂輪架水平往復(fù)移動(dòng)和c軸工件主軸轉(zhuǎn)動(dòng)兩軸聯(lián)動(dòng),其主要硬件設(shè)備有工控機(jī)、PMAC卡、松下伺服電動(dòng)機(jī)、雷尼紹光柵、CBN砂輪、電主軸等。安裝在x軸上的直線(xiàn)光柵分辨率為1μm,安裝在c軸上的圓光柵分辨率為20μm。數(shù)控系統(tǒng)采用直線(xiàn)光柵采集x軸位移作為反饋,圓光柵采集c軸轉(zhuǎn)角作為反饋,形成全閉環(huán)控制(圖1)。
PMAC 支持 C++,VB,VC,Delphi等多種高級(jí)語(yǔ),并提供了可共二次開(kāi)發(fā)的的動(dòng)態(tài)鏈接庫(kù)函數(shù)。該實(shí)驗(yàn)裝置以Visual C++6.0為工具,開(kāi)發(fā)了軟件控制系統(tǒng),并開(kāi)發(fā)了用于數(shù)據(jù)采集與顯示的CStShow類(lèi),用于數(shù)據(jù)采集和顯示及繪圖。
圖1 數(shù)控系統(tǒng)的控制原理圖
文獻(xiàn)[4]介紹了兩種PMAC數(shù)據(jù)讀取的方式:
1)從緩沖區(qū)中獲得采集數(shù)據(jù):在這種采集方式中,需要設(shè)定采集周期(變量I19)來(lái)決定在每個(gè)伺服中斷周期內(nèi)執(zhí)行多少個(gè)數(shù)據(jù)采集周期,設(shè)定采集源選擇標(biāo)志(變量I20)來(lái)決定采集哪一個(gè)或多個(gè)數(shù)據(jù)源,以及設(shè)定采集源地址(變量I20~I(xiàn)44)。這種數(shù)據(jù)采集方式比較復(fù)雜,但應(yīng)用靈活,用戶(hù)可以通過(guò)設(shè)定采集源,采集任何PMAC有效地址中的數(shù)據(jù)。
2)從I/O及運(yùn)動(dòng)寄存器中直接采集數(shù)據(jù):在這種采集方式中,用戶(hù)只需要讀取各個(gè)I/O及運(yùn)動(dòng)寄存器中的值就能得到需要的數(shù)據(jù)。由于PMAC將運(yùn)行過(guò)程中各個(gè)電動(dòng)機(jī)、編碼器的各種數(shù)據(jù)自動(dòng)的存放在相應(yīng)的I/O及運(yùn)動(dòng)寄存器中,用戶(hù)不需額外指定采集源,不必關(guān)心數(shù)據(jù)是如何存入、如何譯碼的,大大簡(jiǎn)化了數(shù)據(jù)采集的難度。
本文采取了另外一種PMAC數(shù)據(jù)讀取方式:?jiǎn)?dòng)雙端口RAM,利用雙端口RAM所帶的函數(shù)進(jìn)行數(shù)據(jù)采集。這種方法更加方便,雙端口RAM的函數(shù)封裝了PMAC數(shù)據(jù)讀取數(shù)據(jù)的過(guò)程,用戶(hù)采集運(yùn)動(dòng)參數(shù),只須調(diào)用相關(guān)的函數(shù)即可。例如:
Double PmacDPRPosition(DWORD dwDevice,int motor,double units)
該函數(shù)返回指定電動(dòng)機(jī)的實(shí)際位置。參數(shù)dwDevice為PMAC卡的卡號(hào),motor指電動(dòng)機(jī)號(hào)減1,units表示單位。
PMAC的Option2提供了一個(gè)8K×16位的RAM,允許PMAC和PC機(jī)之間共享一塊快速內(nèi)存,實(shí)現(xiàn)數(shù)據(jù)的快速傳遞。在凸輪軸的加工過(guò)程中需要在實(shí)時(shí)狀態(tài)下快速的大量的位置數(shù)據(jù)信息的下載,同時(shí)又需要重復(fù)的快速的從PMAC中讀取各電動(dòng)機(jī)的狀態(tài)信息。電動(dòng)機(jī)的狀態(tài)信息數(shù)據(jù)可以不停的更新并被PLC程序或自動(dòng)的寫(xiě)入雙端口RAM中,如果不使用雙端口 RAM,這些數(shù)據(jù)必須使用PAMC的在線(xiàn)命令通過(guò)PC總線(xiàn)來(lái)存取,由于使用雙端口RAM存取不需要經(jīng)過(guò)通訊口發(fā)送命令和等待響應(yīng)時(shí)間。下面介紹幾個(gè)主要的雙端口RAM后臺(tái)定點(diǎn)數(shù)據(jù)報(bào)告功能函數(shù)[5]。
1)BOOLPmacDPRRealTime(DWORD dwDevice,UINT period,int on_off)
該函數(shù)開(kāi)啟或關(guān)閉PMAC卡自動(dòng)將定點(diǎn)數(shù)據(jù)寫(xiě)入雙端口RAM功能;
2)voidPmacDPRSetMotors(DWORD dwDevice,UINT n)
該函數(shù)設(shè)置PMAC卡向雙端口RAM中寫(xiě)入幾個(gè)電動(dòng)機(jī)的相關(guān)數(shù)據(jù),參數(shù)n表示將1-n個(gè)電動(dòng)機(jī)的相關(guān)數(shù)據(jù)寫(xiě)入雙端口RAM中;
3)voidPmacDPRSetHostBusyBit(DWORD dwDevice,int on_off)
該函數(shù)通知PMAC卡,客護(hù)端將要進(jìn)行讀雙端口RAM中的數(shù)據(jù);
4)int PmacDPRGetHostBusyBit(DWORD dwDevice)
檢查該函數(shù)是否正在進(jìn)行雙端口RAM的寫(xiě)操作。
參數(shù)說(shuō)明:參數(shù)中period參數(shù)設(shè)置雙端口RAM中數(shù)據(jù)的刷新周期,開(kāi)啟或關(guān)閉PMAC卡,將on_off設(shè)置為1或0。
Windows操作系統(tǒng)之多任務(wù)調(diào)度與處理,每一個(gè)進(jìn)程可以同時(shí)執(zhí)行多個(gè)線(xiàn)程,這意味著一個(gè)程序可以同時(shí)完成多個(gè)任務(wù)。在VC++6.0中,MFC類(lèi)庫(kù)提供了對(duì)多線(xiàn)程編程的支持,它把線(xiàn)程區(qū)分為兩類(lèi):工作者線(xiàn)程和用戶(hù)界面線(xiàn)程.工作者線(xiàn)程主要用來(lái)執(zhí)行費(fèi)時(shí)的后臺(tái)計(jì)算任務(wù),用戶(hù)界面線(xiàn)程則一般用來(lái)處理用戶(hù)的輸入,響應(yīng)用戶(hù)產(chǎn)生的事件和消息。在MFC類(lèi)庫(kù)中,類(lèi)CWinThread是用戶(hù)界面線(xiàn)程的基本類(lèi)。用MFC創(chuàng)建線(xiàn)程,只需編寫(xiě)一個(gè)與應(yīng)用程序中的其余部分并行運(yùn)行的函數(shù),然后調(diào)用全局函數(shù)AfxBeginThread()啟動(dòng)線(xiàn)程,線(xiàn)程啟動(dòng)后調(diào)用輔助線(xiàn)程的回調(diào)函數(shù),可以在回調(diào)函數(shù)中編寫(xiě)想要實(shí)現(xiàn)功能的程序代碼。當(dāng)然也可以設(shè)定線(xiàn)程之間的優(yōu)先級(jí),也可以保持線(xiàn)程間的同步。這對(duì)應(yīng)用多線(xiàn)程進(jìn)行數(shù)據(jù)采集來(lái)說(shuō),是很有用的。
要終止線(xiàn)程,可以在線(xiàn)程內(nèi)部調(diào)用MFC的AfxEndThread()函數(shù)或ExitProcess()或SetEvent()進(jìn)行有條件地結(jié)束線(xiàn)程,如果想從該線(xiàn)程外部結(jié)束該線(xiàn)程,可以使用Win32API函數(shù)TerminateThread()。等,但使用時(shí)一定要釋放該進(jìn)程所占的系統(tǒng)資源,否則這樣會(huì)引起系統(tǒng)的不穩(wěn)定。
在編寫(xiě)程序時(shí)為了避免顯示過(guò)快而無(wú)法觀(guān)察,在數(shù)據(jù)采集后立刻寫(xiě)入文件保存,而采用了間隔時(shí)間為55ms的定時(shí)器,用于慢速顯示。用一個(gè)線(xiàn)程采集一個(gè)變量,以增加采集速度,并防止由于線(xiàn)程的相可以通過(guò)修改Sleep()函數(shù)中的參數(shù),改變采集時(shí)間間隔。本文給出了采集C軸速度的代碼,如果要采集更多的數(shù)據(jù),再增加線(xiàn)程即可。
主要程序代碼如下:
利用Visual C++,編寫(xiě)采集程序,采集加工過(guò)程中x軸實(shí)際位置、x軸實(shí)際速度、c軸實(shí)際位置、c軸實(shí)際速度。采集界面如圖2所示。
如果將采集的變量寫(xiě)入到同一個(gè)文件,將會(huì)由于線(xiàn)程的獨(dú)立性而導(dǎo)致亂碼。因此編程中將每個(gè)變量分別寫(xiě)入單獨(dú)的文件。下面是采集到的部分?jǐn)?shù)據(jù):
圖2 數(shù)據(jù)采集界面
由采集結(jié)果可知,多線(xiàn)程采集具有很高的采樣頻率,而且與PMAC的雙端口技術(shù)相結(jié)合,也簡(jiǎn)化了程序,加快了采集速度,這是一種很好的采集方法。
應(yīng)該指出的是,多線(xiàn)程技術(shù)是一種比較難的技術(shù),多線(xiàn)程應(yīng)用程序的編寫(xiě)和調(diào)試比較困難,因?yàn)椴l(fā)運(yùn)行線(xiàn)程的并行性增加了代碼的額外復(fù)雜度,在實(shí)驗(yàn)過(guò)程中就發(fā)生過(guò)多次調(diào)試問(wèn)題。但是如果使用得當(dāng),多線(xiàn)程可以極大地改善一個(gè)應(yīng)用程序的響應(yīng)性能。
[1]韓軍,史文浩.臥式車(chē)銑復(fù)合機(jī)床開(kāi)放式數(shù)控系統(tǒng)的研究[J].裝備制造技術(shù),2009(5):26-27.
[2]彭寶營(yíng),韓秋實(shí),孫志永.基于PMAC的數(shù)控機(jī)床數(shù)據(jù)實(shí)時(shí)采集的研究[J].微計(jì)算機(jī)信息,2007(7):237-239.
[3]申宇,馬伯淵,張金樓.基于PMAC卡的高速數(shù)據(jù)采集[J].機(jī)電工程技術(shù),2006(4):96-97.
[4]蘭光明.VC環(huán)境下的PMAC數(shù)據(jù)實(shí)時(shí)采集與顯示[J].北京機(jī)械工業(yè)學(xué)院學(xué)報(bào)2004(3):45-47.
[5]DELTA TAU Data System Inc.PMAC USER’S MANUAL[S].USA:DELTA TAU Data System Inc,1999.
[6]李秀敏凌宇欣.Visual C++6.0機(jī)范例入門(mén)與提高[M].北京:清華大學(xué)出版社.