Beispiel #1
0
        //电梯调度函数
        public void ElevChoose(int tar, StatusEnum dir)
        {
            //比较各电梯与目标楼层间的距离
            int        dis1     = System.Math.Abs(tar - elev1.curFloor);
            int        dis2     = System.Math.Abs(tar - elev2.curFloor);
            int        dis3     = System.Math.Abs(tar - elev3.curFloor);
            int        dis4     = System.Math.Abs(tar - elev4.curFloor);
            int        dis5     = System.Math.Abs(tar - elev5.curFloor);
            List <int> distance = new List <int>();

            distance.Add(dis1);
            distance.Add(dis2);
            distance.Add(dis3);
            distance.Add(dis4);
            distance.Add(dis5);
            //如果最近的电梯处于停止状态或运行方向与按键方向一致,则优先调用最近的电梯
            if (dis1 == distance.Min() && (elev1.curStatus == StatusEnum.Stop || (dir == elev1.curStatus)))
            {
                elev1.AddTarFloor(tar);
            }
            else if (dis2 == distance.Min() && (elev2.curStatus == StatusEnum.Stop || (dir == elev2.curStatus)))
            {
                elev2.AddTarFloor(tar);
            }
            else if (dis3 == distance.Min() && (elev2.curStatus == StatusEnum.Stop || (dir == elev2.curStatus)))
            {
                elev3.AddTarFloor(tar);
            }
            else if (dis4 == distance.Min() && (elev2.curStatus == StatusEnum.Stop || (dir == elev2.curStatus)))
            {
                elev4.AddTarFloor(tar);
            }
            else if (dis5 == distance.Min() && (elev2.curStatus == StatusEnum.Stop || (dir == elev2.curStatus)))
            {
                elev5.AddTarFloor(tar);
            }
            //如果最近的电梯不可用,则优先调用可用的电梯中序号最小的
            else if (elev1.curStatus == StatusEnum.Stop || (dir == elev1.curStatus))
            {
                elev1.AddTarFloor(tar);
            }
            else if (elev2.curStatus == StatusEnum.Stop || (dir == elev2.curStatus))
            {
                elev2.AddTarFloor(tar);
            }
            else if (elev2.curStatus == StatusEnum.Stop || (dir == elev2.curStatus))
            {
                elev3.AddTarFloor(tar);
            }
            else if (elev2.curStatus == StatusEnum.Stop || (dir == elev2.curStatus))
            {
                elev4.AddTarFloor(tar);
            }
            else if (elev2.curStatus == StatusEnum.Stop || (dir == elev2.curStatus))
            {
                elev5.AddTarFloor(tar);
            }
        }