进程管理项目——电梯调度
Elevator Dispatch
进程管理项目——电梯调度 Elevator Dispatch
项目需求
基本任务功能描述
开发环境系统分析
电梯内部请求电梯外部请求
系统设计
界面设计类设计
电梯状态设计
消息传递机制设计系统实现
内部请求处理外部请求处理调度算法
电梯状态更新多线程编程
操作说明功能演示
项目需求
基本任务
某一层楼20层,有五部互联的电梯。基于线程思想,编写一个电梯调度程序。
功能描述
设有不同功能的按键
电梯内部设有数字键、开门键、关门键和报警键每层楼的每部电梯外部设有上行键和下行键
有数码显示器指示当前电梯状态
开发环境
操作系统平台:Windows 10
开发语言:Java SE
JDK版本:jdk1.8.0_152
开发软件:Eclipse IDE 2020-03 (4.15.0)
系统分析
电梯内部请求
乘客按下开\关门按钮
若电梯处于运行状态,乘客按下开\关门按钮将不会引起响应 若电梯处于停靠状态,电梯将在固定时间后自动关门,
a.若乘客按下开门键,电梯将保持开门状态,并重新进行关门倒计时
b.若乘客按下关门键,电梯将立即关门乘客按下警报按钮
电梯将转变为故障状态,所有已经被调度给此电梯的外部请求将被重新调度乘客按下楼层按钮(设对应楼层为 i )
此电梯将添加一个目标楼层为 i 的调度请求,
如果第 i 层在电梯当前的运行方向上,且在电梯当前楼层与目标楼层之间, 那么电梯将在该方向运行过程中在第 i 层停靠
如果第 i 层在电梯当前的运行方向上,且比当前电梯目标楼层更远,那么电梯将把目标楼层修改为 i
如果第 i 层不在电梯当前的运行方向上,那么电梯将先前往当前的目标楼层,再重新设置目标楼层,改变运行方向,前往第 i 层
如果第 i 层恰好为电梯的当前楼层,考虑到电梯实际运行时,需要一段减速时间才能停靠,因此电梯不应立即响应此请求,而是将这种情况看作情况3
电梯外部请求
乘客在某一楼层按下上行键或下行键(设楼层为 i )
1.系统将创建一个目标楼层为 i 的上行\下行请求
2.根据调度算法,计算每部电梯响应此调度请求的权值,并选出接受此请求的电梯
调度权值: (调度算法具体分析在系统实现部分)
1.故障电梯
处于故障状态的电梯无法调度
2.静止电梯
电梯当前楼层到第 i 层的层数差
3.顺路
电梯当前楼层到第 i 层的层数差 + 到达第 i 层路程中的停靠时间
4.非顺路
电梯绕路后到第 i 层的运行总层数 + 到达第 i 层路程中的停靠时间
3.将此调度请求添加到最优电梯的调度请求队列中