關於電梯調度的設計 開發者:閆立新 蘇海岩


經過討論和設計,對於多路電梯調度,我們確立了具體的數據結構模型,主要還是采用C-LOCK算法,另外加一個多線程調度。

數據結構:

1.考慮到電梯的變化是一個動態變化的過程,那么要在動態過程中實現正常跳轉,首先要確定各種跳轉的狀態, 因而這里我們使用枚舉類型來表示電梯的各種狀態:

 enum {updownstophomeStatehome}

同時初始化最初狀態為電梯在樓層一。

2.對於乘客來說, 顯然要有一個進入電梯與走出電梯的隊列, 因而在這里我們是用的鏈表來實現這個過程的,同時用結構體來保存該乘客的信息:

 typedef struct passage 

{

    int now//乘客當前所在的樓層

    int dis//乘客的目的地樓層 

    struct passage *next

} Passage;

 

3.雖然電梯中的狀態是由枚舉類型來實現的, 但是在整個程序的運行過程中,我們還是為電梯設置了一個結構體類型,以便保存更多的信息: 

typedef struct lift 

{  int count_C//計數電梯已到達的層數 

   int count_A//電梯人數計數器 記得必須初始化為 0 

   int flag_inHigh//二十個樓層有無請求的標志,哪個樓層如果有請求,該標志置 1 

   int weight//電梯重量,記得要進行初始化為 0 

   int flag_out[High];

 }Lift 

函數接口說明: 

函數中的參數均是使用的全局變量的傳遞,下面就將設想的主要函數及他們之間的參數的關系列出如下:

int OutOrIn(Lift &L,Passage *Queue,Passage *LiftQ;//進和出電梯的總函數 

int Update(Lift &L,Passage *Queue,Passage *LiftQ;//刷新的函數 

int Run(Lift &L,Passage *Queue,Passage *LiftQ;//整個電梯各種狀態轉換的函數 

int OpenTheDoor(Lift &L);//開門

int CloseTheDoor(Lift &L);//關門 

int Test(Lift &L,Passage *QueuePassage *LiftQ);// 測試電梯關門還是開門的函數 

int Request(Lift &L,Passage *Queue);//發出請求信號的函數

int ClosestLift((Lift &L);//調度最近的電梯的函數

int Weight(Lift &L);//計算電梯重量的函數

開發者:閆立新 蘇海岩


免責聲明!

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



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