電梯調度(二)


 結組隊員:劉靜(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層,如果不選擇電梯種別會有提示:  

 

              

 

    

 

                       

 

                 

 


五、小組成員時間安排

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM