//private string AsrsAreaToCheckin(string palletID,AsrsControl.AsrsCtlModel asrsCtl,int step)
        //{
        //    string area = "其它";
        //    if(step== 0)
        //    {
        //        //不限库区,
        //        string[] logicAreas = new string[]{"正极材料区","负极材料区","空筐区"};
        //        foreach(string strArea in logicAreas)
        //        {
        //            int validNum = 0;
        //            string reStr="";
        //            if(this.asrsResManage.GetHouseAreaLeftGs(asrsCtl.HouseName, strArea, ref validNum, reStr))
        //            {
        //                if(validNum>0)
        //                {
        //                    area = strArea;
        //                    break;
        //                }
        //            }
        //        }
        //        return area;

        //    }
        //    else
        //    {
        //        area = SysCfg.SysCfgModel.asrsStepCfg.GetAsrsArea(step);
        //    }
        //    return area;
        //}
        private string AsrsAreaToCheckin(string palletID, AsrsControl.AsrsCtlModel asrsCtl, int step)
        {
            string area        = "其它";
            short  productCata = 0;
            string strCataName = "";// "正极材料";
            string reStr       = "";
            string shopName    = "";

            // {
            if (!PrcsCtlModelsLishen.NodeSwitchInput.ParsePalletID(palletID, ref shopName, ref productCata, ref strCataName, ref reStr))
            {
                Console.WriteLine("解析物料信息失败," + reStr);
                return(area);
            }
            if (strCataName == "正极材料")
            {
                area = "正极材料区";
            }
            else if (strCataName == "负极材料")
            {
                area = "负极材料区";
            }
            else if (strCataName == "隔膜材料")
            {
                //不限库区,
                string[] logicAreas = new string[] { "正极材料区", "负极材料区", "空筐区" };
                int      validNum   = 0;
                foreach (string strArea in logicAreas)
                {
                    if (this.asrsResManage.GetHouseAreaLeftGs(asrsCtl.HouseName, strArea, ref validNum, reStr))
                    {
                        if (validNum > 0)
                        {
                            area = strArea;
                            break;
                        }
                    }
                }
                if (validNum < 1)
                {
                    Console.WriteLine("没有可用库位,材料:" + strCataName);
                    return(area);
                }
            }
            else
            {
                Console.WriteLine("不存在的材料种类" + strCataName);
                return(area);
            }
            //  }
            return(area);
        }
