博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
电梯调度(二)
阅读量:5303 次
发布时间:2019-06-14

本文共 6626 字,大约阅读时间需要 22 分钟。

结组队员:刘静(20092532)  解凤娇(20112878)  王洪叶(20112886)

一、电梯调度编写综述:

     1、电梯分为四个,因此设置一个电梯标号选项工乘客选择向乘坐的电梯。

     2、电梯为负一层到二十层,因此为满足电梯需求,每一层电梯内部设置26个按钮工乘客选择所要到达的电梯层数。电梯外部设置两个按钮(第二十层和负一层除外,第二十层只设置向下按钮,负一层只设置向上按钮)并通过按钮的亮灭状态判断电梯的运行状态。

     3、电梯时间设置:电梯到达各层停止时间设置为10s供电体中乘客走出或者电梯外部的人进入电梯;电梯开关门时间设置为1s,通过每一层所用时间为9s。

     4、电梯在每一层会判断电梯载重量是否超重,若超重则不再应答电梯外部请求,直到满足条件为止。

二、流程图:

                                                           

                                                     

                                                               

三、功能实现思想:

     1、编译环境:vs2010

     2、实现语言:C#

     3、(1)静态数据设置:

                  具体实现部分代码:

 
static public class St       {        public enum proSt { Wait, Run ,Ready};                                     public enum dir { Up, Down, Stay };                                      }    public class INFO                                                               //INFO数据块    {        public bool Run = true;                                                    //电梯运行状况        public int req = 0;                                                  //电梯剩下的请求数        public St.proSt sta = St.proSt.Ready;        //电梯运动状态        public St.dir edir = St.dir.Stay;              //电梯运动的方向        public St.dir nextDir = St.dir.Stay;                //电梯被请求的下一个运动方向        public int curFlo = 0;                                               //电梯当前楼层数        public int[] upFlo = new int[20];                           //上行 目的地状态栏:0为没有请求 1为有请求        public int[] downFlo = new int[20];                         //下行 目的地状态栏:0为没有请求 1为有请求                                               public int[] light = new int[20];                                     //电梯内按钮灯的状态,1为亮灯,0为灭灯        public int[] uplight = new int[20];                                //控制上行灯的显示状态标识        public int[] dLight = new int[20];                              //控制下行灯的显示状态标识    }
 

 

 
 

2)电梯运行状态类:public class Process

    具体代码部分:

public class Process    {        public INFO info = new INFO();        public TextBox eleSta = new TextBox();                          //用来显示此电梯状况的表        private delegate void boxDelegate();        public void Lightup(int floor)        {            info.light[floor - 1] = 1;        }        public void Lightclose(int floor)        {            info.light[floor] = 0;        }

3)电梯运行方向实现方法:public void setdir()

    具体实现部分代码:

public void setdir()        {            int i = 0;            if (info.req != 0)            {                for (i = info.curFlo; i != 20; i++)                {                    if (info.upFlo[i] == 1)                    {                        if (info.curFlo == i)                        {                            info.edir = St.dir.Stay;                            break;                        }                        else                        {                            info.edir = St.dir.Up;                            break;                        }                    }                }                if(i == 20)                {                    for(i = 19;i != -1 ;i--)                    {                         if (info.downFlo[i] == 1)                        {                            if (info.curFlo == i)                            {                                info.edir = St.dir.Stay;                                break;                            }                            else                            {                                info.edir = St.dir.Down;                                break;                            }                         }                    }                }                if(i == -1)                    info.edir = St.dir.Stay;            }        }

 

4)请求参数改变运行状态:public void setFlo(int floor, int reqDir)

    具体实现部分代码:

