基于PMAC的G代码连续下载技术研究
2021-05-05侯明鹏
侯明鹏,丁 宾
(1.北京机科国创轻量化科学研究院有限公司,北京 100044;2.北京金隅科技学校,北京 102403)
0 引言
随着制造业的发展,从数控技术角度而言,自动化、柔性化、集成化、智能化是未来数控技术发展的方向。从生产方式角度而言,生产方式正在从批量化的生产方式向多品种、小批量的生产方式转变,对数控系统提出了更高的要求。传统的封闭式数控系统很难满足行业及技术的不断更新及变化,不能满足市场发展的需要。因此,开放式数控系统应运而生,PMAC作为开放式数控系统的典型代表,具有功能丰富、可扩展、可移植等诸多优点得到了广泛的应用[1,2]。在铸造行业中,特种加工装备根据铸造特殊工艺,采用“PC+PMAC”的开放式数控系统架构,基于PMAC的二次开发,结合砂型加工工艺,开发出专用的数控系统软件,具有柔性化、集成化、网络化、智能化等特点,满足了铸造砂型的多品种、小批量试制件的生产需要[3]。然而,由于PMAC硬件存储空间的限制,无法满足大容量文件的下载,因此,本文提出通过将大文件拆分的方法,解决连续下载的问题。
1 基于PMAC的G代码读取
1.1 PMAC程序指令缓冲区类型
PMAC可编程多轴运动控制卡(program multiple axis controller),是美国DELTA TAU公司的产品,是集运动轴控制、PLC控制以及数据采集于一体的多功能的运动控制产品[4]。Turbo PMAC包括多种类型缓冲区:224个运动程序缓冲区(prog)、16个旋转运动程序缓冲区(rot)、16个正向运动学子程序缓冲区(forward)、16个逆向运动学子程序缓冲区(inverse)和32个未编译的PLC程序缓冲区(plc)。旋转运动程序缓冲区多用于机床G代码加工程序的执行,该缓冲区为即将执行的命令行提供存储区域,PMAC从该缓冲区读取并执行指令,在执行运动程序的同时打开缓冲区,用于从主机输入程序指令。
1.2 G代码的读取
PMAC卡允许执行机床类型的G代码程序,它将把G、M、T和D代码作为子程序调用[5]。G代码指令对应PMAC中“PROG 1000”子程序,M代码指令对应PMAC中“PROG 1001”子程序,字母“G”后面的数值对应子程序中数值“N”程序段。例如:Gxx被解释成PROG 1000的标号为Nxx000的子程序;Mxx被解释成PROG 1001的标号为Nxx000的子程序。PMAC在相应的子程序中,将G代码指令翻译成PMAC指令,用户如果要定制G代码,可以修改对应的子程序。部分G代码指令如表1所示。
2 G代码文件拆分、连续下载方法
2.1 旋转运动程序缓冲区容量限制问题
由于PMAC用于缓冲区的存储空间非常有限,用户程序存储容量大约为300KB,单个运动程序缓冲区最大容量只有50KB左右[6]。因此,一次下载的程序行数量不能超过存储容量。要解决这个问题就需要利用旋转运动程序缓冲区,它允许接收运动程序指令,每个程序指令被添加到指令列表的末尾,并覆盖掉已执行完的程序行,这样循环读取下载所需的指令行。常用的方式是在上位机软件设计中,循环读取固定行数(例如:10000行)下载到定义好的缓冲区中,设置定时器发送“PR”指令报告循环程序缓冲区中还将要被计算的程序行数,根据已执行行数判断是否需要下载新的程序行。流程图如图1所示。
表1 G代码指令转换表
图1 循环读指令行流程图
这种方式虽然可以避免内存空间不够导致的下载失败,但是“PR”指令需要实时访问并返回结果,指令读取涉及文件、字符串操作,占用了大量的内存,增加了软件的运行负担导致不稳定。鉴于以上较大容量G代码程序下载存在的问题,本文提出了将大容量G代码程序文件等大小进行分割,实现文件的连续下载的新方法。
2.2 G代码程序文件分割,连续下载技术实现
为解决上述存在的问题,提出了一种新方法,该方法将软件功能划分为实时任务和非实时任务,分为两步完成。第一步,非实时任务将G代码程序文件拆分成若干小文件,每个小文件大小在50KB左右,满足旋转运动程序缓冲区的容量要求,不会出现因文件较大超出内存限制而导致下载失败的错误。在拆分过程中,在每个文件的头部加上“CLOSE OPEN ROT”,关闭上一个旋转缓冲区,打开一个新的旋转缓冲区,在每行指令末尾加上“F(P500)M0==i”其中“P500”变量是速度设置变量,通过设置“P500”的值可以实时调节加工进给速度,“i”为行号,通过“M0”变量可以实时显示当前正在执行的行号。当写入最后一个文件时,写入“M03 M05”程序尾,关断气源,停止主轴操作。流程图如图2所示。
第二步,在上位机软件中设置定时器,调用timer1_Tick(object sender,EventArgs e)函数,实时扫描读取“M0”的值,当“M0”的值在当前文件的第600行和700行之间时,开始下载下一个文件,调用PMAC.Download(pmacNumber,fileDirectory,true,true,true,true,out downloadSuccess)函数,通过下载标志位(bool b)确保文件下载函数只执行一次,如此循环,直至全部下载执行完毕。流程图如图3所示。
图2 G代码文件拆分流程图
图3 文件连续下载流程图
2.3 PC端上位机软件开发
PC端上位机软件开发在Windows环境下采用Visual Studio 2013编程实现,将G代码文件按照每1000行为一个小文件拆分,保存在G代码文件所在的根目录下,同时利用“ListBox1”控件显示拆分后的文件目录以及每个文件的指令行。此操作均在上位机PC端运行,减轻了控制卡的运算负担。点击“程序段执行”后,系统发送“&1R”指令给PMAC控制卡,执行G代码,同时读取“M0”的值并赋值给“ListBox2”控件当前索引并高亮显示,“M0”表示系统正在执行的行号。此外,该下载方式可以选择在任意程序段开始执行程序,当程序中断时,可以根据系统记录的文件号及行号自动在中断处继续加工,还可以显示文件总数、程序行数、当前文件、执行进度、速度等状态信息,方便用户查看。如图4所示。
图4 连续下载软件界面
3 结语
针对特种设备的数控系统二次开发是开放式数控系统的最显著的优势,随着PMAC的应用越来越广泛,利用此方法可以很好地解决G代码“大”文件与PMAC“小”内存之间的矛盾,实现了G代码文件的连续、有序、稳定运行,大大提高生产效率。同时结合不同领域的工艺特点,扩展软件功能满足个性化生产的需要。