数字积分圆弧第一二三四象限顺逆插补计算

合集下载

第三四象限数字积分法插补计算报告

第三四象限数字积分法插补计算报告

第三四象限直线插补计算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 。

数控机床插补原理

数控机床插补原理
将对应的位置增量数据(如、),再与采样所获得的实际位置反馈值 相比较,求得位置跟踪误差。位置伺服软件就根据当前的位置误差 计算出进给坐标轴的速度给定值,并将其输送给驱动装置,通过电 动机带动丝杠和工作台朝着减少误差的方向运动,以保证整个系统 的加工精度。由于这类算法的插补结果不再是单个脉冲,而是一个 数字量,所以,这类插补算法适用于以直流或交流伺服电动机作为 执行元件的闭环或半闭环数控系统中。
对圆弧,提供起点、终点、顺圆或逆圆、以及圆心相对于起点的位置。为满
足零件几何尺寸精度要求,必须在刀具(或工件)运动过程中实时计算出满足 线形和进给速度要求的若干中间点(在起点和终点之间),这就是数控技术中
插补(Interpolation)的概念。据此可知,插补就是根据给定进给速度和给定
轮廓线形的要求,在轮廓已知点之间,确定一些中间点的方法,这种方法称 为插补方法或插补原理。
Xm+1=Xm+1, Ym+1=Ym
新的偏差为
Fm+1=Ym+1Xe-Xm+1Ye=Fm-Ye
若Fm<0时,为了逼近给定轨迹,应向+Y方向进给一步,走一步后新的坐标值为
Xm+1=Xm, Ym+1=Ym +1
新的偏差为
Fm+1=Fm+Xe
4. 终点判别法
逐点比较法的终点判断有多种方法,下面主要介绍两种:
直到∑为零时,就到了终点。
2.2
不同象限的直线插补计算
上面讨论的为第一象限的直线插补计算方法,其它三个象
限的直线插补计算法,可以用相同的原理获得,表5-1列出了
四个象限的直线插补时的偏差计算公式和进给脉冲方向,计 算时,公式中Xe,Ye均用绝对值。
表1-1 四个象限的直线插补计算

二、数字积分法插补

二、数字积分法插补

例:插补第一象限直线OA,起点为O( 0 , 0 ) ,终点为 A ( 5 , 3 )。取被积函数寄存器分别为JVx, JVy,余数寄存 器分别为JRx 、JRy ,终点计数器为 JE,且都是三位 二进制寄存器。试写出插补计算过程并绘制轨迹。 Y 3 2 1 O 1 2 3 4 5 X A( 5 , 3 )
∆X,∆Y同时溢出 JE=0,插补结束
110 000
加工轨迹如下:
Y 6 5 4 3 2 1 O 1 2
A( 2 , 6 )
X
(三)数字积分圆弧插补 如图所示,设加工半径为R的第一象限逆时针圆弧AB, 坐标原点定在圆心上,A(Xo,Yo)为圆弧起点,B(Xe,Ye) 为圆弧终点,Pi(Xi,Yi)为加工动点。 Y B(Xe,Ye) Pi(Xi,Yi) A(Xo,Yo) O X
插补计算过程如下:
累加 次数 (∆t) X积分器 Y积分器 终点 JVx JRx 溢出 JVy JRy 溢出 计数器 JE ∆X ∆Y
备注
0 1 2 3 4 5 6 7 8
010 000 010 010 010 100 010 110 010 000 1 010 010 010 100 010 110 010 000 1
插补计算过程如下
累加 次数 (∆t) X积分器 Y积分器 终点 JVx JRx 溢出 JVy JRy 溢出 计数器 JE ∆X ∆Y
备注
0 1 2 3 4 5 6 7 8
101 000 101 101 101 010 101 111 101 100 101 001 101 110 101 011
1 1 1 1
O ∆t
t T
若∆t取最小基本单位“1”,则上式可简化为: n-1 S=∑ Yi

数控机床DDA数字积分法插补第一象限直线,逐点比较法插补二三象限顺圆弧

