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

第三四象限直线插补计算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 。
圆弧插补(逐点比较法)20页文档

Fi<0
O Fi≥0
X Fi<0 Fi≥0
2、圆弧插补的象限处理
前面的圆弧插补(顺圆、逆圆)只限于第一象限,其他 情况如图所示: Y
O
X
16、业余生活要有意义,不要越轨。——华盛顿 17、一个人即使已登上顶峰,也仍要自强不息。——罗素·贝克 18、最大的挑战和突破在于用人,而用人最大的突破在于信任人。——马云 19、自己活着,就是为了使别人过得更美好。——雷锋 20、要掌握书,莫被书掌握;要为生而读,莫为读而生。——布尔沃
代入偏差函数,得Pi+1点的偏差为: Fi+1 = Fi-2Yi + 1
当Fi<0时,向+X方向进给一步,动点由Pi(Xi,Yi) 移动到 Pi+1(Xi +1,Yi),则新动点的坐标为 Xi+1=Xi +1
代入偏差函数,得Pi+1点的偏差为:
Fi+1 = Fi + 2Xi + 1
所以,第一象限顺时针圆弧插补加工时偏差加工的递推 公式为:
10 F9=1 -X F10=F9-2X9+1 = 0, X10=0,Y10=5 ∑=0
加工过程为: Y 5
4 3
2 1
O
1 23 45
X
(三)象限处理 1、直线插补的象限处理 前面的公式只适用于第一象限,对于其他象限直线,偏
差函数用│X│和 │Y│代替X,Y。则进给方向为:
Y Fi<0 Fi≥0 Fi≥0
X
同理,对于第一象限顺圆加工时,即B→A,当Fi≥0时, 应向-Y方向进给一步,当Fi<0时,应向+X方向进给 一步。
Y
B(Xe,Ye)
Pi(Xi,Yi)
数字积分法

Numerical Control
Date: 2006-04 File: interpolation.22
MECHINCAL ENGINEERING, TUST
Interpolation
4.数字积分法合成进给速度
V=F?
F——编程速度 v——插补合成速度
Numerical Control
Date: 2006-04 File: interpolation.23
Interpolation
数,字插积补分直法线的的特终点点是坐,标脉为冲E源(X每e产,生Ye一)个,脉则冲X,,Y作方一向次的累平加均计进算给,频如率果fx,脉f冲y为源频率为fg(Hz)
fx
Xe 2n
fg
式中 m—累加次数 。
fy
Ye 2n
fg
假设脉冲当量为(mm/脉冲),可求得X和Y方向进给速度(mm/min)
则
k(2n 1) 1
k 1 2n 1
为使上式成立,不妨取
1 k
代入得累加次数
2n
m 1 2n k
2n 2n
1
1
上式表明,若寄存器位数是n,则直线整个插补过程要进行2n 次累加才能 到达终点。
Numerical Control
Date: 2006-04 File: interpolation.10
MECHINCAL ENGINEERING, TUST
Interpolation
例 见P22页例2-4
y
B
5 4 3 2 1
0 1 2 3 4 5 Ax
Numerical Control
Date: 2006-04 File: interpolation.18
2--插补象限、圆弧走向处理以及逐点比较法合成进给速度

① F=F-2*|X|+1 ② |X|=|X|-1 SR2、NR3 N -X
① F=F+2*|Y|+1 ② |Y|=|Y|+ 1 Y SR2、NR1 N +Y -Y
① F=F+2*|X|+1 ② |X|=|X|+1 Y SR1、NR4 N +X -X
∑= ∑-1 ∑= 0 Y 结束 N
(三)圆弧过象限 直线只可能处于一个象限中,因此不存在过象限问题。但是圆弧有可能 跨越几个象限,这时需要在两象限的交接处做相应的处理,此即圆弧过象限 问题。 当圆弧过象限时,具有如下特点: ① 在过象限前后,动点坐标的符号会发生改变; ② 在过象限后,圆弧的走向不变。 逆圆弧过象限的顺序为:NR1 → NR2 → NR3 → NR4 → NR1 →• • • 顺圆弧过象限的顺序为:SR1 → SR4 → SR3 → SR2 → SR1 →• • • ③ 过象限圆弧与坐标轴必有交点,当动点处在坐标轴上时必有一个坐 标值为零。此点可以作为过象限的标志。 ④ 终点判别不能简单地直接使用前述的三种方法,否则将丢失一部分 圆弧轮廓。
Y (0,4) (1,3) Y
X
X
为减少误差,对于 F = 0 的情况,应该根据直线的具体情况,分别进行 处理。 ① 对于 |Ye|>|Xe| 的直线,约定在Y轴方向走一步; ② 对于 |Xe|>|Ye| 的直线,则约定在X轴方向走一步。 根据改进后的算法设计的直线插补流程图如下。
开始 ① F=0 ② ∑=|Xe|+ |Ye| F=0? N N F < 0 ? Y Y +X Xe > 0? N -X Y +Y Ye > 0? N -Y Y |Ye|≥|Xe|? Y Ye > 0? N -Y N
数字积分圆弧第一二三四象限顺逆插补计算

