直线插补数字积分法第三、第四象限汇编
- 格式:doc
- 大小:205.85 KB
- 文档页数:15
第三四象限直线插补计算1. 引言随着微电子技术,计算机技术的发展,数控机床的性能不断完善,其应用范围也不断增大。
而数控技术作为数控机床的关键技术,越来越得到更多高校的重视。
2.数字积分法直线插补原理设将要加工的直线XOY 平面内第一象限直线OE ,如图.一所示,直线起点在坐标原点,终点为E (Xe ,Ye )。
同样,假设坐标值均为以脉冲当量为单位的整数。
图.一若此时刀具在两坐标轴上的进给速度分量分别是Vx ,Vy ,则刀具在X 轴,Y 轴方向上位移增量分别是△X = Vx △t 式一a△ Y = Vy △t 式一b由图.一 所示的几何关系可得V/OE=Vx/Xe=Vy/Ye=K (常数) 式二将式二中的Vx ,Vy 分别代入式一 可得:△X = KXe △t 式三a△ Y = KYe △t 式三b可见刀具由原点O 走向E 的过程,可以看作式每经过一个单位时间间隔△t ,就分别以增量[KXe],[ KYe]同时在两个坐标轴累加的结果。
也可以这样认为,数字积分法插补实际上就是利用速度分量,进行数字积分来确定刀具在各坐标轴上位置的过程,即XO当取△ti=“1”(一个单位时间间隔)则X = nKXe 式五aY = nKYe 式五b设经过n 次累加后,刀具正好到达终点E(Xe,Ye),则要求式五中常量满足 下式nK=1 式六n 是累加次数必须取整数,所有K 取小数。
为了保证每次分配给坐标轴的进给脉冲不超过一个单位,则△ X=KXe<1 式七a△ Y=KYe<1 式七b上式中Xe ,Ye 的最大允许值受系统中相应寄存器容量的限制。
现假设寄存器 为N 位则容量为2N ,对应存储的最大允许数字量为(2N - 1)将其带入式七得 K<=1/(2N - 1) 式八现不妨取 K =1/2N 式九显然它满足式七,式八的约束条件,再将K 值代入式六可得累加次数为 n =2N 式十如果将n ,K,值代入式五则动点坐标为X = nKXe =Xe 式十一aY = nKYe =Ye 式十一b根据以上分析,在进行直线插补时,先开辟两个被积函数寄存器Jvx ,Jvy 分别存放终点坐标值Xe ,Ye ,还有两个余数寄存器Jrx ,Jry 。
数字积分法(DDA)插补直线参考程序Sub 插补X()标志X = 0If 余数X >= Q Then余数X = 余数X Mod Qx动点= x动点+ 1: 标志X = 1 End IfEnd SubSub 插补Y()标志Y = 0If 余数Y >= Q Then余数Y = 余数Y Mod Qy动点= y动点+ 1: 标志Y = 1End IfEnd SubSub 插补Z()标志Z = 0If 余数Z >= Q Then余数Z = 余数Z Mod Qz动点= z动点+ 1: 标志Z = 1 End IfEnd SubSub 插补公共()余数X = 余数X + x终点余数Y = 余数Y + y终点余数Z = 余数Z + z终点插补X插补Y插补Z插补记录= 插补记录+ 1End SubSub 插补()Dim c As Integer插补记录= 0: 余数X = 0: 余数Y = 0: 余数Z = 0: 划轮廓线PSet (z原点, x原点), vbRedSelect Case 象限标志Case 1: '第一象限插补Do Until 插补记录= Q插补公共Line -Step(z步长×标志Z, x步长×标志X), vbRedLoopCase 2: '第二象限插补c = x终点: x终点= z终点: z终点= -cc = x步长: x步长= z步长: z步长= -cDo Until 插补记录= Q插补公共Line -Step(x步长×标志X, z步长×标志Z), vbRed LoopCase 3: '第三象限插补x终点= -x终点: z终点= -z终点x步长= -x步长: z步长= -z步长Do Until 插补记录= Q插补公共Line -Step(z步长×标志Z, x步长×标志X), vbRed LoopCase 4: '第四象限插补c = x终点: x终点= -z终点: z终点= cc = x步长: x步长= -z步长: z步长= cDo Until 插补记录= Q插补公共Line -Step(x步长×标志X, z步长×标志Z), vbRed LoopEnd SelectEnd Sub。
数字积分法插补前面提到过数字积分法插补是脉冲增量插补的一种,它是用数字积分的方法计算刀具沿各坐标轴的移动量,从而使刀具沿着设定的曲线运动。
实现数字积分插补计算的装置称为数字积分器,或数字微分器(Digital Differential Analyzer, DDA),数字积分器可以用软件来实现。
数字积分器具有运算速度快,脉冲分配均匀,可以实现一次、二次曲线的插补和各种函数运算,而且易于实现多坐标联动,但传统的DDA 插补法也有速度调节不方便,插补精度需要采取一定措施才能满足要求的缺点,不过目前CNC 数控系统中多采用软件实现DDA 插补时,可以很容易克服以上缺点,所以DDA 插补是目前使用范围很广的一种插补方法。
它的基本原理可以用图4.1所示的函数积分表示,从微分几何概念来看,从时刻0到时刻t 求函数y=f(t)曲线所包围的面积时,可用积分公式: (4.1)如果将0~t 的时间划分成时间间隔为Δt 的有限区间,当Δt 足够小时,可得近似公式:(4.2)式中y i-1为t=t i-1时f(t)的值,此公式说明:积分可以用数的累加来近似代替,其几何意义就是用一系列小矩形面积之和来近似表示函数f(t)下面的面积,t y d t f S ni i t t ∆==∑⎰=-110)(⎰=t t d t f S 0)(如果在数字运算时,用取Δt 为基本单位“1”,则4.2式可以简化为:∑=-=n i i y S 11(4.3)如果系统的基本单位Δt 设置得足够小,那么就可以满足我们所需要的精度。
一般地,每个坐标方向需要一个被积函数寄存器和一个累加器,它的工作过程可用图4.2表示:图 4.2 一个坐标方向上的积分器示意图Fig 4.2 Sketch of DDA in one coordinate direction图4.1 数字积分原理Fig 4.1 Principle of DDA被积函数寄存器用以存放坐标值f(t),累加器也称余数寄存器用于存放坐标的累加值。
数字积分插补法的直线插补误差数字积分插补法是现代数控技术中的重要方法之一。
具体来说,它是通过对给定的曲线信息进行处理,得到一系列机床控制指令,在保证加工精度和效率的同时,实现曲线的准确加工。
然而,在数字积分插补法中,由于其数值计算的本质和机床的机械特性,直线插补误差是无法避免的。
本文将探讨数字积分插补法的直线插补误差,包括其成因、影响因素、解决方法等内容,旨在为制造业相关从业者提供一定的参考和指导。
1.直线插补误差的成因直线插补误差是数字积分插补法中常见的问题之一,其主要成因包括以下几个方面:1)数值计算误差:数字积分插补法是通过对给定的曲线信息进行插值得到指令进行控制,其中涉及到大量的数值计算。
由于计算机计算精度等方面的局限性,数值计算的精度和误差会影响到插补结果的准确性。
2)机床动态特性:机床本身具有一定的刚度、质量以及振动等动态特性,这些特性会导致机床加工时出现一定的误差。
尤其在高速运动和高精度加工时,机床的动态特性和误差更加明显。
3)刀具和工件特性:刀具和工件的特性直接影响到机床加工的准确性,例如刀具磨损、工件变形等都会导致加工误差的发生。
2.直线插补误差的影响因素直线插补误差的大小与许多因素有关,主要包括以下几点:1)直线段的长度和方向:直线段的长度和方向决定了机床加工时所需的时间和加工路线,从而影响插补的起始和终止点以及运动轨迹。
2)机床加工速度和精度:机床加工速度和精度直接决定了加工的渐进过程和目标精度。
对于运动速度和加工精度要求高的工件,直线插补误差影响更大。
3)刀具磨损和工件变形:刀具磨损和工件变形会导致机床加工的实际轮廓和理论轮廓不一致,从而影响插补结果的准确性。
4)数值计算方法和误差分析:数值计算方法和误差分析技术对插补结果的精度和准确性影响很大。
3.直线插补误差的解决方法针对直线插补误差的影响因素,我们可以采取一些解决方法来尽可能地减小误差,这些方法包括以下几个方面:1)数值计算方法的改进:通过提高计算精度和准确度等方式改进数值计算方法,可以减小误差。
程序清单Private Sub 建立坐标系_Click()Picture1.ForeColor = vbBlackPicture1.DrawWidth = 2Picture1.Line (500, 1000)-(8500, 1000) '画直线坐标轴Picture1.Line (4500, 1000)-(4500, 5000)Picture1.CurrentX = 230 '当前位置Picture1.CurrentY = 900Picture1.Print "-X" '坐标轴标注Picture1.CurrentX = 4300Picture1.CurrentY = 800Picture1.Print "(0,0)"Picture1.CurrentX = 8650Picture1.CurrentY = 900Picture1.Print "X"Picture1.CurrentX = 4400Picture1.CurrentY = 5100Picture1.Print "-Y"Picture1.Line (500, 1000)-(600, 950) '箭头Picture1.Line (500, 1000)-(600, 1050)Picture1.Line (8500, 1000)-(8400, 950)Picture1.Line (8500, 1000)-(8400, 1050)Picture1.Line (4500, 5000)-(4450, 4900)Picture1.Line (4500, 5000)-(4550, 4900)End SubPrivate Sub 画圆弧_Click()Dim a, b, c, d, n, m As IntegerDim r As Singlea = V al(Text1.Text)b = V al(Text2.Text)c = V al(Text3.Text)d = V al(Text4.Text)n = a * a + b * bm = c * c + d * dr = Sqr(n)Picture1.ForeColor = vbRedPicture1.DrawWidth = 4If Option1.V alue = True ThenConst PI = 3.1415926535Picture1.Circle (4500, 1000), 300 * r, , PI, -3 * -PI / 2End IfIf Option2.V alue = True ThenPicture1.Circle (4500, 1000), 300 * r, , -3 * -PI / 2, 0 * PIEnd IfEnd SubPrivate Sub 清除_Click()Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Option1.V alue = FalseOption2.V alue = FalsePicture1.ClsForm1.ClsEnd SubPrivate Sub 插补计算_Click()If Not (Option1.V alue = True Or Option2.V alue = True) Thenans = MsgBox("出错了,请选择象限", 48, "提示信息")End IfDim a, b, c, d, ni, mi, ai, bi, ci, k, f, g, m, n, l, i, xs, yx, xe, ye, jvx, jvy, xi, yi As Integer Dim r As Singlea = V al(Text1.Text)b = V al(Text2.Text)c = V al(Text3.Text)d = V al(Text4.Text)ni = a * a + b * bmi = c * c + d * dr = Sqr(ni)Form1.Clsci = 2f = 1g = 1k = 0 '正X进给标志1 正向-1负向m = 0 '负Y进给标志 1 正向-1负向n = 0 '累加次数i = CInt(Text5) '寄存器位数赋给il = 2 ^ ixs = CInt(Text1)ys = CInt(Text2)xe = CInt(Text3)ye = CInt(Text4)jvx = Abs(CInt(Text2))jvy = Abs(CInt(Text1))jrx = 0jry = 0xi = Abs(CInt(Text3) - CInt(Text1)) 'X方向总步yi = Abs(CInt(Text4) - CInt(Text2)) 'Y方向总步长ai = xsbi = ysPicture1.ForeColor = vbGreenPicture1.DrawWidth = 3Form1.CurrentX = 200Form1.CurrentY = 200Print " " & " X积分器" & " Y积分器" Form1.CurrentX = 100Form1.CurrentY = 400Print "累加次数n" & " jvx " & "Jrx=Jrx+Jvx" & " △X " & "J∑x" & " Jvy" & " Jry=Jry+Jvy" & " △Y " & " J∑y "Form1.CurrentX = 100Form1.CurrentY = 600Print " 开始" & "" & jvx & " " & jrx & "" & k & " " & xi & " " & jvy & " " & jry & " " & m & " " & yiwz: k = 0 'X方向进给标志1 X正向进给-1负向进给m = 0 'Y方向进给标志 1 Y正向进给-1负向进给If xi > 0 Then 'X方向判断jrx = jrx + jvxIf jrx >= l Then '判断寄存器是否溢出jrx = jrx - l '溢出修正If jrx >= l Then '寄存器位数判断GoTo ww5End Ifk = -1 '负X方向进给xi = xi - 1 'X方向总步长减1End IfEnd IfIf yi > 0 Then 'Y方向判断jry = jry + jvyIf jry >= l Then '判断寄存器是否溢出jry = jry - l '溢出修正If jry >= l Then '寄存器位数判断GoTo ww5End IfIf Option1.V alue = True Then '第三象限m = 1 '正Y方向进给ElseIf Option2.V alue = True Then '第四象限m = -1 '负Y方向进给End Ifyi = yi - 1 'Y方向总步长减1End IfEnd Ifn = n + 1 '累加次数加1Form1.CurrentX = 100Form1.CurrentY = 600 + n * 200If xi = 0 Or yi = 0 ThenIf xi = 0 And yi <> 0 And f = 0 ThenPrint " " & n & " " & jvx & " " & "停止" & " " & "" & " " & "" & " " & jvy & " " & jry & " " & m & " " & yi GoTo wz2End IfIf xi = 0 And yi <> 0 And f < 0 ThenPrint " " & n & " " & jvx & " " & " " & " " & "" & " " & "" & " " & jvy & " " & jry & " " & m & " " & yi GoTo wz2End IfIf xi <> 0 And yi = 0 And g = 0 ThenPrint " " & n & "" & jvx & " " & jrx & "" & k & "" & xi & " " & jvy & " " & "停止"GoTo wz2End IfIf xi <> 0 And yi = 0 And g < 0 ThenPrint " " & n & "" & jvx & " " & jrx & "" & k & "" & xi & " " & jvyGoTo wz2End IfIf xi = 0 And yi = 0 And f = 1 And g < 0 ThenPrint " " & n & "" & jvx & " " & jry & " " & k & "" & xi & " " & jvyGoTo wz2End IfIf xi = 0 And yi = 0 And f < 0 And g = 1 ThenPrint " " & n & " " & jvx & " " & " " & " " & "" & " " & "" & " " & jvy & " " & jry & " " & m & " " & yiGoTo wz2End IfIf xi = 0 And yi = 0 And f = 0 And g = 0 ThenPrint " " & n & " " & jvx & " " & "停止" & " " & "" & " " & "" & " " & jvy & " " & "停止"End IfIf xi = 0 And yi = 0 And f = 0 And g < 0 ThenPrint " " & n & "" & jvx & "" & "停止" & " " & k & " " & xi & " " & jvy & ""GoTo wz2End IfIf xi = 0 And yi = 0 And f < 0 And g = 0 ThenPrint " " & n & " " & jvx & " " & " " & " " & "" & " " & "" & " " & jvy & " " & "停止"GoTo wz2End IfEnd IfPrint " " & n & " " & jvx & "" & jrx & "" & k & " " & xi & " " & jvy & " " & jry & " " & m & " " & yiwz2: If xi = 0 Thenf = f - 1End IfIf yi = 0 Theng = g - 1End IfIf xi = 0 And yi = 0 Thenci = ci - 1If ci = 0 ThenGoTo wz3End IfEnd IfIf Option1.V alue = True ThenIf k = -1 Then '负X方向进给jvy = jvy + 1End IfIf m = 1 Then '正Y方向进给jvx = jvx - 1End IfEnd IfIf Option2.V alue = True ThenIf k = -1 Then '负X方向进给jvy = jvy - 1End IfIf m = -1 Then '负Y方向进给jvx = jvx + 1End IfEnd IfPicture1.Line (4500 + 300 * ai, 1000 - bi * 300)-(4500 + 300 * (ai + k), 1000 - (bi + m) * 300)bi = bi + mGoTo wzww3: Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Text1.SetFocusww5: Form1.Clsans = MsgBox("出错了,寄存器位数偏小,请输入", 48, "提示信息")Text5.Text = ""Text5.SetFocusww4:wz3:End Sub。
目录一、课程设计目的 (3)二、课程设计使用的主要仪器及软件设备 (3)三、课程设计题目描述和要求 (3)四、课程设计报告内容 (3)4.1数字积分法直线插补的基本原理 (4)4.1.1从几何角度来看积分运算 (4)4.1.2数字积分法在轮廓插补中的具体应用(数字积分法直线插补) (5)4.2插补终点判别的具体实现 (7)4.3插补器的组成 (7)4.4提高插补精度的措施 (7)4.5减少误差的方法 (7)4.6数字积分法直线插补框图 (7)4.7 数字积分法直线(第三四象限)插补程序 (9)五结论 (13)六实验总结 (13)七程序运行图 (15)一、课程设计目的1)了解连续轨迹控制数控系统的组成原理。
2) 掌握数字积分法(DDA)插补的基本原理。
3)掌握数字积分法(DDA)插补的软件实现方法。
二、课程设计使用的主要仪器及软件设备Pc计算机一台Vb三、课程设计的任务题目描述和要求数字积分法又称数字微分分析法DDA(Digital Differential Analyzer)。
数字积分法具有运算速度快、脉冲分配均匀、易于实现多坐标联动及描绘平面各种函数曲线的特点,应用比较广泛。
其缺点是速度调节不便,插补精度需要采取一定措施才能满足要求。
由于计算机有较强的计算功能和灵活性,采用软件插补时,上述缺点易于克服。
本次课程设计具体要求如下:(1)掌握数字积分插补法基本原理(2)设计出数字积分(DDA)插补法插补软件流程图(3)编写出算法程序清单算法描述(数字积分法算法在VB中的具体实现)(4)要求软件能够实现第一第二象限直线插补计算(5)软件运行仿真效果插补结果要求能够以图形模式进行输出四、课程设计报告内容插补运算就是运用特定的算法对工件加工轨迹进行运算并根据运算结果向相应的坐标发出运动指令的过程。
插补运算可以采用数控系统硬件或数控系统软件来完成。
硬件插补器:速度快,但缺乏柔性,调整和修改都困难。
软件插补器:速度慢,但柔性高,调整和修改都很方便。
早期硬件数控系统:采用由数字逻辑电路组成的硬件插补器; CNC 系统:采用软件插补器,或软件、硬件相结合的插补方式。
4.1数字积分法直线插补的基本原理数字积分法是利用数字积分的方法,计算刀具沿各坐标轴的位移,使得刀具沿着所加工的轮廓曲线运动利用数字积分原理构成的插补装置称为数字积分器,又称数字微分分析器(Digital Differential Analyzer ),简称DDA 。
数字积分器插补的最大优点在于容易实现多坐标轴的联动插补、能够描述空间直线及平面各种函数曲线等。
因此,数字积分法插补在轮廓数控系统中得到广泛的应用。
4.1.1从几何角度来看积分运算积分运算就是求出函数Y = f (t )曲线与横轴所围成的面积,从t =t0到tn 时刻,函数Y= f (t )的积分值可表述为⎰⎰==n n tt tt dt)t (Ydt S 00f如果进一步将t ∈[t0,tn]Δt 的小区间,当Δt 足够小时,函数Y 的积分可用下式近似表示tY Ydt S n i i tt n ∆∑⎰-=≈=1在几何上就是用一系列的小矩形面积之和来近似表示函数f (t )以下的积分面积。
进一步如果在式中,取Δt 为基本单位“1”,则上式可演化成数字积分器算式:∑-==1n i iY S由此可见,通过假设Δt =“1”,就可将积分运算转化为式所示的求纵坐标值的累加运算。
若再假设累加器容量为一个单位面积值,则在累加过程中超过一个单位面积时立即产生一个溢出脉冲。
这样,累加过程所产生的溢出脉冲总数就等于所求的总面积,即所求的积分值。
下面就以直线和圆弧轨迹为例详细介绍4.1.2数字积分法在轮廓插补中的具体应用(数字积分法直线插补) 设将要加工的直线XOY 平面内第一象限直线OE ,如图.一所示,直线起点在坐标原点,终点为E (Xe ,Ye )。
同样,假设坐标值均为以脉冲当量为单位的整数。
图4.1若此时刀具在两坐标轴上的进给速度分量分别是Vx ,Vy ,则刀具在X 轴,Y 轴方向上位移增量分别是△X = Vx △t 式1-1 △ Y = Vy △t 式1-2由图4.1 所示的几何关系可得V/OE=Vx/Xe=Vy/Ye=K (常数) 式2YXVyVxE (Xe ,Ye )V O将式2中的Vx ,Vy 分别代入式一 可得:△X = KXe △t 式3-1 △ Y = KYe △t 式3-2可见刀具由原点O 走向E 的过程,可以看作式每经过一个单位时间间隔△t ,就分别以增量[KXe],[ KYe]同时在两个坐标轴累加的结果。
也可以这样认为,数字积分法插补实际上就是利用速度分量,进行数字积分来确定刀具在各坐标轴上位置的过程,即当取△ti=“1”(一个单位时间间隔)则X = nKXe 式5-1 Y = nKYe 式5-2设经过n 次累加后,刀具正好到达终点E(Xe,Ye),则要求式五中常量满足 下式nK=1 式6n 是累加次数必须取整数,所有K 取小数。
为了保证每次分配给坐标轴的进给脉冲不超过一个单位,则△ X=KXe<1 式7-1 △ Y=KYe<1 式7-2上式中Xe ,Ye 的最大允许值受系统中相应寄存器容量的限制。
现假设寄存器 为N 位则容量为2N,对应存储的最大允许数字量为(2N- 1)将其带入式七得K<=1/(2N- 1) 式8 现不妨取 K =1/2N 式9显然它满足式七,式八的约束条件,再将K 值代入式六可得累加次数为 n =2N 式10如果将n ,K,值代入式五则动点坐标为X = nKXe =Xe 式11-1 Y = nKYe =Ye 式11-2根据以上分析,在进行直线插补时,先开辟两个被积函数寄存器Jvx ,Jvy 分别存放终点坐标值Xe ,Ye ,还有两个余数寄存器Jrx ,Jry 。
然后,当脉冲源每发送一个控制脉冲信号△t ,X 轴积分器和Y 轴积分器各累加一次。
当累加结果超过余数寄存器容量(2N- 1)时,就产生一个溢出脉冲△x (或△y )。
这样,经过2N次累加后,每个坐标轴溢出脉冲总数就等于该轴被积函数值(Xe 和Ye ),从而控制刀具到达终点E 。
∑ni=1X=△Xi =∑ni=1△Yi =Y=∑ n∑ ni=1 i=1KXe △ti 式4-1KYe △ti 式4-24.2插补终点判别的具体实现直线插补时不论被积函数有多大,对于N位寄存器。
必须累加2N次才能到达终点。
因此可以用一容量为2N的寄存器当计数器,来统计累加的次数。
可以用加1计数器,也可以用减1计数器。
采用加1计数器时,首先将计数器清零,运算过程中每来一个累加脉冲△t就加1。
当计数器满2N时表明运算完成。
采用减1计数器时,运算前把总运算次数2N送入计数器,每运算一次,就减去1。
当计数器减为0时,表明运算完成。
4.3插补器的组成二坐标DDA直线插补器包括X积分器和Y积分器,每个积分器都由被积函数寄存器Jvx(速度存寄器)和累加器Jrx(余数寄存器)组成。
初始时,X被积函数寄存器存Xe(或Xe/2N ),Y被积函数寄存器存Ye(或Ye/2N)。
4.4提高插补精度的措施对于DDA圆弧插补,径向误差可能大于一个脉冲当量,因数字积分器溢出脉冲的频率与被积函数寄存器中的数值成正比,在坐标轴附近进行累加时,一个积分器的被积函数值接近零,而另一个积分器的被积函数接近于最大值,累加时后者连续溢出,前者几乎没有,两个积分器的溢出脉冲频率相差很大,致使插补轨迹偏离给定圆弧距离较大,使圆弧误差增大。
4.5减少误差的方法1、减小脉冲当量,误差减少,但寄存器容量增大,累加次数增加。
而且要获得同样的进给速度,需要提高插补速度。
2、累加器预置数累加器中预置0.5,即被积函数寄存器中的初值增大后,可以提前溢出脉冲。
4.6数字积分法直线插补框图DDA直线插补软件的实现思路也是硬件逻辑关系来完成的。
DDA直线插补软件流程图如图4-2 所示DDA直线插补过程中使用的累加表达式为累加值 = 被积函数寄存器 + 余数寄存器一旦累加结果超过了寄存器的容量时,就会产生溢出,发出一个脉冲信号,并控制相应的坐标轴进给一步。
在软件实现过程中,也可以直观的认为余数寄存器为小数部分寄存器,与进 位位Cy 之间存在一个小数点。
具体表示为图4-2进位位Cy 位(1位)余数寄存器(N 位).小数点4.7数字积分法直线(第三四象限)插补程序Private Sub Command1_Click()xe = CInt(Text1)ye = CInt(Text2)Picture1.ForeColor = vbBlackPicture1.DrawWidth = 2If Option1.Value = True And Option2 = False ThenIf xe <= 0 And ye <= 0 ThenPicture1.Line (5500, 50)-(5500, 5500)Picture1.Line (5500, 5500)-(5530, 5400)Picture1.Line (5500, 5500)-(5470, 5400)Picture1.Line (5500, 50)-(50, 50)Picture1.Line (50, 50)-(150, 20)Picture1.Line (50, 50)-(150, 80)Picture1.CurrentX = 5600Picture1.CurrentY = 40Picture1.Print "(0,0)"Picture1.CurrentX = 100Picture1.CurrentY = 100Picture1.Print "-x"Picture1.CurrentX = 5600Picture1.CurrentY = 5400Picture1.Print "-Y"For i = 1 To -xePicture1.Line (5500 - i * 500, 50)-(5500 - i * 500, 100)Next iFor J = 1 To -yePicture1.Line (5500, 50 + J * 500)-(5400, 50 + J * 500)Next JPicture1.Line (5500, 50)-(5500 + 500 * Int(Text1), 50 - 500 * Int(Text2)) Elseans = MsgBox("出现出错!请检查!", 48, "提示信息")Picture1.ClsText1.Text = ""Text2.Text = ""Text3.Text = ""End IfElseIf Option2.Value = True And Option1 = False ThenIf xe >= 0 And ye <= 0 ThenPicture1.ForeColor = vbBlackPicture1.DrawWidth = 2Picture1.Line (50, 50)-(5500, 50)Picture1.Line (5500, 50)-(5400, 80)Picture1.Line (5500, 50)-(5400, 20)Picture1.Line (50, 50)-(50, 5500)Picture1.Line (50, 5500)-(20, 5400)Picture1.Line (50, 5500)-(80, 5400)Picture1.CurrentX = 60Picture1.CurrentY = 40Picture1.Print "(0,0)"Picture1.CurrentX = 5700Picture1.CurrentY = 100Picture1.Print "x"Picture1.CurrentX = 80Picture1.CurrentY = 5400Picture1.Print "-Y"For i = 1 To xePicture1.Line (50 + i * 500, 50)-(50 + i * 500, 100)Next iPicture1.PrintFor J = 1 To -yePicture1.Line (50, 50 + J * 500)-(100, 50 + J * 500)Next JPicture1.ForeColor = vbBlackPicture1.DrawWidth = 2Picture1.Line (50, 50)-(50 + 500 * Int(Text1), 50 - 500 * Int(Text2)) Elseans = MsgBox("出现出错!请检查", 48, "提示信息")End IfEnd IfEnd SubPrivate Sub Command2_Click()n = Int(Text3)k = 0m = 0xi = 0yi = 0xe = CInt(Text1)ye = CInt(Text2)Jvx = xeJvy = yeJrx = 0Jry = 0H = 2 ^ n - 1Picture1.ForeColor = vbRedPicture1.DrawWidth = 2If xe <= 0 And ye <= 0 ThenIf Option1 = True ThenPrint "累加次数 " & " X 积分器 " & " Y 积分器 " & " 终点判别 "Print " n " & " Jvx " & " Jrx " & "- X " & " Jvy " & " Jry " & "- Y " & " J"For i = 1 To 2 ^ nJrx = Jrx + Abs(Jvx)If Abs(Jrx) >= 2 ^ n ThenJrx = Abs(Jrx) - 2 ^ nk = 1xi = xi + 1End IfJry = Jry + Abs(Jvy)If Abs(Jry) >= 2 ^ n ThenJry = Abs(Jry) - 2 ^ nm = 1yi = yi + 1End IfIf k = 1 And m = 1 ThenPicture1.Line (5500 - 500 * (xi - 1), 50 + ((yi - 1) * 500))-(5500 - 500 * (xi),50 + (yi) * 500)ElseIf k = 1 And m = 0 ThenPicture1.Line (5500 - 500 * (xi - 1), 50 + (yi) * 500)-(5500 - 500 * (xi), 50 + (yi)* 500)ElseIf k = 0 And m = 1 ThenPicture1.Line (5500 - 500 * xi, 50 + (yi - 1) * 500)-(5500 - 500 * xi, 50 + (yi)* 500)End IfForm1.FontSize = 12Print " " & Left(CStr(i) & " ", 3) & " " & Left(CStr(Jvx) & " ", 3) &" " & Left(CStr(Jrx) & " ", 3) & " " & k & " " & Left(CStr(Jvy) & " ", 3) & " " & Left(CStr(Jry) & " ", 3) & " " & m; " " & Left(CStr(H)& " ", 3)k = 0m = 0H = H - 1Next iElse: ans = MsgBox("出现出错!请检查", 48, "提示信息")End IfElseIf xe >= 0 And ye <= 0 ThenIf Option2 = True ThenPrint "累加次数 " & " X 积分器 " & " Y 积分器 " & " 终点判别 "Print " n " & " Jvx " & " Jrx " & "+ X " & " Jvy " & " Jry" & "- Y " & " J"For i = 1 To 2 ^ nJrx = Jrx + JvxIf Jrx >= 2 ^ n ThenJrx = Jrx - 2 ^ nk = 1xi = xi + 1End IfJry = Jry + Abs(Jvy)If Abs(Jry) >= 2 ^ n ThenJry = Abs(Jry) - 2 ^ nm = 1yi = yi + 1End IfIf k = 1 And m = 1 ThenPicture1.Line (50 + 500 * (xi - 1), 50 + ((yi - 1) * 500))-(50 + 500 * (xi), 50 + (yi) * 500)ElseIf k = 1 And m = 0 ThenPicture1.Line (50 + 500 * (xi - 1), 50 + (yi) * 500)-(50 + 500 * (xi), 50 + (yi) * 500)ElseIf k = 0 And m = 1 ThenPicture1.Line (50 + 500 * xi, 50 + (yi - 1) * 500)-(50 + 500 * xi, 50 + (yi) * 500) End IfPrint " " & Left(CStr(i) & " ", 3) & " " & Left(CStr(Jvx) & " ", 3) & " " & Left(CStr(Jrx) & " ", 3) & " " & k & " " & Left(CStr(Jvy) & " ", 3) & " " & Left(CStr(Jry) & " ", 3) & " " & m; " " & Left(CStr(H) & " ", 3)k = 0m = 0H = H - 1Next iElse: ans = MsgBox("出现出错!请检查", 48, "提示信息")End IfEnd IfIf Text3.Text = "" Thenans = MsgBox("出现出错!请检查", 48, "提示信息")ElseIf xe = "" Thenans = MsgBox("出现出错!请检查", 48, "提示信息")ElseIf ye = "" Thenans = MsgBox("出现出错!请检查", 48, "提示信息")End IfEnd SubPrivate Sub Command3_Click()Text1.Text = ""Text2.Text = ""Text3.Text = ""Picture1.ClsOption1 = FalseOption2 = FalseForm1.ClsEnd SubPrivate Sub Command4_Click()EndEnd Sub五结论本次设计运用软件插补程序进行插补控制,调整和修改都很方便,而且数字积分法插补运算速度快,脉冲分配均匀,易于实现多坐标联动及描绘平面各种函数曲线的特点。