数控机床DDA数字积分法插补第一象限直线,逐点比较法插补二三象限顺圆弧
3.1 程序开始运行时显示介面
3.2 执行计算
在右侧面板中有参数输入区,方式选择区以及执行按钮等操作。
若输入参数和符合要求则出现错误对话框;“参数有误”
若不选择插补对象为‘直线’或‘圆弧’直接按下‘复位’按钮会出现警示对话框提示“请选择插补对象”
注:在直线插补中,对起始点坐标和终点坐标不作要求,但步长必须不能为0;在圆弧插补中,起始点坐标必须为二三象限的点,且终止点必须在起始点下侧,这事保证圆弧为劣弧的条件之一。步长在任何情况下不能为0 。
4.2 主要算法的实现
4.2.1参数声明
起点坐标(sx,sy);终点坐标(ex,ey);
圆心坐标(cx,cy);步长bc;
4.2.2复位操作程序:
functionfw_Callback(hObject, eventdata, handles)
globalsx sy ex ey cx cy bc m vx1 vy1 rx1 ry1
3.2 执行计算……………………………………………………………5
3.3DDA法直线插补实例………………………………………………6
3.4逐点比较法插补第二三象限逆时针圆弧…………………………7
四、主要算法及源程序
4.1 程序设计概述………………………………………………………8
set(gca,'YTick',[-10:1:10]);
axis([-10 10 -10 10]);
axismanual;
ifs_1==0&&s_2==0
warndlg('请选择插补对象');
else
ifget(handles.zx,'value')
m=str2double(get(handles.m,'String'));

数字积分法插补

数字积分法插补

数字积分法插补前面提到过数字积分法插补是脉冲增量插补的一种,它是用数字积分的方法计算刀具沿各坐标轴的移动量,从而使刀具沿着设定的曲线运动。

实现数字积分插补计算的装置称为数字积分器,或数字微分器(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),累加器也称余数寄存器用于存放坐标的累加值。

第四章 插补原理

第四章 插补原理

y L2 F0 F<0 F<0 F0 L3
四象限直线偏差符号和进给方向
L1 F0 F<0 x F<0 F0 L4
由图可见,靠近Y轴区域偏差大等于零,靠近X轴区域偏差小于零。F≥0时,进 给都是沿X轴,不管是+X向还是-X向,X的绝对值增大;F<0时,进给都是沿Y轴, 不论+Y向还是-Y向,Y的绝对值增大。
v y 60f y
式中 δ—脉冲当量(mm/脉冲)。合成进给速度为
v v x 2 v y 2 60 f x2 f y2
若fx=0或fy=0时,也就是刀具沿平行于坐标轴的方向切削,这时对 应轴切削速度最大
第四章 插补原理
3.1 数字积分法的基本原理
第 三 节 数 字 积 分 法
F5 F4 2Y4 1 3 F6 F5 2 X 5 1 4
F7 F6 2Y6 1 1
F8 F7 2Y7 1 0
5. 四个象限中圆弧插补 第一象限逆圆弧CD:即Fi≥0时,走—X轴, 动点的偏差函数为
Fi 1=Fi 2 X i 1
第四章 插补原理
2.3 逐点比较法圆弧插补
第 二 节 逐 点 比 较 法
第一象限圆弧插补 流程图
例3 现欲加工第一象限顺圆弧AB,如图所示,起点A(0,4),终点B(4,0), 试用逐点比较法进行插补。
Y 4 3 2 1 B(4,0) O 1 2 3 4 X A(0,4)
表3 圆弧插补过程
步数 起点 偏差判别 坐标进给 偏差计算 坐标计算 终点判别
如图4-14所示,从t=0时
刻到t时刻,函数y=f(t) 曲线所包围的面积可表示
Y
Y=f(t)
YO

数控技术第3章(2)

数控技术第3章(2)

