邹琴-毕业论文(6)

2019-04-15 22:57

3) 由于此算法导致出现一台电梯过忙的情况,为实现负载平衡,采用有效原则。当两台电梯因轿厢内指令而到达基站后关门待命时,则应按照有效利用的原则,执行相互交替程序段。原先充当忙梯的电梯现在即作为基站电梯来使用,而原先作为基站电梯使用的电梯此时即成为忙梯。不论是A梯还是B梯均停留在最后停靠的层站待命。这样的改进就避免了一台电梯过忙的情况。

B梯A梯 a

B梯A梯 b7-3 改进后的电梯调度情况

第 20 页 共 36 页

A梯B梯 c图

7.4 电梯调度算法流程

核心的调度算法主要有外部请求调度算法和内部请求调度算法,两算法之间也有关联,具体调度过程如图7-4所示。

startvoid scheduleExterUp(uchar)orvoid scheduleExterDown(uchar)Floor, Directvoid scheduleExterLeft(uchar floor, uchar direct)orscheduleExterRight(uchar floor,uchar direct)leftExterUp[ ]orleftExterDown[]void scheduleLeft(void)orvoid scheduleRightvoid)void scheduleLeftDown(void)/void scheduleLeftUp(void)Orvoid scheduleRightDown(void)/void scheduleRightUp(void)leftdirect,leftdest,LefttypeOrrightdirect, rightdest,righttyperunning 图7-4 电梯调度算法流程图

7.5 程序代码及说明

7.5.1 确定请求类型函数

电梯运行方向上,对请求合理响应,以较优的方式到达目的地。 1) 则搜寻上行方向的内部请求和外部向上的请求,以离电梯当前位置最

近的先响应。

第 21 页 共 36 页

2) 如果没有这两个请求,则搜寻上行方向的向下请求。按最远的先响应。 3) 如果仍然无请求,则搜寻下行方向的内部请求和向下请求,按最近的

先响应。

4) 仍无请求,则搜寻下行方向的向上请求。按最远响应。 5) 如果都无请求,则为空闲,停在当前层待命。

void scheduleLeftUp(void) //确定请求类型,目的地和运行方向。请

求类型0x01表示内部请求,0x02为外部向上请求,0x04为外部向下请求 {

int i;

for(i = leftFloor + 1; i < 7; i++) //从当前层的上一层开始逐层搜寻请求 {

if(leftRequest[i - 1]) //有内部请求,则设置请求类型和目的地 {

leftType |= 0x01; //0x01为内部请求表示 leftDest = i; }

if(leftExterUp[i - 1]) //有外部请求 {

leftType |= 0x02; leftDest = i; }

if(leftType != 0x00) //在运行方向上行,确定请求类型和目的地之后及时返回 {

leftDirect = 1; // 运行方向为向上 return; } }

for(i = 6; i > leftFloor; i--) //上行方向没有前面两种请求,则从上往下搜寻是否有向下请求。 {

if(leftExterDown[i - 1]) //has external down request {

leftType = 0x04; //0x04 为外部向下请求 leftDest = i;

leftDirect = 1; //运行方向仍然为上,要运行到呼梯楼层。

return; }

第 22 页 共 36 页

}

}

if(leftType != 0x00) {

leftDirect = 1; return; }

7.5.2 运行参数设置函数

根据不同的运行方向,调用上述函数,确定电梯请求类型,目的地,运行方向,然后启动电梯运行。

void scheduleLeft(void) 函数 {

if(leftDirect == 1) {

leftType = 0x00; scheduleLeftUp();

//左边电梯运行的调度

//电梯向上运行

if(leftType == 0x00) {

scheduleLeftDown(); //电梯运行方向可以在此改变 if(leftType == 0x00) //下行方向上没有请求 {

leftRequest[leftFloor - 1] = 0; leftExterUp[leftFloor - 1] = 0; leftExterDown[leftFloor - 1] = 0; leftDirect = 0; leftStatus = idle;

if(leftFloor == 1 && rightFloor == 1 && rightStatus == idle)

{

busyEle++;

busyEle %= 2; //当两部电梯都在1楼空闲时,交替忙梯标志 }

return; } else {

leftExterDown[leftFloor - 1] = 0;//若有请求,则电梯继续向上运行,清除该楼层外部请求。

//左边电梯的请求类型,目

的地,运行方向

//上行方向没有请求

第 23 页 共 36 页

} } else {

leftExterUp[leftFloor - 1] = 0; } }

else //向下运行,过程基本同向上运行 {

leftType = 0x00; scheduleLeftDown(); if(leftType == 0x00) {

scheduleLeftUp(); if(leftType == 0x00) {

leftRequest[leftFloor - 1] = 0; leftExterUp[leftFloor - 1] = 0; leftExterDown[leftFloor - 1] = 0; leftDirect = 0; leftStatus = idle; return; } else {

leftExterUp[leftFloor - 1] = 0; } } else {

leftExterDown[leftFloor - 1] = 0; } }

if(leftStatus == idle) //启动电梯 leftStatus = running; }

7.5.3 外部请求处理函数

外部请求处理过程:

1) 外部请求与电梯所在位置相同,然后判断电梯的状态,若为idle或

者closing,则响应外部请求,立即开门。若为running,则记录下

第 24 页 共 36 页


邹琴-毕业论文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:泰安电力学校

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: