当前位置:文档之家› 第5章 插补作业答案

第5章 插补作业答案

直线插补与圆弧插补程序设计

直线插补与圆弧插补程序设计

一.直线插补 1. 直线插补程序流程图

#i nclude #in elude vgraphics.h> #i nclude void cb_li ne(i nt { x1, int y1, int x2, int y2) 直线插补程序流程图 2.直线插补程序设计 int dx, dy, n, k, i, f;

int x, y; dx = abs(x2-x1); dy = abs(y2-y1); n = dx + dy; if (x2 >= x1) { k y2 >= y1 ? 1: 4; x x1; y y1; } else { k y2 >= y1 ? 2: 3; x x2; y y2; } putpixel(x, y, 1); for (i = 0, f = 0; i < n; i++) if (f >= 0) switch (k) { case 1: else switch (k) { case 1: putpixel(x++, y, f -= dy; break; case 2: putpixel(x, y++, f -= dx; break; case 3: putpixel(x--, y, f -= dy; break; case 4: 1); 1); 1); putpixel(x, y--, 1); } f -= dx; break;

putpixel(x, f += dx; break; y++, 1); case 2 : putpixel(x--, f += dy; break; y, 1); case 3 : putpixel(x, f += dx; break; y--, 1); case 4 : putpixel(x++, f += dy; break; y, 1); } } 二. 圆弧插补 2.1. 四象限圆弧插补程序流程图int main() { cb_line(0,0,15,20); /* <--- you forgot return 0; } here */

插补原理

插补原理:在实际加工中,被加工工件的轮廓形状千差万别,严格说来,为了满足几何尺寸精度的要求,刀具中心轨迹应该准确地依照工件的轮廓形状来生成,对于简单的曲线数控系统可以比较容易实现,但对于较复杂的形状,若直接生成会使算法变得很复杂,计算机的工作量也相应地大大增加,因此,实际应用中,常采用一小段直线或圆弧去进行拟合就可满足精度要求(也有需要抛物线和高次曲线拟合的情况),这种拟合方法就是“插补”,实质上插补就是数据密化的过程。插补的任务是根据进给速度的要求,在轮廓起点和终点之间计算出若干个中间点的坐标值,每个中间点计算所需时间直接影响系统的控制速度,而插补中间点坐标值的计算精度又影响到数控系统的控制精度,因此,插补算法是整个数控系统控制的核心。插补算法经过几十年的发展,不断成熟,种类很多。一般说来,从产生的数学模型来分,主要有直线插补、二次曲线插补等;从插补计算输出的数值形式来分,主要有脉冲增量插补(也称为基准脉冲插补)和数据采样插补[26]。脉冲增量插补和数据采样插补都有个自的特点,本文根据应用场合的不同分别开发出了脉冲增量插补和数据采样插补。 1数字积分插补是脉冲增量插补的一种。下面将首先阐述一下脉冲增量插补的工作原理。2.脉冲增量插补是行程标量插补,每次插补结束产生一个行程增量,以脉冲的方式输出。这种插补算法主要应用在开环数控系统中,在插补计算过程中不断向各坐标轴发出互相协调的进给脉冲,驱动电机运动。一个脉冲所产生的坐标轴移动量叫做脉冲当量。脉冲当量是脉冲分配的基本单位,按机床设计的加工精度选定,普通精度的机床一般取脉冲当量为:0.01mm,较精密的机床取1或0.5 。采用脉冲增量插补算法的数控系统,其坐标轴进给速度主要受插补程序运行时间的限制,一般为1~3m/min。脉冲增量插补主要有逐点比较法、数据积分插补法等。逐点比较法最初称为区域判别法,或代数运算法,或醉步式近似法。这种方法的原理是:计算机在控制加工过程中,能逐点地计算和判别加工偏差,以控制坐标进给,按规定图形加工出所需要的工件,用步进电机或电液脉冲马达拖动机床,其进给方式是步进式的,插补器控制机床。逐点比较法既可以实现直线插补也可以实现圆弧等插补,它的特点是运算直观,插补误差小于一个脉冲当量,输出脉冲均匀,速度变化小,调节方便,因此在两个坐标开环的CNC系统中应用比较普遍。但这种方法不能实现多轴联动,其应用范围受到了很大限制。对于圆弧插补,各个象限的积分器结构基本上相同,但是控制各坐标轴的进给方向和被积函数值的修改方向却不同,由于各个象限的控制差异,所以圆弧插补一般需要按象限来分成若干个模块进行插补计算,程序里可以用圆弧半径作为基值,同时给各轴的余数赋比基值小的数(如R/2等),这样可以避免当一个轴被积函数较小而另一个轴被积函数较大进,由于被积函数较小的轴的位置变化较慢而引起的误差。4.2 时间分割插补是数据采样插补的一种。下面将首先阐述数据采样插补的工作原理。2.1 数据采样插补是根据用户程序的进给速度,将给定轮廓曲线分割为每一插补周期的进给段,即轮廓步长。每一个插补周期执行一次插补运算,计算出下一个插补点坐标,从而计算出下一个周期各个坐标的进给量,进而得出下一插补点的指令位置。与基准脉冲插补法不同的是,计算出来的不是进给脉冲而是用二进制表示的进给量,也就是在下一插补周期中,轮廓曲线上的进给段在各坐标轴上的分矢大小,计算机定时对坐标的实际位置进行采样,采样数据与指令位置进行比较,得出位置误差,再根据位置误差对伺服系统进行控制,达到消除误差使实际位置跟随指令位置的目的。数据采样法的插补周期可以等于采样周期也可以是采样周期的整数倍;对于直线插补,动点在一个周期内运动的

逐点比较法直线插补圆弧插补实例

逐点比较法直线插补 (1)偏差函数构造 对于第一象限直线OA上任一点(X,Y):X/Y = Xe/Ye 若刀具加工点为Pi(Xi,Yi),则该点的偏差函数Fi可表示为: 若Fi= 0,表示加工点位于直线上; 若Fi> 0,表示加工点位于直线上方; 若Fi< 0,表示加工点位于直线下方。 (2)偏差函数字的递推计算 采用偏差函数的递推式(迭代式):既由前一点计算后一点 Fi =Yi Xe -XiYe 若Fi>=0,规定向+X 方向走一步 Xi+1 = Xi +1 Fi+1 = XeYi –Ye(Xi +1)=Fi –Ye 若Fi<0,规定+Y 方向走一步,则有 Yi+1 = Yi +1 Fi+1 = Xe(Yi +1)-YeXi =Fi +Xe (3)终点判别 直线插补的终点判别可采用三种方法。 1)判断插补或进给的总步数:2)分别判断各坐标轴的进给步数;3)仅判断进给步数较多的坐标轴的进给步数。 (4)例 对于第一象限直线OA,终点坐标Xe=6 ,Ye=4,插补从直线起点O开始,故F0=0 。终点判别是判断进给总步数N=6+4=10,将其存入终点判别计数器中,每进给一步减1,若N=0,则停止插补。