动点从原点出发走向终点的过程,可以看作是各坐 标轴每经过一个单位时间间隔t,分别以增量kXe及kYe 同时累加的结果。
X Y
X kX t
i e i 1 m i=1 m i e i i 1 i 1
m
m
i
Y kY t
取 ti 1(一个单位时间间隔),则 m
0.100 1 0.100 1 0.100 1 0.100 1 0.100 1 0.100 1 0.100 1 0.100
100 0.100 100+100=1 000 0.100+0.100=1.000 100+000=100 0.100+0.000=0.100 100+ 100=1 000 0.100+0.100=1.000 100+ 000=100 0.100+0.000=0.100 100+ 100=1 000 0.100+0.100=1.000 100+ 000= 100 0.100+0.000=0.100 100+ 100=1 000 0.100+0.100=1.000
(二) 数字积分法
数 字 积 分 法 又 称 数 字 微 分 分 析 法 DDA(Digital differential Analyzer),是在数字积分器的基础上建立起 来的一种插补算法。数字积分法的优点是,易于实现 多坐标联动,较容易地实现二次曲线、高次曲线的插 补,并具有运算速度快,应用广泛等特点。 如图3-15所示,设有一函数Y=f(t),求此函数在 t0~tn区间的积分,就是求出此函数曲线与横坐标t在区 间(t0,tn)所围成的面积。如果将横坐标区间段划分 为间隔为t的很多小区间,当t取足够小时,此面积 可近似地视为曲线下许多小矩形面积之和。

第4章插补原理刀补原理与速度控制

第4章插补原理刀补原理与速度控制

Fi ,i 1 F X e
X e 1
Fi 1,i F Ye F (Ye )
Ye 1
插补前将坐标数据符号与数据本体分离,用数据本体进行插补计算,由 数据符号确定坐标进给方向。
插补工作寄存器:
FR:偏差函数寄存器 LR:X坐标偏差函数递推项寄存器,存放(-Ye) MR:Y坐标偏差函数递推项寄存器,存放Xe LC: X坐标终点判别寄存器,存放X坐标应输出的脉冲总数 MC:Y坐标终点判别寄存器,存放Y坐标应输出的脉冲总数 RL: X坐标进给方向寄存器,存放X坐标数据的符号 RM:Y坐标进给方向寄存器,存放Y坐标数据的符号
贵州大学机械工程学院
第四章 插补,刀具补偿与速度控制
贵州大学机械工程学院
第一节 插补原理与程序设计 一. 插补及其算法 插补的任务就是在一段零件轮廓的起点和终点之间,计算 出若干个中间点的坐标值。 直线和圆弧是构成工件轮廓的基本线条,大多数CNC系统 都具有直线和圆弧的插补功能。高档CNC系统还具有抛物 线、螺旋线等插补功能。
若F<0, 下一步应该向+Y方向走,则: Fi,i1 X eYi 1 X iYe X eYi X iYe X e F X e Yi 1 Yi 1
插补开始
逐点比较法直线插补,每进一步需要四个节拍: 偏差判别 1,偏差判别; 2,坐标进给; 3, 偏差计算;4, 终点判别
动点沿OA匀速移动, V,Vx,Vy, 均为常数。
V V V X Y K OA X e Ye
X Vx t KX e t, Y Vy t KYe t,
直线积分插补近似表达式
X ( KX e )t , Y ( KYe )t
i 1 i 1 m m
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数控技术课程设计说明书设计题目:数字积分法圆弧插补计软件设计指导老师:专业:机械设计制造及其自动化班级:机姓名:学号:目录一、课程设计题目 (1)二、课程设计的目的 (1)三、课程设计使用的主要仪器设备 (1)四、课程设计的任务题目描述和要求 (1)五、数字积分法插补原理 (2)5.1从几何角度来看积分运算 (2)5.2数字积分圆弧插补 (3)5.3数字积分法圆弧插补程序流程图 (5)5.4插补实例 (6)六、程序清单 (7)七、软件运行效果仿真 (18)八、课程小节 (21)九、参考文献 (22)一、课程设计题目数字积分法第一、二、三、四象限顺、逆圆插补计算二、课程设计的目的《数控原理与系统》是自动化(数控)专业的一门主要专业课程,安排课程设计的目的是通过课程设计方式使学生进一步掌握和消化数控原理基本内容,了解数控系统的组成,掌握系统控制原理和方法,通过设计与调试,掌握各种功能实的现方法,为今后从事数控领域的工作打下扎实的基础。

