关于电梯调度的设计

经过讨论和设计,对于多路电梯调度,我们确立了具体的数据结构模型,主要还是采用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);//计算电梯重量的函数

 

 

 

 

开发者:闫立新 苏海岩

posted @ 2014-03-18 15:47  snail2014  阅读(314)  评论(3编辑  收藏  举报