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

一、电梯调度编写综述:

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

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

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

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

二、流程图:

                                           

三、功能实现思想:

     1、编译环境:vs2010

     2、实现语言:C#

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

                  具体实现部分代码:

 1 static public class St   
 2     {
 3         public enum proSt { Wait, Run ,Ready};                             
 4 
 5         public enum dir { Up, Down, Stay };                                  
 6     }
 7     public class INFO        //INFO数据块
 8     {
 9         public bool Run = true;      //电梯运行状况
10 
11         public int req = 0;    //电梯剩下的请求数
12 
13         public St.proSt sta = St.proSt.Ready;        //电梯运动状态
14 
15         public St.dir edir = St.dir.Stay;              //电梯运动的方向
16 
17         public St.dir nextDir = St.dir.Stay;        //电梯被请求的下一个运动方向
18 
19         public int curFlo = 0;          //电梯当前楼层数
20 
21         public int[] upFlo = new int[20];  //上行 目的地状态栏:0为没有请求 1为有请求
22 
23         public int[] downFlo = new int[20];     //下行 目的地状态栏:0为没有请求 1为有请求
24                                        
25 
26         public int[] light = new int[20];        //电梯内按钮灯的状态,1为亮灯,0为灭灯
27 
28         public int[] uplight = new int[20];       //控制上行灯的显示状态标识
29 
30         public int[] dLight = new int[20];      //控制下行灯的显示状态标识
31     }

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()

                    具体实现部分代码:

 

 1 public void setdir()
 2         {
 3             int i = 0;
 4             if (info.req != 0)
 5             {
 6                 for (i = info.curFlo; i != 20; i++)
 7                 {
 8                     if (info.upFlo[i] == 1)
 9                     {
10                         if (info.curFlo == i)
11                         {
12                             info.edir = St.dir.Stay;
13                             break;
14                         }
15                         else                        {
16                             info.edir = St.dir.Up;
17                             break;
18                         }
19                     }
20                 }
21                 if(i == 20)
22                 {
23                     for(i = 19;i != -1 ;i--)
24                     {
25                          if (info.downFlo[i] == 1)
26                         {
27                             if (info.curFlo == i)
28                             {
29                                 info.edir = St.dir.Stay;
30                                 break;
31                             }
32                             else                          
33                           {
34                                 info.edir = St.dir.Down;
35                                 break;
36                             }
37                          }
38                     }
39                 }
40                 if(i == -1)
41                     info.edir = St.dir.Stay;
42             }
43         }

 

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

 

        具体实现部分代码:

 

 1 public void setFlo(int floor, int reqDir)
 2 {
 3             if (info.upFlo[floor - 1] == 1| info.downFlo[floor - 1] == 1)
 4             {
 5                 return;
 6             }
 7             info.req++;
 8             if (info.curFlo - (floor-1) <= 0)
 9             {
10                 if (reqDir == -1)
11                     info.downReverseSta[floor - 1] = 1;
12                 info.upFlo[floor - 1] = 1;
13             }
14             else if (info.curFlo - (floor - 1) > 0)
15             {
16                 if (reqDir == 1)
17                     info.uplight[floor - 1] = 1;
18                 info.downFlo[floor - 1] = 1;
19             }
20             setdir();
21 
22         }
23         public void arrFlo(int arrflo)
24         {
25             if (info.edir == St.dir.Up | info.edir == St.dir.Stay)
26             {
27                 info.upFlo[arrflo] = 0;
28                 if (info.dLight[arrflo] == 1)
29                     outOrder.downFloors[arrflo] = 0;
30                 else
31                     outOrder.upFloors[arrflo] = 0;
32                 info.downReverseSta[arrflo] = 0;
33             }
34             else if (info.edir == St.dir.Down)
35             {
36                 info.downFlo[arrflo] = 0;
37                 if(info.uplight[arrflo] == 1)
38                     outOrder.upFloors[arrflo] = 0;
39                 else
40                     outOrder.downFloors[arrflo] = 0;
41                 info.uplight[arrflo] = 0;
42             }
43             if (info.req == 0)
44             {
45                 info.edir = St.dir.Stay;
46                 info.nextDir = St.dir.Stay;
47             }
48         }
49         public int isRightReq(int orderFloor) 
50         {
51             orderFloor--;
52             if ((info.curFlo > orderFloor) && (info.edir == St.dir.Up|info.Sta == St.proSt.Wait))
53                 return -1;
54             else if ((info.curFlo < orderFloor) && (info.edir == St.dir.Down|info.Sta == St.proSt.Wait))
55                 return -1;
56             else
57                 return 0;
58         }      
59         public void run(object t)
60         {
61             eleSta = (t as TextBox);   
62             while (info.Run)
63             {
64                 if (info.req != 0)
65                 {
66                     setdir();
67                     if(info.edir != St.dir.Stay)
68                         info.Sta = St.proSt.Run;
69                     this.eleSta.Dispatcher.Invoke(new boxDelegate(UpdataShow));
70                     this.eleSta.Dispatcher.Invoke(new boxDelegate(MoveShow));
71                     this.eleSta.Dispatcher.Invoke(new boxDelegate(UpdataShow));
72                 }
73                 if (isArr())
74                 {
75                     arrFlo(info.curFlo);
76                     Lightclose(info.curFlo);
77                     Thread.Sleep(3000); 
78                 }
79                 Thread.Sleep(1000);
80                 if (info.req == 0)
81                 {
82                     info.Sta= St.proSt.Ready;
83                     this.eleSta.Dispatcher.Invoke(new boxDelegate(UpdataShow));
84                 }                   
85              }
86             do
87             {
88                 Thread.Sleep(3000);
89             }
90             while (!info.Run);
91             run(t);
92         }
93 }

 

四、运行结果截图

 

    主界面:

 

 

 

               

 

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

 

              

 

    

 

                       

 

                 

 


五、小组成员时间安排

 

 

 

 

posted on 2014-03-24 20:18  夜雨闻香  阅读(328)  评论(13编辑  收藏  举报