Esempio n. 1
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());
     }
 }
Esempio n. 2
0
        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);
            }
        }