当前位置:文档之家› 逐点比较法插补的连续轨迹控制设计

逐点比较法插补的连续轨迹控制设计

综合设计课程设计设计要求1 设计要求1.1 设计要求(1)设计出逐点比较法插补软件流程图;(2)编写出逐点比较法插补程序;(3)要求用软件能够实现任意象限圆弧(G03)的插补计算;(4)要求软件能够处理特殊轮廓的插补,例如坐标中任意圆弧等;(5)插补结果要求能够以图形模拟进行输出。

2 设计目的2.1 设计目的(1)了解连续轨迹控制数控系统的组成原理;(2)了解逐点比较法插补的基本原理;(3)掌握逐点比较法插补的软件实现方法。

3 总体方案比较3.1 各多种方案的特点第一:采用逐点比较法插补。

逐点比较法的基本原理是被控对象在按要求的轨迹运动时,每走一步都要与规定的轨迹进行比较,由此结果决定下一步移动的方向。

逐点比较法既可以作直线插补又可以作圆弧插补。

这种算法的特点是,运算直观,插补误差小于一个脉冲当量,输出脉冲均匀,而且输出买成速度变化小,调节方便,因此在两坐标数控机床中应用较为普遍第二:数学积分法插补。

又称为微分分析法。

这种插补方法可实现一次、二次、甚至高次曲线的插补,也可以实现多坐标联动控制。

只要输入不多的几个数据,就能加工出圆弧等形状较为复杂的轮廓曲线。

作直线插补时,脉冲分配也较均匀。

第三:数据采样插补。

数据采样插补实际上是一种粗插补过程,它所产生的微小线段仍然比较大,必须进一步对其密化(即精插补)。

粗插补算法比较复杂,综合设计课程设计多CPU结构CNC系统硬件原理图大多用高级语言编制;精插补算法比较简单,多用汇编语言或硬件插补器实现。

3.2 方案选择根据课题要求,对逆圆插补。

根据两种方案的比较,都是很好的方法,但由于圆是二次,用采用逐点比较法插补进行设计比较方便、简单,所以根据各种插补方法的特点,选择用逐点比较法来实现。

4 多CPU结构CNC系统硬件原理图4.1 CNC系统原理图图4.1 共享总线的多CPU结构的CNC系统结构框图4.2 原理图极其说明共享总线机构,只有主模块有权控制系统的总线,在某一时刻只能有一个猪模块占有总线。

共享总线结构的模块之间的通行,主要依靠存储器的实现,采用公共存储器的方式。

共享存储器结构,采用多端口存储器来实现各CPU之间的互连和通信,每个端口配有一套数据、地址、控制线,以端口访问,由多端控制逻辑电路解决访问冲突。

管理模块:该模块是管理和组织整个CNC系统工作的模块,主要功能包括:初始化、中断管理、总线裁决、系统出错识别和处理、系统硬件与软件诊断等;插补模块:该模块用于在插补完成前,进行零件程序的译码、刀具补偿、坐标位移量计算、进给速度处理等预处理,然后进行插补计算,并给顶各坐标轴的位置值;位置控制模块:对坐标位置给定值与由位置检测到的实际位置值进行比较并获得差值,进行自动加减、回基准点、对伺服系统滞后量进行监视和漂移补偿,然后得到速度控制的模块电压,去驱动进给电动机;PLC 模块:零件程序的开关量(S 、M 、T )和机床面板来的信号在这个模块中进行逻辑处理,实现机床电器的启、停控制,刀具交换,转台分度,工件数量和运转时间的次数等;命令与数据输入/输出模块;指零件程序、参数和数据,各种操作指令的输入/输出,以及显示所需要的各种接口电路;存储器模块:指程序和数据的主存储器,或功能模块数据传送用的共享存储器5 逐点比较法直线插补原理逐点比较法的基本原理是被控对象在按要求的轨迹运动时,每走一步都要与规定的轨迹进行比较,由此结果决定下一步移动的方向。

逐点比较法既可以作直线插补又可以作圆弧插补。

这种算法的特点是,运算直观,插补误差小于一个脉冲当量,输出脉冲均匀,而且输出买成速度变化小,调节方便,因此在两坐标数控机床中应用较为普遍。

5.1 逐点比较法圆弧插补原理加工一个圆弧,很容易令人想到用加工点到圆心的距离与该圆弧的名义半径相比较来反映加工偏差。

