基于PMAC的大容量G代码加载及同步显示技术研究*
2014-03-08黎良田
黎良田
基于PMAC的大容量G代码加载及同步显示技术研究*
黎良田
(深圳职业技术学院 机电工程学院,广东 深圳 518055)
开放式数控系统软件用户界面的开发,除了一些实时数据的采集与显示外,在数控加工中往往需要进行超大容量G代码加载及G代码的同步高亮显示.本文针对用于薄壁回转体零件测量与加工的专用设备开发的基于PMAC开放式数控系统的实际需要,提出利用分割法进行超大容量G代码程序加载的新方法,同时研究了加工过程中G代码程序的实时同步高亮显示和进度显示技术,使系统得到了优化,提高了系统的稳定性.
PMAC;开放式数控系统;G代码加载;同步显示
在工业生产中,一些特殊零部件的测量与加工对设备及控制系统有特殊的要求,通用的设备及数控系统无法满足其特殊的加工需要,需要开发专用设备及专用的数控系统来完成.开放式数控系统由于重构性好,开发成本低,得到了广泛应用[1-2].在开放式数控系统结构中,以“PC+运动控制卡”模式应用最为广泛[3].美国DELTA TAU公司的PMAC作为全球技术领先的多轴运动控制卡在工业上被大量使用.然而,PMAC提供给用户的是指令式的后台软件,用户需要根据特定的系统功能要求开发出专用界面软件.在用户界面软件与PMAC的通讯中需要解决超大容量数据处理与G代码加载,以及用户界面的同步显示等技术问题.
1 PMAC与上位机的通讯方式
PMAC是美国DELTA TAU公司生产的多轴运动控制卡,它与主机之间的通讯主要采用2种方式:一种是总线通讯方式;另一种是利用DPRAM方式.其中,以PC总线通讯为主,主机通过设置PMAC上的跳线到指定的地址上去找到PMAC,PC总线为PMAC提供数字电源等信号;而DPRAM则主要用来与PMAC进行快速数据通讯和命令通讯[4].DPRAM通过一块空白的共享存储空间为主机与总线通讯提供了一条高速的通讯路径,当每秒钟有超过大约100条数据信息在控制器和主机之间传输时,DPRAM就会被利用.在进行数据存取时不需经过通讯口发送命令或等待响应,因而能够在实时状态下将位置数据、程序等信息快速地下载到PMAC中,同时快速地获取PMAC中的系统状态信息(包括伺服系统状态信息、后台常量状态信息等).用户还可以用PMAC中的M变量和主机的指针变量来指定DPRAM中使用的寄存器,来实现自定义的通讯功能[5].
2 超大容量G代码加载技术
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所示.
3 G代码同步高亮显示技术
在数控加工过程中,系统除了能对加工过程的参数、状态等进行实时监控外,所开发的面向对象用户界面还应具有对加工代码和进程的同步跟踪显示功能,来使得加工过程更加“透明化”、“可视化”,帮助用户能够更清晰地获得当前的加工进程和运动程序正在执行的指令行等信息.
一种方法可以通过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-),男,广东肇庆人,硕士,讲师,主要研究方向为自动化控制与数字化加工技术.