一、系统介绍
1. 功能描述
本电梯系统用来控制一台运行于一个具有16层的大楼电梯,它具有上升、下降、开门、关门、载客的基本功能。
大楼的每一层都有:
(1) 两个指示灯: 这两个指示灯分别用于指示当前所在的层数和电梯的当前状态(上行、下行或停止);
(2)按钮: 除了第一层和顶层,每一层都有两个按钮(上行、下行),乘客可以呼叫上楼或下楼,顶楼只有一个下楼按钮,而第一层只有一个上楼按钮。
2. 电梯里面具有: 标示从“1”到“16”的16个楼层按钮,用于让乘客选择所要的层数;
注:1-8层不停
二、关键实现方法描述
用两个队列来实现电梯的调度,电梯根据这两个队列发送来的楼层号作为目的地进行运行。在上行队列中保存了所有的上行请求的楼层号(包括楼层的呼叫和电梯里的楼层按钮请求),即保存电梯上行时需要停的楼层号。
队列排列规则是:高于或等于电梯当前所地楼层的上行请求的楼层号从小到大排在队列的前部分,低于电梯当前所地楼层的上行请求的楼层号从小到大排在队列后部分。如果新请求的楼层号被插在队列头时同时将这个楼层号发送给电梯作为它的目的地。在下行队列中保存了所有的下行请求的楼层号(包括楼层的呼叫和电梯里楼层按钮请求),即保存电梯下行时需要停的楼层号。
三、电梯具体设计
本次设计用的语言是.net,用的环境是VS 2010开发工具,
该系统用了3个.cs文件,一个主类class ElevatorController,主要定义了函数用来调度电梯。一个class Elevator,标明电梯状态;一个class Form1,设计布局,线程控制;
1. 电梯设置: 电梯分为三种状态:静止,上升,下降。
2 乘客分析: 乘客的需求分为“上”和“下”两种。
3 电梯需要初始化,其中状态为静止state=0,层数floor_lift设置为1。目标层数数组需要初始化。
程序源代码:
1.Elevator.CS
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ElevatorManager { class Elevator { public int floor; public bool[] panel;//电梯内面板状态 public int direction;//up,down public int gatestatus;//open,close public bool isrun; const int UP = 0; const int DOWN = 1; const int CLOSE = 0; const int OPEN = 1; public Elevator() { floor = 0; panel = new bool[10]; for (int i = 0; i < 10; ++i) { panel[i] = false; } direction = UP; gatestatus = CLOSE; isrun = false; } public void setPanel(int i) { panel[i] = true; } } }