/// <summary> /// Loads the spaces for this zone /// </summary> /// <param name="zoneDef"></param> /// <returns></returns> private int LoadSpaces(ZoneDef zoneDef) { var count = 0; zoneDef.Spaces.OfType <DictionaryAtom>().ToList().ForEach(space => { var id = space.GetInt("ID"); var def = StaticDataManager.GetStaticData(Globals.SystemTypes.Space.GetValue(), id.ToString(CultureInfo.InvariantCulture)); if (def.IsNull()) { throw new InvalidDataException($"Definition for Space {id} not found."); } var spaceDef = def.CastAs <SpaceDef>(); if (spaceDef.IsNull()) { throw new InvalidDataException($"Definition file {id} was not a SpaceDef file."); } var obj = EntityManager.Create <Space>(id, spaceDef.Name, spaceDef); if (obj.IsNull()) { throw new InstantiationException("Space {0} could not be instantiated.", id); } _loadingSet.AddItem($"Space{obj.ID}"); obj.OnInit(InitializationAtom); count++; }); return(count); }
public void DeleteZoneDef(DBConnection_EF conn, ZoneDef zonedef) { try { conn.ZoneDef.Remove(zonedef); conn.SaveChanges(); } catch (Exception ex) { logger.Warn(ex); throw; } }
public void insertZoneDef(DBConnection_EF conn, ZoneDef zonedef) { try { conn.ZoneDef.Add(zonedef); conn.SaveChanges(); } catch (Exception ex) { logger.Warn(ex); throw; } }
//2020/06/01 空箱&實箱總和數量是否高於高水位 private bool CheckIfTooMuchBox(ZoneDef zoneData) { try { //被占用shelf的數量(2020/06/01 先定義預約出、預約入、禁用中都不算) int emptyBoxNum = shelfDefBLL.LoadEnableShelf().Where(data => data.ZoneID == zoneData.ZoneID && data.ShelfState == "S").Count(); return(emptyBoxNum > zoneData.HighWaterMark); } catch (Exception ex) { logger.Error(ex, "Exception:"); emptyBoxLogger.Error(ex, DateTime.Now.ToString("HH:mm:ss.fff ") + "[CheckIfTooMuchBox]"); return(false); } }
//2020/06/01 空箱&實箱總和數量是否高於高水位 private bool CheckIfTooMuchBox(ZoneDef zoneData, out int boxCount) { boxCount = 0; try { //被占用shelf的數量(2020/06/01 先定義預約出、預約入、禁用中都不算) boxCount = shelfDefBLL.LoadEnableShelf().Where(data => data.ZoneID == zoneData.ZoneID && data.ShelfState == "S").Count(); return(boxCount > zoneData.HighWaterMark); } catch (Exception ex) { logger.Error(ex, "Exception:"); emptyBoxLogger.Error(ex, "[CheckIfTooMuchBox]"); return(false); } }
private string FindBestRecycleBoxID(ZoneDef zoneData, List <CassetteData> _emptyBoxList) { string recycleBlockID = ""; int requriedBoxAGV = 0; int emptyBoxNum = zoneData.EmptyBoxList.Count(); var isEnoughEmptyBox = CheckIsEnoughEmptyBox(_emptyBoxList.Count - 1, out requriedBoxAGV); if (emptyBoxNum != 0 && isEnoughEmptyBox.isEnough == true) { recycleBlockID = zoneData.EmptyBoxList.FirstOrDefault(); } else { zoneData.SolidBoxList.Sort(); recycleBlockID = zoneData.SolidBoxList.FirstOrDefault(); } return(recycleBlockID); }
//2020/06/01 空箱數量是否低於低水位 private bool CheckIfBoxNotEnough(ZoneDef zoneData, out int boxCount) { try { //指定zone的空box清單 var emptyBoxList = cassette_dataBLL.loadCassetteData(). Where(data => String.IsNullOrWhiteSpace(data.CSTID) && IsBelongsZone(data.Carrier_LOC, zoneData.ZoneID)); //數量 boxCount = emptyBoxList.Count(); return(boxCount < zoneData.LowWaterMark); } catch (Exception ex) { logger.Error(ex, "Exception:"); emptyBoxLogger.Error(ex, "[CheckIfBoxNotEnough]"); boxCount = 0; return(false); } }
private void RecycleBoxByMCS(ZoneDef zoneData, int boxCount) { List <string> emptyBoxList = new List <string>(zoneData.EmptyBoxList); //多幾個,就退幾次 for (int i = boxCount; i > zoneData.HighWaterMark; i--) { string recycledBox = emptyBoxList.FirstOrDefault(); if (string.IsNullOrEmpty(recycledBox) == false) { DoSendPopEmptyBoxToMCS(recycledBox); zoneData.WaitForRecycleBoxList.Add(recycledBox); //加入待回收box清單 emptyBoxList.Remove(recycledBox); } else { //已退光所有空box break; } } }
public PlantLifeImagesService() { //Bitmap bmONE = getImageFromFile("images/butterfly/animated-butterfly-image-0005.gif"); PlantLifeImage pli = new PlantLifeImage(); //pli.PlantImage = getImageFromFile("images\\zone2\\sh-57sec-slow.gif"); //pli.PlantImage = getImageFromFile("images\\fade\\sh-trans-colorized.gif"); // default value pli.PlantImage = getImageFromFile("images\\butterfly3\\butterflies6.gif"); plantLifeImagesOver.Add(pli); //loadMovie("images/zone3/z2brightcolors10fr25.mov"); // load background complex as .mov frame by frame. //loadMovie("z2 bright colors.mov"); loadImages("images/welcome"); loadOverlayImages(); // use default butterfly ZoneDef df1 = new ZoneDef(); df1.Id = 0; df1.ZoneName = "welcome"; df1.FrameSize = new Size(320, 210); df1.ImageDir = "images/welcome"; df1.DistanceAway = 168; setupZoneDefs(df1); }
/// <summary> /// Loads the resets for this zone /// </summary> /// <param name="zoneDef"></param> /// <returns></returns> private int LoadResets(ZoneDef zoneDef) { _repository = new ResetRepository(); var count = 0; zoneDef.Resets.OfType <DictionaryAtom>().ToList().ForEach(reset => { var id = reset.GetInt("ID"); var def = StaticDataManager.GetStaticData(Globals.SystemTypes.Reset.GetValue(), id.ToString(CultureInfo.InvariantCulture)); if (def.IsNull()) { throw new InvalidDataException($"Definition for Reset {id} not found."); } var resetDef = def.CastAs <ResetDef>(); if (resetDef.IsNull()) { throw new InvalidDataException($"Definition file {id} was not a ResetDef file."); } var obj = EntityManager.Create(new ResetFactoryHelper(), resetDef.ResetType.ToString(), id, resetDef.Name, resetDef); if (obj.IsNull()) { throw new InstantiationException("Reset {0} {1} could not be instantiated.", resetDef.ResetType, id); } var newReset = obj.CastAs <Reset>(); newReset.OnInit(this, InitializationAtom); _repository.Add(newReset.ID, newReset); count++; }); return(count); }
public abstract bool S6F11SendShelfStatusChange(ZoneDef zone, List <AMCSREPORTQUEUE> reportQueues = null);
public override bool S6F11SendShelfStatusChange(ZoneDef zone, List <AMCSREPORTQUEUE> reportQueues = null) { return(true); }
public void CheckTheEmptyBoxStockLevelZoneBalanceForASE_Line3() { emptyBoxLogger.Info("[CheckTheEmptyBoxStockLevelZoneBalanceForASE_Line3]"); zoneDatas = zoneBLL.loadZoneData(); boxDatas = cassette_dataBLL.loadCassetteData(); shelfDatas = shelfDefBLL.LoadShelf(); if (!initializedFlag) { zoneCacheDatas = new List <ZoneDef>(zoneDatas); foreach (var zoneCache in zoneCacheDatas) { zoneCache.EmptyBoxList = new List <string>(); zoneCache.SolidBoxList = new List <string>(); zoneCache.WaitForRecycleBoxList = new List <string>(); } initializedFlag = true; emptyBoxLogger.Info("===== EmptyBoxHandlerService initialized ====="); } //更新zone內的空箱實箱列表 UpdateZoneData(); ZoneDef zone1Def = null; ZoneDef zone2Def = null; ZoneDef zone3Def = null; //B2: 檢查各個zone是否需要補空box foreach (ZoneDef zoneData in zoneCacheDatas) { if (zone1Def == null && zoneData.ZoneID.Trim() == "B7_OHBLINE3-ZONE1") { zone1Def = zoneData; continue; } if (zone2Def == null && zoneData.ZoneID.Trim() == "B7_OHBLINE3-ZONE2") { zone2Def = zoneData; continue; } if (zone3Def == null && zoneData.ZoneID.Trim() == "B7_OHBLINE3-ZONE3") { zone3Def = zoneData; continue; } if (zone1Def != null && zone2Def != null && zone3Def != null) { break; } //if (zoneData.EmptyBoxList.Count() < zoneData.LowWaterMark) //{ // emptyBoxLogger.Info($"{zoneData.ZoneID} has {zoneData.EmptyBoxList.Count()} empty box(es), reaches low water level: {zoneData.LowWaterMark}, request for empty box..."); // //空box不足,呼叫MCS補充 // DoSendRequireEmptyBoxToMCS(zoneData.ZoneID, (int)(zoneData.LowWaterMark - zoneData.EmptyBoxList.Count())); //} } if (zone1Def == null || zone2Def == null || zone3Def == null) { emptyBoxLogger.Info($"Not Found B7_OHBLINE3-ZONE1 or B7_OHBLINE3-ZONE2 or B7_OHBLINE3-ZONE3 in CheckTheEmptyBoxStockLevelZoneBalanceForASE_Line3"); return; } if (zone1Def.EmptyBoxList.Count() + zone2Def.EmptyBoxList.Count() < SystemParameter.iSouthLowWaterLevel) { emptyBoxLogger.Info($"{zone1Def.ZoneID} + {zone2Def.ZoneID} has {zone1Def.EmptyBoxList.Count() + zone2Def.EmptyBoxList.Count()} empty box(es), reaches low water level: {SystemParameter.iSouthLowWaterLevel}"); //空box不足,看看另一邊Zone有沒有多的空 if (zone3Def.EmptyBoxList.Count() > SystemParameter.iNorthLowWaterLevel) { List <ShelfDef> zone1EmptyShelfData = shelfDefBLL.GetEmptyShelfByZoneID("B7_OHBLINE3-ZONE1"); List <ShelfDef> zone2EmptyShelfData = shelfDefBLL.GetEmptyShelfByZoneID("B7_OHBLINE3-ZONE2"); List <ShelfDef> southEmptyShelfData = zone1EmptyShelfData; southEmptyShelfData.AddRange(zone2EmptyShelfData); if (southEmptyShelfData != null && southEmptyShelfData.Count > 0) { string dest = southEmptyShelfData.FirstOrDefault().ShelfID; if (string.IsNullOrWhiteSpace(dest) == false) { var zone3EmptyBox = GetTotalEmptyBoxNumberByZoneID("B7_OHBLINE3-ZONE3"); string emptyBoxID = FindBestEmptyBoxID(zone3EmptyBox.emptyBox); string emptyBoxLoc = cassette_dataBLL.GetCassetteLocByBoxID(emptyBoxID); scApp.TransferService.Manual_InsertCmd(emptyBoxLoc, dest, 5, "CheckTheEmptyBoxStockLevelZoneBalanceForASE_Line3", ACMD_MCS.CmdType.OHBC); return; } else { //do nothing } } else { //do nothing } } } if (zone3Def.EmptyBoxList.Count() < SystemParameter.iNorthLowWaterLevel) { emptyBoxLogger.Info($"{zone3Def.ZoneID} has {zone3Def.EmptyBoxList.Count()} empty box(es), reaches low water level: {SystemParameter.iNorthLowWaterLevel}"); //空box不足,看看另一邊Zone有沒有多的空box if (zone1Def.EmptyBoxList.Count() + zone2Def.EmptyBoxList.Count() > SystemParameter.iSouthLowWaterLevel) { //找out mode下的STK port,沒有就找out mode下的OHCV port List <ShelfDef> NorthEmptyShelfData = shelfDefBLL.GetEmptyShelfByZoneID("B7_OHBLINE3-ZONE3"); if (NorthEmptyShelfData != null && NorthEmptyShelfData.Count > 0) { string dest = NorthEmptyShelfData.FirstOrDefault().ShelfID; if (string.IsNullOrWhiteSpace(dest) == false) { var zone1EmptyBox = GetTotalEmptyBoxNumberByZoneID("B7_OHBLINE3-ZONE1"); var zone2EmptyBox = GetTotalEmptyBoxNumberByZoneID("B7_OHBLINE3-ZONE2"); var southEmptyBox = zone1EmptyBox; southEmptyBox.emptyBox.AddRange(zone2EmptyBox.emptyBox); string emptyBoxID = FindBestEmptyBoxID(southEmptyBox.emptyBox); string emptyBoxLoc = cassette_dataBLL.GetCassetteLocByBoxID(emptyBoxID); scApp.TransferService.Manual_InsertCmd(emptyBoxLoc, dest, 5, "CheckTheEmptyBoxStockLevelZoneBalanceForASE_Line3", ACMD_MCS.CmdType.OHBC); return; } else { //do nothing } } else { //do nothing } } } if (zone1Def.BoxCount + zone2Def.BoxCount > SystemParameter.iSouthHighWaterLevel && zone3Def.BoxCount < SystemParameter.iNorthHighWaterLevel) { List <ShelfDef> zone3EmptyShelfData = shelfDefBLL.GetEmptyShelfByZoneID("B7_OHBLINE3-ZONE3"); string dest = zone3EmptyShelfData.FirstOrDefault().ShelfID; if (string.IsNullOrWhiteSpace(dest) == false) { if (zone1Def.EmptyBoxList.Count + zone2Def.EmptyBoxList.Count > SystemParameter.iSouthLowWaterLevel) { var zone1EmptyBox = GetTotalEmptyBoxNumberByZoneID("B7_OHBLINE3-ZONE1"); var zone2EmptyBox = GetTotalEmptyBoxNumberByZoneID("B7_OHBLINE3-ZONE2"); var southEmptyBox = zone1EmptyBox; southEmptyBox.emptyBox.AddRange(zone2EmptyBox.emptyBox); string emptyBoxID = FindBestEmptyBoxID(southEmptyBox.emptyBox); string emptyBoxLoc = cassette_dataBLL.GetCassetteLocByBoxID(emptyBoxID); scApp.TransferService.Manual_InsertCmd(emptyBoxLoc, dest, 5, "CheckTheEmptyBoxStockLevelZoneBalanceForASE_Line3", ACMD_MCS.CmdType.OHBC); return; } else { var zone1SolidBox = GetTotalSoildBoxNumberByZoneID("B7_OHBLINE3-ZONE1"); var zone2SolidBox = GetTotalSoildBoxNumberByZoneID("B7_OHBLINE3-ZONE2"); var southSolidBox = zone1SolidBox; southSolidBox.solidBox.AddRange(zone2SolidBox.solidBox); string solidBoxID = FindBestSolidBoxID(southSolidBox.solidBox); string solidBoxLoc = cassette_dataBLL.GetCassetteLocByBoxID(solidBoxID); scApp.TransferService.Manual_InsertCmd(solidBoxLoc, dest, 5, "CheckTheEmptyBoxStockLevelZoneBalanceForASE_Line3", ACMD_MCS.CmdType.OHBC); return; } } else { //do nothing } } if (zone3Def.BoxCount > SystemParameter.iNorthHighWaterLevel && zone1Def.BoxCount + zone2Def.BoxCount < SystemParameter.iSouthHighWaterLevel) { List <ShelfDef> zone1EmptyShelfData = shelfDefBLL.GetEmptyShelfByZoneID("B7_OHBLINE3-ZONE1"); List <ShelfDef> zone2EmptyShelfData = shelfDefBLL.GetEmptyShelfByZoneID("B7_OHBLINE3-ZONE2"); List <ShelfDef> southEmptyShelfData = zone1EmptyShelfData; southEmptyShelfData.AddRange(zone2EmptyShelfData); string dest = southEmptyShelfData.FirstOrDefault().ShelfID; if (string.IsNullOrWhiteSpace(dest) == false) { if (zone3Def.EmptyBoxList.Count > SystemParameter.iNorthLowWaterLevel) { var zone3EmptyBox = GetTotalEmptyBoxNumberByZoneID("B7_OHBLINE3-ZONE3"); string emptyBoxID = FindBestEmptyBoxID(zone3EmptyBox.emptyBox); string emptyBoxLoc = cassette_dataBLL.GetCassetteLocByBoxID(emptyBoxID); scApp.TransferService.Manual_InsertCmd(emptyBoxLoc, dest, 5, "CheckTheEmptyBoxStockLevelZoneBalanceForASE_Line3", ACMD_MCS.CmdType.OHBC); return; } else { var zone3SolidBox = GetTotalSoildBoxNumberByZoneID("B7_OHBLINE3-ZONE3"); string solidBoxID = FindBestSolidBoxID(zone3SolidBox.solidBox); string solidBoxLoc = cassette_dataBLL.GetCassetteLocByBoxID(solidBoxID); scApp.TransferService.Manual_InsertCmd(solidBoxLoc, dest, 5, "CheckTheEmptyBoxStockLevelZoneBalanceForASE_Line3", ACMD_MCS.CmdType.OHBC); return; } } else { //do nothing } } }
/// <summary> /// add zonedefs to this /// </summary> /// <param name="addZoneDef"></param> /// <returns>count of list</returns> public int setupZoneDefs(ZoneDef addZoneDef) { zoneDefs.Add(addZoneDef); return zoneDefs.Count; }