1 、春晖楼实际调研
数据
电梯实际运行概况
经过实际的调研,电梯的实际运行状况与开始的初步想法有些出入,在外部同一组电梯,按下其中一个请求按钮,一组电梯的请求信号同时亮起同时做出响应,并且电梯没有固定初始位置,初始位置默认为电梯最后到达的一楼层,在内部进入电梯后如不对电梯发出任何请求,电梯不做出任何响应,电梯运行中优先响应与电梯运行方向相同的请求,
2、设计
对于四部电梯调度进行简化来进行思考;首先我们假定有一台电梯,对于上述条件进行调度。
- 电梯 电梯有三种状态,上升、静止、下降;同时电梯根据上述条件有乘客与重量的限制,是否超重;在最顶层上升不可用,在最低层下降不可用,求助状态,断电状态,电梯门状态,电梯所在楼层。Class 电梯{ private int MoveStatus;//运行状态 private int MoveDir;//运行方向 private int MaxWeight;//重量限制 private int WhereFloor;//所在楼层 private bool HelpSingle;//求助信号 private bool NoPower;//断电状态 private bool DoorStatus;//电梯门状态 pubulic bool OpenDoor();//打开电梯门 pubulic bool CloseDoor();//关闭电梯门 pubulic bool OverWeight();//检测超重 pubulic bool ChangStatue();//改变电梯状态 }
- 运行单电梯情况:每一层,乘客发出请求,电梯响应请求。首先,进行方向判断,优先与电梯方向相同并且楼层与电梯所在楼层相近的请求。其次,待与电梯方向相同的请求执行完毕之后,电梯改变运行方向,按照之前的规则执行,直至电梯没人,电梯恢复初始位置。假设:电梯初始楼层在一楼,MoveRequest=0(用户请求变量),监测用户请求,此时电梯门处于关闭状态; 1、若有用户请求,判断是否本层请求 若在本层,则用OpenDoor()函数打开电梯门,同时每隔固定时间检测用户是否已全部进入电梯,若已全部进入电梯,则用CloseDoor()函数关闭电梯,继续运行。 若不在本层,则判断时候接收到多了用户请求,若是多个请求则利用JudgeNext()函数判断该响应哪一个请求。若只有一个请求,则直接响应,判断是否需要改变运行方向MoveDir,上为1,下为-1,改变运行状态MoveStatus上升为1,静止为0,下降为-1.
2、若无请求,则继续监视。
JudgeNext()
{if(判断请求楼层是否与电梯运行方向相同)
{for()//多个请求,依次响应
{
if(若多个请求,比较距离本楼层最近的请求) {给出响应}}
} else{
电梯方向响应完成后,改变方向,响应反方向的请求。规则与上面类似。}
} 推广:四电梯情况 与一电梯情况区别在,某人在某层同时给四部电梯发出请求,四部电梯如何响应的问题。 pubulic float TotleCost()//计算出此状态 到达目标层所用时间{
电梯状态随着请求的结束不断变化,每个状态时间不一样。
}
BestJudgeNext()//给出最有响应{
根据四部电梯的状态,计算出到达本层并响应该请求总共所用的时间,取时间最短的电梯做出响应。
}- 特殊情况超重:当电梯超重时,电梯发出警告,电梯不可用,保持运行方向,待问题解决完之后,电梯可用,继续运行。断电:在备用电源的支持下,电梯恢复到初始位置。意外停止:电梯强制静止,通知发送求助状态。
3、设计窗体初稿:
以图片替换的形式来展示电梯的运行过程。