// 找到最近的一个空板 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) }; }