Exemple #2
0
 private void GenerateAsrsCheckoutTask()
 {
     try
     {
         BindingSource bs = this.dataGridView1.DataSource as BindingSource;
         DataTable     dt = bs.DataSource as DataTable;
         if (dt == null)
         {
             return;
         }
         int pri = int.Parse(this.textBoxPrivilege.Text);
         foreach (DataRow dr in dt.Rows)
         {
             string houseName = dr["库房"].ToString();
             string strCell   = dr["库位"].ToString();
             AsrsControl.AsrsCtlModel asrsCtl = AsrsPresenter.GetAsrsCtlByName(houseName);
             AsrsModel.CellCoordModel cell    = new CellCoordModel(0, 0, 0);
             if (!cell.Parse(strCell))
             {
                 continue;
             }
             EnumCellStatus   cellStoreStat = EnumCellStatus.空闲;
             EnumGSTaskStatus cellTaskStat  = EnumGSTaskStatus.完成;
             if (!asrsResMana.GetCellStatus(houseName, cell, ref cellStoreStat, ref cellTaskStat))
             {
                 Console.WriteLine("获取货位{0}:{1}状态失败", houseName, strCell);
                 continue;
             }
             if (cellStoreStat != EnumCellStatus.满位 || cellTaskStat == EnumGSTaskStatus.锁定)
             {
                 continue;
             }
             CtlDBAccess.Model.ControlTaskModel asrsTask = null;
             if (!asrsCtl.GenerateOutputTask(cell, null, SysCfg.EnumAsrsTaskType.产品出库, false, ref asrsTask, null, pri))
             {
                 logRecorder.AddDebugLog(this.Text, string.Format("生成{0}:{1}出库任务失败", houseName, strCell));
             }
             else
             {
                 logRecorder.AddDebugLog(this.Text, string.Format("生成{0}:{1}产品出库任务成功", houseName, strCell));
             }
             dr["出库任务ID"] = asrsTask.TaskID;
         }
         this.dataGridView1.Refresh();
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.ToString());
     }
 }
        private bool AsrsOutportBusiness(AsrsControl.AsrsPortalModel port, ref string reStr)
        {
            try
            {
                MesDBAccess.BLL.palletBll palletDBll = new MesDBAccess.BLL.palletBll();
                if (port.PortCata == 1)
                {
                    return(true);
                }

                if (port.BindedTaskOutput == SysCfg.EnumAsrsTaskType.空筐出库)
                {
                    if (port.Db2Vals[0] == 1)
                    {
                        port.Db1ValsToSnd[0] = 1;
                    }
                    return(true);
                }
                else if (port.BindedTaskOutput == SysCfg.EnumAsrsTaskType.产品出库)
                {
                    if (port.Db2Vals[1] == 1)
                    {
                        port.Db1ValsToSnd[0] = 1;
                    }
                }
                else
                {
                    return(true);
                }

                if (port.Db1ValsToSnd[0] == 2)
                {
                    return(true);
                }
                if (port.Db2Vals[1] != 2)
                {
                    return(true);
                }
                Int16 palletCata = port.Db2Vals[2];
                if (palletCata < 1 || palletCata > 3)
                {
                    return(true);
                }

                AsrsControl.AsrsCtlModel asrsCtl = port.AsrsCtl;
                string houseName = asrsCtl.HouseName;
                AsrsInterface.IAsrsManageToCtl asrsResManage = port.AsrsCtl.AsrsResManage;
                //遍历所有库位,判断材料类别,按照先入先出规则,匹配出库的货位。
                Dictionary <string, AsrsModel.GSMemTempModel> asrsStatDic = new Dictionary <string, AsrsModel.GSMemTempModel>();
                if (!asrsResManage.GetAllGsModel(ref asrsStatDic, ref reStr))
                {
                    Console.WriteLine(string.Format("{0} 获取货位状态失败", houseName));
                    return(false);
                }
                List <AsrsModel.GSMemTempModel> validCells = new List <AsrsModel.GSMemTempModel>();
                string shopRequire = "";
                if (port.NodeName == "A1库物料出口1")
                {
                    shopRequire = "1号车间";
                }
                else if (port.NodeName == "A1库物料出口2")
                {
                    shopRequire = "2号车间";
                }
                else if (port.NodeName == "A1库物料出口3")
                {
                    shopRequire = "3号车间";
                }
                //检查是否存在未执行完的任务
                List <CtlDBAccess.Model.ControlTaskModel> unFinishedTasks = GetRunningTask((int)SysCfg.EnumAsrsTaskType.产品出库, shopRequire, palletCata, ref reStr);
                if (unFinishedTasks != null && unFinishedTasks.Count() > 0)
                {
                    return(true);
                }

                int r = 1, c = 1, L = 1;
                for (r = 1; r < asrsCtl.AsrsRow + 1; r++)
                {
                    for (c = 1; c < asrsCtl.AsrsCol + 1; c++)
                    {
                        for (L = 1; L < asrsCtl.AsrsLayer + 1; L++)
                        {
                            string strKey = string.Format("{0}:{1}-{2}-{3}", houseName, r, c, L);
                            AsrsModel.GSMemTempModel cellStat = null;
                            if (!asrsStatDic.Keys.Contains(strKey))
                            {
                                continue;
                            }
                            cellStat = asrsStatDic[strKey];
                            if ((!cellStat.GSEnabled) || (cellStat.GSTaskStatus == AsrsModel.EnumGSTaskStatus.锁定.ToString()) || (cellStat.GSStatus != AsrsModel.EnumCellStatus.满位.ToString()))
                            {
                                // reStr = string.Format("货位{0}-{1}-{2}禁用,无法生成出库任务", cell.Row, cell.Col, cell.Layer);
                                continue;
                            }
                            AsrsModel.CellCoordModel cell      = new AsrsModel.CellCoordModel(r, c, L);
                            List <string>            storGoods = new List <string>();
                            if (!asrsResManage.GetStockDetail(houseName, cell, ref storGoods))
                            {
                                continue;
                            }
                            if (storGoods.Count() < 1)
                            {
                                continue;
                            }
                            MesDBAccess.Model.palletModel pallet = palletDBll.GetModel(storGoods[0]);
                            short  productCata = 0;
                            string strCataName = "";// "正极材料";

                            string shopName = "";
                            if (!PrcsCtlModelsLishen.NodeSwitchInput.ParsePalletID(storGoods[0], ref shopName, ref productCata, ref strCataName, ref reStr))
                            {
                                continue;
                            }
                            //if (pallet.palletCata == palletCata.ToString())
                            if (productCata == palletCata && shopRequire == shopName)
                            {
                                validCells.Add(cellStat);
                            }
                            //if (storGoods[0].Substring(2, 1) == palletCata.ToString())
                            //{
                            //    validCells.Add(cellStat);
                            //}
                        }
                    }
                }
                if (validCells.Count() > 0)
                {
                    //排序,按照先入先出
                    AsrsModel.GSMemTempModel firstGS = validCells[0];
                    if (validCells.Count() > 1)
                    {
                        for (int i = 1; i < validCells.Count(); i++)
                        {
                            AsrsModel.GSMemTempModel tempGS = validCells[i];
                            if (tempGS.InHouseDate < firstGS.InHouseDate)
                            {
                                firstGS = tempGS;
                            }
                        }
                    }
                    //生成出库任务
                    string[] strCellArray         = firstGS.GSPos.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
                    int      row                  = int.Parse(strCellArray[0]);
                    int      col                  = int.Parse(strCellArray[1]);
                    int      layer                = int.Parse(strCellArray[2]);
                    AsrsModel.CellCoordModel cell = new AsrsModel.CellCoordModel(row, col, layer);
                    if (asrsCtl.GenerateOutputTask(cell, port.BindedTaskOutput, true, port.PortSeq, ref reStr, new List <short> {
                        palletCata
                    }, port.AsrsTaskPri))
                    {
                        port.Db1ValsToSnd[0] = 2;
                    }
                    else
                    {
                        Console.WriteLine("生成任务{0}失败,{1}", port.BindedTaskOutput.ToString(), reStr);
                    }
                }
                return(true);
            }
            catch (Exception ex)
            {
                reStr = ex.ToString();
                return(false);
            }
        }