电梯调度

问题:

某大厦,一共四部电梯,二十一层楼,一二两部电梯限乘客10人限重800KG,三四两部电梯限20人限重2000Kg。实现电梯正常调用,它从底部到顶部,停在每一层楼,打开门,让人们进出,然后把门关上,继续前进。之后到达顶层,它会下去。

电梯运行时间:

(大致时间   单位:秒    最高十一层)

开门时间:2.278

关门时间:2.654

开关门时间(有间歇):5.639

上升:

每层之间:7.860

一层到十一层:29.017

下降:

每层之间:7.528

十一层到一层:29.583

加速:2.457

减速:2.368

问题简单分析:

每部电梯,当电梯已坏,提示电梯已坏。

(针对某一个电梯)当没有人使用时,自动停在一层。

当有人使用时:

1.只有一人按按钮,正常运行。

2.当同时有多人,当人数或重量达到限制,提醒超载,否则正常运行。

3.在不同楼层按按钮时,电梯首先停在局里较近的楼层。

4.正在向上运行时,楼下有人按按钮,先向上走,在向下走,反之亦然。

5.上升过程中,楼上有需求,电梯停,向下运行亦然。

6.运行中,人员进出电梯,当人员,重量达到限制,自动停止,提示超载。

按钮:按下时灯亮,否则灯灭。

7. 若电梯运行方向与按钮方向相反,这时就将这个请求放入等待队列中,等待资源。举例说明就是,假如在15层有人请求上楼,而电梯在向下运行,这时就将这个请求放入队列中,另外,要注意的是在15层有人请求上楼的之后8层也发出上楼请求,被调度的那部则已经向上,这就要判断这部电梯是否已经过8层,若没有则电梯先在8层停,再上15层,若已经过,则将请求再次放入队列,再次等待,反之亦然!

电梯调度测试程序框架(接口,类):

1.  初始化:无人使用时,电梯初始值为0,停在第一层。

2.  楼层:21层,(0-20)

3.  时间:电梯开关门,运动加速减速时间

4.  按钮:开关门按钮,楼梯表示按钮,在最高最低层时,按钮不提供服务

5.  电梯(四部电梯互不影响):判断上下,是否运行,运行过程中不同楼层有需要,判断距离最近的楼层

6.  限制:人数超过标准或重量超过标准,提示超载

interface Elevator//定义电梯接口

   {

       int limitNum;//现载人数

       int limitWeight;//限载重量

            int layers_Elevator;//电梯的层数

            void goUP_Elevator(int layoutsTarget,int layoutsStart);//电梯上升,参数层数

       void comeDown_Elevator(int layoutsTarget, int layoutsStart);//电梯下降,层数为层数

    }

    interface People//人的接口

    {

        int weightPeople;//人的总重量

        Boolean switch_Elevator(int layouts);//按电梯开关,参数为楼层数

    }

    interface Control//中央控制器接口

    {

        int numPeople;//人数

             int sumWeight;         //人总重量

        void dispatch();//调度方法

}

姓名:薛禄坤  孙存良

原文地址:https://www.cnblogs.com/scl1314/p/3595172.html