Matlab平台下的仪表仿真技术
- 格式:doc
- 大小:1.14 MB
- 文档页数:15
《Matlab平台下的仪表仿真技术》
实验报告
班级:371711班
学号:37171114
姓名:苑海涛
2010年12月 一、 实验目的
用MATLAB软件仿真设计一些常用的飞行仪表(高度表、转弯侧滑仪、地平仪等)。通过仪表仿真增加对飞机性能的了解,熟悉飞行仪表的工作原理,并能够进行仿真设计。
二、 实验内容
使用MATLAB软件设计气压高度表并进行仿真。
三、 实验要求
提供在功能上和外观上尽可能逼真的气压式高度表,可以实现至少两种类型高度(如标准气压高度、场压高度)的切换显示。
四、 实验原理
图1 各种高度示意图
高度表原理:利用标准大气压下高度与大气压力的关系,利用真空膜盒测量大气压力,从而表示飞行高度。理论依据:在标准大气条件下,高度和大气压力具有一一对应的关系。
图2 标准大气条件下高度和大气压力的关系
五、 程序设计思路
本程序分为三个模块,分别是界面模块、指针数字模块和停止模块。界面模块完成界面整体布局,以及程序载入时各参量变量的初始化工作。指针数字模块主要实现是指针的移动和整千米一下数字的显示,完成指针加数字结合的显示气压高度的功能。停止模块实现仿真过程中的停止功能。
六、 详细程序流程
开始
按照预定速度增加 加速
减速
停止 界面模块:在程序加载时被调用,开始绘制表盘及指针。此处在GUI界面内添加了开始、停止、加速、减速及输入高度的一些功能。
指针数字模块:此模块主要实现高度的显示。首先单击开始,高度表按照预先设定的速度匀速升高,再单击结束时可以停止。在高度显示过程中若点击加速或者减速,在下一次开始时高度表的变化速度相应的增加或者减少。当有高度输入时,高度表的起始显示从此高度开始,高度表相当于始终显示的是绝对高度。
停止模块:当想结束程序时可以单击,用于停止程序。
七、 仿真界面(程序运行截图和说明)
Figure1是程序载入时的截图。
Figure2是程序在仿真时的截图。此时上升速度比较小,运行一段时间才到21m
Figure3是加速后过了一段时间的显示高度为672m
Figure4是在相对高度输入5000时,高度表从5km开始显示,此时为5112m。
Figure5是程序结束时截图,说明结束时指针显示保留。
八、 实验体会
通过本课程的学习,对于MATLAB语言有了大致了解,以及MATLAB平台下的仪表仿真技术有了初步认识。完成大作业是一个很考验人也很锻炼人的过程。在开始做高度表时,感到压力很大,MATLAB这门语言以前虽有接触,但基本都停留在一些数学的应用上。应用用户图形界面还是第一次,当然这才是MATLAB的精华所在。这次大作业主要参考了老师给提供的第二个例子。本来想把加速减速功能做成实时可以改变指针速度的,但是实际操作修改程序时,发现这么做还是有些难度的,所以就做成每再次运行程序时才是以最新的速度改变的。MATLAB不仅是一个工具更是一个值得掌握的软件,它功能强大,并有适合基础比较弱的人掌握,在以后的学习中,我会更加认真学习此软件。
九、 程序清单(附关键代码及注释)
alt.m
more off
clc
clear
close all
global FLAGSTOP i a b c D sizeDATA Mh p t R idxX1 idxX2 idxY1 idxY2 idxA
xp yp;
c=0;
a=0:D:11000;
D=0.1;
a=a/100;
b=a-1;
sizeDATA=max(size(a));
FLAGSTOP=0;
Mh=figure;
set(gcf,'menubar','none','Resize','off','Name','VIRTUAL ALTITUDE
INDICATOR','NumberTitle','off');
axis equal;
box on
axis off
hold on
t=-pi:0.1:(pi+0.1); R=12;
fill((R+3)*sin(t),(R+3)*cos(t),'k')
plot(16*cos(pi*1/4),16*sin(pi*1/4),'o','markersize',40,'LineWidth',40,'Color','k')
plot(16*cos(pi*3/4),16*sin(pi*3/4),'o','markersize',40,'LineWidth',40,'Color','k')
plot(16*cos(pi*5/4),16*sin(pi*5/4),'o','markersize',40,'LineWidth',40,'Color','k')
plot(16*cos(pi*7/4),16*sin(pi*7/4),'o','markersize',40,'LineWidth',40,'Color','k')
plot(16*cos(pi*1/4),16*sin(pi*1/4),'o','markersize',25,'LineWidth',20,'Color','w')
plot(16*cos(pi*3/4),16*sin(pi*3/4),'o','markersize',25,'LineWidth',20,'Color','w')
plot(16*cos(pi*5/4),16*sin(pi*5/4),'o','markersize',25,'LineWidth',20,'Color','w')
plot(16*cos(pi*7/4),16*sin(pi*7/4),'o','markersize',25,'LineWidth',20,'Color','w')
plot(16*cos(pi*1/4),16*sin(pi*1/4),'o','markersize',20,'LineWidth',20,'Color','k')
plot(16*cos(pi*3/4),16*sin(pi*3/4),'o','markersize',20,'LineWidth',20,'Color','k')
plot(16*cos(pi*5/4),16*sin(pi*5/4),'o','markersize',20,'LineWidth',20,'Color','k')
plot(16*cos(pi*7/4),16*sin(pi*7/4),'o','markersize',20,'LineWidth',20,'Color','k')
line([16*cos(pi*1/4)+1.6,16*cos(pi*1/4)-1.6],[16*sin(pi*1/4),16*sin(pi*1/4)],'LineWidth',5,'Color',[1 1 1]);
line([16*cos(pi*3/4)+1.6,16*cos(pi*3/4)-1.6],[16*sin(pi*3/4),16*sin(pi*3/4)],'LineWidth',5,'Color',[1 1 1]);
line([16*cos(pi*5/4)+1.6,16*cos(pi*5/4)-1.6],[16*sin(pi*5/4),16*sin(pi*5/4)],'LineWidth',5,'Color',[1 1 1]);
line([16*cos(pi*7/4)+1.6,16*cos(pi*7/4)-1.6],[16*sin(pi*7/4),16*sin(pi*7/4)],'LineWidth',5,'Color',[1 1 1]);
plot(R*sin(t),R*cos(t),'Color','w');
plot((R+0.3)*sin(t),(R+0.3)*cos(t),'Color','k');
plot(R*sin(t),R*cos(t),'LineWidth',1.5,'Color','w'); plot(0,0,'o','markersize',6,'LineWidth',5,'Color','w')
% text(-0.5,10,'0','FontSize',12,'FontWeight','bold')
plot((R+0.3)*sin(t),(R+0.3)*cos(t),'LineWidth',2.5,'Color','w')
axis equal;
box on
axis off
hold on
fill(R*sin(t),R*cos(t),'k')
p=a;
[sizexp sizeyp]=size(p);
xp=8*cos(p+pi/2); %Ö¸Õë
yp=8*sin(p+pi/2);
idxA=0:pi/6:2*pi;
idxX1=12*cos(idxA); %¿Ì¶È
idxY1=12*sin(idxA);
idxX2=11*cos(idxA);
idxY2=11*sin(idxA);
for j=1:12
line([idxX1(j)+.1,idxX2(j)+.1],[idxY1(j),idxY2(j)],'LineWidth',6,'Color',[.5 .5 .5]);
end
for j=1:60
line([12*cos(pi*j/30)+.1,11.5*cos(pi*j/30)+.1],[12*sin(pi*j/30),11.5*sin(pi*j/30)],'LineWidth',3,'Color',[.5 .5 .5]);
end
for j=1:60
line([12*cos(pi*j/30),11.5*cos(pi*j/30)],[12*sin(pi*j/30),11.5*sin(pi*j/30)],'LineWidth',3,'Color','w');
end
for j=1:12
line([idxX1(j),idxX2(j)],[idxY1(j),idxY2(j)],'LineWidth',6,'Color','w');
end
hold on
for texti=0:11
text(cos(pi/2-texti*pi/6)*(R-2),sin(pi/2-texti*pi/6)*(R-2),num2str(te