机床数控技术课程设计.docx
《机床数控技术课程设计.docx》由会员分享,可在线阅读,更多相关《机床数控技术课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
![机床数控技术课程设计.docx](https://file1.bdocx.com/fileroot1/2023-2/22/e8389ed7-fd7e-4b60-939c-efeb148a9245/e8389ed7-fd7e-4b60-939c-efeb148a92451.gif)
机床数控技术课程设计
机床数控技术课程设计
说明书
学校:
南京航空航天大学
专业:
机械工程及自动化
学号:
姓名:
设计题目:
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所示。
2、DDA法圆弧插补
五.程序及变量说明(Matlab)
functionvarargout=cxy_050910610(varargin)
gui_Singleton=1;
gui_State=struct(’gui_Name', mfilename,.。
.
’gui_Singleton',gui_Singleton,。
..
'gui_OpeningFcn’,@cxy_050910610_OpeningFcn,。
。
。
’gui_OutputFcn’, @cxy_050910610_OutputFcn, 。
.。
’gui_LayoutFcn',[],。
。
。
'gui_Callback’,[]);
ifnargin&&ischar(varargin{1})
gui_State.gui_Callback =str2func(varargin{1});
end
if nargout
[varargout{1:
nargout}]=gui_mainfcn(gui_State, varargin{:
});
else
gui_mainfcn(gui_State,varargin{:
});
end
functioncxy_050910610_OpeningFcn(hObject, eventdata,handles,varargin)
globalu
u=0;
global fla;
fla=0;
handles。
output=hObject;
guidata(hObject,handles);
functionvarargout=cxy_050910610_OutputFcn(hObject,eventdata,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
function x2_Callback(hObject, eventdata,handles)
globalx02;
x02=str2double(get(handles.x2,’string’));
function x2_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,’BackgroundColor'),get(0,’defaultUicontrolBackgroundColor’))
set(hObject,’BackgroundColor’,’white’);
end
function y1_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)
global y03;
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)
global x04;
x04=str2double(get(handles。
x4,'string’));
function x4_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;
grid on;
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’);
hold on;
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;
global s
s=0;
function lxcb_Callback(hObject, eventdata,handles)
global sF XY;
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;
axis auto;
while(xj>0||yj〉0)
ifxj>0
jvx=jvx+yi—yy;
end
if yj>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;
hold on;
end
end
end
functiondbcb_Callback(hObject,eventdata,handles)
global XYFuEs;
if s==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’));
if u==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’);
hold on;
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)
if xn〉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)],