示例#1
0
 private bool AsrsTasktypeToCheckin(AsrsControl.AsrsPortalModel port, ref SysCfg.EnumAsrsTaskType taskType, ref string logicArea, ref string reStr)
 {
     try
     {
         if (port.NodeID == "2003" || port.NodeID == "2005" || port.NodeID == "2007")
         {
             if (port.Db2Vals[1] == 1)
             {
                 taskType  = SysCfg.EnumAsrsTaskType.空筐入库;
                 logicArea = "空筐区";
             }
             else if (port.Db2Vals[1] == 2)
             {
                 taskType  = SysCfg.EnumAsrsTaskType.产品入库;
                 logicArea = "NG材料区";
             }
             else
             {
                 return(false);
             }
         }
         else
         {
             taskType = port.BindedTaskInput;
         }
         return(true);
     }
     catch (Exception ex)
     {
         reStr = ex.ToString();
         return(false);
     }
 }
        /// <summary>
        /// 建立路径列表,只建两级路径,分流点-入口-堆垛机
        /// </summary>
        public override void BuildPathList()
        {
            int pathSeq = 1;

            foreach (CtlNodeBaseModel node in NextNodes)
            {
                foreach (CtlNodeBaseModel nextNode in node.NextNodes)
                {
                    FlowPathModel path = new FlowPathModel();
                    path.PathSeq = pathSeq;
                    path.AddNode(node);
                    path.AddNode(nextNode);
                    flowPathList.Add(path);
                    pathSeq++;
                }
            }
            asrsInPort = flowPathList[0].NodeList[0] as AsrsControl.AsrsPortalModel;
        }
示例#3
0
        private void AsrsCheckinRequire()
        {
            //foreach(AsrsControl.AsrsPortalModel port in targetPorts)
            for (int i = 0; i < targetPorts.Count(); i++)
            {
                AsrsControl.AsrsPortalModel port = targetPorts[i];
                if (port.AsrsCtl.StackDevice.Db2Vals[0] > 0 || port.AsrsCtl.StackDevice.Db2Vals[1] > 2)
                {
                    continue;
                }
                if (port.PalletBuffer.Count() < 1)
                {
                    continue;
                }

                bool checkInRequire = false;
                if (port.PalletBuffer.Count() >= port.PortinBufCapacity)
                {
                    checkInRequire = true;
                }
                else
                {
                    if (db1ValsToSnd[0] == 3 && port.Db2Vals[0] == 2)
                    {
                        checkInRequire = true;
                    }
                }
                for (int j = 0; j < Math.Min(port.PalletBuffer.Count(), port.PortinBufCapacity); j++)
                {
                    if (port.Db2Vals[j] != 2)
                    {
                        checkInRequire = false;
                        break;
                    }
                }
                if (port.Db2Vals[2] == 2) //手动入库按钮请求
                {
                    checkInRequire = true;
                }
                if (!checkInRequire)
                {
                    continue;
                }
                string palletID = port.PalletBuffer[0];
                #region 查询本地应该进入哪个分区

                /*
                 * string nextProcessID = port.AsrsCtl.GetNextStepID(palletID);
                 * int nextProcessSeq = SysCfg.SysCfgModel.stepSeqs.IndexOf(nextProcessID);
                 * int curSeq = SysCfg.SysCfgModel.stepSeqs.IndexOf(port.AsrsCtl.MesProcessStepID[0]);
                 * AsrsModel.EnumLogicArea logicArea = AsrsModel.EnumLogicArea.冷却区;
                 * if (nextProcessSeq > curSeq)
                 * {
                 *  logicArea = AsrsModel.EnumLogicArea.常温区;
                 * }*/
                #endregion
                #region 查询MES应该进入哪个库区

                //在MES中查询入口处的第一个托盘当前工步,判断应该进入哪个库区
                ANCStepResult stepRe = MesAcc.GetStep(palletID);
                if (stepRe.ResultCode != 0)
                {
                    port.CurrentTaskDescribe = "查询MES托盘步次失败:" + stepRe.ResultMsg;
                    continue;
                }

                AsrsModel.EnumLogicArea logicArea = AsrsModel.EnumLogicArea.冷却区;
                if (stepRe.Step < 12)
                {
                    logicArea = AsrsModel.EnumLogicArea.冷却区;
                }
                else
                {
                    logicArea = AsrsModel.EnumLogicArea.常温区;
                }
                #endregion

                string reStr = "";
                SysCfg.EnumAsrsTaskType taskType = SysCfg.EnumAsrsTaskType.产品入库;
                if (port.AsrsCtl.AsrsCheckinTaskRequire(port, logicArea, taskType, port.PalletBuffer.ToArray(), ref reStr))
                {
                    //port.PalletBuffer.Clear();
                    if (!port.ClearBufPallets(ref reStr))
                    {
                        logRecorder.AddDebugLog(port.NodeName, "清理入口缓存数据失败" + reStr);
                    }
                }
                else
                {
                    string logStr = string.Format("{0}申请失败,因为:{1}", taskType.ToString(), reStr);
                    logRecorder.AddDebugLog(port.NodeName, logStr);
                }
            }
        }
