APP下载

基于VC++的数控DDA圆弧插补轨迹仿真

2012-10-12赵万军邓正华

制造业自动化 2012年5期
关键词:数控系统寄存器圆弧

赵万军,邓正华

ZHAO Wan-jun, DENG Zheng-hua

(重庆三峡学院 机械工程学院,万州 404000)

0 引言

数控插补轨迹仿真研究的目的是提高对插补算法、数控原理、数控系统软件的认识和理解,为从事数控系统维护及数控系统开发奠定基础。因此,数控插补轨迹仿真的研究方法与思路不论是对于高校学生学习数控技术课程,还是对准备进行数控系统软件开发的工程技术人员而言都具有积极意义。目前,也有学者进行了这方面的研究工作[1~3],但他们的研究主要是以直线插补为主,由于圆弧插补存在过象限问题,相较直线插补而言要复杂许多,因此上述研究文献甚少涉及圆弧插补,即使有所提及也语焉不详。有鉴于此,本文以VC++为工具,以数字积分插补法(DDA法)为例来讨论圆弧插补轨迹仿真的实现过程。

1 DDA圆弧插补的基本原理[4]

DDA法即数字积分法,它利用数字积分思想确定刀具沿各坐标轴的位移,使刀具沿着所加工的曲线进给。如图1所示的第一象限逆时针圆弧AB为例说明DDA圆弧插补原理。

图1 DDA圆弧插补

图1所示圆弧以原点为圆心,圆的方程为:

将(1)式两边对时间t求导,可得动点P沿两个坐标轴的速度分量:

由(2)式可得坐标轴方向的微小位移增量:

据(3)式可写出第一象限逆圆加工时DDA插补表达式:

式中:Δt为插补周期,可取单位时间间隔1;n为插补次数。

图2 DDA第一象限逆圆插补原理图

由此,可得DDA圆弧插补的原理如图2所示。DDA圆弧插补的基本原理可描述为:每经过一个插补周期,数控系统发出一个控制脉冲,x、y坐标被积函数寄存器的内容被送入积分累加器中累加一次,如果有溢出,则相应坐标轴方向产生一个溢出脉冲,经伺服系统驱动进给机构走过一个脉冲当量;同时更新一次x或y被积函数寄存器的值(加1或减1)。

2 VC++编程仿真DDA圆弧插补

为方便地查看DDA圆弧轨迹插补的过程,在VC++中采用了单文档结构建立插补仿真软件工程,插补过程的主要程序是在该工程视类的绘图函数OnDraw()中实现的,其VC++程序的主要流程如图3所示。

图3 圆弧轨迹插补主要流程

程序流程中一些主要问题说明如下:

圆弧的起、终点及圆心坐标等是通过一个对话框类采用编辑框控件变量由用户输入内存的,为了便于这些变量在各函数间的使用,将它们设置成全局变量,在需要用到的函数中通过外部变量extern方式引入。

定义画笔并将画笔选入设备描述表中的目的是为轨迹插补绘图准备绘线工具。

比例因子的引入和计算插补步长是为了实现插补图形的实时缩放。其基本思路是:通过设置函数OnMouseWheel()来捕捉鼠标滚轮的滚动情况,滚轮每顺或逆时针滚动一次时比例因子被赋值为2或0.5,然后用该比例因子乘以圆弧的起、终点及圆心坐标并把它们作为外部变量引入OnDraw()绘图函数,当使用者滚动鼠标滚轮时实现图形的自动缩放;将已放大或缩小的圆弧坐标值除以圆弧坐标原值可得插补步长,这样就可以使插补步长匹配缩放之后的图形。

为简化起见,插补轨迹的VC++程序是按照圆弧的圆心都在坐标原点来编写的。因此,不论待插补的圆弧圆心是否在坐标原点,都通过坐标变换的方法使圆心位于坐标原点上。坐标变换的具体方法是:将圆弧的起终点、圆心坐标均减去圆心相应方向坐标。需要注意的是:每一步插补计算完毕后在窗口中绘制插补轨迹时,需要将相应方向的圆心坐标加回来,这样才能显示出插补轨迹的正确位置。

