// 找到最近的一个空板
        private string FindAvailableRealLoc(Priority p)
        {
            // 如果有板闲置,返回该板号, 无则返回空字符串。
            RealLoc locs = null;

            if (p == Priority.HIGH)
            {
                locs = RealLocations.Where(x => x.state == LocationState.IDLE && x.priority != Priority.DISABLE)
                       .OrderByDescending(x => x.priority)
                       .FirstOrDefault();
            }
            else
            {
                // 先从中低优先级较低中查找。
                locs = RealLocations.Where(x => x.state == LocationState.IDLE && (x.priority == Priority.MEDIUM || x.priority == Priority.LOW))
                       .OrderByDescending(x => x.priority)
                       .FirstOrDefault();
                // 中低优先级没有,再从高优先级中查找。
                if (locs == null)
                {
                    locs = RealLocations.Where(x => x.state == LocationState.IDLE && (x.priority != Priority.DISABLE))
                           .OrderByDescending(x => x.priority)
                           .FirstOrDefault();
                }
            }

            return(locs != null ? locs.realloc : "");
        }
        public LocationHelper()
        {
            LocMap = new Dictionary <string, string> {
                ["B01"] = "",
                ["B02"] = "",
                ["B03"] = "",
                ["B04"] = "",
                ["B05"] = "",
                ["B06"] = "",
                ["B07"] = "",
                ["B08"] = "",
                ["B09"] = "",
                ["B10"] = ""
            };

            RealLocations = new RealLoc[] {
                RealLoc.Create("B01", LocationState.IDLE, Priority.MEDIUM),
                RealLoc.Create("B02", LocationState.IDLE, Priority.MEDIUM),
                RealLoc.Create("B03", LocationState.IDLE, Priority.DISABLE),
                RealLoc.Create("B04", LocationState.IDLE, Priority.HIGH),

                RealLoc.Create("B05", LocationState.IDLE, Priority.HIGH),
                RealLoc.Create("B06", LocationState.IDLE, Priority.DISABLE),
                RealLoc.Create("B07", LocationState.IDLE, Priority.DISABLE),
                RealLoc.Create("B08", LocationState.IDLE, Priority.DISABLE),
                RealLoc.Create("B09", LocationState.IDLE, Priority.DISABLE),
                RealLoc.Create("B10", LocationState.IDLE, Priority.DISABLE),
                RealLoc.Create("B11", LocationState.IDLE, Priority.DISABLE)
            };

            VirtualLocations = new VirtualLoc[] {
                VirtualLoc.Create("B01", Priority.MEDIUM),
                VirtualLoc.Create("B02", Priority.MEDIUM),
                VirtualLoc.Create("B03", Priority.MEDIUM),
                VirtualLoc.Create("B04", Priority.MEDIUM),
                VirtualLoc.Create("B05", Priority.MEDIUM),
                VirtualLoc.Create("B06", Priority.MEDIUM),
                VirtualLoc.Create("B07", Priority.MEDIUM),
                VirtualLoc.Create("B08", Priority.MEDIUM),
                VirtualLoc.Create("B09", Priority.MEDIUM),
                VirtualLoc.Create("B10", Priority.MEDIUM)
            };
        }