机床数控技术课程设计说明书.docx
《机床数控技术课程设计说明书.docx》由会员分享,可在线阅读,更多相关《机床数控技术课程设计说明书.docx(32页珍藏版)》请在冰豆网上搜索。
机床数控技术课程设计说明书
指导老师:
姓名:
班级:
学号:
2014/01/10
目录
一课设任务 1
二课设要求 1
三编程语言 1
四变量说明及程序界面 1
(一)DDA第四象限直线插补变量说明 1
(二)逐点比较法第1~2象限逆圆弧插补变量说明 2
(三)DDA第四象限直线插补程序界面 3
(1)普通DDA……………………………………………………………………………...3
(2)全加载…………………………………………………………………………………3
(3)半加载………………………………………………………………………………...4
(四)逐点比较法第1~2象限逆圆弧插补程序界面 4
五详细程序设计流程图………………………………………………………..5
(一)DDA第四象限直线插补流程图………………………………………………….5
(二)逐点比较法第1~2象限逆圆弧插补流程图………………………….6
六源程序 6
七参考资料 32
一课设任务
(1)DDA法插补第四象限直线;
(2)逐点比较法插补第1~2象限顺圆弧。
二课设要求
(1)具有数据输入界面,如起点、终点、圆心、半径及插补步长等;
(2)具有插补过程的动态显示功能,如单步插补、连续插补;
(3)插补的步长可调;
三编程语言:
MATLAB
四变量说明及程序界面
(一)DDA第四象限直线插补
变量名称
说明
变量名称
说明
X1
直线起点横坐标
Jvx
X被积函数寄存器
Y1
直线起点纵坐标
Jrx1
X普通DDA积分累加器
X2
直线终点横坐标
Jrx2
X全加载积分累加器
Y2
直线终点纵坐标
Jrx3
X半加载积分累加器
x
绘图动点横坐标
Jvy
Y被积函数寄存器
y
绘图动点纵坐标
Jry1
Y普通DDA积分累加器
L
插补步长
Jry2
Y全加载积分累加器
N
寄存器位数
Jry3
Y半加载积分累加器
Mx
X终点判别计数器
X
插补动点横坐标
My
Y终点判别计数器
Y
插补动点纵坐标
(二)逐点比较法第2~1象限顺圆弧插补
变量名称
说明
变量名称
说明
X1
圆弧起点横坐标
E
终点判别计数器
Y1
圆弧起点纵坐标
F
偏差判别
x
绘图动点横坐标
X
插补动点横坐标
y
绘图动点纵坐标
Y
插补动点纵坐标
r
圆弧半径
Mx
X插补步数
X2
圆弧终点横坐标
My
Y插补步数
Y2
圆弧终点纵坐标
L
插补步长
A
圆心到弦中点的距离
a1
圆弧起点角坐标
x0
圆心横坐标
a2
圆弧终点角坐标
y0
圆心纵坐标
a
绘图动点角坐标
程序界面:
(三)DDA第四象限直线插补
(1)普通DDA
(2)全加载
(3)半加载
(四)逐点比较第1~2象限逆圆弧插补
五详细程序设计流程图
(一)DDA第四象限直线插补
(二)逐点比较法第1~2象限逆圆弧插补
六源程序
functionvarargout=f2(varargin)
%F2MATLABcodeforf2.fig
%F2,byitself,createsanewF2orraisestheexisting
%singleton*.
%
%H=F2returnsthehandletoanewF2orthehandleto
%theexistingsingleton*.
%
%F2('CALLBACK',hObject,eventData,handles,...)callsthelocal
%functionnamedCALLBACKinF2.Mwiththegiveninputarguments.
%
%F2('Property','Value',...)createsanewF2orraisesthe
%existingsingleton*.Startingfromtheleft,propertyvaluepairsare
%appliedtotheGUIbeforef2_OpeningFcngetscalled.An
%unrecognizedpropertynameorinvalidvaluemakespropertyapplication
%stop.Allinputsarepassedtof2_OpeningFcnviavarargin.
%
%*SeeGUIOptionsonGUIDE'sToolsmenu.Choose"GUIallowsonlyone
%instancetorun(singleton)".
%
%Seealso:
GUIDE,GUIDATA,GUIHANDLES
%Edittheabovetexttomodifytheresponsetohelpf2
%LastModifiedbyGUIDEv2.509-Jan-201410:
52:
17
%Begininitializationcode-DONOTEDIT
gui_Singleton=1;
gui_State=struct('gui_Name',mfilename,...
'gui_Singleton',gui_Singleton,...
'gui_OpeningFcn',@f2_OpeningFcn,...
'gui_OutputFcn',@f2_OutputFcn,...
'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
%Endinitializationcode-DONOTEDIT
%---Executesjustbeforef2ismadevisible.
functionf2_OpeningFcn(hObject,eventdata,handles,varargin)
%Thisfunctionhasnooutputargs,seeOutputFcn.
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%varargincommandlineargumentstof2(seeVARARGIN)
%Choosedefaultcommandlineoutputforf2
handles.output=hObject;
%Updatehandlesstructure
guidata(hObject,handles);
%UIWAITmakesf2waitforuserresponse(seeUIRESUME)
%uiwait(handles.figure1);
%---Outputsfromthisfunctionarereturnedtothecommandline.
functionvarargout=f2_OutputFcn(hObject,eventdata,handles)
%varargoutcellarrayforreturningoutputargs(seeVARARGOUT);
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%Getdefaultcommandlineoutputfromhandlesstructure
varargout{1}=handles.output;
%---Executesonbuttonpressinpushbutton1.
functionpushbutton1_Callback(hObject,eventdata,handles)%绘制直线
globalx1y1x2y2LNxyMxMyJvxJrx1Jrx2Jrx3JvyJry1Jry2Jry3XY;
x1=str2double(get(handles.edit1,'string'));
y1=str2double(get(handles.edit2,'string'));
x2=str2double(get(handles.edit3,'string'));
y2=str2double(get(handles.edit4,'string'));
L=str2double(get(handles.edit7,'string'));
N=str2double(get(handles.edit6,'string'));
ifx1<=0|y1>=0|x2<=0|y2>=0
set(handles.text11,'string','直线不在第四象限!
');%判断直线是否在第四象限
else
ifx1==x2
y=y1:
(y2-y1)/100:
y2;
x=y.*0+x1;
plot(x,y,'k');
holdon;
else
x=x1:
(x2-x1)/100:
x2;
plot(x,y,'k');
holdon;
end
xmin=min(x);
xmax=max(x);
ymin=min(y);
ymax=max(y);
axisequal;
axis([xmin-Lxmax+Lymi