黎良田
基于PMAC的大容量G代碼加載及同步顯示技術研究*
黎良田
(深圳職業技術學院 機電工程學院,廣東 深圳 518055)
開放式數控系統軟件用戶界面的開發,除了一些實時數據的采集與顯示外,在數控加工中往往需要進行超大容量G代碼加載及G代碼的同步高亮顯示.本文針對用于薄壁回轉體零件測量與加工的專用設備開發的基于PMAC開放式數控系統的實際需要,提出利用分割法進行超大容量G代碼程序加載的新方法,同時研究了加工過程中G代碼程序的實時同步高亮顯示和進度顯示技術,使系統得到了優化,提高了系統的穩定性.
PMAC;開放式數控系統;G代碼加載;同步顯示
在工業生產中,一些特殊零部件的測量與加工對設備及控制系統有特殊的要求,通用的設備及數控系統無法滿足其特殊的加工需要,需要開發專用設備及專用的數控系統來完成.開放式數控系統由于重構性好,開發成本低,得到了廣泛應用[1-2].在開放式數控系統結構中,以“PC+運動控制卡”模式應用最為廣泛[3].美國DELTA TAU公司的PMAC作為全球技術領先的多軸運動控制卡在工業上被大量使用.然而,PMAC提供給用戶的是指令式的后臺軟件,用戶需要根據特定的系統功能要求開發出專用界面軟件.在用戶界面軟件與PMAC的通訊中需要解決超大容量數據處理與G代碼加載,以及用戶界面的同步顯示等技術問題.
PMAC是美國DELTA TAU公司生產的多軸運動控制卡,它與主機之間的通訊主要采用2種方式:一種是總線通訊方式;另一種是利用DPRAM方式.其中,以PC總線通訊為主,主機通過設置PMAC上的跳線到指定的地址上去找到PMAC,PC總線為PMAC提供數字電源等信號;而DPRAM則主要用來與PMAC進行快速數據通訊和命令通訊[4].DPRAM通過一塊空白的共享存儲空間為主機與總線通訊提供了一條高速的通訊路徑,當每秒鐘有超過大約100條數據信息在控制器和主機之間傳輸時,DPRAM就會被利用.在進行數據存取時不需經過通訊口發送命令或等待響應,因而能夠在實時狀態下將位置數據、程序等信息快速地下載到PMAC中,同時快速地獲取PMAC中的系統狀態信息(包括伺服系統狀態信息、后臺常量狀態信息等).用戶還可以用PMAC中的M變量和主機的指針變量來指定DPRAM中使用的寄存器,來實現自定義的通訊功能[5].
2.1PMAC運動程序加載問題
PMAC為用戶提供了許多程序緩沖器來存儲運動程序代碼,包括256個常規運動程序緩沖器(motion program buffer),8個循環運動程序緩沖器(rotary motion program buffer)(每一個只能對應一個坐標系),32個PLC程序緩沖器(PLC program buffer)[6].然而,PMAC提供給運動程序的共享空間卻是有限的,PMAC只提供地址為$1800-$BBFF段內存空間作為用戶緩沖器存儲空間,其中用戶程序存儲總容量只有252 kB(相當于能容納編譯前的txt文件約300 kB左右),而且單個運動程序緩沖器的最大容量只有50 kB左右.對于超大容量的運動程序,無法一次性全部加載到一個運動程序緩沖器中去,因而需要在程序中巧妙設計運動程序的下載和執行,保證程序能夠正確下載和連續執行,加工過程能夠連續、有序、穩定地進行.
2.2 大容量G代碼程序加載的解決方法
要解決大容量運動程序加載問題可以有兩種方法:一種是利用循環運動程序緩沖器(rot buffer)下載代碼,另一種是把運動程序文件分割成小容量文件下載到常規運動程序緩沖器中.
PMAC提供的循環運動程序緩沖器是專門為了執行大于PMAC可利用的存儲容量的運動程序而設計的.它允許在運動程序執行期間對程序進行同時下載,下載到同一個rot緩沖器中,覆蓋已經執行完的運動程序行.每一個坐標系只能擁有一個循環緩沖器,每個循環緩沖器的最大容量不超過約100 kB,因而可以把不超過循環緩沖器容量的前部分運動程序先下載到循環緩沖器中,開始執行運動程序后,再利用定時器把剩余部分程序按行陸續下載到循環緩沖器中,下載程序時先利用CString 對象的成員函數Find(),以及Left(),Mid()截取運動程序文件中的程序行,然后利用PCOMM32.DLL庫函數PmacDPRAsciiStrToRot()把程序行下載到循環緩沖器中,利用&1R指令執行運動程序,如圖1所示.
利用循環緩沖器下載和執行程序,再加上后面敘述的加工代碼同步高亮跟蹤顯示技術,由于涉及到大量字符操作,占用內存較大,加重了系統的運算負擔,也容易出現不穩定因素,因而本文專門設計了另一種更加高效、可靠的文件下載與執行方法,即利用分割法把運動程序文件分離分割下載.