1)了解连续轨迹控制数控系统的组成原理。

2) 掌握数字积分法(DDA)插补的基本原理。

3)掌握数字积分法(DDA)插补的软件实现方法。

三、课程设计使用的主要仪器设备1、PC计算机一台2、数控机床实验装置一台3、支持软件若干(选用VB环境)四、课程设计的任务题目描述和要求数字积分法又称数字微分分析法DDA(Digital Differential Analyzer)。

数字积分法具有运算速度快、脉冲分配均匀、易于实现多坐标联动及描绘平面各种函数曲线的特点,应用比较广泛。

其缺点是速度调节不便,插补精度需要采取一定措施才能满足要求。

由于计算机有较强的计算功能和灵活性,采用软件插补时,上述缺点易于克服。

本次课程设计具体要求如下:(1)掌握数字积分插补法基本原理(2)设计出数字积分(DDA)插补法插补软件流程图(3)编写出算法程序清单算法描述(数字积分法算法在VB中的具体实现)(4)要求软件能够实现第一、二、三、四象限顺、逆圆插补计算(5)软件运行仿真效果插补结果要求能够以图形模式进行输出五、数字积分法插补原理数字积分法又称数字积分分析法DDA(Digital differential Analyzer),简称积分器,是在数字积分器的基础上建立起来的一种插补算法。

具有逻辑能力强的特点,可实现一次、两次甚至高次曲线插补,易于实现多坐标联动。

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

直线插补时脉冲较均匀。

并具有运算速度快,应用广泛等特点。

5.1从几何角度来看积分运算如下图所示,从时刻到t 求函数曲线所包围的面积时,可用积分公式表示,如果将0~t 的时间划分成时间间隔为的有限区间,当足够小时,可得近似公式 :若△t 取“1”,上式简化为:这种累加求和运算,即积分运算可用数字积分器来实现,∑⎰⎰=∆===n i i t t ty dt t y dt t f S 100)()(∑==ni iy S 1∑∑⎰===∆−−→−∆==n i in i t i ty t y dt t y S 111)(若求曲线与坐标轴所包围的面积,求解过程如下:被积函数寄存器用以存放Y值,每当Δt 出现一次,被积函数寄存器中的Y 值就与累加器中的数值相加一次,并将累加结果存于累加器中,如果累加器的容量为一个单位面积,则在累加过程中,每超过一个单位面积,累加器就有溢出。

当累加次数达到累加器的容量时,所产生的溢出总数就是要求的总面积,即积分值。

被积函数寄存器与累加器相加的计算方法:例:被积函数寄存器与累加器均为3位寄存器,被积函数为5,求累加过程。

101 101 101 101 +)000 +)101 +)010 +)111101 010 111 100101 101 101 101 +) 100 +)001 +)110 +) 011001 110 011 000经过2 = 8次累加完成积分运算,因为有5次溢出,所以积分值等于5。

5.2对t如图所示,设加工半径为R的第一象限逆时针圆弧AB,坐标原点定在圆心上,A(Xo,Yo)为圆弧起点,B(Xe,Ye)为圆弧终点,Pi(Xi,Yi)为加工动点。

如下图所示,可以得到:V/R = Vx/Yi = Vy/Xi = K即Vx=K Yi,Vy=K Xi因而可以得到坐标微小位移增量为:ΔX=VxΔt = KYiΔt ΔY=VyΔt = KXiΔt设Δt=1,K=1/2 则有:可看出,用DDA法进行圆弧插补时,是对加工动点的坐标Xi和Yi的值分别进行累加,若积分累加器有溢出,则相应坐标轴进给一步,则圆弧积分插补器如图所示:5.3数字积分法圆弧插补程序流程图DDA法插补不同象限圆弧时,算法也有所不同。

当采用软件插补时,如果参与积分运算的寄存器均采用绝对值数据,则DDA法插补的积分累加过程完全相同,即JR+JV→JR,只是进给脉冲分配方向和圆弧插补动点坐标的修正有所不同。