逐点比较法圆弧插补(1)偏差函数构造 任意加工点Pi(Xi,Yi),偏差函数Fi可表示为 若Fi=0,表示加工点位于圆上;

若Fi >0,表示加工点位于圆外; 若Fi <0,表示加工点位于圆内 (2)偏差函数的递推计算 1) 逆圆插补 若F ≥0,规定向-X 方向走一步 若Fi<0,规定向+Y 方向走一步 2) 顺圆插补 若Fi ≥0,规定向-Y 方向走一步 若Fi<0,规定向+y 方向走一步 (3)终点判别 1)判断插补或进给的总步数: 2)分别判断各坐标轴的进给步数: (4)例 对于第一象限圆弧AB ,起点A (4,0),终点B (0,4) ???+-=-+-=-=++12)1(122211i i i i i i i X F R Y X F X X ???++=-++=+=++12)1(122211i i i i i i i Y F R Y X F Y Y ???+-=--+=-=++12)1(122211i i i i i i i Y F R Y X F Y Y ???++=-++=+=++12)1(122211i i i i i i i X F R Y X F X X b a b a Y Y X X N -+-=b a x X X N -= b a y Y Y N -=

一种基于时间分割法和数字积分法混合实现的空间直线插补方法_刘宜

一种基于时间分割法和数字积分法 混合实现的空间直线插补方法3 刘宜,丛爽,钱炜,方凯 (中国科学技术大学自动化系,安徽合肥 230027) 摘要:在空间曲面铣削加工中,进给速度的平滑性直接影响加工表面的质量。文中提出了一种应用时间分割法(T DM)和数字积分法(DDA)混合实现的空间直线插补方法(HS L I M),用以改进通常采用时间分割法直线插补产生零头距离而出现的难以保持平滑进给速度的问题。该算法是采用时间分割法中的时间分割原理,对数字积分法中的累加溢出过程按照进给速度的要求,采用可控的插补周期进行时间分割,从而用较少的计算量消除了零头距离,实现平滑的进给速度。仿真实验与实际加工实验都表明,该方法可以实现平滑的进给速度,明显改善加工表面质量。 关键词:数字积分法;时间分割原理;平滑进给速度;空间曲面铣削加工 中图分类号:TP242 文献标识码:A 文章编号:1001-2354(2008)12-0027-05 对于数控系统(C NC)来说,进给速度的平滑性是除跟踪精 度以外的另一个关键问题,这是因为它在提高加工曲面质量方面具有重要的作用。在加工由大量短小直线段(G01代码)组成的空间曲面时,经常会出现进给速度的波动。这会使切削刀具的负载发生波动,增加加工时间并导致表面加工质量降低。De Souza等[1]指出其中的主要原因是计算机辅助制造(C AM)软件算法带来的直线段长度的不均匀性。传统的C NC控制器采用基于二级插补与固定插补周期的时间分割法[2]来插补直线段。在给定的直线段长度不等于期望进给速度的整数倍时,就会出现零头距离问题,从而插补该直线所需要的周期数目就需要取整,取整会带来进给速度波动并降低加工质量。对于包含许多长度不均匀的直线段的NC代码程序来说,会导致频繁的进给速度波动。 为取得更好的解决办法,许多学者做了大量的研究,这些研究可以主要分为两类。一种是实时参数插补技术,Yang[3]和Xu[4]均提出在C NC控制器中用实时参数插补代替直线插补用于3轴加工,实验表明实时参数插补可以保持很小的进给速度波动。另外,还有许多学者[5~9]研究进一步提高实时参数插补的性能。但是实时参数插补技术需要复杂的算法,并且缺乏统一的NC代码表示。另外一种类型就是加减速技术。Hu[10]和Luo[11]提出通过建立进给速度模型并适当地控制加减速可以消除零头距离,保持平滑的进给速度,但是这种方法会降低加工效率并导致更频繁的加减速。 文中提出一种基于时间分割法和数字积分法混合实现的空间直线插补方法,它是采用时间分割法中的时间分割的原理,对数字积分法中的累加溢出过程按照进给速度的要求采用可控的插补周期进行时间分割。它有效地综合了数字积分法与时间分割法,可以通过较小的计算代价消除零头距离,实现平滑的进给速度。1 数字积分法与时间分割法的 直线插补原理 数字积分法[2]是采用近似积分的原理实现各轴沿给定直线段的协调运动。对于每个轴,它包含一个加数寄存器与和寄存器。假定寄存器的数据宽度均为m。首先清空所有寄存器,计算该直线段对应的各轴的进给脉冲总数(一个脉冲等于一个基本长度单元(BLU))。然后将各轴进给脉冲总数的绝对值分别放入加数寄存器中,按照一定的时钟频率,重复下述累加操作:把加数寄存器与和寄存器中的数值进行相加并将结果存储在和寄存器中。若和寄存器产生溢出,则对应生成一个进给脉冲。经过次累加,由各轴和寄存器产生的溢出总数分别等于各轴进给脉冲总数的绝对值,同时,根据各轴进给脉冲总数的符号设定各轴进给方向,从而实现了沿给定直线段的进给运动。 为提高在加工过程中脉冲变化的均匀性,可采用左移规格化的方式———在累加开始前,同时将各轴加数寄存器进行左移,直到绝对值最大的加数寄存器中的最高有效位(MS B)左移至寄存器的最高位,另外相应地减少累加次数。这样,可以减少在两段相邻直线段衔接处进给脉冲的变化。 数字积分法的主要缺点是由于累加过程中固定的时钟频率,各轴进给脉冲的频率在相邻直线段衔接处会产生突变,导致进给速度的突变。即使采用了左移规格化,在相邻直线段的衔接处,进给速度的变化范围仍为50%~141.4%,这样大的进给速度波动会严重降低加工表面质量。 时间分割法是基于粗、精二级插补的原理,先进行粗插补,根据加工指令中的进给速度要求,以插补周期为时间单位,将给定直线段细分为许多更小的直线段,每段直线段的长度满足期望的进给速度要求,再进行精插补,在规定的插补周期内采用数字积分法实现细分的直线插补。通过设定相邻直线段的进给速度,时间分割法可以消除在相邻直线段衔接处的进给速 第25卷第12期2008年12月 机 械 设 计 JOURNAL OF MACH I N E DESI G N Vol.25 No.12 Dec. 2008 3收稿日期:2007-10-29;修订日期:2008-04-07 基金项目:国家自然科学基金资助项目(60774098) 作者简介:刘宜(1980-),男,湖南望城人,博士,研究方向:运动控制与协调控制,发表论文5篇。

欧姆龙NJ直线插补及圆弧插补

NJ网络实验4 实验目的:a.实现空间一组4个工位的合成直线运动。 工位1(0,0),工位2(2000,2000),工位3(2000, 0),工位4(0,0) b.使用圆弧插补功能,实现下图运动轨迹。(图中数值仅供参考,可自行修改) C.学习齿轮比(变速)MC_gearin,MC_gearout指令。速度比要求3比1 实验器材:NJ、G5伺服及伺服电机两套;E3ZM-V81两个、网线若干(AT部门NJ样机箱)。 参考资料:NJ教材、NJ操作手册、运动控制指令手册 指导人员: 实验内容: 1.样机搭建、网络组建、轴设置在前报告中已经说明,此处省略。其中轴设置中原点返回设置选择如下图 两轴原点返回均为此设置

2.建立轴组: 轴设置完毕后,在“配置和设置”中右键点击轴组设置,在下拉菜单中左键点击添加轴组设置,如下图 添加后,左键双击MC_Group000;在轴组基本设置中“轴组使用”选择“使用轴组”如下图: 构成选择“2轴” 分别将“轴A0”分配MC_Axis000(0);“轴A1”分配MC_Axis001(1)如下图

点击左侧“轴组操作设置”在下图中设置最大插补速度及加速度等, 轴设置完毕 3.编写程序 A、准备程序程序 本次程序依然需要MC_POWER及MC_HOME指令由于与上次程序相同这里不多介绍,程序如下图:

原点返回指令 “MC_GroupEnable”轴组使能指令,以下为手册截图 由于直线插补指令属于轴组指令,如想进行直线插补首先要进行轴组使能指令,否则无法使用对应指令。

将上一步设置好的MC_Group000使能,程序如下 指令“MC_GroupDisable”使能解除指令 与MC_GroupEnable对应指令,被轴组使能后被使能轴只能使用轴组指令,而不能使用轴指令,例如MC_Move等指令,所以程序中需要编写MC_GroupEnable程序

C语言模拟直线插补与圆弧插补程序设计

数控技术课程设计 说明书 设计题目直线插补与圆弧插补程序设计 机械设计以及自动化专业机械工程学院 机械102班 设计者青岛理工大学 2013年6月20

日 目录 1.设计题目 (1) 2.目录 (2) 3.直线插补流程图 (3) 4.直线插补程序 (4) 5.程序结果 (8) 6.圆弧插补流程图 (9) 7.圆弧插补程序 (10)

8.程序结果 (21) 一.直线插补 1.直线插补程序流程图 2.直线插补程序设计

#include "stdio.h" int i,X,Y,X0,Y0,Xe,Ye,F,N; int a[30][2]; void main() { int m; int menu(); void yi(); void er(); void san(); void si(); void te(); void shuchu(); m=menu(); a[0][0]=X0; a[0][1]=Y0; switch(m) { case 1:yi();shuchu();break; case 2:er();shuchu();break; case 3:san();shuchu();break; case 4:si();shuchu();break; case 5:te();shuchu();break; default:printf("无法插补\n"); } } int menu() { int t; printf("输入起点坐标\n"); scanf("%d,%d",&X0,&Y0); printf("输入终点坐标\n"); scanf("%d,%d",&Xe,&Ye); if (Xe>=X0&&Ye>=Y0) t=1; else if (Xe<=X0&&Ye>=Y0) t=2; else if (Xe<=X0&&Ye<=Y0) t=3; else if (Xe>=X0&&Ye<=Y0) t=4;

刀具半径补偿原理(详细)

刀具半径补偿原理 一、刀具半径补偿的基本概念 (一)什么是刀具半径补偿 根据按零件轮廓编制的程序和预先设定的偏置参数,实时自动生成刀具中心轨迹的功能成为刀具半径补偿功能。 (二)刀具半径功能的主要用途 (1)由于刀具的磨损或因换刀引起的刀具半径变化时,不必重新编程,只需修改相应的偏置参数即可。 (2)加工余量的预留可通过修改偏置参数实现,而不必为粗、精加工各编制一个程序。 (三)刀具半径补偿的常用方法 1.B刀补 特点:刀具中心轨迹的段间都是用圆弧连接过渡。 优点:算法简单,实现容易。 缺点: (1)外轮廓加工时,由于圆弧连接时,刀具始终在一点切削,外轮廓尖角被加工成小圆角。 (2)内轮廓加工时,必须由编程人员人为的加一个辅助的过渡圆弧,且必须保证过渡圆弧的半径大于刀具半径。这样:一是增加编程工作难度;二是稍有疏忽,过渡圆弧半径小于刀具半径时,会因刀具干涉而产生过切,使加工零件报废。 2.C刀补 特点:刀具中心轨迹段间采用直线连接过渡。直接实时自动计算刀具中心轨迹的转接交点。 优点:尖角工艺性好;在加工内轮廓时,可实现过切自动预报。 两种刀补在处理方法上的区别: B刀补采用读一段,算一段,走一段的处理方法。故无法预计刀具半径造成的下一段轨迹对本段轨迹的影响。 C刀补采用一次对两段进行处理的方法。先处理本段,再根据下一段来确定刀具中心轨迹的段间过渡状态,从而完成本段刀补运算处理。 二、刀具半径补偿的工作原理 (一)刀具半径补偿的过程 刀具半径补偿的过程分三步。 1.刀补建立 刀具从起点接近工件,在编程轨迹基础上,刀具中心向左(G41)或向右(G42)偏离一个偏置量的距离。不能进行零件的加工。 2.刀补进行 刀具中心轨迹与编程轨迹始终偏离一个偏置量的距离。 3.刀补撤消 刀具撤离工件,使刀具中心轨迹终点与编程轨迹终点(如起刀点)重合。不能进行加工。 (二)C机能刀具半径补偿的转接形式和过渡方式 1.转接形式

直线与圆弧插补实验

实验一工作台直线插补运动 1 实验目的 1.了解工作台直线插补原理和算法; 2.在掌握直线插补原理的基础上实现平面绘图。 2 实验设备 1.直线/旋转工作台; 2.工作台控制箱一台; 3.笔架夹持器、画笔及画板。 3 实验原理 本实验利用逐点比较法插补直线,逐点比较法在第一象限的直线插补原理如下图: 现加工OE直线。如果刀具动点在OE直线上方或在该直线上,则令刀具沿X正方向进给一步;若刀具动点在OE直线下方,则令刀具沿Y轴正方向进给一步,如此循环直到加工到E点。判别刀具动点的位置根据偏差判别公式,第一象限直线插补的偏差判别公式如下: Fi = Xe Y i -Y e X i

Fi≥0时,偏差判别公式为 F i+1=F i -Ye 向X正方向进给 Fi<0时,偏差判别公式为 F i+1= F i+Xe,向Y正方向进给 逐点比较法插补节拍:逐点比较法插补需要四个节拍,即偏差判别、进给、偏差计算和终点判别。 4.4 实验步骤 1.按使用说明书上将工作台组合成二自由度直线工作台,安装好笔架夹持器,放置好画板,并正确连接电缆。 2.安装上笔架夹持器及画笔,在桌面相应位置放好画板,使笔尖接触到画板; 3.接通控制箱电源; 4.启动计算机,运行工作台控制软件; 5.在“工作台组合方式”界面中选择X直线工作台和Y直线工作台; 6.单击主界面“工作台复位”按钮,工作台进行回零运动,运动完成后工作台处于零点位置; 7.把画笔安装到笔架夹持器上,使笔尖接触到画板; 8.单击“直线插补”按钮; 9.加速方式选择“梯形”,插补目标X轴填写0,Y轴填写-30,点击“运动”按钮,画出一条直线, 10.插补目标X轴填写30,Y轴填写30,点击“运动”, 11.插补目标X轴填写30,Y轴填写0,点击“运动”,

直线及圆弧插补程序--逐点比较法

此程序是根据《微型计算机控制技术》(第二版)清华大学出版社 第三章数字控制技术——3.2插补原理中的3.2.1逐点比较法的直线插补,3.2.2逐点比较法圆弧插补编写的。其中的变量定义,原理依据均来源于此,如有疑问,请参考书中的讲解。尤其是例子,以下两个程序的第一个运行图均与例题中的一致。 一、四象限直线插补程序 分别加工第一、二、三、四象限直线,起点均为(0,0),终点坐标为(NX,NY),进行插补计算。 程序中(NX,NY)为终点坐标;NXY为总步数;XOY=1,2,3,4,分别为第一、二、三、四象限; ZF=1,2,3,4,分别代表+x,-x,+y,-y走步方向;FM为加工点偏差,初值为0。 源程序: # include "stdio.h" # include "string.h" # include "math.h" void main() { int NX,NY,NXY,BS,XOY,ZF; int FM=0; char a[10]="+X",b[10]="-X",c[10]="+Y",d[10]="-Y",e[10]; printf("\n\n请输入NX,NY\n"); scanf("%d %d",&NX,&NY); {if(NX>0) if(NY>0)

XOY=1; else XOY=4; else if(NY>0) XOY=2; else XOY=3;} printf("终点在第%d象限\n",XOY); printf("\n 步数坐标进给偏差计算终点判断\n\n"); BS=fabs(NX) + fabs(NY); for(NXY= fabs(NX) + fabs(NY)-1;NXY>=0;NXY--) { if(FM>=0) {if(XOY==1||XOY==4) { ZF=1; strcpy(e,a);} else { ZF=2; strcpy(e,b); } FM=FM-fabs(NY); printf(" %d %s FM=%d NXY=%d\n\n",BS-NXY,e,

第五章运动控制插补原理及实现

运动控制插补原理及实现 数控系统加工的零件轮廓或运动轨迹一般由直线、圆弧组成,对于一些非圆曲线轮廓则用直线或圆弧去逼近。插补计算就是数控系统根据输入的基本数据,通过计算,将工件的轮廓或运动轨迹描述出来,边计算边根据计算结果向各坐标发出进给指令。 数控系统常用的插补计算方法有:逐点比较法、数字积分法、时间分割法、样条插补法等。逐点比较法,即每一步都要和给定轨迹上的坐标值进行比较,视该点在给定规矩的上方或下方,或在给定轨迹的里面或外面,从而决定下一步的进给方向,使之趋近给定轨迹。 直线插补原理 图3—1是逐点比较法直线插补程序框图。图中n是插补循环数,L是第n个插补循环中偏差函数的值,Xe,Y。是直线的终点坐标,m是完成直线插补加工刀具沿X,y轴应走的总步数。插补前,刀具位于直线的起点,即坐标原点,偏差为零,循环数也为零。 在每一个插补循环的开始,插补器先进入“等待”状态。插补时钟发出一个脉冲后,插补器结束等待状态,向下运动。这时每发一个脉冲,触发插补器进行一个插补循环。所以可用插补时钟控制插补速度,同时也可以控制刀具的进给速度。插补器结束“等待”状态后,先进行偏差判别。若偏差值大于等于零,刀具的进给方向应为+x,进给后偏差值成为Fm-ye;若偏差值小于零,刀具的进给方向应为+y,进给后的插补值为Fm+xe。。 进行了一个插补循环后,插补循环数n应增加l。 最终进行终点判别,若n

插补原理

插补 开放分类: 技术 数控技术 高新技术 数控装置根据输入的零件程序的信息,将程序段所描述的曲线的起点、终点之间的空间进行数据密化,从而形成要求的轮廓轨迹,这种“数据密化”机能就称为“插补”。 编辑摘要 插补 - 概述 系统的主要任务之一,是控制执行 机构按预定的轨迹运动。一般情况 是一致运动轨迹的起点坐标、终点坐标和轨迹的曲线方程,由数控系 统实施地算出各个中间点的坐标。 在数控机床中,刀具不能严格地按 照要求加工的曲线运动,只能用折 线轨迹逼近所要加工的曲线。 机床 数控系统依照一定方法确定刀具运 动轨迹的过程。也可以说,已知曲 线上的某些数据,按照某种算法计 算已知点之间的中间点的方法,也 称为“数据点的密化”。 数控装置根据输入的零件程序的信 息,将程序段所描述的曲线的起点、 终点之间的空间进行数据密化,从 而形成要求的轮廓轨迹,这种“数据密化”机能就称为“插补”。 插补 计算就是数控装置根据输入的基本 数据,通过计算,把工件轮廓的形状描述出来,边计算边根据计算结果向各坐标发出进给脉冲,对应每个脉冲,机 床在响应的坐标方向上移动一个脉冲当量的距离,从而将工件加工出所需要轮廓的形状。 插补 - 分类 1、直线插补 直线插补(Llne Interpolation )这是车床上常用的一种插补方式,在此方式中,两点间的插补沿着直线的点群来逼近,沿此直线控制刀具的运动。 一个零件的轮廓往往是多种多样的,有直线,有圆弧,也有可能是任意曲线,样条线等. 数控机床的刀具往往是不能以曲线的实际轮廓去走刀的,而是近似地以若干条很小的直线去走刀,走刀的方向一般是x 和y 方向. 插补方式有:直线插补,圆弧插补,抛物线插补,样条线插补等 所谓直线插补就是只能用于实际轮廓是直线的插补方式(如果不是直线,也可以用逼近的方式把曲线用一段段线段去逼近,从而每一段线段就可以用直线插补了).首先假设在实际轮廓起始点处沿x 方向走一小段(一个脉冲当量),发现终点在实际轮廓的下方,则下一条线段沿y 方向走一小段,此时如果线段终点还在实际轮廓下方,则继续沿y 方向走一小段,直到在实际轮廓上方以后,再向x 方向走一小段,依次循环类推.直到到达轮廓终点为止.这样,实际轮廓就由一段段的折线拼接而成,虽然是折线,但是如果我们每一段走刀线段都非常小(在精度允许范围内),那么此段折线和实际轮廓还是可以近似地看成相同的曲线的--------这就是直线插补. 2、圆弧插补 圆弧插补(Circula : Interpolation )这是一种插补方式,在此方式中,根据两端点间的插补数

插补原理及控制方法

因为插补运算是实时性很强的运算,若算法太复杂,计算机的每次插补运算的时间必然加长,从而限制进给速度指标和精度指标的提高。 3.插补方法的分类 ?脉冲增量插补(行程标量插补) 特点: ?每次插补的结果仅产生一个单位的行程增量(一个 脉冲当量)。以一个一个脉冲的方式输出给步进电 机。其基本思想是:用折线来逼近曲线(包括直线)。 ?插补速度与进给速度密切相关。因而进给速度指标 难以提高,当脉冲当量为10μm时,采用该插补算 法所能获得最高进给速度是3-4 m/min。 ?脉冲增量插补的实现方法较简单,通常仅用加法和 移位运算方法就可完成插补。因此它比较容易用硬 件来实现,而且,用硬件实现这类运算的速度很快 的。但是也有用软件来完成这类算法的。 ?这类插补算法有:逐点比较法;最小偏差法;数字 积分法;目标点跟踪法;单步追综法等 ?它们主要用早期的采用步进电机驱动的数控系统。 ?由于此算法的速度指标和精度指标都难以满足现在 零件加工的要求,现在的数控系统已很少采用这类 算法了。 ?数字增量插补(时间标量插补) ?特点: 插补程序以一定的时间间隔定时(插补周期)运行,在 每个周期内根据进给速度计算出各坐标轴在下一插 补周期内的位移增量(数字量)。其基本思想是:用 直线段(内接弦线,内外均差弦线,切线)来逼近 曲线(包括直线)。 插补运算速度与进给速度无严格的关系。因而采用 这类插补算法时,可达到较高的进给速度(一般可 达10m/min以上)。 数字增量插补的实现算法较脉冲增量插补复杂,它 对计算机的运算速度有一定的要求,不过现在的计 算机均能满足要求。 这类插补方法有:数字积分法(DDA)、二阶近似插补 法、双DDA插补法、角度逼近插补法、时间分割法 等。这些算法大多是针对圆弧插补设计的。 这类插补算法主要用于交、直流伺服电机为伺服驱 动系统的闭环,半闭环数控系统,也可用于以步进 电机为伺服驱动系统的开环数控系统,而且,目前 所使用的CNC系统中,大多数都采用这类插补方法。

直线插补,圆弧插补

数控技术第三次作业 题目【1】:第一象限的逆圆插补。 1.取该圆弧的圆心坐标为(0,0),起点坐标为(4,0),终点坐标为(0,4),圆弧半径为4. 2.采用逐点比较法的C程序如 #include void main() { int n=8,x,y,f,g; scanf("%d,%d",&x,&y); f=x^2+y^2-16; if (f>=0) g=f-2x+1,x--,n--; printf("%d,%d,%d\n",x,y,n); else g=f+2y+1,y++,n--; printf("%d,%d,%d\n",x,y,n); if (g>=0) g=g-2x+1,x--,n--; printf("%d,%d,%d\n",x,y,n); else g=g+2y+1,y++,n--;

printf("%d,%d,%d\n",x,y,n); while (n==0) printf("it is over"); } 3.程序流程图如下: 4.程序运行后得到一系列插补点,连接插补点得到插补轨迹如

下图所示: 5.综上,第一象限的逆圆采用逐点插补法的插补过程及其解决算法如上所述。 题目【2】:第一象限的直线插补取第一象限的直线方程为Y=X,起点坐标为原点(0,0),终点坐标为(4,4)。 1.基于MATLAB的插补程序如下: Xe = input('输入终点横坐标X\nXe = '); Ye = input('输入终点纵坐标Y\nYe = '); h = input('输入步长\nh = '); Tstep= (abs(Xe)+abs(Ye))/h; Step=0; F=0; Xi=0; Yi=0; x = 0; y = 0; Xi=Xi+h; x = [x Xi]; y = [y Yi]; end Step=1; while (Step

基于直线插补思想实现经济型CNC系统C刀补的算法研究-文献综述

基于直线插补思想实现经济型CNC系统C刀补的算法研究(三)(先进数控技术江苏高校重点建设实验室(南京工程学院),江苏南京 210013)摘要:为在经济型CNC系统中全面实现C功能刀补,提出一种简单有效的刀补建立和撤消方法,并对现行C刀补建立和撤消过程中的刀具中心轨迹加以修正,以解决刀具与工件轮廓之间的干涉问题。 关键词:C刀补建立与撤消直线插补类型判别转接点计算 Arithmetic Study About Realizing C-cutter Radius Compensation in Economical CNC System Basing on Linear Interpolation Hua Mao-fa cao jin-jiang (Jiangsu province college key laboratory of Advanced Numerical control Technology (Nanjing Institute of Technology), Nanjing, 210013) Abstract: In order to realize comprehensively C-function cutter radius compensation in economical CNC system, the author puts forward a kind of simple and effective method of establishing and cancelling cutter radius compensation, and modifies the present cutter center path of establishing and canceling C—function cutter radius compensation so as to solve the problem of the interference between the cutter and work-piece . Keywords:C-cutter radius compensation;Establishment and cancellation; Linear interpolation;Type differentiation;Connecting point calculation 0.前言 刀具半径补偿分为刀补建立、进行和撤消三步。在文献[1]和[2]中已经讨论了C功能刀补在经济型CNC系统中的进行问题。本文将继续引用直线插补思想,将刀补计算中的三角函数及开平方等运算转化为简单的加、减运算,为不具备复杂函数运算功能的用单片机开发的经济型CNC系统提供一种建立和撤消C刀补的简单算法。同时,就目前C刀补建立与撤消方法中存在的刀具与工件轮廓有时会发生干涉(图1中AA',CC'小于刀具半径r)的问题,对刀补建立过程中的第一转接点和撤消过程中的最后一转接点进行修正。 为方便起见,本文以G42为例,首先介绍刀具半径矢量的刀偏分量算法,然后再分别讨论刀补的建立和撤消过程中刀具中心轨迹上转接点的算法。

数据处理与插补原理

第二章数据处理与插补原理 在第一章已经提到,所谓插补,即已知运动轨迹的起点、终点、曲线类型和走向,计算出运动轨迹所要经过的中间点坐标。伺服系统根据插补输出的中间点坐标值控制机床运动,走出预定轨迹。插补可以用硬件来实现,也可以用软件来实现。故本章主要介绍软件插补方法。 软件插补法可以分成基准脉冲插补法和数据采样插补法两类。在本章中介绍基准脉冲插补法中的逐点比较法和数字积分法;介绍数据采样插补法中的时间分割插补法和扩展DDA 法。 用户的程序指令代码必须经过译码、刀具补偿等一系列的加工预处理过程,才能得出插补计算所需要的数据。本章还介绍译码、刀具补偿以及传动间隙与丝杠螺距误差的补偿。 第一节加工程序预处理 用户输入的零件加工程序、插补程序是不能直接应用的,必须由加工程序预处理程序模块对加工程序进行预处理,得出插补程序(包括进给驱动程序)所需要的数据信息和控制信息。所以加工程序预处理程序又称插补准备程序。数据处理包括译码、刀具补偿计算、辅助信息处理和进给速度计算等。译码程序的功能主要是将用户程序翻译成便于数控系统的计算机处理的格式,其中包括数据信息和控制信息。刀具补偿是由工件轮廓和刀具参数计算出刀具中心轨迹。进给速度计算主要解决刀具运动速度问题。 一.译码 译码程序以程序段为单位处理用户加工程序,将其中的轮廓信息(如起点、终点、直线、圆弧等)、加工速度和辅助功能信息,翻译成便于计算机处理的信息格式,存放在指定的内存专用空间。 译码可以在正式加工前一次性将整个程序翻译玩,并在译码过程中对程序进行语法检查,若有语法错误则报警。这种方式可称之为编译,和通常所说的编译的意义不同的是,生成的不是计算机能直接运行的机器语言,而是便于应用的数据。另一种处理法式是在加工过程中进行译码,即计算机进行加工控制时,利用空闲时间来对后面的程序段进行译码。这种法式可称之为解释。用解释方式,系统在运行用户程序之前通常也对用户程序进行扫描,进行语法检查,有错报警,以免加工到中途在发现错误,造成工件报废。用编译的法式可以节省时间,可使加工控制时计算机不至于太忙,并可在编译的同时进行语法检查,但需要占用较大内存。一般数控代码比较简单,用解释方式占用的时间也不多,所以CNC系统常用解释方式。 在CNC系统中,用户程序一般都先读入内存存放。程序存放的位置可以是零件程序存储区、零件程序缓冲区或键盘输入(MDI)缓冲区。译码程序对内存中的用户程序进行译码。译码程序必须找到要运行的程序的第一个字符,(地址字符应为字母),才能开始译码。译码程序读进地址字符(字母),根据不同的处理遇到功能代码(如G、M等),将其之后的数据(G、M后为二进位数)转换为征码,并存放于对应的规定单元。若是尺寸代码(如X、Y等),将其后的数字串转换为二进制数,并存放于对应的规定区域(如X区、Y区)。数

直线圆弧插补程序

直线插补 Private Sub Command1_Click() Command1.Enabled = False Line (x(0), y(0))-(xa, ya) f(0) = 0 For i = 0 To n - 1 If (xa >= 0) And (ya >= 0) Then If f(i) >= 0 Then For j = x(i) To x(i) + 1 Step 0.0001 PSet (j, y(i)), 255 Next j x(i + 1) = x(i) + 1 y(i + 1) = y(i) f(i + 1) = f(i) - ya Else For j = y(i) To y(i) + 1 Step 0.0001 PSet (x(i), j), 255 Next j y(i + 1) = y(i) + 1 x(i + 1) = x(i) f(i + 1) = f(i) + xa End If End If If (xa > 0) And (ya < 0) Then If f(i) >= 0 Then For j = x(i) To x(i) + 1 Step 0.0001 PSet (j, y(i)), 255 Next j x(i + 1) = x(i) + 1 y(i + 1) = y(i) f(i + 1) = f(i) + ya Else For j = y(i) To y(i) - 1 Step -0.0001 PSet (x(i), j), 255 Next j y(i + 1) = y(i) - 1 x(i + 1) = x(i) f(i + 1) = f(i) + xa End If End If If (xa < 0) And (ya > 0) Then If f(i) >= 0 Then For j = x(i) To x(i) - 1 Step -0.0001 PSet (j, y(i)), 255

什么是插补、直线插补、联动与插补

什么是插补? 试由直线的逐点比较工作节拍说明其插补过程: 答:插补是在组成轨迹的直线段或曲线段的起点和终点之间,按一定的算法进行数据点的密 化工作,以确定一些中间点。从而为轨迹控制的每一步提供逼近目标。 逐点比较法是以四个象限区域判别为特征,每走一步都要将加工点的瞬时坐标与相应给定的图形上的点相比较,判别一下偏差,然后决定下一步的走向。如果加工点走到图形外面去了,那么下一步就要向图形里面走;如果加工点已在图形里面,则下一步就要向图形外面走,以缩小偏差,这样就能得到一个接近给定图形的轨迹,其最大偏差不超过一个脉冲当量(一个 进给脉冲驱动下工作台所走过的距离)。 什么叫直线插补 这个概念般是用在计算机图形显示,或则数控加工的近似走刀等情况下的. 以数控加工为例子 一个零件的轮廓往往是多种多样的,有直线,有圆弧,也有可能是任意曲线,样条线等. 数控机 床的刀具往往是不能以曲线的实际轮廓去走刀的,而是近似地以若干条很小的直线去走刀, 走刀的方向一般是x和y方向. 插补方式有:直线插补,圆弧插补,抛物线插补,样条线插补等 所谓直线插补就是只能用于实际轮廓是直线的插补方式(如果不是直线,也可以用逼近的方 式把曲线用一段段线段去逼近,从而每一段线段就可以用直线插补了).首先假设在实际轮廓 起始点处沿x方向走一小段(一个脉冲当量),发现终点在实际轮廓的下方,则下一条线段沿y 方向走一小段,此时如果线段终点还在实际轮廓下方,则继续沿y方向走一小段,直到在实际 轮廓上方以后,再向x方向走一小段,依次循环类推.直到到达轮廓终点为止.这样,实际轮廓就由一段段的折线拼接而成,虽然是折线,但是如果我们每一段走刀线段都非常小(在精度允许 范围内),那么此段折线和实际轮廓还是可以近似地看成相同的曲线的--------这就是直线插补. 联动与插补 决定质点空间位置需要三个坐标,决定刚体空间位置需要六个坐标。 一个运动控制系统可以控制的坐标的个数称做该运动控制系统的轴数。 一个运动控制系统可以同时控制运动的坐标的个数称做该运动控制系统可联动的轴数。 联动各轴的运动轨迹具有一定的函数关系,例如直线,园弧,抛物线,正弦曲线。 直接计算得出运动轨迹的坐标值往往要用到乘除法,高次方,无理函数,超越函数,会占用很多的CPU时间。 为了实时快速控制运动轨迹,往往预先对运动轨迹进行直线和圆弧拟合,拟合后的运动轨迹仅由直线段和圆弧段所组成,而计算运动轨迹时,每一点的运动轨迹跟据前一个坐标点的数据通过插补运算得到,这样就把计算简化为增量减量移位和加减法。 实现多轴联动的直线插补并不困难,圆弧插补一般为两轴联动。 实现插补运算可以有多种算法,例如"DDA 算法","逐点比较法","正负法","最小偏差法(Bresenham 算法)"等,其中最小偏差法具有最小的偏差和较快的运行速度。

直线插补流程图

直线插补与圆弧插补程序设计 一.直线插补 1.直线插补程序流程图 Y N N 开始 输入相关数据:x0,y0,xe,ye, X=|xe-x0| Y=|ye-y0| n=X+Y x0>=0且y0>=0且xe>=0且ye>=0 CHABU1(F,n,Y,X) x0<=0且y0>=0且xe<=0且ye>=0 x0<=0且y0<=0且xe<=0且ye<=0 CHABU2(F,n,Y,X) CHABU3(F,n,Y,X) x0>=0且y0<=0且xe>=0且ye<=0 CHABU3(F,n,Y ,X) "跨象限运动" 输出子函数计算结果 结束

直线插补程序设计: #include"stdio.h" #include"math.h" void CHABU1 (int F,int n,int Y,int X) /*第一象限调用函数*/ { int nx=0,ny=0; for(;n>0; n--) { printf("运算前:F=%d ",F); i f(F>=0) { printf("需走步数: n=%d\n",n); printf("------向 +xe方向走一步 "); F=F-Y; printf("F=%d ",F); printf("+X\n"); nx++; /*X方向走的总步数*/ } e lse { printf("需走步数: n=%d\n",n); printf("------向 +ye方向走一步 "); F=F+X; printf("F=%d ",F); printf("+Y\n"); ny++; /*y方向走的总步数*/ } } printf("nx=%d,ny=%d\n",nx,ny);

相关主题
文本预览
相关文档 最新文档