电梯控制课程设计报告Word文档格式.docx
《电梯控制课程设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《电梯控制课程设计报告Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
5.代码设计9
5.1概要设计9
5.2详细设计12
6.运行结果15
7.总结18
参考资料18
1.引言
1.1编写的目的
1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。
2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
4.训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。
1.2软件产品的作用范围
近年来,随着计算机技术日新月异的发展,编程语言及自动控制都有了很大的进步。
这为人们的学习和生活提供了极大的便利。
电梯技术的发展也离不开这一切。
现在无论是在办公大楼或者是企业,或者是公司内部,都离不开电梯的身影。
对于电梯的自动控制技术的研究也越来越多。
本软件产品主要是针对小型的电梯,具有4部40层楼的结构,主要应用在学校,医院,小型企业等。
1.3背景
名称:
电梯控制系统
开发者:
2、一般性描述
2.1、产品与其环境之间的关系
该系统要求在windows环境下运行,如Windows95、Windows98、WindowsXP、Windows7等。
2.2、产品功能
实现运载功能,满足乘客的要求,当有不同的请求时,系统以事件驱动方式响应请求
2.3、用户特征
(1)维护人员需要了解自动化的基本知识,并且具备基本的电梯逻辑控制的编程
知识。
(2)管理人员需要掌握电梯的基本运行情况,熟悉电梯的工作条件,如电压等。
(3)乘客需要知道电梯显示面板各个按钮的功能,上下楼时该如何操作。
2.4、限制与约束
该电梯控制系统要求在windows环境下运行;
2.5、假设与前提条件
本电梯控制系统在开发的过程中,分为软件工程与技术实现两大部分。
若软件工程陈述出现问题,需求分析不透彻,部分描述含混不清,则会影响系统的完整性与可继承性。
若技术支持出现故障或疑难问题无法解决、程序开发出现偏差,会延误工程进度,影响工程的按期完工。
在管理方面,如管理者没有预见性,对出现的问题无法采用可行的解决手段,会影响该电梯系统的寿命,从而造成经济的损失。
因此,在本电梯控制系统中
(1)假设条件:
在软件工程方面,需要项目经理组织开发团队通过使用工程经济学的手段对软件开发的各个阶段进行实时的表述、规划和计算。
技术实现的方面,主要是决定优先次序的算法,即在遇到有冲突的请求时,如果两楼层同时发出请求,则只能取消其中一个请求。
此时,决定优先次序的算法应尽量减少两个请求的等待时间。
(2)前提条件:
需要分析人员要有丰富的经验,充分理解分析该系统要实现的功能;
开发人员要具备丰富的编程经验,尽量做到让系统能够满足客户的需求;
再者,队员之间要互相沟通,有很好的团队合作精神。
4.详细需求
4.1功能需求
电梯上下运动控制
(1)引言
为了满足用户的上楼或下楼请求、用户正确到达目的楼层,系统通过响应用户的请求指令,进而驱动电梯驱动电机来控制电梯的上下运动
(2)输入
用户通过电梯内部的按钮——1~40层的数字按钮、向上或向下请求的按钮
(3)处理过程描述
系统获得多用户的请求后,将指令传递到应用接口,在系统的规定等待时间段里,如果没有特殊请求(开门、关门按钮),电梯门则自动关闭,然后将获得的请求经过优先处理得到当前电梯所要去的首目的楼层,结合电梯当前楼层判断出电梯要做向上还是向下运动,进而将指令传递给上下运动控制系统,从而驱动电梯上下运动来实现上下楼的目的。
当电梯到达该楼层后,按钮灯熄灭。
如果电梯已到达该楼层,或者电梯正在沿所请求的方向运动,或者遇到有冲突的请求时,按钮灯灭。
在遇到有冲突请求的情况下,如果两楼层同时发出请求,则只能取消其中一个请求。
决定服务优先次序的算法应该尽量减少两个请求的等待时间。
(4)输出
电梯的运行结果即为输出结果,在到达该楼层后电梯门自动开启,自动开启后在系统的规定等待时间段里,如果没有特殊请求,电梯门则自动关闭。
如果电梯的运行结果错误,则需要通知管理人员、维护人员进行检查和维护。
优先级控制
电梯很多时候都会接到两个或两个以上的请求,为了减少多个请求的等待时间,系统需要对多个请求进行优先级的判断
按钮的选择相当于输入
在多用户使用电梯的时候,即系统接到多个请求后,或系统在接到一个请求后又接到别的请求。
系统将当前的首目的楼层与新的请求相比较,根据减少请求间的等待时间为原则判断哪个请求优先,从而系统先响应优先请求,即将优先的请求更新为电梯新的首目的楼层,如果中途再有新请求,则做一样的处理。
电梯的运行结果即为输出结果,如果电梯的运行结果错误,则需要通知管理人员、维护人员进行检查和维护。
4.2外部界面需求
4.2.1用户界面
乘客操作界面
4.3性能需求
4.3.1精度
由于本电梯控制系统属于对按钮的选择,通过控制按钮选择楼层,因此对所需精度无特殊的要求。
4.3.2时间特征
本电梯控制系统属于实时模拟系统,对响应时间、处理时间上有一定的要求。
需要:
a.响应时间迅速
b.更新处理时间相对比较快
c.数据的转换和传送时间迅速
因此对时间特性的要求如下:
响应时间:
<
=2s
处理时间:
=1s
更新处理时间:
=5s
4.3.3灵活性
a.编写代码模块化,以保证修改时同其他软件的接口变化不大;
b.在时间响应速度上可以做到更高的效率;
c.计划发生变化或改进时能方便软件的开发人员和维护人员灵活的增减、修改该系统的功能、代码等。
4.4属性
4.4.1可用性
向客户提供详细的操作手册,和数据字典等。
使用户能够对电梯的控制系统有个初步的了解
4.4.2安全性
只有开发人员和维护人员才有权限查看和修改该系统的源代码,以防止程序和数据受到意外的或蓄意的存取、使用、修改、毁坏或泄密。
4.4.3可维护性
代码有足够的注释,清晰的结构,变量、函数等的命名具有较高的易理解性,以便修改潜伏的错误,改进性能和其他属性,使软件产品适应环境的变化
4.4.4可移植性
本电梯控制系统采用windows操作系统下的VC++6.0编译环境,在通用的程序设计语言和运行支撑环境下,有较高的可移植性
5.代码设计
5.1概要设计
(1)、电梯类型
classCElevator:
publicCDialog
{
public:
CElevator(CWnd*pParent=NULL);
ElevatorTeam*cteam(ElevatorTeam*head,intfloor,intCrequest=free);
ElevatorTeam*add(ElevatorTeam*tail,intfloor,intCrequest=free);
ElevatorTeam*del(ElevatorTeam*head,ElevatorTeam*p);
ElevatorTeam*head;
ElevatorTeam*tail;
voidstopF();
voidbutton(intf);
intflag;
intnowfloor;
intstate;
intstop;
intrequest;
intsignal;
enum{IDD=IDD_Elevator};
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
protected:
CRectm_rect;
intfloor;
ElevatorTeam*station;
afx_msgvoidOnPaint();
afx_msgvoidOnTimer(UINTnIDEvent);
afx_msgvoidOn1();
afx_msgvoidOn2();
afx_msgvoidOn3();
afx_msgvoidOn4();
afx_msgvoidOn5();
afx_msgvoidOn6();
afx_msgvoidOn7();
afx_msgvoidOn8();
afx_msgvoidOn9();
afx_msgvoidOn10();
afx_msgvoidOn11();
afx_msgvoidOn12();
afx_msgvoidOn13();
afx_msgvoidOn14();
afx_msgvoidOn15();
afx_msgvoidOn16();
afx_msgvoidOn17();
afx_msgvoidOn18();
afx_msgvoidOn19();
afx_msgvoidOn20();
afx_msgvoidOn21();
afx_msgvoidOn22();
afx_msgvoidOn23();
afx_msgvoidOn24();
afx_msgvoidOn25();
afx_msgvoidOn26();
afx_msgvoidOn27();
afx_msgvoidOn28();
afx_msgvoidOn29();
afx_msgvoidOn30();
afx_msgvoidOn31();
afx_msgvoidOn32();
afx_msgvoidOn33();
afx_msgvoidOn34();
afx_msgvoidOn35();
afx_msgvoidOn36();
afx_msgvoidOn37();
afx_msgvoidOn38();
afx_msgvoidOn39();
afx_msgvoidOn40();
afx_msgvoidOnGO();
DECLARE_MESSAGE_MAP()
};
(2)、主程序
主程序主要处理两类事件:
乘客事件和电梯事件。
除此之外,主程序还处理各个模块的初始化和销毁工作,以及电梯状态的输出。
乘客事件包括新乘客到达事件,乘客放弃等待事件,乘客进出电梯事件。
电梯事件包括电梯运行事件。
1、本程序包含6个模块:
(1)主程序模块
(2)乘客模块
(3)乘客栈模块
(4)电梯模块
(5)等待队列模块
(6)高楼模块:
实现电梯和乘客之间的互交。
各模块之间的调用关系如下:
5.2详细设计
部分主要代码:
//电梯选择函数
voidCElevatorSystemDlg:
:
call(intstate,intf)
intcha=600;
intselect=5;
//初始选择
for(inti=0;
i<
4;
i++)
{//循环检测是否有符合条件的电梯
if((m_elevator[i]->
state==free)||((m_elevator[i]->
state==state)&
&
(m_elevator[i]->
request==free))||((m_elevator[i]->
request==state)&
state==state)))
{//是否有空闲电梯||上下行状态与需求一致并且电梯没有收到请求||上下行状态与需求一致并且需求状态与请求状态一致
if(((m_elevator[i]->
nowfloor<
f)&
(m_elevator[i]->
state==up))||((m_elevator[i]->
nowfloor>
state==down)))
//如果上行状态中,电梯的当前楼层小于请求楼层||下行状态中,电梯当前楼层大于请求楼层
continue;
if(abs(m_elevator[i]->
nowfloor-f)<
cha)//是否满足缓冲减速距离
{
cha=abs(m_elevator[i]->
nowfloor-f);
select=i;
//选择这部电梯
}
}
elsecontinue;
}
if(select==5)//如果当前选择状态为,循环检测直到找到合适的电梯
{
do{
if(signal==1)
{signal=0;
if(!
chead)
chead=team(chead,f,state);
else
chead=cadd(chead,f,state);
SetTimer(3,20,0);
signal=1;
}while(signal==0);
else//已经找到合适的电梯
do{if((m_elevator[select]->
nowfloor!
=f)&
(m_elevator[select]->
signal==1))
{
m_elevator[select]->
signal=0;
//m_elevator[select]->
request=state;
if(m_elevator[select]->
head==NULL)
{
m_elevator[select]->
head=m_elevator[select]->
cteam(m_elevator[select]->
head,f,state);
}
tail=m_elevator[select]->
add(m_elevator[select]->
tail,f,state);
SetTimer(1,20,0);
signal=1;
}while((m_elevator[select]->
signal!
=1));
Onup1()//在楼按上按钮
GetDlgItem(IDC_BUTTON22)->
EnableWindow(FALSE);
if(m_elevator[i]->
nowfloor==F1&
m_elevator[i]->
state==free)
EnableWindow(TRUE);
call(up,F1);
}
voidCElevator:
On1()
//在电梯内按楼按钮
CElevator:
floor=F1;
do{
if((nowfloor!
=floor)&
(signal==1))
{
signal=0;
if(head==NULL)
head=CElevator:
cteam(CElevator:
head,CElevator:
floor);
else
tail=CElevator:
add(CElevator:
tail,CElevator:
GetDlgItem(IDC_BUTTON2)->
if(!
flag)
SetTimer(1,20,0);
signal=1;
}while((nowfloor!
(signal!
}6.运行结果
电梯全在一楼时:
在30楼按上时:
在8楼按上时:
在20楼按下时:
在2号电梯按40楼时:
在4楼按下:
7.总结
本设计对于现在的学习程度来说比较难,当初因为考虑不够成熟,以为有提示会简单一点,可这大大超出目前编程能力,思考不严谨,以至于程序层次十分混乱。
当参考有关资料后发现思路相当重要,将程序分块,划分基本类型,分析各模块的基本操作,这些均可独立开来做。
在编译时发现了错误也可以方便修改。
这些基本功其实在实用时才会发现自己掌握得并不牢靠,许多依然会犯低级错误,输入时若不根据设计的程序所规定的方式就容易发生错误。
由于开始按照实现提示来做就定义了很多后来都没有用到的变量,结果既浪费了时间又打乱了设计思绪。
原来简单的现实事件当做成程序想实现它时还是很难的,这就不能凭空想象来对待编程了。
编程很需要将实际与程序用变通的思想联系起来。
平时还经常抱怨所学的知识与实际应用脱节,现在才觉得基本功的重要性,准备工作很有必要。
完成这份报告要感谢各位组员的努力和付出。
参考资料
《软件工程(第二版)》齐治昌谭庆平宁洪编著高等教育出版社
《软件工程》钟珞袁景凌编著清华大学出版社