设要加工图3-1所示的第一象限逆时针走向的圆弧AB ,半径为R ,以圆点为圆心,起点坐标为A(0x ,0y ),在xy 坐标平面第一象限中,点(,)i j P x y 的加工偏差有以下3种情况。

若加工点(,)i j P x y 正好落在圆弧上,则下式成立,即2222200i j x y x y R +=+= 若加工点(,)i j P x y 落在圆弧外侧,则P R R >,即222200i j x y x y +>+若加工点(,)i j P x y 落在圆弧内侧,则P R R <,即222200i j x y x y +<+将上面各式分别改写为下列形式,即222200()()0i j x y x y -+-= (在圆弧上) 222200()()0i j x y x y -+-> (在圆弧外侧) 222200()()0i j x y x y -+-< (在圆弧外侧)取加工偏差判别式为2222,00()()i j i j F x y x y =-+-若点(,)i j P x y 在圆弧外侧或圆弧上,则满足,0i j F ≥的条件时,向x 轴发出一负向运动的进给脉冲()x -∆;若点(,)i j P x y 在圆弧内测,即满足条件,0i j F <的条件时,则向y 轴发出一正向运动的进给脉冲()y +∆。

为了简化偏差判别式的运算,仍用递推法来推算下一步新的加工偏差。

设加工点(,)i j P x y 在圆弧外侧或圆弧上,则加工偏差为2222,00()()0i j i j F x y x y =-+-≥故x 轴必须向负方向进给一步()x -∆,移动到新的加工点1(,)i j P x y +,其加工偏差为222222221,0000(1)21i j i j i i j F x x y y x x y y x +=--+-=-++--,21i j i F x =-+…………………………………………(5-1)设加工点(,)i j P x y 在圆弧的内测,则,0i j F <。

那么y 轴须向正向进给一步()y +∆,移到新的加工点1(,)i j P x y +,其加工偏差为222222221,0000(1)21i j i j i j j F x x y y x x y y y +=-++-=-+-+-,21i j i F y =++…………………………………………(5-2)根据式(3-)及式(3-)可以看出,新的加工点的偏差值可以用前一点的偏差值递推出来。

递推法把圆弧偏差运算式由平方运算化为加法和乘2运算,而对二进制来说,乘2运算是容易实现的。

5.2 圆弧插补的运算过程圆弧插补的运算过程与直线插补的过程基本一样,不同的是,圆弧插补时,动点坐标的绝对值总是一个增大,另一个减小。

如对于第一象限逆圆来说,动点坐标的增量公式为11i i x x +=- 11i i y y +=+圆弧插补运算每进给一步也需要偏差判别、进给、偏差计算、终点判别四个工作节拍,运算中F 寄存偏差值为,i j F ;x 和y 分别寄存x 和y 动点的坐标值,开始分别存放0x 和0y ;n 寄存终点判别值:00e e n x x y y =-+-5.3 节拍控制和运算程序的流程图圆弧插补的节拍控制:综上所述,逐点比较法圆弧插补的全过程,每走一步都要进行以下四个节拍,如图5-2所示。

第一节拍——偏差判别:判断道具当前位置相对于给定的轮廓的偏差情况,以此决定道具移动的方向;第二节拍——进给:根据偏差判断结果,控制道具相对于工件轮廓进给一步,即向给定的轮廓靠拢,减小偏差;第三节拍——偏差计算:由于道具进给已经改变了位置,因此应计算出道具当前位置的新偏差,为下次判别做准备;第四节拍——终点判别:判别刀具是否已到达被加工轮廓的终点。

若已经到达终点,则停止插补;若还未到达终点则继续插补。

如此不断重复上述四个节拍就可以加工出所要加工的轮廓。

5.3圆弧插补的象限处理与坐标交换5.3.1圆弧插补的象限处理上面仅讨论了第一象限的逆圆弧插补,实际上圆弧所在的象限不同,顺逆不同,则插补公式和进给方向均不同。

逆圆插补有四种情况,如图5-3所示。

现将逆圆弧插补的四种情况的偏差计算及进给方向列于表3-1中,其中R表示圆弧,N表示逆时针,四个象限分别用数字1、2、3、4标注,例如NR1表示第一象限逆圆。

