关于电梯运行逻辑原理的思路分析

来源:互联网 发布:ebsco数据库 编辑:程序博客网 时间:2024/05/01 04:21

以前面试考官出的一道题,要求口头作答。今天简单整理了一下一个电梯的上下运行逻辑。

一、简单归纳

系统:window7

语言:不涉及

探究事物:一部电梯的运行逻辑的分析

电梯个数:1

电梯状态:int staTi:0.1.2 0,表示上升,1表示停止,2表示下降。电梯所在层数:int nTi;
使用者按键:int staAn: 0,1,2,0,表示上升,1表示未使用,2表示下降。使用者所在层:int nAn;希望到达层:int hAn;
总楼层数:int nNu;
优先级问题:①同层同时点上下。分作两次按键事件处理。
                     ②不同层同时点击。 最优处理,参照下行“优化”说明。
最优处理:每次电梯运行状态(非1)转变(0,2切换)时,需要先判断,是否还有满足此时运行条件的需求。有则继续保持当前运行状态,否,则开始切换。
二、运行逻辑
使用者按键状态staAn改变为0,或者2;此处要由线程随时监控staAn的改变。然后对比电梯状态。
三种情况:
①staAn=0;//希望上升

{
   switch staTi: 
   {
        //电梯上升
        case 0:     nti-nAn=>-1 电梯高于人,人类等待电梯本次运行完毕,状态修改为1时,响应状态修改为2下降至nAn层搭载客户,而后上升,此时状态修改为0。
nTi-nAn<-1 电梯在人类下面一层  电梯运行至此层停止
        //电梯停止
case 1:  nti-nAn>0 电梯高于人    //电梯状态改为2,下降至nAn层,而后上升至hAn层
                  nTi-nAn=0 电梯停在同层,人类上电梯。    
nTi-nAn<0 电梯停在人类下面,电梯状态改为0,上升至nAn搭载人类,而后上行。
//电梯下降
case2:   nti-nAn=>1 电梯高于人,电梯运行至nAn层停下,搭载客户,期间状态不改变。
nTi-nAn<1 电梯在人类下面,  电梯运行完毕状态修改为零时,上升。
    }
}
②staAn=1;//没有人类使用。
{
    始终保存最后一次运行结束的时间,每五分钟对比一次当前时间。15分钟始终未运行。电梯运行至 楼层中间层nNu/2 层。(nTi>nNu/2 ? nTi:nNu)判断nTi及nNu/2的大小,确定电梯运行方向。修改电梯运行状态。
}
③staAn=0;//希望下降
{
   swicth staTi: 
   {
        //电梯上升
        case 0:     nti-nAn<=-1 电梯低于人,电梯至nAn层搭载客户。
nTi-nAn>-1 电梯在人类上面,电梯运行完毕状态修改为零时,下降搭载客户。
        //电梯停止
case 1:  nti-nAn>0 电梯高于人    //电梯状态改为2,下降至nAn层,而后上升至hAn层
                  nTi-nAn=0 电梯停在同层,人类上电梯。    
nTi-nAn<0 电梯停在人类下面,电梯状态改为0,上升至nAn搭载人类,而后下行,状态改为2。
//电梯下降
case2:   nti-nAn=>1 电梯高于人,电梯运行至nAn层停下,搭载客户,期间状态不改变。
nTi-nAn<1 电梯在人类下面,电梯运行完毕状态修改为1时,响应上升,状态修改为0,搭载客户,而后状态修改为2。
    }
}

三、其它注意问题

①双击楼层按键应可以取消选择。按照数据库存入操作信息的存储方式的话,此操作应该将该层该类操作信息删除。

②关于电梯的各个楼层的按键可以按照一定结构存入数据库,运行时可通过当前运行方向及楼层,搜索数据库中最近楼层的操作(这样也能实现按键的及时性,即在电梯即将运行到某层时,某层用户立即按键,此数据实时记录到数据库中,电梯实时判断按照当前运行情况搜索数据库,是否存在最近楼层操作,如果存在即停止),以达到最优效果。

③数据库设计。可分为上行和下行进行数据存入。其中运行表中,应包含,”排队序号、电梯编号、上行/下行、操作楼层等主要信息。电梯上行时实时查询上行运行表。下行时访问下行运行表。各楼层请求操作将分上下行存入运行表中。

④某些地方存在高层电梯(停靠>20层),中层电梯(20>停靠>10),底层电梯(停靠<10)。此种类型电梯可以采用两种方式实现,第一种取消硬件按钮,即取消了非停靠层的请求来源。一种是对电梯响应请求时附加条件(即搜索查询数据库时只响应满足停靠要求的请求)。


原创粉丝点击