机床数控技术课程设计.docx

上传人:b****5 文档编号:4546152 上传时间:2022-12-06 格式:DOCX 页数:19 大小:126.93KB
下载 相关 举报
机床数控技术课程设计.docx_第1页
第1页 / 共19页
机床数控技术课程设计.docx_第2页
第2页 / 共19页
机床数控技术课程设计.docx_第3页
第3页 / 共19页
机床数控技术课程设计.docx_第4页
第4页 / 共19页
机床数控技术课程设计.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

机床数控技术课程设计.docx

《机床数控技术课程设计.docx》由会员分享,可在线阅读,更多相关《机床数控技术课程设计.docx(19页珍藏版)》请在冰豆网上搜索。

机床数控技术课程设计.docx

机床数控技术课程设计

机床数控技术课程设计

说明书

学校:

南京航空航天大学

专业:

机械工程及自动化

学号:

姓名:

设计题目:

PL1DC21

指导老师:

时间:

一.课设任务:

1.PL1-----逐点比较法插补第1象限直线;

2.DC21---DDA法插补第2~1象限顺圆弧。

二.课设要求:

1.具有数据输入界面,如输入直线插补的起点、终点,圆弧插补的起止点、圆心或半径、插补的步长等;

2.具有插补过程的动态显示功能,如单步插补、连续插补等;

3.插补的步长可调;

4.直线的起点、圆弧的圆心在坐标系中的位置可变(即直线的起点、圆弧的圆心可不设定在坐标原点)

5.建议使用C语言编程,有条件者可使用VB、VC等语言编程。

三.程序界面及运行截图

1.直线连续插补:

2.直线单步插补:

3.圆弧连续插补:

4.圆弧单步插补:

四、程序流程图

1.PL1:

逐点比较法插补第1象限直线

逐点比较法插补直线的过程为每进给一步需完成偏差判别,坐标进给,偏差计算,

终点判别四个步骤,具体流程如图1所示。

开始

E=E-1

Y

N

Y

向正Y方向前进一步

F=F+(x02-x01)

向正X方向前进一步

F=F-(y02-y01)

F>=0

E>0

N

结束

E=(abs(x01-x02)+abs(y01-y02))/k(总步数)

F=0(判别函数)

初始化,输入起点x01、y01,终点x02、y02,步长k

2、DDA法圆弧插补

五.程序及变量说明(Matlab)

gui_Singleton=1;

gui_State=struct('gui_Name',mfilename,...

'gui_Singleton',gui_Singleton,...

'gui_LayoutFcn',[],...

'gui_Callback',[]);

ifnargin&&ischar(varargin{1})

gui_State.gui_Callback=str2func(varargin{1});

end

ifnargout

[varargout{1:

nargout}]=gui_mainfcn(gui_State,varargin{:

});

else

gui_mainfcn(gui_State,varargin{:

});

end

globalu

u=0;

globalfla;

fla=0;

handles.output=hObject;

guidata(hObject,handles);

varargout{1}=handles.output;

functionx1_Callback(hObject,eventdata,handles)

globalx01;

x01=str2double(get(handles.x1,'string'));

functionx1_CreateFcn(hObject,eventdata,handles)

ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

functionx2_Callback(hObject,eventdata,handles)

globalx02;

x02=str2double(get(handles.x2,'string'));

functionx2_CreateFcn(hObject,eventdata,handles)

ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

functiony1_Callback(hObject,eventdata,handles)

globaly01;

y01=str2double(get(handles.y1,'string'));

functiony1_CreateFcn(hObject,eventdata,handles)

ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

functiony2_Callback(hObject,eventdata,handles)

globaly02;

y02=str2double(get(handles.y2,'string'));

functiony2_CreateFcn(hObject,eventdata,handles)

ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

functionx3_Callback(hObject,eventdata,handles)

globalx03;

x03=str2double(get(handles.x3,'string'));

functionx3_CreateFcn(hObject,eventdata,handles)

ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

functiony3_Callback(hObject,eventdata,handles)

globaly03;

y03=str2double(get(handles.y3,'string'));

functiony3_CreateFcn(hObject,eventdata,handles)

ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

functionx4_Callback(hObject,eventdata,handles)

globalx04;

x04=str2double(get(handles.x4,'string'));

functionx4_CreateFcn(hObject,eventdata,handles)

ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

functiony4_Callback(hObject,eventdata,handles)

globaly04;

y04=str2double(get(handles.y4,'string'));

functiony4_CreateFcn(hObject,eventdata,handles)

ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

functionr_Callback(hObject,eventdata,handles)

globalR;

R=str2double(get(handles.r,'string'));