计算圆弧起、终点与坐标轴夹角的正余旋值(sinαq、cosαq、sinαz、cosαz)是为了后续判断圆弧起终点象限之用,因为不同象限插补的方法有所差异。

插补变量的初始化主要包括:定义插补所需被积函数寄存器、积分累加器等变量,对被积函数寄存器变量赋初值和对积分累加器变量清零等。计算插补寄存器容量是为了判断积分累加器在累加过程中是否有溢出,当积分累加器中的值大于等于插补寄存器容量时会在某一坐标方向上进给一步。

图3中主要列出的是DDA圆弧插补VC++程序的前期准备部分,当判断是顺圆或逆圆插补后才转入具体的圆弧插补程序,其程序流程如图4所示。

这里以逆圆,经坐标变换后的起点在第一象限、终点在第二象限的单步插补为例说明程序编制方法,其VC++主要程序代码如下:

DDA圆弧插补程序中的四点说明:

1)上面只给出了逆圆第一象限为起点,第二象限为终点的VC++程序,顺圆插补和其它象限的情况类似处理。图4中第n、n+1、n+2…象限的数量由圆弧起终点是否跨象限和跨象限的数量决定。

2)圆弧插补中跨象限问题的处理是采用拆分圆弧的方法,程序中体现在作为for循环结束判据的x、y坐标的变化上。当跨象限时,一个坐标为0,另一个坐标的绝对值为圆弧半径。

3)在图4的程序流程和上面的程序代码中可以看到:不论x、y坐标是否等于第n象限的终点坐标,不论累加是否有溢出均执行了插补一步的“dc.LineTo((x+oyxx),(y+oyxy))”程序段。这是因为当x、y坐标等于第n象限的终点坐标或累加没有溢出时,插补这一步的起终点坐标相同,不会有实际的画笔移动,因此不会出现插补错误。

4)上面给出的是单步插补轨迹显示程序,对于连续插补的情况与上述程序基本相同,不同的是:去掉“if(i==mmm) break;”等语句。

3 插补仿真实例

当圆弧起、终点和圆心坐标(单位:象素)分别为(4,5)、(-12,-3)、(-2,-3)时的插补轨迹如图5所示。为了明确插补过程,在插补轨迹的右边还通过一个弹出式列表框显示出了每一步的坐标值和进给方向等信息。

图4 DDA圆弧插补流程

图5 DDA圆弧插补实例

4 结束语

采用开发的DDA圆弧插补轨迹仿真软件可以方便地实现圆弧插补的单步或连续轨迹显示,增强了插补的直观性。同时,VC++编程实现插补仿真的过程与数控系统实现插补的过程在原理、方法上有相通之处,这有利于更好地理解数控插补原理,对维护、开发数控系统软件也有一定的借鉴意义。

[1]钟建琳,陈秀梅,马振,等.教学用数控插补仿真系统[J].机械设计与制造,2003,(03):62-64.

[2]凡进军,刘让贤,郭紫贵,等.基于VC++数控插补仿真的研究[J].机械工程师,2010,(5):88-90.

[3]侯运鑫,张桂香,高玉龙等.基于C++ Builder的数控插补动态仿真[J].山东理工大学学报(自然科学版),2009,23(03):51-54.

[4]龚仲华.数控技术[M].北京:机械工业出版社,2005:185-187.

猜你喜欢

数控系统寄存器圆弧
浅析圆弧段高大模板支撑体系设计与应用
Lite寄存器模型的设计与实现
外圆弧面铣削刀具
二进制翻译中动静结合的寄存器分配优化方法
移位寄存器及算术运算应用
基于FANUC 32i A数控系统的外部测量设计
西门子840D sl数控系统在SC125大型车铣镗床技术改造中的应用
基于FANUC Oi mate TD数控系统的手动功能开发
数控系统中GUI软件平台设计和实现
双圆弧齿同步带的载荷特性研究