5.5插补实例设有第Ⅰ象限逆圆弧SE,起点为S(4,0),终点为E(0,4),且寄存器位数N=3。

试用DDA法对该圆弧进行插补,并画出插补轨迹。

解:插补开始时,被积函数寄存器初值分别为JVX=YS=0,JVY=XS=4,终点判别寄存器JSX=|Xe-XS|=4,JSY=|Ye-YS|=4。

该圆弧插补运算过程见下表,插补轨迹如下图所示的折线。

六、程序清单Private Sub 建立坐标系_Click()Picture1.ForeColor = vbBlackPicture1.DrawWidth = 2Picture1.Line (500, 4500)-(8500, 4500) '画直线坐标轴Picture1.Line (4500, 500)-(4500, 8500)Picture1.CurrentX = 230 '当前位置Picture1.CurrentY = 4400Picture1.Print "-X" '坐标轴标注Picture1.CurrentX = 4300Picture1.CurrentY = 4300Picture1.Print "(0,0)"Picture1.CurrentX = 8650Picture1.CurrentY = 4400Picture1.Print "X"Picture1.CurrentX = 4400Picture1.CurrentY = 8600Picture1.Print "-Y"Picture1.CurrentX = 4500Picture1.CurrentY = 400Picture1.Print "Y"End SubPrivate Sub 画圆弧_Click()Dim a, b, c, d, n, m As IntegerDim r As Singlea = Val(Text1.Text)b = Val(Text2.Text)c = Val(Text3.Text)d = Val(Text4.Text)n = a * a + b * bm = c * c + d * dr = Sqr(n)If Option1.Value = True ThenIf a < 0 Or b < 0 Or c < 0 Or d < 0 Thenans = MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入", 48, "提示信息")End IfEnd IfIf Option2.Value = True ThenIf a > 0 Or b < 0 Or c > 0 Or d < 0 Thenans = MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入", 48, "提示信息")End IfEnd IfIf Option3.Value = True ThenIf a > 0 Or b > 0 Or c > 0 Or d > 0 Thenans = MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入", 48, "提示信息")End IfEnd IfIf Option4.Value = True ThenIf a < 0 Or b > 0 Or c < 0 Or d > 0 Thenans = MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入", 48, "提示信息")End IfEnd IfPicture1.ForeColor = vbRedPicture1.DrawWidth = 4Const PI = 3.1415926535If Option1.Value = True ThenIf a > c And b < d ThenIf Option1.Value = True ThenIf b = 0 ThenIf c = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 0 * 3.14159, 3.14159 / 2ElsePicture1.Circle (4500, 4500), r * 300, , 0 * 3.14159, 3.14159 / 2 - Atn(d / c) End IfElseIf c = 0 ThenPicture1.Circle (4500, 4500), r * 300, , Atn(b / a), 3.14159 / 2ElsePicture1.Circle (4500, 4500), r * 300, , Atn(b / a), 3.14159 / 2 - Atn(d / c) End IfEnd IfElseIf a < c And b > d ThenIf Option1.Value = True ThenIf a = 0 ThenIf d = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 0 * 3.14159, 3.14159 / 2ElsePicture1.Circle (4500, 4500), r * 300, , Atn(d / c), 3.14159 / 2End IfElseIf d = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 0 * 3.14159, Atn(b / a)ElsePicture1.Circle (4500, 4500), r * 300, , Atn(d / c), Atn(b / a)End IfEnd IfElseans = MsgBox("出错了,起点或终点坐标位置错误,请重新输入", 48, "提示信息")End IfEnd IfIf Option2.Value = True ThenIf a > c And b > d ThenIf Option2.Value = True ThenIf a = 0 ThenIf d = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 3.14159 / 2, 3.14159ElsePicture1.Circle (4500, 4500), r * 300, , 3.14159 / 2, 3.14159 - Atn(-d / c)End IfElseIf d = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 3.14159 / 2 + Atn(-a / b), 3.14159 ElsePicture1.Circle (4500, 4500), r * 300, , 3.14159 / 2 + Atn(-a / b), -Atn(-d / c) + 3.14159End IfEnd IfElseIf a < c And b < d ThenIf Option2.Value = True ThenIf b = 0 ThenIf c = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 3.14159 / 2, 3.14159ElsePicture1.Circle (4500, 4500), r * 300, , Atn(-c / d), 3.14159End IfElseIf c = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 3.14159 / 2, 3.14159 - Atn(-b / a) ElsePicture1.Circle (4500, 4500), r * 300, , Atn(-c / d), 3.14159 - Atn(-b / a) End IfEnd IfElseans = MsgBox("出错了,起点或终点坐标位置错误,请重新输入", 48, "提示信息")End IfEnd IfIf Option3.Value = True ThenIf a < c And b > d ThenIf Option3.Value = True ThenIf b = 0 ThenIf c = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 3.14159, 3 * 3.14159 / 2ElsePicture1.Circle (4500, 4500), r * 300, , 3.14159, Atn(d / c) + 3.14159End IfElseIf c = 0 ThenPicture1.Circle (4500, 4500), r * 300, , Atn(b / a) + 3.14159, 3 * 3.14159 / 2ElsePicture1.Circle (4500, 4500), r * 300, , Atn(b / a) + 3.14159, Atn(d / c) + 3.14159End IfEnd IfElseIf a > c And b < d ThenIf Option3.Value = True ThenIf a = 0 ThenIf d = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 3.14159, 3 * 3.14159 / 2ElsePicture1.Circle (4500, 4500), r * 300, , 3.14159 + Atn(d / c), 2 * 3.14159 / 2End IfElseIf d = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 3.14159, 3 * 3.14159 / 2 - Atn(a / b)ElsePicture1.Circle (4500, 4500), r * 300, , Atn(d / c) + 3.14159, 3 * 3.14159 / 2 - Atn(a / b)End IfEnd IfElseans = MsgBox("出错了,起点或终点坐标位置错误,请重新输入", 48, "提示信息")End IfEnd IfIf Option4.Value = True ThenIf a < c And b < d ThenIf Option4.Value = True ThenIf a = 0 ThenIf d = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 3 * 3.14159 / 2, 2 * 3.14159ElsePicture1.Circle (4500, 4500), r * 300, , 3 * 3.14159 / 2, Atn(d / c) + 3.14159 * 2End IfElseIf d = 0 ThenPicture1.Circle (4500, 4500), r * 300, , Atn(b / a) + 3.14159 * 2, 2 * 3.14159 ElsePicture1.Circle (4500, 4500), r * 300, , Atn(b / a) + 3.14159 * 2, Atn(d / c) + 3.14159 * 2End IfEnd IfElseIf a > c And b > d ThenIf Option4.Value = True ThenIf b = 0 ThenIf c = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 3 * 3.14159 / 2, 2 * 3.14159ElsePicture1.Circle (4500, 4500), r * 300, , 3 * 3.14159 / 2 + Atn(-c / d), 2 * 3.14159 End IfElseIf c = 0 ThenPicture1.Circle (4500, 4500), r * 300, , 3 * 3.14159 / 2, -Atn(-b / a)ElsePicture1.Circle (4500, 4500), r * 300, , 3 * 3.14159 / 2 + Atn(-c / d), -Atn(-b / a)End IfEnd IfElseans = MsgBox("出错了,起点或终点坐标位置错误,请重新输入", 48, "提示信息")End IfEnd IfEnd SubPrivate Sub 插补计算_Click()Dim 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 IntegerDim r As Singlea = Val(Text1.Text)b = Val(Text2.Text)c = Val(Text3.Text)d = Val(Text4.Text)ni = a * a + b * bmi = c * c + d * dr = Sqr(ni)form2.ClsIf Option1.Value = True ThenIf a < 0 Or b < 0 Or c < 0 Or d < 0 Thenans = MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入", 48, "提示信息")End IfEnd IfIf Option2.Value = True ThenIf a > 0 Or b < 0 Or c > 0 Or d < 0 Thenans = MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入", 48, "提示信息")End IfEnd IfIf Option3.Value = True ThenIf a > 0 Or b > 0 Or c > 0 Or d > 0 Thenans = MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入", 48, "提示信息")End IfEnd IfIf Option4.Value = True ThenIf a < 0 Or b > 0 Or c < 0 Or d > 0 Thenans = MsgBox("出错了,起点、终点坐标不在同一象限内,请重新输入", 48, "提示信息")End IfEnd Ifci = 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 IfIf Option1.Value = True ThenIf a > c And b < d Thenk = -1Elsek = 1End IfEnd IfIf Option2.Value = True ThenIf a > c And b > d Thenk = -1ElseEnd IfEnd IfIf Option3.Value = True ThenIf a > c And b < d Thenk = -1Elsek = 1End IfEnd IfIf Option4.Value = True ThenIf a > c And b > d Thenk = -1Elsek = 1End IfEnd Ifxi = xi - 1End IfEnd IfIf yi > 0 Then 'Y方向判断jry = jry + jvyIf jry >= l Then '判断寄存器是否溢出 jry = jry - l '溢出修正If jry >= l Then '寄存器位数判断GoTo ww5End IfIf Option1.Value = True ThenIf a > c And b < d Thenm = 1Elsem = -1End IfEnd IfIf Option2.Value = True ThenIf a < c And b < d Thenm = 1Elsem = -1End IfEnd IfIf Option3.Value = True ThenIf a > c And b < d ThenElsem = -1End IfEnd IfIf Option4.Value = True ThenIf a < c And b < d Thenm = 1Elsem = -1End IfEnd 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 & " " & yiGoTo wz2End IfIf xi = 0 And yi <> 0 And f < 0 ThenPrint " " & n & " " & jvx & " " & " " & " " & "" & " " & "" & " " & jvy & " " & jry & " " & m & " " & yiGoTo 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 & " " & "停止"GoTo wz2End 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.Value = True ThenIf a > c And b < d And k = -1 Thenjvy = jvy - 1ElseIf a > c And b < d And m = 1 Thenjvx = jvx + 1ElseIf a < c And b > d And k = 1 Thenjvy = jvy + 1ElseIf a < c And b > d And m = -1 Thenjvx = jvx - 1End IfEnd IfIf Option2.Value = True ThenIf a > c And b > d And k = -1 Thenjvy = jvy + 1ElseIf a > c And b > d And m = -1 Thenjvx = jvx - 1ElseIf a < c And b < d And k = 1 Thenjvy = jvy - 1ElseIf a < c And b < d And m = 1 Thenjvx = jvx + 1End IfEnd IfIf Option3.Value = True ThenIf a > c And b < d And k = -1 Thenjvy = jvy + 1ElseIf a > c And b < d And m = 1 Thenjvx = jvx - 1ElseIf a < c And b > d And k = 1 Thenjvy = jvy - 1ElseIf a < c And b > d And m = -1 Thenjvx = jvx + 1End IfEnd IfIf Option4.Value = True ThenIf a > c And b > d And k = -1 Thenjvy = jvy - 1ElseIf a > c And b > d And m = -1 Thenjvx = jvx + 1ElseIf a < c And b < d And k = 1 Thenjvy = jvy + 1ElseIf a < c And b < d And m = 1 Thenjvx = jvx - 1End IfEnd IfPicture1.Line (4500 + 300 * ai, 4500 - bi * 300)-(4500 + 300 * (ai + k), 4500 - (bi + m) * 300) ai = ai + kbi = 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 SubPrivate Sub 清除_Click()Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""Text5.Text = ""Option1.Value = FalseOption2.Value = FalseOption3.Value = FalseOption4.Value = FalsePicture1.Clsform2.ClsEnd SubPrivate Sub 退出_Click()EndEnd Sub七、软件运行效果仿真1 进入2 第三象限3第二象限4 第四象限5 第一象限及错误提示八、课程小节通过此次课程设计,使我更好的掌握了有关数字积分法一二三四象限顺、逆圆插补计算方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考和询问,终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。

相关文档
最新文档