790 likes | 931 Views
机电控制工程 â…¡. æ’è¡¥ç®—æ³•åŠæ•°æŽ§ç¼–程. 2012 å¹´ 5 月 24 æ—¥. æ’补算法. 1. 数控编程. 2. ä¸€ã€æ’补算法. 内容. 1.1 æ’补概念 1.2 æ’补分类 1.3 æ’补算法. æ’补技术 æœºåºŠæ•°æŽ§ç³»ç»Ÿçš„æ ¸å¿ƒæŠ€æœ¯ä¹‹ä¸€æ˜¯æ’补技术,在已知è¿åŠ¨è½¨è¿¹çš„èµ·ç‚¹ä¸Žç»ˆç‚¹åæ ‡ã€è½¨è¿¹çš„æ›²çº¿æ–¹ç¨‹ï¼Œç”±æ•°æŽ§ç³»ç»Ÿå®žæ—¶åœ°è®¡ç®—出å„个ä¸ç‚¹åæ ‡çš„è¿‡ç¨‹ï¼Œç§°ä¸ºæ’补。 æ’è¡¥çš„ä¸¤å±‚æ„æ€ 一是用å°çº¿æ®µé€¼è¿‘产生基本线型(如直线ã€åœ†å¼§ç‰ï¼‰ 二是用基本线型拟和其它轮廓曲线。 æ’补的é‡è¦æŒ‡æ ‡ æ’è¡¥è¿ç®—具有实时性,直接影å“刀具的è¿åŠ¨ã€‚æ’è¡¥è¿ç®—çš„ 速度 å’Œ 精度 是数控装置的é‡è¦æŒ‡æ ‡ã€‚
E N D
机电控制工程Ⅱ 插补算法及数控编程 2012年5月24日
插补算法 1 数控编程 2
一、插补算法 内容 1.1 插补概念 1.2 插补分类 1.3 插补算法
插补技术 机床数控系统的核心技术之一是插补技术,在已知运动轨迹的起点与终点坐标、轨迹的曲线方程,由数控系统实时地计算出各个中点坐标的过程,称为插补。 插补的两层意思 一是用小线段逼近产生基本线型(如直线、圆弧等) 二是用基本线型拟和其它轮廓曲线。 插补的重要指标 插补运算具有实时性,直接影响刀具的运动。插补运算的速度和精度是数控装置的重要指标。 插补器 数控系统中完成插补工作的装置称为插补器 1.1 插补概念
按插补器的结构 分立元件或 集成电路组成 硬件插补器 运算速度快, 但灵活性差, 不易改变 插补器 利用CPU 通过软件编程实现 软件插补器 灵活易变, 但插补速度受CPU速度 和插补算法的影响 1.2 插补分类 现代数控系统大多采用软件插补或软硬件插补相结合的方法。
按数学模型 一次插补器 插补器 二次插补器 高次插补器 1.2 插补分类 大多数数控系统都具有直线插补器和圆弧插补器。
按采用的原理和计算方法 脉冲增量插补 插补方法 数字增量插补 1.2 插补分类 大多数数控系统都具有直线插补器和圆弧插补器。只有某些高档CNC系统才有抛物线、螺旋线等插补功能。
脉冲增量插补 • 每次插补时在一个轴上仅产生单个的行程增量,以一个脉冲的方式输出,实现一个脉冲当量的位移。在数控机床中,一个脉冲所对应的坐标轴的移动量成为脉冲当量,也称为位置控制分辨率。 • 这类插补的实现方法比较简单,通常只用加法和移位即可完成插补,固其易用硬件实现,且运算速度很快。适用于以步进电动机为驱动装置的开环数控系统。 • 常用的脉冲增量插补算法有逐点比较法和数字积分法
数字增量插补 • 又称数据采样插补,其特点是插补运算分两步完成 • 粗插补,即用若干条微小直线段来逼近给定曲线,每一微小直线段的长度相等,且与给定的进给速度有关。粗插补在每个插补周期中计算一次,因此,每一微小直线段的长度,即进给量f与进给速度F和插补周期T有关,即f=FT。粗插补的特点是把给定的一条曲线用一组直线段来逼近。 • 精插补,它是在粗插补时算出的每一条微小直线段上再做“数据点的密化”工作,这一步相当于对直线的脉冲增量插补。 • 适用于以直流或交流伺服电动机为驱动的闭环或半闭环位置采样控制系统 • 常用的数字增量插补有时间分割法和扩展数字积分法等。
逐点比较法 原理 —计算机在控制加工过程中,逐点地计算和判别加工偏差,以控制坐标进给 特点 —运算直观,插补误差不大于一个脉冲当量,脉冲输出均匀,调节方便。 1.3 插补算法 • 脉冲增量插补
逐点比较法 若点P正好位于直线OA上,则: 若点P位于直线上方,则: 若点P位于直线下方,则: 若F>= 0, 下一步应该向+X方向走,则: 若F<0, 下一步应该向+Y方向走,则: • 直线逐点比较插补算法 • 定义偏差函数(偏差判别式): F=0, 加工点P落在直线OA上 F>0, 加工点P落在直线OA上方 F<0, 加工点P落在直线OA下方
逐点比较法 • 插补计算步骤(四拍) • 第一拍:偏差判别 • 第二拍:坐标进给 • 第三拍:偏差计算 • 第四拍:终点判别 开始 偏差判别 坐标进给 偏差计算 N 到终点? Y 结束
逐点比较法 • 直线逐点比较插补算法 (G01) 象限判断 根据(相对)终点位置判断 偏差判别 F>=0 or F<0 坐标进给 偏差计算 终点判别 (1)终点坐标与加工点坐标相比较 (2) X,Y坐标应走总步数判别
逐点比较法 • 插补计算实例(直线逐点比较法) 工 作 节 拍 序号 Y 偏差判别 坐标进给 偏差计算 终点判别 A(6,4) 1 F0 = 0 + ΔX F1= F0–Ye=- 4 10-1=9 2 F1 = -4 + ΔY F2= F1+Xe= 2 9-1=8 3 F2= 2 + ΔX F3= F2–Ye=- 2 8-1=7 4 F3= -2 + ΔYF4= F3+Xe= 4 7-1=6 5 F4 = 4 + ΔX F5= F4–Ye= 0 6-1=5 6 F5 = 0 + ΔX F6= F5–Ye=- 4 5-1=4 X 7 F6 = -4 + ΔY F7= F6+Xe=2 4-1=3 8 F7 = 2 + ΔX F8= F7–Ye=- 2 3-1=2 9 F8 = -2 + ΔYF9= F8+Xe= 4 2-1=1 10 F9 = 4 + ΔX F10= F9–Ye = 0 1-1=0 第一象限直线插补轨迹
逐点比较法 • 以上第一象限的结论适用于其他象限,具体进给脉冲分配方向及沿哪个轴分配。其规律如下:
逐点比较法 • 直线逐点比较插补程序流程图:(G90 模式) • 算法之外: • 已知量的初始化和赋值 • 数据的存储结构 • 作图与仿真
参数输入 Xs = input('input the X of start\n Xs = '); %%输入起点横坐标 Ys = input('input the Y of start\n Ys = '); %%输入起点纵坐标 Xe = input('input the end of X\n Xe = '); %%输入终点横坐标 Ye = input('input the end of Y\n Ye = '); %%输入终点纵坐标 step = input('input step\n step = '); %%输入步长
生成插值点 Fs=abs(Xre)*abs(Yrs)-abs(Xrs)*abs(Yre); %%偏差判别式计算 if(Dir==1) %%在第一象限插补 if (Fs>=0) %%当前点在直线上方,为0表示在直线上 Xrs=Xrs+step; %%x右移step else %%当前点在直线下方 Yrs=Yrs+step; %%y上移step end x = [x Xrs]; y = [y Yrs]; %%这两句用于记录新的插补点 end
终点判断 Tstep= (abs(Xre)+abs(Yre))/step; %%计算总步数 while (count<Tstep) %%终点判断 生成插值点 count++; %%插补步数计数器加1 end
坐标还原及作图仿真 plot([0,Xs],[0,Ys]); %%原点到起点 hold on; %%继续画出插补过程 for i=1:1:length(x) x(i)=x(i)+Xs; y(i)=y(i)+Ys; %%逐点变化坐标 if i>1 plot([x(i-1) x(i)],[y(i-1) y(i)]); %%绘制新的插补线段 axis equal; pause(0.1); %%适当延时以看清插补过程 end end hold off;
逐点比较法 Y F=0 B(Xe,Ye) P(Xi,Yj) F>0 F<0 R O X A(X0,Y0) • 圆弧逐点比较法插补算法 • 偏差函数 加工点在圆弧外测,F>0; 加工点在圆弧上,F=0; 加工点在圆弧内测,F<0; 对于第一象限逆圆弧, 当F>=0时向X坐标,负方向走一步; 当F<0时向Y坐标正方向走一步。 • 偏差计算 向X坐标负方向走一步后 向Y坐标正方向走一步后 • 终点判别:(1)采用终点坐标与加工点坐标相比较的方法进行 X坐标到达终点; Y坐标到达终点; (2)X,Y坐标应走总步数 沿X坐标走一步, 沿Y坐标走一步, 均到0时到达终点。
逐点比较法 • 圆弧逐点比较插补进给脉冲分配规律如下:
逐点比较法 • 圆弧逐点比较插补程序流程图: • 与直线插补区别: • 偏差函数 • 方向判断 • 象限判断在循环内 • 终点判别
参数输入 %%圆心的坐标 CX = input('input the X of center \n CX = '); CY = input('input the Y of center \n CY = '); %%半径 R = input('input the radius\n R = '); %%起始角 theta0 = input('input the initial value of angle \n theta0 = '); %%增量角 deltaTheta = input('input the increasement of angle(角度) \n deltaTheta0 = '); %%步长 step = input('input step\n step = ');
坐标变换 %%计算起始角及增量角(弧度) theta0=pi*mod(theta0,360)/180; %mod( )求余 if(deltaTheta<0) deltaTheta=-pi*mod(abs(deltaTheta),360)/180; else deltaTheta=pi*mod(deltaTheta,360)/180; end %%计算插补起点与终点坐标 X1=R*cos(theta0); Y1=R*sin(theta0); X2=R*cos(theta0+deltaTheta); Y2=R*sin(theta0+deltaTheta);
生成插值点 %%%%标记所在的象限%%%% if(xCurVal>=0 & yCurVal>0) nDir = 1; %第一象限 end if(xCurVal<0 & yCurVal>=0) nDir = 2; %第二象限 end if(xCurVal<=0 & yCurVal<0) nDir = 3; %第三象限 end if(xCurVal>0 & yCurVal<=0) nDir = 4; %第四象限 end %%当前点与圆的相对位置判断 DevVal=xCurVal*xCurVal+yCurVal*yCurVal-R*R; if(deltaTheta>=0) %逆时针方向 if(nDir==1) %在第一象限的处理措施 if (DevVal>=0) %现在的点在圆外 xCurVal = xCurVal-step; %x轴左移step else %点在圆内 yCurVal = yCurVal+step; %y轴上移step end x = [x xCurVal]; %记录坐标 y = [y yCurVal];
终点判断 while (abs(alpha)<abs(deltaTheta)) %%终点判断 %生成插值点(判断当前点象限、判断方向、判断相对位置) %%新一步转过的圆心角 alphaStep=abs(atan(y(2)/x(2)))-abs(atan(y(1)/x(1))); %%转过的圆心角累加 alpha=alpha+abs(alphaStep); count=count+1; %%插补步数计数器加1 end
坐标还原及作图仿真 plot([CX,X1+CX],[CY,Y1+CY]); %%圆心到起点 hold on; %%保持插补轨迹 for i=1:1:length(x) x(i)=x(i)+CX; y(i)=y(i)+CY; %%逐点坐标变换 if i>1 plot([x(i-1) x(i)],[y(i-1) y(i)]); %%新的插补段 axis equal; pause(0.1); %%适当延时便于观察插补过程 end end hold off;
作业要求 三 插补算法 • 实践任务: 编写逐点比较法直线插补和圆弧算法程序并进行仿真 与固高XY平台上插补算法仿真效果进行比较 • 开发环境: C+matlab:函数 + matlab plot功能函数 C++:函数 + 组件 C# • 关键点: 参数:步长、象限判断、进给方向、终点判断 开发环境的熟悉度
插补算法仿真结果 • matlab
插补算法仿真结果 • C++
插补算法仿真结果 • C#
任务目标 • 自己设计一个图案进行G代码编程 • 在固高XY平台上仿真并运行编写好的G代码
插补算法 1 数控编程 2
数控加工程序编制概念 从零件图纸到数控加工指令的有序排列的全过程。 将零件加工的工艺分析、加工顺序、零件轮廓轨迹尺寸、工艺参数(F、s、t)及辅助动作(变速、换刀、冷却液启停、工件夹紧松开等)等,用规定文字、数字、符号组成的代码按一定格式编写加工程序单,并将程序单的信息变成控制介质的全过程。 二、数控编程
编程方法:手工编程和自动编程 手动编程 定义:整个编程过程由人工完成。对编程人员的要求高 (熟悉数控代码功能、编程规则,具备机械加工工艺知识和数值计算力) 适用:① 几何形状不太复杂的零件;② 三坐标联动以下加工程序 自动编程: 定义:编程人员根据零件图纸的要求,按照某个自动编程系统的规定,将零件的加工信息用较简便的方式送入计算机,编程系统将根据数控系统的类型输出数控加工程序。 适用: ① 形状复杂的零件 ② 虽不复杂但编程工作量很大的零件(如有数千个孔的零件) ③ 虽不复杂但计算工作量大的零件(如非圆曲线轮廓的计算) 二、数控编程
比较 用手工编程时,一个零件的编程时间与机床实际加工时间之比,平均约为 30:1。 数控机床不能开动的原因中,有20-30%是由于加工程序不能及时编制出造成的 编程自动化是当今的趋势!但手工编程是学习自动编程基础! 二、数控编程
G代码 • G指令 —— 准备功能 • 功能:规定机床运动线型、坐标系、坐标平面、刀具补偿、暂停等操作。 • 组成:G后带二位数字组成,共有100种(G00~G99)有模态(续效)指令与非模态指令之分。 • 示例:G01,G03,G41,G91,G04,G18,G54等
G代码 常用G代码及功能
G代码功能描述 • G00 快速定位 • 指令格式:G00X(U)_Y(V)_ • G00指令用于快速点定位,两个轴同时进给,合成速度为最大唯一速度。 • 指令中的X(U)和Y(V)值确定终点坐标,起点为当前点。 • G01 直线插补 • 指令格式:G01 X(U)_Y(V)_F_ • G01为直线插补运动,即两个轴以当前点为起点,以F指令指定的速度同时进给,终点位置由X(U)和Y(V)确定。 • 速度字F具有模态性,即由F指令的进给速度直到变为新的值之前均有效,因此不必每个程序段均指定一次。单位:mm/min。
G代码功能描述 • G02/03 圆弧插补(G02:顺时针圆弧 G03:逆时针圆弧) • 使两轴以当前点为起点,按照给定的参数走出一段圆弧。其指令格式可以有两种形式: • G02/03 X(U)_Y(V)_I_J_F • X(U)、Y(V):确定终点位置; • I,J分别对应X,Y方向上圆弧起点到圆心的距离(有符号) • F:插补速度 • G02/03 X(U)_Y(V)_R_F • X(U)、Y(V):确定终点位置; • R:圆弧半径 • F:插补速度
M指令(辅助功能) M03 对应于笔架下降 M05 对应于笔架抬起 M30 程序停止 可根据需要在G代码文件中加入相应的M指令
示例 1 N10 M03 G01 X10 N20 G01 Y10 N30 G01 X0 Y0 N40 M05 M30 N10 M03 G01 X10 笔架下降,以直线插补方式从原点(0,0)运动至点(10,0); N20 G01 Y10 接上一步,以直线插补方式从点(10,0)运动至点(10,10); N30 G01 X0 Y0 接第二步,以直线插补方式从点(10,10)运动至原点(0,0); N40 M05 M30 笔架抬起,结束。
示例 2 N01 M03 G90 G01 X20 N02 G03 X-20 Y0 I-20 J0 N03 M05 M30 N01 M03 G90 G01 X20 笔架下降,以直线插补方式从原点(0,0)运动至点(20,0); N02 G03 X-20 Y0 I-20 J0 以圆弧插补方式逆时针从点(20,0)运动至点(-20,0); N03 M05 M30 笔架抬起,结束。
G代码实现方法 1、 TureType造字程序 2、 坐标纸获取坐标值 3、 CAD软件获取坐标值(CAXA等)(推荐方法)
G代码CAXA制造工程师实现 • 刚打开CAXA制造工程师时的界面,请各位同学注意左下角处的命令提醒
G代码CAXA制造工程师实现 • 首先限定工作区间,固高工作平台工作区间为200×200(mm)
G代码CAXA制造工程师实现 • 选取“应用”— “文字”,输入字符
G代码CAXA制造工程师实现 • 通过“设置”,调整文字参数,注意字的大小不要超出限定的工作区间
G代码CAXA制造工程师实现 • 输入文字