机床数控技术课程设计.docx
《机床数控技术课程设计.docx》由会员分享,可在线阅读,更多相关《机床数控技术课程设计.docx(19页珍藏版)》请在冰豆网上搜索。
机床数控技术课程设计
机床数控技术课程设计
说明书
学校:
南京航空航天大学
专业:
机械工程及自动化
学号:
姓名:
设计题目:
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圆弧插补有了感性和理性的全面认识,对我学习数控机床这门课也有非常大的帮助。
最后,遇到困难不要着急,静下心来总有解决办法~