示例#4
0
 private void AsrsCheckinRequire()
 {
     //foreach(AsrsControl.AsrsPortalModel port in targetPorts)
     for (int i = 0; i < targetPorts.Count(); i++)
     {
         AsrsControl.AsrsPortalModel port = targetPorts[i];
         if (port.AsrsCtl.StackDevice.Db2Vals[0] > 0 || port.AsrsCtl.StackDevice.Db2Vals[1] > 2)
         {
             continue;
         }
         if (port.PalletBuffer.Count() < 1)
         {
             continue;
         }
         if (port.AsrsCtl.StackDevice.Db2Vals[1] > 2)
         {
         }
         bool checkInRequire = false;
         if (port.PalletBuffer.Count() >= port.PortinBufCapacity)
         {
             checkInRequire = true;
         }
         else
         {
             if (db1ValsToSnd[0] == 3 && port.Db2Vals[0] == 2)
             {
                 checkInRequire = true;
             }
         }
         for (int j = 0; j < Math.Min(port.PalletBuffer.Count(), port.PortinBufCapacity); j++)
         {
             if (port.Db2Vals[j] != 2)
             {
                 checkInRequire = false;
                 break;
             }
         }
         if (port.Db2Vals[2] == 2) //手动入库按钮请求
         {
             checkInRequire = true;
         }
         if (!checkInRequire)
         {
             continue;
         }
         string palletID                   = port.PalletBuffer[0];
         string nextProcessID              = port.AsrsCtl.GetNextStepID(palletID);
         int    nextProcessSeq             = SysCfg.SysCfgModel.stepSeqs.IndexOf(nextProcessID);
         int    curSeq                     = SysCfg.SysCfgModel.stepSeqs.IndexOf(port.AsrsCtl.MesProcessStepID[0]);
         AsrsModel.EnumLogicArea logicArea = AsrsModel.EnumLogicArea.暂存区;
         if (nextProcessSeq > curSeq)
         {
             logicArea = AsrsModel.EnumLogicArea.常温区;
         }
         string reStr = "";
         SysCfg.EnumAsrsTaskType taskType = SysCfg.EnumAsrsTaskType.产品入库;
         if (port.AsrsCtl.AsrsCheckinTaskRequire(port, logicArea, taskType, port.PalletBuffer.ToArray(), ref reStr))
         {
             //port.PalletBuffer.Clear();
             if (!port.ClearBufPallets(ref reStr))
             {
                 logRecorder.AddDebugLog(port.NodeName, "清理入口缓存数据失败" + reStr);
             }
         }
         else
         {
             string logStr = string.Format("{0}申请失败,因为:{1}", taskType.ToString(), reStr);
             logRecorder.AddDebugLog(port.NodeName, logStr);
         }
     }
 }
示例#5
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);
            }
        }