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