数控技术课程设计说明书设计题目:数字积分法圆弧插补计软件设计指导老师:专业:机械设计制造及其自动化班级:机姓名:学号:目录一、课程设计题目 (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),简称积分器,是在数字积分器的基础上建立起来的一种插补算法。
数字积分插补

ì D x = kxe = k (2 N - 1) < 1 ï ï í ï D y = kye = k (2 N - 1) < 1 ï î
所以
1 k< N 2 - 1
一般取
1 k< N 2
ì ï 2N - 1 ï D x = kxe = <1 ï N ï 2 ï í ï 2N - 1 ï D y = ky = <1 ï e N ï 2 ï î
Y积分器
△X
0 0 0 0 0 0 0 1 0 1 0 1 1 0 1
注 Y终
101 101 100 100 011 010 010 001 001 000 修正Yi 修正Xi 修正Yi 修正Xi 修正Yi 修正Yi 修正Yi 初始
X终
101 101 101 101 101 101 101 100 100 011 011 001 001 001 000
1
011 011
1 1 1
010 001 000
X、Y溢出 y溢出 X,Y溢出
1
011
3) DDA法圆弧插补 DDA法圆弧插补的积分表达式 由 V VX VY
R = Yi = Xi = K
Y B
VX = KYi
VY = KX i
V
Vx
Vy
P A X
令 则
Dt = 1
1 K= N 2
O
R
ì ï 1 m ïX= Yi ï N å ï 2 i= 1 ï í ï 1 m ïY = Xi ï N å ï 2 i= 1 ï î
ì D x = kxeD t ï ï í ï D y = kyeD t ï î
各坐标轴的位移量为 n t ì ï ï x= ï ò0 kxe dt = k å= 1 xeD t ï i ï í n ï ï y = t ky dt = k ï å= 1 yeD t ò0 e ï ï i î
第三章插补原理及控制方法

15
其中 tg αi= y j / xi
tgα= y e / x e
tg αi -tgα= y j / xi - y e / x e
= (x e y j – x i y e ) / x e x i
令: Fi , j xe y j xi ye 为偏差函数
y A (Xe,Ye)
M (xi,yj)
+ ΔY
N
终点? 结束
第三章 插补原理及控制方法 29
作 业
试推导逐点比较法直线插补第三象限 直线的递推公式,并画出程序流程图。
注意:1、正确设定偏差函数
2、进给运动后的坐标增量均为数值增加。
第三章 插补原理及控制方法
30
二、逐点比较法圆弧插补—第一象限
设要加工第 I 象线逆圆弧AE, M为某一时刻加 工点,其坐标为(xi , y j) 当M点在圆外时,-ΔX (Rm> R) 当M点在圆内时, + Δ Y (Rm < R) 当M点在圆上时, - Δ X (Rm= R)
第三章 插补原理及控制方法
7
※插补方法的分类
直线和圆弧是构成零件轮廓的基本线型, CNC系统都有直线插补、圆弧插补两种基本功能 。 三坐标以上联动的CNC系统中,一般还有螺 旋线插补等功能。 一些高档CNC系统中,已出现了抛物线插补 、渐开线插补、正弦线插补、样条曲线插补和球 面螺旋线插补等功能。
第三章 插补原理及控制方法
数控技术
※插补的概念
插补(Interpolation):根据给定进给速度 和给定轮廓线形的要求,在轮廓的已知点 之间,确定一些中间点的方法,这种方法 称为插补方法或插补原理。 插补技术是数控系统的核心技术。数控 加工过程中,数控系统要解决控制刀具或 工件运动轨迹的问题。刀具或工件一步步 移动,移动轨迹是一个个小线段构成的折 线,不是光滑曲线。刀具不能严格按照所 加工零件的廓形运动,而用折线逼近轮廓 线型。
二、数字积分法插补

例:插补第一象限直线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
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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”,上式简化为:这种累加求和运算,即积分运算可用数字积分器来实现,∑⎰⎰=∆===niitttydttydttfS1)()(∑==niiyS1∑∑⎰===∆−−→−∆==niinititytydttyS111)(若求曲线与坐标轴所包围的面积,求解过程如下:被积函数寄存器用以存放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 第一象限及错误提示八、课程小节通过此次课程设计,使我更好的掌握了有关数字积分法一二三四象限顺、逆圆插补计算方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考和询问,终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。