public void setFlo(int floor, int reqDir){            if (info.upFlo[floor - 1] == 1| info.downFlo[floor - 1] == 1)            {                return;            }            info.req++;            if (info.curFlo - (floor-1) <= 0)            {                if (reqDir == -1)                    info.downReverseSta[floor - 1] = 1;                info.upFlo[floor - 1] = 1;            }            else if (info.curFlo - (floor - 1) > 0)            {                if (reqDir == 1)                    info.uplight[floor - 1] = 1;                info.downFlo[floor - 1] = 1;            }            setdir();        }        public void arrFlo(int arrflo)        {            if (info.edir == St.dir.Up | info.edir == St.dir.Stay)            {                info.upFlo[arrflo] = 0;                if (info.dLight[arrflo] == 1)                    outOrder.downFloors[arrflo] = 0;                else                    outOrder.upFloors[arrflo] = 0;                info.downReverseSta[arrflo] = 0;            }            else if (info.edir == St.dir.Down)            {                info.downFlo[arrflo] = 0;                if(info.uplight[arrflo] == 1)                    outOrder.upFloors[arrflo] = 0;                else                    outOrder.downFloors[arrflo] = 0;                info.uplight[arrflo] = 0;            }            if (info.req == 0)            {                info.edir = St.dir.Stay;                info.nextDir = St.dir.Stay;            }        }        public int isRightReq(int orderFloor)         {            orderFloor--;            if ((info.curFlo > orderFloor) && (info.edir == St.dir.Up|info.Sta == St.proSt.Wait))                return -1;            else if ((info.curFlo < orderFloor) && (info.edir == St.dir.Down|info.Sta == St.proSt.Wait))                return -1;            else                return 0;        }              public void run(object t)        {            eleSta = (t as TextBox);               while (info.Run)            {                if (info.req != 0)                {                    setdir();                    if(info.edir != St.dir.Stay)                        info.Sta = St.proSt.Run;                    this.eleSta.Dispatcher.Invoke(new boxDelegate(UpdataShow));                    this.eleSta.Dispatcher.Invoke(new boxDelegate(MoveShow));                    this.eleSta.Dispatcher.Invoke(new boxDelegate(UpdataShow));                }                if (isArr())                {                    arrFlo(info.curFlo);                    Lightclose(info.curFlo);                    Thread.Sleep(3000);                 }                Thread.Sleep(1000);                if (info.req == 0)                {                    info.Sta= St.proSt.Ready;                    this.eleSta.Dispatcher.Invoke(new boxDelegate(UpdataShow));                }                                }            do            {                Thread.Sleep(3000);            }            while (!info.Run);            run(t);        }}

 

 

 

  

 

 

 

    四、运行界面

 主界面默认在电梯-1层,如果不选择电梯种别会有提示:  

 五、小组成员时间安排

 

 

      

 

 

转载于:https://www.cnblogs.com/kengqiangmeiguiye/p/3614668.html

你可能感兴趣的文章
ubuntu 查看软件包中的内容 (已经安装)
查看>>
iperf 一个测试网络吞吐的工具
查看>>
IOR and mdtest - measure parallel file system I/O performance at both the POSIX and MPI-IO level.
查看>>
文件系统测试工具整理
查看>>
好用的性能检测工具 - Glances
查看>>
tcp滑动窗口和读写缓冲区
查看>>
GO 使用静态链接库编译 生成可执行文件 使用第三方 .a 文件,无源码构造
查看>>
ssh 使用指定网卡 连接特定网络
查看>>
鸿蒙操作系统发布会 分析 记录
查看>>
浅谈python 中正则的一些函数
查看>>
app生命周期之即将关闭
查看>>
MPU6050
查看>>
Asp.Net 加载不同项目程序集
查看>>
Jenkins插件--通知Notification
查看>>
自学Java第五周的总结
查看>>
[LeetCode]Evaluate Reverse Polish Notation
查看>>
线性表总结
查看>>
Oracle insert update 时间处理
查看>>
【百度】大型网站的HTTPS实践(三)——HTTPS对性能的影响
查看>>
jquery+ajax 实现搜索框提示
查看>>