表5-1 xy平面内逆圆插补的进给方向与偏差计算线型偏差偏差计算进给方向与坐标NR1 0F≥F←F+2x+1x←x+1x +∆NR1 0F<NR2 0F≥F←F-2x+1x←x-1x -∆NR2 0F<NR3 0F≥F←F+2y+1y←y+1y +∆NR3 0F<NR4 0F≥F←F-2y+1y←yx-1y +∆NR4 0F<5.3.2圆弧自动过象限所谓圆弧自动过象限,是指圆弧的起点和终点不在同一象限内,如图3-4所示。

为实现一个程序段的完整功能,需设置圆弧自动过象限功能。

要完成过象限的功能,首先应判别何时过象限。

过象限有一显著特点,就是过象限时刻正好是圆弧与坐标轴相交的时刻,因此在两个坐标值中必有一个为零,判断是否过象限只要检查是否有坐标值为零即可。

过象限后,,圆弧线型也改变了,但过象限时象限的转换是有一定规律的。

当圆弧起点在象限时,逆时针圆弧过象限后转换顺序NR1→NR2→NR3→NR4→NR1,每过一次象限,象限顺序号加1,当从第四象限向第一象限过象限时,象限顺序号从4变去。

6 软件结构设计6.1 逐点比较法圆弧插补的程序设计方案为了直观显示数控插补程序,必须动态的描述道具从起点A到终点B的过程中位置变化情况,现选用Visual Basic来设计插补过程。

使用窗体和控件设置程序的界面。

6.2程序实现方法根据插补的要求,该程序首先要判断加工圆弧的象限,然后通过偏差判断——进给——偏差计算——判别终点完成圆弧插补,其工作过程如图4-1所示。

6.3程序界面设计该程序运行时首先要输入插补直线的起点和终点X、Y坐标以及圆心坐标、半径值,点击“确定”按钮,再点击“模拟”按钮后进行模拟,点击“退出”按钮,即可退出程序界面,若需要继续进行下一次模拟,则可以点击“重新开始”按钮,继续输入下一组数据进行模拟。

其有关控件设置如表6-1所示,工作界面设计如图6-2所示,某一圆弧插补的运行界面如图6-3所示。

