Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
 public void DeleteZoneDef(DBConnection_EF conn, ZoneDef zonedef)
 {
     try
     {
         conn.ZoneDef.Remove(zonedef);
         conn.SaveChanges();
     }
     catch (Exception ex)
     {
         logger.Warn(ex);
         throw;
     }
 }
Esempio n. 3
0
 public void insertZoneDef(DBConnection_EF conn, ZoneDef zonedef)
 {
     try
     {
         conn.ZoneDef.Add(zonedef);
         conn.SaveChanges();
     }
     catch (Exception ex)
     {
         logger.Warn(ex);
         throw;
     }
 }
Esempio n. 4
0
 //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);
        }
Esempio n. 10
0
        /// <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);
        }
Esempio n. 11
0
 public abstract bool S6F11SendShelfStatusChange(ZoneDef zone, List <AMCSREPORTQUEUE> reportQueues = null);
Esempio n. 12
0
 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;
 }