functionr_CreateFcn(hObject,eventdata,handles)

ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

functionclear_Callback(hObject,eventdata,handles)

cla;

functionstraightline_Callback(hObject,eventdata,handles)

globals;

gridon;

x01=str2double(get(handles.x1,'string'));

x02=str2double(get(handles.x2,'string'));

y01=str2double(get(handles.y1,'string'));

y02=str2double(get(handles.y2,'string'));

x=linspace(x01,x02,1000);

y=((y02-y01)/(x02-x01))*(x-x01)+y01;

plot(x,y,'b');

holdon;

s=1;

functioncircular_arc_Callback(hObject,eventdata,handles)

gridon;

x03=str2double(get(handles.x3,'string'));

x04=str2double(get(handles.x4,'string'));

y03=str2double(get(handles.y3,'string'));

y04=str2double(get(handles.y4,'string'));

R=str2double(get(handles.r,'string'));

l=sqrt((y04-y03).^2+(x04-x03).^2);

k=sqrt(R^2-(l^2)/4);

x0=(x03+x04)/2+((y04-y03)*k)/l;

y0=(y03+y04)/2-((x04-x03)*k)/l;

x=linspace(x03,x04,1000);

y=y0+sqrt(R^2-(x-x0).^2);

plot(x,y,'b');

axisequal;

holdon;

globals

s=0;

functionlxcb_Callback(hObject,eventdata,handles)

globalsFXY;

ifs==1

x01=str2double(get(handles.x1,'string'));

x02=str2double(get(handles.x2,'string'));

y01=str2double(get(handles.y1,'string'));

y02=str2double(get(handles.y2,'string'));

k=str2double(get(handles.buchang,'string'));

X=x01;Y=y01;

F=0;

E=(abs(x01-x02)+abs(y01-y02))/k;

whileE>0

ifF>=0

X=X+k;

m=linspace(X-k,X,100);

n=Y;

F=F-(y02-y01);

plot(m,n,'r');

else

Y=Y+k;

p=X;

q=linspace(Y-k,Y,100);

F=F+(x02-x01);

plot(p,q,'r');

end

E=E-1;

end

else

x03=str2double(get(handles.x3,'string'));

x04=str2double(get(handles.x4,'string'));

y03=str2double(get(handles.y3,'string'));

y04=str2double(get(handles.y4,'string'));

b=str2double(get(handles.buchang,'string'));

j=str2double(get(handles.jcq,'string'));

R=str2double(get(handles.r,'string'));

l=((y04-y03)^2+(x04-x03)^2)^0.5;

m=(y04-y03)/l;

n=(x03-x04)/l;

xx=(x03+x04)/2+(R^2-l^2/4)^0.5*m;

yy=(y03+y04)/2+(R^2-l^2/4)^0.5*n;

if~(x03<=xx&xx<=x04&y03>=yy&y04>=yy)

errordlg('请输入第二一象限的顺圆弧');

else

xi=x03;yi=y03;xii=x03;yii=y03;

jvx=0;

jvy=0;

xj=fix((xx-x03)/b);yj=fix((yy+R-y03)/b);%计算步数

m=2^j;%模

while(xj>0||yj>0)

ifxj>0

jvx=jvx+yi-yy;

end

ifyj>0

jvy=jvy+xx-xi;

end

flag=0;

if(jvx>m)

xj=xj-1;flag=1;

xi=xi+b;

jvx=mod(jvx,m);

end

if(jvy>m)

yj=yj-1;flag=1;

yi=yi+b;

jvy=mod(jvy,m);

end

ifflag==1

line([xii,xi],[yii,yi],'color','r');

holdon;

xii=xi;

yii=yi;

end

end

end

line([xi,xx],[yi,yy+R],'color','r');

xi=xx;yi=yy+R;xii=xx;yii=yy+R;

jvx=0;

jvy=0;

xj=fix((x04-xx)/b);yj=fix((yy+R-y04)/b);

m=2^j;

axisauto;

while(xj>0||yj>0)

ifxj>0

jvx=jvx+yi-yy;

end

ifyj>0

jvy=jvy+xi-xx;

end

flag=0;

if(jvx>m)

xj=xj-1;flag=1;

xi=xi+b;

jvx=mod(jvx,m);

end

if(jvy>m)

yj=yj-1;flag=1;

yi=yi-b;

jvy=mod(jvy,m);

end

ifflag==1

line([xii,xi],[yii,yi],'color','r');

xii=xi;

yii=yi;

holdon;

end

end

end

functiondbcb_Callback(hObject,eventdata,handles)

globalXYFuEs;