圖1 利用循環緩沖器下載執行G代碼流程圖

圖2 利用分割法加載執行G代碼流程圖
該方法實質是把用于用戶界面顯示的G代碼文件與用于PMAC執行的G代碼文件分離,同時把用于PMAC執行的G代碼文件分割成一定大小的小文件下載到常規運動程序緩沖器中.在后處理結束生成G代碼時,同時生成2類文件:一類是用于顯示在用戶界面程序RichTextBox控件中的txt格式文件,它是可以讓用戶自命名的單個文件,它的大小不受限制.另一類是用于下載到PMAC運動程序緩沖器中用來執行加工的pmc格式文件,在內容上與前面生成的文件中的代碼是完全一致的,但格式有差異,它根據總代碼多少被分割成若干個文件,每個文件的大小是50 k,可以通過函數GetCompressedFileSize(pFileName, lpFileSizeHigh)來判斷文件大?。捎谶\動程序內存空間總容量只能容納約300 kB的txt文件,因而即使分割成小文件,一次最多也只能加載6個文件,通過函數PmacDownload()或PmacDownloadFile()分別把程序文件下載到第1~6個緩沖器中,當G代碼超過300KB,分割文件數超過6個時,需要設定一個定時器,在一個運動程序執行完,開始執行下一個程序的同時,把剩余文件中連接最后下載的程序的下一個程序下載到已執行完的程序所在的緩沖器中,覆蓋已執行完的程序.由于PMAC會根據程序文件中的指令“OPNE PROG i CLEAR”中的變量i來確定下載到哪個緩沖器中,因而在寫運動程序文件的時候該語句中的i必須按7取模加1,也就是說到第七個文件的時候該語句中的i應該重新變為1,即當第1個運動程序執行完后,把第7個運動程序下載到第1個緩沖器中,覆蓋已執行完的第1個運動程序,后面的以此類推.兩個程序之間的連接可以通過PMAC的變量M180(運動程序運行標志位)來實現.定義一個50 ms的定時器,在運動開始執行后實時讀取M180值,當M180為0時說明運動已結束,此時馬上發“&1BmR”(m為下一段程序號)指令來接著執行下一個運動程序文件.這個過程的間隔不超過50ms,因而運動仍是連續的,不存在連接的停頓問題.如圖2所示.
在數控加工過程中,系統除了能對加工過程的參數、狀態等進行實時監控外,所開發的面向對象用戶界面還應具有對加工代碼和進程的同步跟蹤顯示功能,來使得加工過程更加“透明化”、“可視化”,幫助用戶能夠更清晰地獲得當前的加工進程和運動程序正在執行的指令行等信息.
一種方法可以通過PMAC提供的命令“LIST PE”來獲得G代碼當前執行行的地址和清單等有關信息.這種方法的優點是簡單,易于編程.然而,該方法只能在用戶界面上顯示G代碼當前執行行的信息,用戶無法從界面中看到加工程序文件的所有G代碼,同時也不便于用來顯示加工進程的進度條的編程.
為了能獲得G代碼當前執行行的信息的同時還能讓用戶從界面上看到包括已執行完和待執行的所有加工代碼,以及加工進程,本文采用了另一種G代碼同步高亮顯示方法來實現.PMAC提供的同步M變量可以允許用戶將其定義為一個DPRAM的寄存器,因而可以通過M變量的操作讓用戶可以自定義運動程序中的G代碼行號,并且可以通過實時讀取M變量值來獲得G代碼當前執行行的行號.由于本文是把運動程序文件分離下載的,因而就可以在PMAC執行的運動程序文件中使用同步M變量來定義行號.首先自定義一個M變量,如M900→D:$0D53,然后在生成G代碼文件時,將用于PMAC執行的運動程序文件的每一行G代碼后面加上M900的賦值語句,把該行的行號按順序賦給M900.當程序執行時,會在該行代碼實際執行的開始將這個行號值寫到M900所在的DPRAM寄存器中.此時通過實時查詢M900變量的值即可知道G代碼當前執行行的行號.同時在運動程序文件生成時,就可以通過最后一行代碼的M900的值得到整個程序G代碼的總行數.至此就已完全具備了實現G代碼同步高亮顯示的基本條件.
程序設計思路是先把用于顯示的程序文件加載到RichTextBox控件中,開始執行程序后,在定時器中實時查詢變量M900的值以獲得當前執行行的行號,然后用Find(),Left()等方法獲得當前執行行的G代碼范圍,然后用API函數SendMessage()來使當前執行行背景高亮顯示,并且把當前執行行行號除以總行數來得到加工進度.m_fM800是一個中間變量,每次更新后都把m_M800值賦給m_fM800,當高亮顯示的代碼行仍在執行時,M800值未改變,m_M800-m_fM800為0,不進入if()表達式語句中,高亮顯示行不變化;當下一行代碼開始執行時,M800值更新(加1),此時m_M800-m_fM800>0條件成立,進入if()表達式語句中,執行下一行代碼的高亮顯示.以下是同步跟蹤定時器中所編寫的高亮顯示和進度條顯示部分程序代碼(其效果如圖3左側文本框及進度條顯示所示):