表6-1程序控件设计图6-2 工作界面设计图图6-3 圆弧插补运行界面图6.4程序代码设计Dim n, xa, ya, x(1000), y(1000), f(1200), j, k, p, i, R, x0, y0 Private Sub Command1_Click()Label1.Visible = False '控制各个控件的可见性Label2.Visible = FalseLabel3.Visible = FalseLabel4.Visible = FalseLabel5.Visible = FalseLabel6.Visible = FalseLabel7.Visible = FalseLabel8.Visible = FalseLabel9.Visible = FalseLabel10.Visible = TrueLabel11.Visible = TrueText1.Visible = FalseText2.Visible = FalseText3.Visible = FalseText4.Visible = FalseText5.Visible = FalseText6.Visible = FalseText7.Visible = FalseForm1.Cls '清除窗体中的内容x(0) = Val(Text1.Text) '将文本框1中输入的坐标值赋给x(0) y(0) = Val(Text3.Text) '将文本框2中输入的坐标值赋给y(0) xa = Val(Text2.Text) '将文本框3中输入的坐标值赋给xa ya = Val(Text4.Text) '将文本框4中输入的坐标值赋给ya x0 = Val(Text5.Text) '将文本框5中输入的坐标值赋给x0 y0 = Val(Text6.Text) '将文本框6中输入的坐标值赋给y0 R = Val(Text7.Text) '将文本框7中输入的坐标值赋给RIf Abs(x(0)) < Abs(y(0)) Then '将最大的坐标值赋给pp = Abs(y(0))Elsep = Abs(x(0))End IfIf p < Abs(xa) Thenp = Abs(xa)End IfIf p < Abs(ya) Thenp = Abs(ya)End IfIf p > 0 Then '判断起点和终点是否都在坐标原点 Scale (-1.1 * p, 1.2 * p)-(1.1 * p, -1.1 * p) '建立窗体的坐标系Line (-1.1 * p, 0)-(1.1 * p, 0) '画x轴轴线Line (0, 1.1 * p)-(0, -1.1 * p) '画y轴轴线Label5.Left = 0.05 * pLabel5.Top = pLabel6.Top = -0.05 * pLabel6.Left = 1.05 * pElse '起点和终点都在坐标原点时弹出注意信息框 MsgBox "起点坐标和终点都是坐标原点,请点击“重新开始”按钮重新输入!", vbOKOnly, "注意"End Ifn = Abs(ya - y(0)) + Abs(xa - x(0)) '插补的总步数Circle (x0, y0), R '画出需要插补的圆Command2.Enabled = TrueEnd SubPrivate Sub Command2_Click() '模拟按钮Command2.Enabled = Falsef(0) = 0For i = 0 To n - 1If (x(0) > 0) And (y(0) >= 0) Then '起点第一象限If f(i) >= 0 Then '偏差大于0时,向x负方向走一步 For j = x(i) To x(i) - 1 Step -0.0001PSet (j, y(i)), 255 '用红色的点画直线Next jx(i + 1) = x(i) - 1 '下一点的坐标和偏差计算y(i + 1) = y(i)f(i + 1) = f(i) - 2 * x(i) + 1For j = y(i) To y(i) + 1 Step 0.0001PSet (x(i), j), 255 '用红色的点画直线Next jy(i + 1) = y(i) + 1 '下一点的坐标和偏差计算x(i + 1) = x(i)f(i + 1) = f(i) + 2 * y(i) + 1End IfEnd IfIf (x(0) >= 0) And (y(0) > 0) Then '起点第二象限If f(i) < 0 Then '偏差小于0时,向x负方向走一步 For j = x(i) To x(i) - 1 Step -0.0001PSet (j, y(i)), 255 '用红色的点画直线Next jx(i + 1) = x(i) - 1 '下一点的坐标和偏差计算y(i + 1) = y(i)f(i + 1) = f(i) - 2 * x(i) + 1Else '偏差大于0时,向y负方向走一步 For j = y(i) To y(i) - 1 Step -0.0001PSet (x(i), j), 255 '用红色的点画直线Next jy(i + 1) = y(i) - 1 '下一点的坐标和偏差计算x(i + 1) = x(i)f(i + 1) = f(i) - 2 * y(i) + 1End IfEnd IfIf (x(0) < 0) And (y(0) <= 0) Then '起点第三象限If f(i) >= 0 Then '偏差大于0时,向x正方向走一步For j = x(i) To x(i) + 1 Step 0.0001PSet (j, y(i)), 255 '用红色的点画直线Next jx(i + 1) = x(i) + 1 '下一点的坐标和偏差计算y(i + 1) = y(i)f(i + 1) = f(i) + 2 * x(i) + 1For j = y(i) To y(i) - 1 Step -0.0001PSet (x(i), j), 255 '用红色的点画直线Next jy(i + 1) = y(i) - 1 '下一点的坐标和偏差计算x(i + 1) = x(i)f(i + 1) = f(i) - 2 * y(i) + 1End IfEnd IfIf (x(0) >= 0) And (y(0) < 0) Then '起点第四象限If f(i) < 0 Then '偏差小于0时,向x正方向走一步 For j = x(i) To x(i) + 1 Step 0.0001PSet (j, y(i)), 255 '用红色的点画直线Next jx(i + 1) = x(i) + 1 '下一点的坐标和偏差计算y(i + 1) = y(i)f(i + 1) = f(i) + 2 * x(i) + 1Else '偏差大于0时,向y正方向走一步 For j = y(i) To y(i) + 1 Step 0.0001PSet (x(i), j), 255 '用红色的点画直线Next jy(i + 1) = y(i) + 1 '下一点的坐标和偏差计算x(i + 1) = x(i)f(i + 1) = f(i) + 2 * y(i) + 1End IfEnd IfNext iEnd SubPrivate Sub Command3_Click() '退出按钮EndEnd SubPrivate Sub Command4_Click() '重新开始按钮Form1.Cls '清除窗体上的内容Label1.Visible = True '控制各个控件的可见性Label2.Visible = TrueLabel3.Visible = TrueLabel4.Visible = TrueLabel5.Visible = TrueLabel6.Visible = TrueLabel7.Visible = TrueLabel8.Visible = TrueLabel9.Visible = TrueLabel10.Visible = FalseLabel11.Visible = FalseText1.Visible = TrueText2.Visible = TrueText3.Visible = TrueText4.Visible = TrueText5.Visible = TrueText6.Visible = TrueText7.Visible = TrueCommand2.Enabled = FalseEnd Sub7 设计小结本次设计采用了一种用计算机来模拟数控插补的方法,在充分利用VB设计语言的简单直观的基础上,使数控插补原理的实现更加形象化。

相关主题