高档数控系统的螺旋线插补算法设计.doc_第1页
高档数控系统的螺旋线插补算法设计.doc_第2页
高档数控系统的螺旋线插补算法设计.doc_第3页
高档数控系统的螺旋线插补算法设计.doc_第4页
高档数控系统的螺旋线插补算法设计.doc_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

南京工程学院 自动化学院 本科毕业设计(论文) 题目:高档数控系统的螺旋线插补算法设计专 业: 自动化(数控技术) 班 级: K 数控101 学 号: 240101222 学生姓名: 茆宇星 指导教师: 孟书云 起迄日期: 2014.22014.6 设计地点: 工程实践中心 Graduation Design (Thesis)Design of Helical Interpolation Algorithm for High-Level CNC SystemByMAO YuxingSupervised byProf. MENG ShuyunSchool of Automation Nanjing Institute of TechnologyJune, 2014南京工程学院康尼学院本科毕业设计(论文)摘 要本课题主要是研究基于数据采样法进行螺旋曲线的插补研究,要求能够更加精确的进行插补。本课题采用vc环境下的OpenGL软件的调试,并实现。主要的工作如下:1) 理解数控机床螺旋曲线插补的原理以及实现的方法2) 通过vc下OpenGL软件实现上述的算法3) 完成螺旋曲线以及螺旋曲线的插补的仿真以及测试关键词:vc;OpenGL;螺旋曲线;插补 ABSTRACT The main topic is the study of spiral curve interpolation studies based on data sampling method, requires the ability to be more accurate interpolation. This paper uses OpenGL vc environment software debugging and implementation. The main work is as follows: 1.Understand the principles of CNC machine tools and a spiral curve interpolation method implementation 2.Achieve the above algorithm vc OpenGL software under 3.Completion of the helical spiral curve and the curve interpolation simulation and testingKeywords:vc; OpenGL;Spiral curve ;chab目 录第一章 绪论11.1 引言11.2 数据采样插补算法21.3 本文的结构3第二章 数据采样法插补原理分析42.1 数据采样法工作原理42.2 插补周期与位置控制周期42.3 插补周期与精度,速度之间的关系5第三章 基于数据采样法螺旋线插补原理分析83.1数据采样法螺旋线插补原理83.1.1直接函数法内接弦线法(螺旋线X,Y轴算法)93.1.2 螺旋线Z轴插补算法103.2 本设计采用的算法11第四章 仿真软件的设计134.1 开发工具的选择134.1.1 OpenGL简介134.1.2 OpenGL特点134.1.3 OpenGL功能144.2 VC环境下添加OpenGL的编程步骤154.3 插补仿真功能的实现16第五章 结论195.1论文总结195.2 感悟19致 谢20参考文献21附录22II南京工程学院康尼学院本科毕业设计(论文)第一章 绪论1.1 引言根据零件图编写出数控加工程序后,通过输入设备将其传送到数控装置的内部,然后经过数控系统控制软件的译码和预处理,就开始针对刀具补偿计算后的刀具中心轨迹进行插补运算处理。插补是整个数控软件系统中极其重要的功能模块之一,其算法的选择将直接影响到系统的加工精度、加工速度和加工能力等。在数控机床的加工过程中,刀具只能以折线的方式去逼近将要加工的轮廓曲线,所以它运动轨迹并不是光滑的曲线。在实现轮廓控制,就必须以实时计算出零件所满足的形状和进给速度要求,介于起点与终点之间的N个中间点的坐标,这些都可以通过插补的算法来获取。所谓插补,就是根据零件的轮廓尺寸大小,结合精度、工艺的等方面的要求,在已知刀具中心的轨迹线中的转接点之间插入N个中间点的过程。换句话来说,就是“数据点的密化过程”,其对应的算法算法称为插补算法。中间点的获得是根据相应的算法由数控软件系统或者硬件的自动完成,并以此来协调控制各个坐标轴的运动,从而获得要求的运动轨迹路线。在早期的硬件数控系统中,插补过程是由专门的数字逻辑电路完成的。而在计算机数控系统(CNC)中,既可全部由软件实现,也可由软件、硬件结合实现。显然,硬件插补的速度快,但电路复杂,并且调整和修改都相当困难,缺乏柔性;而软件插补的速度虽然慢一些,但调整很方便,特别是目前计算机处理速度的不断提高,为缓和速度矛盾创造了有利条件。常见零件轮廓的形状有直线、圆弧、抛物线、自由曲线等。但其中直线和圆弧是构成被加工零件轮廓的基本线行,所以绝大多数数控系统都具有直线和圆弧插补功能。数控加工程序中一般都要提供直线的起点和终点坐标、圆弧的起点和终点坐标,圆弧走向(顺园/逆圆)、圆心相对于起点的偏移量或圆弧半径等。另外,还要根据机床参数和工艺要求给出刀具长度、刀具半径和主轴转速、进给速度等。具体来说,插补的任务就是根据进给速度的要求,计算出每一段零件轮廓起点与终点之间所插入中间点的坐标值。但是,为了避免坐标值计算过程中可能遇到的三角函数、 乘、除以及开方等运算,一般都采用迭代算法,这样也为插补的实时处理创造了有利条件。随着相关学科特别是计算机领域的迅速发展,插补的算法也在不断地完善和更新中。由于插补速度直接影响到数控系统的运行速度,而插补精度又直接影响整个数控系统的插补精度,因此,人们在努力探求一种可以计算速度快并且精度又高的插补方法。但是很不幸,插补速度与插补精度之间是互相的制约和互相的矛盾,这时必须进行折衷的选择。目前为止,已涌现出了大量的插补算法。1.2 数据采样插补算法数据采样插补(又称为时间插补)算法是根据数控机床加工程序编写进给速度,先将零件轮廓曲线按照插补的周期分割为一些首尾相互连接的微小的直线段,然后输出的这些微小直线段所对应的位置增量,用以伺服控制系统实现坐标轴的进给。与脉冲的增量与插补的算法相比,数据采样的插补算法结果不再是单个的脉冲,而是位置的增量。这类型的插补算法适用于直流或交流的伺服电动机作为执行元件中的闭环或半闭环的数控系统。在数控采样插补数控系统过程中,每用一次插补程序,就能计算出本次插补周期内各个坐标轴的位置增量变化,据以此求得各坐标轴相对应的位置,并与采样所获得的实际位置进行比较,从而获得位置跟踪误差的变化。伺服位置控制软件则根据当前的位置误差计算出进给坐标轴的进给速度,随后输出至驱动装置,通过执行机构带动机床移动部件朝着减小误差的方向运动,以确保整个系统的加工获得的精度。数控系统是一个多任务控制装置,它不仅有插补运算任务,而且还应完成数控加工程序编制,存储,收集运行状态数据,监视机床等其他数控功能。因此,要求插补运算仅占用插补周期的部分时间。当CNC系统选用数据采样插补算法时,特别是当插补频率较低,大约在50-125HZ时,插补周期约为8-20ms,一般要求插补程序占用的时间不大于计算机在一个插补周期工作机时的30%-405,以便在余下的时间内,计算机可以去做其他工作。在这种插补频率下,数控系统可达到的最大轨迹速度10m/min以上,也就是说数据采样插补程序的运行已不再是限制加工速度的主要因素。加工速度的上限将取决于圆弧轮廓插补过程中的弦线误差以及伺服系统的动态响应特性.数控技术的发展与计算机领域的发展是息息相关的,特别是20世纪80年代后微型计算机的出现,给数控技术注入新活力,基于微型计算机的数控系统技术已成为现代数控系统的主流产品。为了进一步提高系统性能,克服系统在速度和精度之间的问题,人们提出了一些切实可行的方案来弥补。1) 采用软/硬件相配合的两极插补方案在这样的数控系统中,为了减轻数控装置插补的负担,将整个插补任务分为两步骤完成。即先用插补的软件先将加工零件轮廓段按插补的算法周期为(10-20ms),分割成N个微小直线段这个过程是粗插补。随后就利用附加的硬件插补器件对粗插补输出的的微小直线段再做进一步的细分插补,形成一簇单位的脉冲输出,这个过程称为精插补。当然,精插补同样也可以用软件来实现。粗插补将完成插补任务过程中绝大部分的工作计算量,而占用的时间却比用一级插补软件方案少得多,这样可缓和实时插补与多任务控制之间的问题。2) 采用多个cpu进行分布式处理方案首先将数控系统的全部功能划分为几个子功能模块模块,每个子功能模块配置一个独立的cpu来完成相应的功能,然后通过系统软件来进行协调每个cpu之间的工作方式。3)采用一台高性能的微型计算机方案采用高性能微型计算机来完成整个数控系统的软件加工功能。目前32位和64位的微型计算机技术已经十分的成熟,其处理速度可达到2.5GHZ以上,综合性能已经超过原来的小型计算机。可以见得,将它们应用于数控系统中十分适合,并且现在已经有这种系统上市了11。1.3 本文的结构本文以高档数控机床的螺旋曲线插补的研发工程项目作为应用背景,对数据采样法插补技术进行了研究。全文共分为五章,各章的主要内容如下:第一章扼要地介绍了轮廓插补原理的概念、特点与相关研究背景;第二章研究了螺旋曲线插补的方法和思路;第三章对如何进行螺旋曲线插补算法的实现进行了研究,给出了基于OpenGL软件和VC+编程的控制方案,并讨论了螺旋曲线要用数据采样法的设计方法;第四章对于仿真软件的设计实例和界面介绍;第五章总结了全文的研究工作,给出了存在的问题和进一步研究的方向。第2章 数据采样法插补原理分析2.1 数据采样法工作原理随着数控系统中引入计算机,大大地缓解了插补运算的时间和计算其中复杂性的矛盾,特别的是研制成功了高性能直流伺服系统和交流伺服系统的,为提高现代数控系统的综合性能提供了充分的条件。同时,在这些现代数控系统中采用的插补方法,已经不再是最初硬件的数控系统中所使用的脉冲增量方法,而是结合了计算机思想的数据采样法。所谓数据采样法,就是利用一系列的首尾相互连接的微小直线段来逼近给定的曲线。由于这些线段是按照加工时间来分割,因此,数据采样法又被称为“时间分割法”。一般的来讲,分割后所得到的微小的直线段的过程被称是粗插补,将微小直线段进一步密化的过程称为精插补。通过两者紧密配合,即可实现高性能的零件轮廓插补11。一般情况下,数据采样插补法中的粗插补是由软件的模拟来实现。由于粗插补可能涉及到一些比较的复杂函数运算方式,因此,大多数都采用高级的语言来完成。而精插补算法大多都采用前面介绍的脉冲增量法,因为它既可由软件来实现,也可由硬件来实现。由于脉冲增量法的运算较简单,所以软件实现的时大多采用汇编语言完成。2.2 插补周期与位置控制周期所谓插补周期(Ts),是指两个相邻的微小直线段之间的插补时间间隔;而所谓位置控制周期(Tc),则是指数控系统中的伺服位置环采样的控制时间间隔。对于给定的数控系统来说,插补的周期、位置控制的周期是两个固定不变的时间参数。通常情况取TsTc,目的是便于系统内部软件控制的处理。当Ts与Tc不相等时,一般都要求Ts是Tc的整数倍。这是由于插补运算比较的复杂,处理时间长;而位置环数数字控制的算法简单,处理时间短。因此,每次插补运算的结果可供位置环很多次使用。现假设编程的速度为F,插补周期Ts,则可求得插补分割后的微小直线段的长度为。插补周期Ts对系统的稳定性没有影响,但是对于被加工轮廓的轨迹误差是有影响。位置控制周期Tc不仅对系统的稳定性而且对于轮廓误差均有影响。所以,在Ts的选择时,主要从插补的精度方面进行考虑,而Tc的选择则需要从伺服系统稳定性、动态跟踪误差这两个方面加以考虑。一般的情况下,插补周期Ts时间越长,插补计算的误差就会越大。因此,单从减小插补计算误差的角度去考虑,则希望插补的周期Ts越小越好。但是另一方面,Ts也不能太过于小。由于数控系统在进行控制轮廓插补的同时,其数控装置中的CPU不仅要完成插补运算,而且还必须进行处理一些其他的任务,例如位置误差的计算。显示,监控,I/O处理等等。因此,Ts不单单是指CPU完成插补运算所需要的时间,而且还必须留出一部分的时间来用于执行其他相关的数控任务。由此可以看出,要求的插补周期Ts必须大于插补运算的时间和完成其他相关的任务所需时间总和。据相关资料的介绍,数控系统数据采样法插补周期一般都不大于20ms,使用较多的一般都在10ms左右。例如美国AB公司的7360数控系统中Ts=10.24ms;德国SIEMENS公司的System-7数控系统中Ts=8ms。但随着cpu处理速度的提高,想要获得更高的插补精度,插补的周期也会越来越小。数控系统位置控制周期的选择一般有两个方式:一种是Tc=Ts,如7360系统中Tc=Ts=10.24ms;另一种是Ts为Tc的整数倍。如system-7数控系统中Ts=8ms,Tc=4ms,即插补周期是位置控制周期的2倍。插补程序每8ms就调用一次,计算出该周期内各个坐标轴的相应进给增量,而位置控制程序每4ms将插补计算增量的一半作为该位置去控制周期的位置给定,也就是说,每个插补周期计算出来的坐标增量均分两次送给伺服系统去执行。这样的话,在不改变计算机运行速度的前提下,可以提高位置环的采样频率,使得进给速度变化较为的平缓,提高了系统的动态性能。一般来讲,位置控制周期Tc取值的范围一般都在4-20ms之间。2.3 插补周期与精度,速度之间的关系在数据采样法的直线插补过程中,由于给定轮廓的本身就是一条直线,因此插补分割后的N个小直线段在给定直线的理论上是重合的,也就是不存在插补误差的问题。但在圆弧插补过程中,一般都采用切线法,内接弦线法和割线法来逼近圆弧,显然,这些微小的直线段是不可能完全与圆弧相重合,从而造成了轮廓插补的误差。下面就以弦线逼近法做为实例来加以分析。 图2.1 内接弦线逼近圆弧如图2-1所示弦线逼近圆弧的插补情况,其最大径向误差为: (2-1)式中 被插补圆弧半径(mm); 步距角,即每个插补周期所走过的弦线对应的圆心角,其值为: (2-2)反过来,在给定的所允许的最大的径向误差后,也可以求出最大步距角为: (2-3)由于很小,现将按幂级数展开,有: (2-4)若取上式的前两项,代入式得: (2-5)由式可以看出,在圆弧线插补过程中,插补误差与被插补圆弧半径R成反比,与插补周期Ts以及编程进给速度F的平方成正比。即Ts越长,F越大,R越小,圆弧的插补误差就会越大;反之,误差就会越小。在对于给定的圆弧轮廓以及插补误差中,Ts尽可能选小一些,以便获得较高的进给速度F,提高了加工效率,进一步当插补周期,插补误差不变时,被加工圆弧轮廓的曲率半径越大,其允许使用的切削速度就越高。第三章 基于数据采样法的螺旋曲线插补3.1数据采样法螺旋线插补原理具有螺旋线插补功能的数控系统在编制加工程序时,通常采用如下类似指令并指定X 轴与Y 轴作为圆弧加工平面, Z 轴作为第3轴:G17G02 / G03 X_ Y_ Z_ I_J_ K_ F_圆柱螺旋线插补示意如图1 所示.螺旋线插补起点是S ,终点是E , 设插补过程中的当前点是p i( x i , y i , z i ) ,调用插补算法可以得到到达下一个插补点pi + 1 (x i + 1 ,y i + 1 ,z i + 1 )时, X 轴、Y 轴和Z 轴各自的进给量,用该进给量驱动3 个轴的电机同时运动,合成运动轨迹即是螺旋线轨迹, 每隔1 个插补周期调用1 次插补算法,依次计算出每个插补周期的进给量,然后驱动电机,最终到达螺旋线的终点。图3-1 螺旋线插补示意图将螺旋线终点E( x , y , z ) 投影到X Y 平面上,得到投影点E( x , y ) ,设E与起点S 之间的角度为.通过对上述指令的预处理可以得到圆弧半径R , Z轴方向上要插补的螺距个数N , Z 轴的插补距离dist_ z ,则圆弧需要插补的长度为: (3-1)在X Y 平面上,实际上是做圆弧插补,因此可以利用内接弦线法逼近圆弧。3.1.1直接函数法内接弦线法(螺旋线X,Y轴算法)数据采样法圆弧插补的基本思路是在满足加工精度的前提下,用弦线或者割线来代替弧线实现进给,即用直线段逼近圆弧。所谓“内接弦线法”,就是利用圆弧上相邻两个采样点之间的弦线来逼近相应圆弧的插补算法。为了计算方便,将坐标轴分为长轴和短轴,并定义位置增量值较大的轴为长轴,位置增量值较小的轴为短轴。由圆的参数方程求可以得出,在圆弧插补过程中,坐标轴的进给速度与动点坐标的绝对值反比。也就是说,动点坐标的绝对值越大,其对应的位置增量值就越小。因此,长轴也可以定义为坐标绝对值较小的轴。设A(,)和B()是圆弧上两个相邻的插补点,弦是弧对应的弦长,若进给速度为F,插补周期为Ts,则有。当刀具由A点运动到B点时,其对应的X轴坐标增量为,y轴的坐标增量为。由于A,B两点均为圆弧上的点,故它们均应满足圆的方程,即 (3-2)式中均为带符号数,且有对于图中所示情况,由于,故取X轴为长轴,这时先求。根据图中几何关系可得 (3-3)其中,为对应的圆心角(步距角)。由于M点为弦线的中心店,故有: (3-4)上式中由于未知,因此,不能直接求得余弦值,只有通过近似方法来求。由于在圆弧插补过程中,两个相邻插补点之间的位置增量值相差很小,尤其对于短轴(Y轴)而言,与相差就更小了,这样就可以利用近似代替参与计算,由此而引起的轮廓误差暂时可以忽略不计。故可以改写成: (3-5)根据几何意义取消绝对值符号,可求得: (3-6)有根据其他公式可得: (3-7)所以圆弧线插补如下表所示:表3-1 圆弧插补计算公式总汇表3-1展示了各类型圆弧插补公式之间的内在联系,它们的变化有明显的规律:(1)所有的顺圆弧插补计算公式都是SR1的变形公式,只要对该象限的Xi、Yi赋方向数,该象限的插补计算公式就转变为SR1型计算公式。(2)所有的逆圆弧插补计算公式都是NR1的变形公式,当给出该象限的Xi、Yi赋方向数时,该象限的插补计算公式就转变为NR1型计算公式。(3)当X与Y坐标交换后再赋方向数时,顺圆与逆圆的插补计算公式就可以互换。由此可得,圆弧插补计算仅用SR1型计算公式即可。在使用时根据需要作方向数及交换X、Y坐标的处理。注意:Xi、Yi的初值始终为绝对值。粗插补可分为两步进行:第一,计算常量,第二,计算进给量与动点坐标。据此,可设计数据采样圆弧插补的计算程序,其流程框图如图2所示。3.1.2 螺旋线Z轴插补算法设插补周期为T ,单位为ms ,圆弧插补的进给速度为F , 单位为mm/ min ,进给的最小分辨率为01001 mm ,在X Y 平面上,从pi 到pi + 1 的步长为: (3-8)每个插补周期Z 轴对应的步长为step _ l i ne.step_ l i ne 对应的弧长为: (3-9)将螺旋线展开,如图2所示,每个插补周期的步长与总的插补长度有如下的关系: (3-10)从上式可以得到: (3-11)step_line是每个插补周期Z 轴的进给量zi。因此下一个插补点的坐标为: (3-12)因为X Y 平面上的圆弧步长step_arc 与Z 轴的步长step_line 保持严格的比例关系,所以当Z 轴坐标达到插补终点时, X 轴和Y 轴也会同时达到终点,因此在程序中判断插补是否结束,只需要判断Z轴是否达到终点1.3.2 本设计采用的算法本文中所采用的的是数据采样法来计算螺旋曲线的插补。因为螺旋曲线是三维坐标系,但是螺旋线XY轴相当于圆弧,所以可以采样直径函数法内接弦线的方法计算XY轴。Z轴的变化就是根据XY轴所运行的的次数来算Z轴每个步长。下图是螺旋线插补的流程图:插补开始计算插补准备 NY交换是顺园?N第一象限?N第二象限?N第三象限?YY赋方向数并存赋方向数并存赋方向数并存赋方向数并存Y计算步距增量及动点坐标:保存插补点坐标并修正存储区地址指针NN是终点?跨象限?YY存储区地址指针回拨至首地址粗插补结束 图3-2 数据采样插补计算螺旋线XY轴程序流程图第四章 仿真软件的设计4.1 开发工具的选择4.1.1 OpenGL简介OpenGL(全写OpenGraphicsLibrary)是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。OpenGL适用于从普通PC到大型图形工作站等各种计算机,并可与各种主流操作系统兼容,从而成为占据主导地位的跨平台专业3D图形应用开发包,进而也成为该领域的行业标准。4.1.2 OpenGL特点OpenGL作为一个性能卓越的图形应用编程接口(API),适用于广泛的计算机环境,并已成为目前三维图形开发标准,是从事三维图形开发工作的技术人员所必须掌握的开发工具。OpenGL的应用领域十分广泛,如军事、电视广播、CAD/CAM/CAE、娱乐、艺术造型、医疗影像、虚拟现实等。它具有以下特点,如图4-1:特点易用性可适应性可移植性可靠性稳定性行业标准高性能图形质量好 图4-1OpenGL特点图形质量好、性能高:无论是三维动画、CAD,还是可视化计算机、视觉模拟等,都利用了OpenGL高性能、高图形质量的特点。这个特点使得程序员在医学图像、虚拟现实、CAM/CAD/CAE、广播和等领域中创造和显示出超乎想象的图形。行业标准:OpenGLARB作为独立的联合委员会,制定了OpenGL的规范文档。伴随硬件厂商对OpenGL的硬件支持,OpenGL成为了是唯一独立于供应商的、真正开放的跨平台图形标准。稳定性:在任何平台上都能执行OpenGL,而且它高版本兼容低版本,用来保证已经开发完成的应用程序不会失效。可靠性和可移植性:利用OpenGL技术开发的应用图形软件与硬件无关,只要硬件支持OpenGLAPI标准就可以了,也就是说,OpenGL应用可以运行在支持OpenGLAPI标准的任何硬件上。可扩展性:OpenGL是低级的图形APi,它具有充分的可扩展性。只要厂商提供OpenGL扩展,就可以轻松实现硬件特有功能。利用OpenGL扩展,OpenGL实现者可以添加新的处理算法。可适应性:基于OpenGLAPI的图形应用程序可以运行在许多系统上,有次,OpenGL应用程序可以适应开发人员选择的各种目标平台。易用性:OpenGL具有良好的结构、直观的设计和逻辑命令。与其它的图形程序包相比,OpenGL应用程序只有很少的代码,因此执行速度快。此外,OpenGL封装了有关基本硬件信息,使开发人员无须针对具体的硬件进行专门的设计。4.1.3 OpenGL功能OpenGL是一个独立于操作系用和窗口系统开放的三维图形软件包,以OpenGL为基础开发的应用程序可以十分方便地在各种平台间进行移植;OpenGL还可以与VC+紧密接口,便于实现图形的有关计算和图形算法,可保证算法的正确性和可靠性;OpenGL使用简便,效率高。它具有以下功能:功能位置显示双缓存动画颜色模式设置建模光照和材质设置变换纹理映射、图4-2 OpenGL功能建模:OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体(球、锥、多面体、茶壶等)以及复杂曲线和曲面绘制函数。变换:OpenGL图形库的变换包括基本变换和投影变换。基本变换有平移、旋转、缩放、镜像四种变换,投影变换有平行投影(又称正射投影)和透视投影两种变换。其变换方法有利于减少算法的运行时间,提高三维图形的显示速度。颜色模式设置:OpenGL颜色模式有两种选择,即RGBA模式和颜色索引模式。光照和材质设置:OpenGL自有自发光、环境光、漫反射光和高光。材质是通过用光反射率来表示。场景中的物体最终所反映到人的眼中颜色是光的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜色。纹理映射。利用OpenGL纹理映射的功能可以十分形象逼真地表达出物体表面的细节。位图显示和图象的增强图象功能除了通过基本的拷贝和像素读写外,还提供融合、抗锯齿(反走样)和雾的特殊图象效果的处理功能。以上三条可使被仿真物更具真实感,增强图形显示的特殊效果。双缓存动画双缓存即前台缓存和后台缓存,简言之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。此外,利用OpenGL还能实现运动模糊、深度暗示等特殊效果,利用这些效果可以实现消隐算法。4.2 VC环境下添加OpenGL的编程步骤Visual C+是Microsoft公司推出的一个基于Windows系统平台、可视化的集成开发环境。从Visual C+2.0开始,就可以内置了OpenGL,使得OpenGL可与VC紧密接合,便于实现三维图形算法,使用简便,效率高,为OpenGL在微机上应用创造了条件。本课题的开发环境将选用VC+6.0,在VC+6.0环境下开发OpenGL应用程序需解决OpenGL与VC+6. 0窗口系统的接口问题,主要是为OpenGL创建适当的图形操作描述表并设置正确的像素格式。此外就是要将OpenGL编程与VC+6.0事件编程相结合,在VC+6.0事件处理程序中利用OpenGL进行图形绘制,从而真正地将OpenGL融入到程序中,使之于程序的其他部分有机地结合成为一个整体。下面是用VC+6.0编写OpenGL程序的基本步骤:1)利用MFC AppWizard建立一个单文档应用程序框架。在文档视图结构中,视图负责窗口中内容的显示,因此所有的OpenGL绘制工作应放在视图类中进行。2)打开资源编辑器对程序界面上的菜单、对话框等资源进行必要的修改。3)对工程中的设置选项进行设置,主要是在弹出的工程设置窗口中的链接项的对象/库模块一栏里加入OpenGL32. 1 ib和g1u32. lib这两项。4)在程序中包含进OpenGL的头文件和库函数文件。在视图类CView的头文件View. h中,添加有关OpenGL的头文件,如下:#include#includeglgl .h”glglu. h”其中g1. h文件是OpenGL必不可少的,glu. h文件表示要用到OpenGL实用库函数。5)利用ClassWizard进行OpenGL所必须的初始化工作。OpenGL的初始化工作包括:设置象素格式、建立绘制描述表以及初始化OpenGL投影观察体系等工作。通过象素格式的设置,规定了OpenGL对象素进行操作的基本方式,绘制描述表指明了Windows进行图形显示的基本属性。6)根据用户对程序的功能要求,利用VC+6. 0中的各种编辑工具,给视图类CView或其它类,添加具有相应功能的成员函数,以及进行相应的事件处理。运用OpenGL建立实体几何模型以及实现动画显示等功能,均在这部分完成,这是程序开发的核心内容。7)利用VC+6. 0的编译工具,进行程序的编译、链接及调试等工作。4.3 插补仿真功能的实现螺旋线插补设计的界面主要有螺旋线的半径和高度还有螺距,同时呢对于插补的进给速度和周期也进行了可设定。还有可以让见面只显示螺旋线和插补线或者3个线都出现。因为这个做的是三维的图像,还可以进行视角的调节,这样使人看的更加的清楚和方面。图4-3是设计的界面外观。图4-3 界面设计图4-4 显示螺旋曲线图4-5 只显示插补线图4-6 调节进给速度第5章 结论5.1论文总结OpenGL作为一个可独立操作系统和硬件环境的三维图形库,它不但能输出三维图像图形,还能与三维模型进行交互,该函数库的应用可将教育教学提升到新的高度,制作出可与目前流行游戏相媲美的视觉效果。相关工作总结如下:1、 主要工作及结论 (1) 熟悉windows 7操作系统及其基本操作,掌握C+环境下OpenGL的程序编程,了解OpenGL的各个代码的含义。(2) 通过查找资料了解螺旋曲线插补的算法和如何进行编写程序(3) 对编写的程序进行调试2、 存在的问题(1) 因为vb软件不常用于OpenGL的开发,在进行学习的时候花费了很长时间也没有做出来(2) C+编程的界面很复杂,很多的地方都不怎么会设计(3) 自己对于螺旋线的Z轴算法不是很正确,总会出现误差5.2 感悟对本人来说这是一个全新的领域,参加这个项目拓宽了本人的知识面,拓展了视野和思维。近年来,3D电影怪物史莱克、阿凡达等相继上映及3D大型游戏、在线游戏相继发布,三维图像输出方面都有所增强。我相信未来3D技术的开发会越来越好。致 谢大学毕业设计是对我知识运用能力的一次全面的考核,也是对我们行科学研究基本功的训练,培养我综合运用所学知识独立地分析问题和解决问题的能力,为以后撰写专业学术论文和工作打下良好的基础。本次设计能够顺利完成,首先我要感谢我的母校南京工程学院,是她为我提供了学习知识的土壤,使我在这里茁壮成长。其次我要感谢自动化学院的老师们,他们不仅教会我专业方面的知识,而且教会我做人做事的道理;尤其要感谢在本次设计中给与我大力支持和帮助的孟书云老师,每有问题,孟老师总是耐心的解答,使我能够充满热情的投入到毕业设计中去,孟老师的严谨的治学态度,细致的研究精神和敬业精神对我以后的生活工作和学习将产生积极的影响,再次向孟老师表示感谢。还要感谢我的舍友徐以哲和其他同学,他们热心的帮助,使我感到了来自兄弟姐妹的情谊。感谢相关资料的编著者和给予我支持的社会各界人士,感谢您们为我提供一个良好的环境,使本次设计圆满完成。感谢父母对我二十多年来辛勤的养育,并让我获取了一定的知识并最终走向社会,为社会贡献自己!最后,我要向在百忙之中抽时间对本文进行审阅、评议和参加本人论文答辩的各位老师表示感谢! 茆宇星二一四年六月 于南京参考文献1 崔国栋,赵东标.一种实用的螺旋线插补算法的研究J.机械与电子,2008,(12):14-16.2 陈芳.在FANUC 0MD 系统上用宏程序开发螺旋线插补J.机电产品开发与创新,2006,19(6):176-177.3 刘有余 韩江 田晓青 张国政.开放式数控系统空间曲线插补跨卦限策略研究J.井冈山大学学报(自然科学版),2012,33(6):65-69.4 罗良玲 刘旭波.基于时间分割法的圆柱螺旋线直接插补算法J.南昌大学学报(工科版),2001,23(4):57-645 张春良.时间分割法圆锥螺线插补算法J.制造技术与机床,2000,5:52-536 吴辉 宁亭.螺旋线及正弦曲线的一种快速插补算法J.华中理工大学学报,1995,23(5):57-59.7 徐志明 王宇晗.五轴联动NURBS 曲线插补方法的研究J.上海电机学院学报,2008,11(3):76-80.8 王海粟.基于LabVIEW 的数控铣床螺旋插补算法J.五邑大学学报(自然科学版),2011,25(2):61-64.9 叶伯生 窦晓牧 彭炎午.数控机床的螺旋线与正弦线插补J.工艺与检测,1993,4(1):10-11.10 张春良.计算与检测圆锥螺旋线插补误差分析J.机械工艺师,2000,6(1):32-3311 汪木兰.数控原理与系统.机械工业出版社.2004.7:72-109附录class CVector3public:float x,y,z;public:CVector3(float x,float y,float z);CVector3(void);CVector3(void);void operator=(const CVector3 & vertex);CVector3 operator-(const CVector3 & vertex);CVector3 operator+(const CVector3 & vertex);bool operator!=(const CVector3 & vertex);float GetDistance(const CVector3 & vertex);CVector3 CalVectorCrossProduct(CVector3 & vector);float CalVectorDotProduct(CVector3 & vector);bool IsParallel(CVector3 & vector);float GetLength(void);float CalAngleWith(CVector3 & vector);CVector3 CalVertexOnVector(float distance,CVector3 & startVector);void CalCircleVerticsOnVector(float radius, int vertexNum, CVector3 & vector, CVector3 * buffer);void CalCircleVerticsOnVector(float radius, int vertexNum, CVector3 & vector, CArray & buffer);CVector3 MultiMatrix(float * matrix);bool IsVector(void);void Nomalize(void);void Set(float x, float y, float z);void GLView:OnPaint()CPaintDC dc(this); / device context for painting/ TODO: Add your message handler code here/ Do not call CStatic:OnPaint() for painting messagesglClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );if(viewPort.IsValid()viewPort.Work();glMatrixMode(GL_MODELVIEW);glLoadIdentity();glPushMatrix();glRotatef(angle,1,0,0);coordSys.Draw();glScalef(scale,scale,scale);if(spiralLineShow)spiralLine.Draw(); if(interLineShow)interLine.Draw();glPopMatrix();glFlush();SwapBuffers(GetDC()-GetSafeHdc(); bool GLView:InitOpenGL(void)bool ret = gl.Initialize(GetSafeHwnd(),GetDC();if(ret)viewPort.Init(0.0f,0.0f,1.0f,1.0f);viewPort.SetCameraPos(0,0,300);glShadeModel(GL_SMOOTH);glClearColor(0.0f,0.0f,0.0f,0.0f);glClearDepth(1.0f);SendMessage(WM_SIZE);return ret;void GLView:OnSize(UINT nType, int cx, int cy)CStatic:OnSize(nType, cx, cy);/ TODO: Add your message handler code hereCRect rect;GetWindowRect(&rect);cx = rect.Width();cy = rect.Height();viewPort.SetCxCy(cx,cy);void GLView:SetSpiralPara(float r,float h, float f,float ts,float p)spiralLine.SetPara(r,h,0.1f,1.0f,p);interLine.SetPara(r,h,f,ts,p);void GLView:UpdateData(bool sLineShow, bool iLineShow)spiralLineShow = sLineShow;interLineShow = iLineShow;/ 绘制坐标轴void ModelAxis:DrawAxis(void)glPushMatrix();glLineWidth(4.0f);glColor3f(color.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论