ifs==1

x01=str2double(get(handles.x1,'string'));

y01=str2double(get(handles.y1,'string'));

x02=str2double(get(handles.x2,'string'));

y02=str2double(get(handles.y2,'string'));

k=str2double(get(handles.buchang,'string'));

ifu==0

X=x01;

Y=y01;

u=u+1;

E=(abs(x01-x02)+abs(y01-y02))/k;

F=0;

else

ifE>0

ifF>=0

X=X+k;

m=linspace(X-k,X,1000);

n=Y;

F=F-(y02-y01);

plot(m,n,'r');

holdon;

else

Y=Y+k;

p=X;

q=linspace(Y-k,Y);

F=F+(x02-x01);

plot(p,q,'r');

holdon;

end

E=E-1;

else

u=0;

end

end

else

globalfla;

x03=str2double(get(handles.x3,'string'));

x04=str2double(get(handles.x4,'string'));

y03=str2double(get(handles.y3,'string'));

y04=str2double(get(handles.y4,'string'));

b=str2double(get(handles.buchang,'string'));

j=str2double(get(handles.jcq,'string'));

R=str2double(get(handles.r,'string'));

l=((y04-y03)^2+(x04-x03)^2)^0.5;

m=(y04-y03)/l;

n=(x03-x04)/l;

xx=(x03+x04)/2+(R^2-l^2/4)^0.5*m;

yy=(y03+y04)/2+(R^2-l^2/4)^0.5*n;

if~(x03<=xx&&xx<=x04&&y03>=yy&&y04>=yy)

errordlg('请输入第二一象限的顺圆弧');

else%第二象限的顺圆插补

xi=x03;yi=y03;

jvx=0;

jvy=0;

xj=fix((xx-x03)/b);yj=fix((yy+R-y03)/b);%第二象限的计数器

m=2^j;

k=1;

while(xj>0||yj>0)

ifxj>0

jvx=jvx+yi-yy;

end

ifyj>0

jvy=jvy+xx-xi;

end

flag=0;

if(jvx>m)

xj=xj-1;flag=1;

xi=xi+b;

jvx=mod(jvx,m);

end

if(jvy>m)

yj=yj-1;flag=1;

yi=yi+b;

jvy=mod(jvy,m);

end

ifflag==1

XC(k)=xi;

YC(k)=yi;

k=k+1;

end

end

end

xi=xx;yi=yy+R;xii=xx;yii=yy+R;%第一象限顺圆插补

jvx=0;

jvy=0;

xn=fix((x04-xx)/b);yn=fix((yy+R-y04)/b);%第一象限的计数器

m=2^j;

axisauto;

while(xn>0||yn>0)

ifxn>0

jvx=jvx+yi-yy;

end

ifyn>0

jvy=jvy+xi-xx;

end

flag=0;

if(jvx>m)

xn=xn-1;flag=1;

xi=xi+b;

jvx=mod(jvx,m);

end

if(jvy>m)

yn=yn-1;flag=1;

yi=yi-b;

jvy=mod(jvy,m);

end

ifflag==1

XC(k)=xi;

YC(k)=yi;

k=k+1;

end

end

a=pi-atan(abs((y03-yy)/(x03-xx)));

b=atan(abs((y04-yy)/(x04-xx)));

alpha=b:

pi/100:

a;

XQ=xx+R*cos(alpha);

YQ=yy+R*sin(alpha);

plot(XQ,YQ)

holdon;

plot(xx,yy,'Ro');

iffla==0

fla=fla+1;

elseiffla==1

line([x03,XC

(1)],[y03,YC

(1)],'color','r');

fla=fla+1;

elseiffla<=k-2

line([XC(fla),XC(fla+1)],[YC(fla),YC(fla+1)],'color','r');

fla=fla+1;

else

errordlg('插补结束');

fla=0;

end

end

functionbuchang_Callback(hObject,eventdata,handles)

functionbuchang_CreateFcn(hObject,eventdata,handles)

ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

functionjcq_Callback(hObject,eventdata,handles)

functionjcq_CreateFcn(hObject,eventdata,handles)

ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

6.心得体会

本次课设是在考研结束后的一周内做完的,时间其实应该是很够的,但是由于本人不善于编程,所以最后完成得很仓促。

通过这次课设,我对matlab的操作有了更深的认识,对相关函数语句还有逻辑循环套用的应用有了更深的理解。

而且此次课设,让我对逐点比较法直线插补和DDA圆弧插补有了感性和理性的全面认识,对我学习数控机床这门课也有非常大的帮助。

最后,遇到困难不要着急,静下心来总有解决办法~

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1