圖3 開放式數控系統用戶軟件主界面
void CMGMView::OnTimer(UINT nIDEvent)
{
……
DeviceDPRVarBufRead(GetDocument()->m_dwDevice,m_handle,0,m_data);
m_M800=DeviceDPRLFixed(m_data,1.0); //讀M800值經數據轉換后賦給變量
if(m_M800-m_fM800>0) //m_fM800是一個中間轉換變量,初值為0
{
int num=m_GetText.Find(" "); //m_GetText為存放控件中字符串的變量
CString LeftText=m_GetText.Left(num); //截取當G代碼前執行行內容
CString RightText=m_GetText.Mid(num+1); //截取剩余G代碼內容
m_GetText=RightText;
m_RichTextCtl1.SetFocus();
::SendMessage((HWND)m_RichTextCtl1.GetHwnd(), EM_SETSEL,m_nump,m_nump+num+1);
//讓當前執行行高亮顯示
m_nump=m_nump+num+1;
k=n_pi%13;
if(m_M800>1 && k==0)
::SendMessage((HWND)m_RichTextCtl1.GetHwnd(), EM_LINESCROLL,0,13); //滾動條滾動
13行,即翻1頁
n_pi+=1; //計算代碼執行到第幾行了
if(n_pi==(n_i-1)) //如果到了最后一行
{
KillTimer(IDT_READ_TIMER);
m_Proctl.SetPos(100);
m_PgrTxt.SetText("100%");
m_PgrTxt.SetTextColor(RGB(0,0,255));
UpdateData(FALSE);
break;
}
CString m_Spos;
int pos=(n_pi*100/(n_i-1)); //根據行數設置當前加工進度
m_Proctl.SetPos(pos);
m_Spos.Format("%d%%",pos); //進度條顯示
m_PgrTxt.SetText(m_Spos); //進度百分數同步顯示
m_PgrTxt.SetTextColor(RGB(0,0,255));
UpdateData(FALSE);
m_fM800=m_M800; //M800值更新后將值賦給中間變量m_fM800
}
break;
}
[1] 郭鼓,李樹軍,徐永新,等.一種基于PMAC的開放式數控系統的設計與實現[J].制造業自動化,2012,34(4):106-110.
[2] 賈旭,盧曉紅,王鑫鑫,等.基于PMAC的微銑床數控系統中G代碼編譯研究[J].組合機床與自動化加工技術,2012,(3):104-107.
[3] 陳穎,謝富春,張從鵬,等.基于PMAC的折彎機送料測長系統設計[J].機床與液壓,2012,40(2):4-6.
[4] 宓方偉,陳功福.PMAC多軸運動控制器應用研究[J].機床與液壓,2004(12):129-131.
[5] 唐小會,謝寄石,黃大貴,等.基于PMAC的開放式數控系統實驗平臺的研究與開發[J].中國測試技術,2003(1):61-62.
[6] DELTA TAU Data System Inc. PMAC REFERENCE GUIDE[R].USA, 2012.
[7] David J Kruglinski.Visual C++技術內幕(第四版)[M].清華大學出版社,1999.
Exceeding G-codes Downloading and Synchronous High-bright Display Technique Based on PMAC
LI Liangtian
(School of Mechanical and Electrical Engineering, Shenzhen Polytechnic, Shenzhen, Guangdong 518055, China)
PMAC motion controller was widely used in the development of open numerical control system. Various NC system software interfaces, in accordance with the requirements of special machine tools can be developed. Exceeding G-codes program is to be downloaded in the machining processing. In addition, synchronous high-bright display of G-code was necessary. A new method was proposed to allow exceeding G-codes program to be downloaded in this paper. The technology was studied on synchronous high-bright display of G-code and display of progress on the user interface in the machining processing. The software system was optimized by using this technique.
PMAC; open numerical control; G-code download; high-bright display
TP311
A
1672-0318(2014)03-0038-05
2013-10-26
*項目來源:深圳職業技術學院校科研重點資助項目(2210k3020009)
黎良田(1981-),男,廣東肇慶人,碩士,講師,主要研究方向為自動化控制與數字化加工技術.