Example #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);
     }
 }
Example #2
0
        public string ConvertoStr(SysCfg.EnumAsrsTaskType taskType)
        {
            StringBuilder strBuild = new StringBuilder();

            strBuild.AppendFormat("{0};{1};", inputPort, outputPort);
            strBuild.AppendFormat("{0}-{1}-{2};", cellPos1.Row, cellPos1.Col, cellPos1.Layer);
            if (taskType == SysCfg.EnumAsrsTaskType.移库)
            {
                strBuild.AppendFormat("{0}-{1}-{2};", cellPos2.Row, cellPos2.Col, cellPos2.Layer);
            }
            else if (taskType == SysCfg.EnumAsrsTaskType.DCR测试)
            {
                strBuild.AppendFormat("{0}-{1}-{2};", cellPos2.Row, cellPos2.Col, cellPos2.Layer);
            }

            if (inputCellGoods != null && inputCellGoods.Count() > 0)
            {
                string goodsStr = "";
                foreach (string str in inputCellGoods)
                {
                    goodsStr = goodsStr + str + ",";
                }
                if (!string.IsNullOrEmpty(goodsStr))
                {
                    if (goodsStr[goodsStr.Count() - 1] == ',')
                    {
                        goodsStr = goodsStr.Remove(goodsStr.Count() - 1, 1);
                    }
                    strBuild.Append(goodsStr);
                }
            }
            return(strBuild.ToString());
        }
Example #3
0
        public bool CreateManualOutputTask(string houseName, CellCoordModel cell, ref string reStr)
        {
            AsrsCtlModel asrsModel = null;

            foreach (AsrsCtlModel m in asrsCtls)
            {
                if (m.HouseName == houseName)
                {
                    asrsModel = m;
                    break;
                }
            }
            if (asrsModel == null)
            {
                reStr = "未识别的: " + houseName;
                return(false);
            }

            SysCfg.EnumAsrsTaskType taskType       = SysCfg.EnumAsrsTaskType.产品出库;
            EnumCellStatus          cellStoreStats = EnumCellStatus.空闲;
            EnumGSTaskStatus        cellTaskStatus = EnumGSTaskStatus.完成;

            asrsResourceManage.GetCellStatus(houseName, cell, ref cellStoreStats, ref cellTaskStatus);
            EnumGSEnabledStatus cellEnabledStatus = EnumGSEnabledStatus.启用;

            if (!asrsResourceManage.GetCellEnabledStatus(houseName, cell, ref cellEnabledStatus))
            {
                reStr = string.Format("获取货位启用状态失败{0}-{1}-{2}", cell.Row, cell.Col, cell.Layer);
                return(false);
            }
            if (cellEnabledStatus == EnumGSEnabledStatus.禁用)
            {
                reStr = string.Format("货位{0}-{1}-{2}禁用,无法生成出库任务", cell.Row, cell.Col, cell.Layer);
                return(false);
            }
            if (cellTaskStatus == EnumGSTaskStatus.锁定)
            {
                reStr = "货位处于锁定状态";
                return(false);
            }

            if (cellStoreStats == EnumCellStatus.空料框)
            {
                taskType = SysCfg.EnumAsrsTaskType.空框出库;
            }

            asrsModel.GenerateOutputTask(cell, null, taskType, false);

            return(true);
        }
Example #4
0
        public override bool BuildCfg(System.Xml.Linq.XElement xe, ref string reStr)
        {
            if (!base.BuildCfg(xe, ref reStr))
            {
                return(false);
            }
            XElement selfDataXE = xe.Element("SelfDatainfo");

            this.portCata = int.Parse(selfDataXE.Element("PortType").Value.ToString());


            if (selfDataXE.Attribute("portSeq") != null)
            {
                this.portSeq = int.Parse(selfDataXE.Attribute("portSeq").Value.ToString());
            }
            if (selfDataXE.Attribute("capacity") != null)
            {
                this.PortinBufCapacity = int.Parse(selfDataXE.Attribute("capacity").Value.ToString());
            }
            if (selfDataXE.Attribute("bindedTask") != null)
            {
                string[] strArray = selfDataXE.Attribute("bindedTask").Value.ToString().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                if (strArray != null)
                {
                    if (strArray.Count() > 0)
                    {
                        if (this.portCata == 1)
                        {
                            this.bindedTaskInput = (SysCfg.EnumAsrsTaskType)Enum.Parse(typeof(SysCfg.EnumAsrsTaskType), strArray[0]);
                        }
                        else if (this.portCata == 2)
                        {
                            this.bindedTaskOutput = (SysCfg.EnumAsrsTaskType)Enum.Parse(typeof(SysCfg.EnumAsrsTaskType), strArray[0]);
                        }
                        else if (this.portCata == 3)
                        {
                            this.bindedTaskInput = (SysCfg.EnumAsrsTaskType)Enum.Parse(typeof(SysCfg.EnumAsrsTaskType), strArray[0]);
                            if (strArray.Count() > 1)
                            {
                                this.bindedTaskOutput = (SysCfg.EnumAsrsTaskType)Enum.Parse(typeof(SysCfg.EnumAsrsTaskType), strArray[1]);
                            }
                        }
                    }
                }
            }
            return(true);
        }
Example #5
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);
                }
            }
        }
Example #6
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);
         }
     }
 }
Example #7
0
        public override bool WCSMainTaskStart(MainControlTaskModel mainTask, WCSFlowPathModel wcsPath, ref string reStr)
        {
            try
            {
                if (!base.WCSMainTaskStart(mainTask, wcsPath, ref reStr))
                {
                    return(false);
                }
                WCSPathNodeModel wcsNode     = wcsPath.GetNodeByID(nodeID);
                WCSPathNodeModel wcsNodeNext = wcsPath.GetNodeByID(wcsNode.NextNodeID);
                CtlDBAccess.Model.ControlTaskModel ctlTask = new CtlDBAccess.Model.ControlTaskModel();
                ctlTask.TaskID         = System.Guid.NewGuid().ToString();
                ctlTask.DeviceID       = nodeID;
                ctlTask.DeviceCata     = devCata;
                ctlTask.StDevice       = nodeID;
                ctlTask.StDeviceCata   = devCata;
                ctlTask.StDeviceParam  = mainTask.StDeviceParam;
                ctlTask.EndDevice      = wcsNode.NextNodeID;
                ctlTask.EndDeviceCata  = wcsNodeNext.DevCata;
                ctlTask.EndDeviceParam = mainTask.EndDeviceParam;
                ctlTask.MainTaskID     = mainTask.MainTaskID;
                ctlTask.PalletCode     = mainTask.PalletCode;
                UInt16 controlID = ctlTaskBll.GetUnusedControlID();
                if (controlID < 1)
                {
                    reStr = "没有可用的控制任务ID";
                    return(false);
                }
                ctlTask.ControlID = controlID;
                ctlTask.TaskIndex = 1;
                SysCfg.EnumAsrsTaskType asrsTaskType = SysCfg.EnumAsrsTaskType.空;
                if (mainTask.TaskType == "下架")
                {
                    asrsTaskType = SysCfg.EnumAsrsTaskType.产品出库;
                }
                else if (mainTask.TaskType == "上架")
                {
                    asrsTaskType = SysCfg.EnumAsrsTaskType.产品入库;
                }

                ctlTask.TaskType   = (int)asrsTaskType;
                ctlTask.TaskParam  = "";
                ctlTask.TaskStatus = "待执行";
                ctlTask.TaskPhase  = 0;
                ctlTask.CreateTime = System.DateTime.Now;
                ctlTask.CreateMode = "自动";
                bool re = ctlTaskBll.Add(ctlTask);
                //return re;
                if (re)
                {
                    mainTask.TaskStatus = "已启动";
                    CtlDBAccess.BLL.MainControlTaskBll mainTaskBll = new CtlDBAccess.BLL.MainControlTaskBll();
                    return(mainTaskBll.Update(mainTask));
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                reStr = ex.ToString();
                return(false);
            }
        }
Example #8
0
        public bool CreateManualMoveGSTask(string startHouseName, CellCoordModel startCell, string endHouseName, CellCoordModel endCell, ref string reStr)
        {
            //throw new NotImplementedException();
            string       houseName = startHouseName;
            AsrsCtlModel asrsModel = null;

            foreach (AsrsCtlModel m in asrsCtls)
            {
                if (m.HouseName == houseName)
                {
                    asrsModel = m;
                    break;
                }
            }
            if (asrsModel == null)
            {
                reStr = "未识别的: " + houseName;
                return(false);
            }
            EnumGSEnabledStatus cellEnabledStatus = EnumGSEnabledStatus.启用;

            if (!asrsResourceManage.GetCellEnabledStatus(houseName, startCell, ref cellEnabledStatus))
            {
                reStr = string.Format("获取货位启用状态失败{0}-{1}-{2}", startCell.Row, startCell.Col, startCell.Layer);
                return(false);
            }
            if (cellEnabledStatus == EnumGSEnabledStatus.禁用)
            {
                reStr = string.Format("货位{0}-{1}-{2}禁用,无法生成移库任务", startCell.Row, startCell.Col, startCell.Layer);
                return(false);
            }

            if (!asrsResourceManage.GetCellEnabledStatus(houseName, endCell, ref cellEnabledStatus))
            {
                reStr = string.Format("获取货位启用状态失败{0}-{1}-{2}", endCell.Row, endCell.Col, endCell.Layer);
                return(false);
            }
            if (cellEnabledStatus == EnumGSEnabledStatus.禁用)
            {
                reStr = string.Format("货位{0}-{1}-{2}禁用,无法生成移库任务", endCell.Row, endCell.Col, endCell.Layer);
                return(false);
            }
            EnumCellStatus   cellStoreStats = EnumCellStatus.空闲;
            EnumGSTaskStatus cellTaskStatus = EnumGSTaskStatus.完成;

            asrsResourceManage.GetCellStatus(houseName, startCell, ref cellStoreStats, ref cellTaskStatus);
            if (cellTaskStatus == EnumGSTaskStatus.锁定)
            {
                reStr = string.Format("货位{0}-{1}-{2}处于锁定状态,无法生成移库任务", startCell.Row, startCell.Col, startCell.Layer);;
                return(false);
            }
            asrsResourceManage.GetCellStatus(houseName, endCell, ref cellStoreStats, ref cellTaskStatus);
            if (cellTaskStatus == EnumGSTaskStatus.锁定)
            {
                reStr = string.Format("目标货位{0}-{1}-{2}处于锁定状态,无法生成移库任务", endCell.Row, endCell.Col, endCell.Layer);;
                return(false);
            }
            if (cellStoreStats != EnumCellStatus.空闲)
            {
                reStr = string.Format("目标货位{0}-{1}-{2}不为空,无法生成移库任务", endCell.Row, endCell.Col, endCell.Layer);;
                return(false);
            }
            SysCfg.EnumAsrsTaskType taskType = SysCfg.EnumAsrsTaskType.移库;
            return(asrsModel.GenerateOutputTask(startCell, endCell, taskType, false, null, 1000));
            //return true;
        }
Example #9
0
        private CtlDBAccess.Model.ControlTaskModel GetCheckoutOfArea(AsrsControl.AsrsCtlModel asrsCtl, IAsrsManageToCtl asrsResManage, SysCfg.EnumAsrsTaskType taskType, IList <CtlDBAccess.Model.ControlTaskModel> taskList, AsrsModel.EnumLogicArea checkOutArea)
        {
            string           houseName = asrsCtl.HouseName;
            ControlTaskModel task      = null;

            if (taskList == null)
            {
                return(null);
            }
            foreach (ControlTaskModel t in taskList)
            {
                string             reStr      = "";
                AsrsTaskParamModel paramModel = new AsrsTaskParamModel();
                if (!paramModel.ParseParam(taskType, t.TaskParam, ref reStr))
                {
                    continue;
                }
                AsrsModel.EnumGSEnabledStatus cellEnabledStatus = AsrsModel.EnumGSEnabledStatus.启用;
                if (!asrsResManage.GetCellEnabledStatus(houseName, paramModel.CellPos1, ref cellEnabledStatus))
                {
                    // reStr = "获取货位启用状态失败";
                    continue;
                }
                if (cellEnabledStatus == AsrsModel.EnumGSEnabledStatus.禁用)
                {
                    continue;
                }
                AsrsModel.EnumLogicArea curLogicArea = AsrsModel.EnumLogicArea.一次高温A区;
                if (!asrsResManage.GetLogicAreaName(houseName, paramModel.CellPos1, ref curLogicArea))
                {
                    continue;
                }
                if (curLogicArea == checkOutArea)
                {
                    task = t;
                    break;
                }
            }
            return(task);
        }
Example #10
0
        public bool AsrsInputEnabled(ref SysCfg.EnumAsrsTaskType asrsTaskType)
        {
            lock (portBufLock)
            {
                if (this.portCata == 2)
                {
                    return(false);
                }
                if (this.db1ValsToSnd[0] == 2)
                {
                    return(false);
                }

                if (asrsTaskType == SysCfg.EnumAsrsTaskType.产品入库)
                {
                    if (this.PortinBufCapacity > 1)
                    {
                        //并且入口有料,并且手动强制入库
                        if (this.db2Vals[this.PortinBufCapacity] == 2)
                        {
                            if ((this.palletBuffer.Count() > 0) && (this.db2Vals[0] == 2 || this.db2Vals[1] == 2))
                            {
                                return(true);
                            }
                            else
                            {
                                return(false);
                            }
                        }
                        else if (this.palletBuffer.Count() >= this.PortinBufCapacity) //缓存满
                        {
                            /* 屏蔽条码校验
                             * if (PalletBuffer.Count() >= PortinBufCapacity && dlgtBarcodeCheck != null)//条码校验
                             * {
                             *  string reStr = "";
                             *  if (!dlgtBarcodeCheck(this, ref reStr))
                             *  {
                             *      CurrentTaskDescribe = reStr;
                             *      return false;
                             *  }
                             * }*/
                            for (int j = 0; j < Math.Min(PalletBuffer.Count(), PortinBufCapacity); j++)
                            {
                                if (this.Db2Vals[j] != 2)
                                {
                                    return(false);
                                }
                            }
                            return(true);
                        }
                        else
                        {
                            return(false);
                        }
                    }
                    else
                    {
                        if (this.palletBuffer.Count() > 0 && this.db2Vals[0] == 2)
                        {
                            return(true);
                        }
                        else
                        {
                            return(false);
                        }
                    }
                }
                else
                {
                    if (this.PortinBufCapacity > 1)
                    {
                        if ((this.db2Vals[this.PortinBufCapacity] == 2))
                        {
                            return(true);
                        }
                        else
                        {
                            for (int j = 0; j < PortinBufCapacity; j++)
                            {
                                if (this.Db2Vals[j] != 2)
                                {
                                    return(false);
                                }
                            }
                            return(true);
                        }
                    }
                    else
                    {
                        if (this.db2Vals[0] == 2)
                        {
                            return(true);
                        }
                        else
                        {
                            return(false);
                        }
                    }
                }
            }
        }
Example #11
0
        /// <summary>
        /// 控制出库任务的生成,包括产品出库,空筐出库
        /// </summary>
        /// <param name="asrsCtl"></param>
        /// <param name="reStr"></param>
        /// <returns></returns>
        private bool AsrsCheckoutLoop(AsrsControl.AsrsCtlModel asrsCtl, SysCfg.EnumAsrsTaskType taskType, ref string reStr)
        {
            try
            {
                CtlDBAccess.BLL.ControlTaskBll ctlTaskBll = new CtlDBAccess.BLL.ControlTaskBll();
                //  SysCfg.EnumAsrsTaskType taskType = SysCfg.EnumAsrsTaskType.产品出库;
                // 1产品出库
                List <AsrsPortalModel> ports = asrsCtl.GetOutPortsOfBindedtask(taskType);
                string houseName             = asrsCtl.HouseName;
                AsrsModel.EnumCellStatus targetStoreStatus = EnumCellStatus.满位;
                if (taskType == SysCfg.EnumAsrsTaskType.空筐出库)
                {
                    targetStoreStatus = EnumCellStatus.空料框;
                }
                foreach (AsrsPortalModel port in ports)
                {
                    if (taskType == SysCfg.EnumAsrsTaskType.空筐出库)
                    {
                        if (port.Db2Vals[0] != 2 || port.Db2Vals[2] != 1)  //禁止出库
                        {
                            continue;
                        }
                    }
                    else  //禁止出库
                    {
                        if (port.Db2Vals[0] != 2 || port.Db2Vals[1] != 1)
                        {
                            continue;
                        }
                    }
                    //查询是否有待执行或者执行中的任务
                    string str = string.Format("DeviceID='{0}' and EndDevice='{1}' and TaskType={2} and (TaskStatus='待执行' or TaskStatus='执行中')", asrsCtl.StackDevice.NodeID, port.NodeID, (int)taskType);
                    List <CtlDBAccess.Model.ControlTaskModel> taskList = ctlTaskBll.GetModelList(str);
                    if (taskList != null && taskList.Count() > 0)
                    {
                        continue;
                    }
                    //遍历所有库位,判断材料类别,按照先入先出规则,匹配出库的货位。
                    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>();

                    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 != targetStoreStatus.ToString()))
                                {
                                    // reStr = string.Format("货位{0}-{1}-{2}禁用,无法生成出库任务", cell.Row, cell.Col, cell.Layer);
                                    continue;
                                }
                                AsrsModel.CellCoordModel cell = new AsrsModel.CellCoordModel(r, c, L);
                                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);
                        List <string>            storGoods = new List <string>();
                        if (!asrsResManage.GetStockDetail(houseName, cell, ref storGoods))
                        {
                            return(false);
                        }
                        string palletIDStr = "";
                        for (int i = 0; i < storGoods.Count(); i++)
                        {
                            if (storGoods.Count() > 1 && (i == storGoods.Count() - 1))
                            {
                                palletIDStr = palletIDStr + storGoods[i];
                            }
                            else
                            {
                                palletIDStr = palletIDStr + storGoods[i] + ",";
                            }
                        }

                        return(asrsCtl.CreateStackerTask(port, taskType, cell, palletIDStr, ref reStr));


                        //if (asrsCtl.GenerateOutputTask(cell, port.BindedTaskOutput, true, port.PortSeq, ref reStr, new List<short> { palletCata }))
                        //{
                        //    port.Db1ValsToSnd[0] = 2;
                        //}
                        //else
                        //{
                        //    Console.WriteLine("生成任务{0}失败,{1}", port.BindedTaskOutput.ToString(), reStr);
                        //}
                    }
                }

                return(true);
            }
            catch (Exception ex)
            {
                reStr = ex.ToString();
                return(false);
            }
        }
Example #12
0
        public bool ParseParam(SysCfg.EnumAsrsTaskType taskType, string strParam, ref string reStr)
        {
            try
            {
                //任务参数格式 ""
                this.strTaskParam = strParam;
                string[] taskParamArray = this.strTaskParam.Split(new string[] { ";" }, StringSplitOptions.None);
                if (taskParamArray == null || taskParamArray.Count() < 3)
                {
                    reStr = "出入库参数解析错误";
                    return(false);
                }
                inputPort  = int.Parse(taskParamArray[0]);
                outputPort = int.Parse(taskParamArray[1]);
                string[] cellPos = taskParamArray[2].Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
                if (cellPos == null || cellPos.Count() < 3)
                {
                    reStr = "出入库参数解析错误";
                    return(false);
                }

                short row   = short.Parse(cellPos[0]);
                short col   = short.Parse(cellPos[1]);
                short layer = short.Parse(cellPos[2]);
                this.cellPos1 = new CellCoordModel(row, col, layer);
                switch (taskType)
                {
                case SysCfg.EnumAsrsTaskType.产品入库:
                {
                    //产品入库
                    //  this.inputPort = 1;
                    if (taskParamArray.Count() > 3)
                    {
                        string strGoods = taskParamArray[3];
                        this.inputCellGoods = strGoods.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                    }

                    break;
                }

                case SysCfg.EnumAsrsTaskType.空筐入库:
                {
                    //空筐入库
                    if (taskParamArray.Count() > 3)
                    {
                        string strGoods = taskParamArray[3];
                        this.inputCellGoods = strGoods.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                    }

                    break;
                }

                case SysCfg.EnumAsrsTaskType.产品出库:
                {
                    //产品出库

                    if (taskParamArray.Count() > 3)
                    {
                        string strGoods = taskParamArray[3];
                        this.inputCellGoods = strGoods.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                    }
                    if (taskParamArray.Count() > 4)
                    {
                        string[] strReserveParams = taskParamArray[4].Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                        foreach (string strP in strReserveParams)
                        {
                            Int16 reserveParam = Int16.Parse(strP);
                            reserveParams.Add(reserveParam);
                        }
                    }
                    break;
                }

                case SysCfg.EnumAsrsTaskType.空筐出库:
                {
                    //空筐出库
                    if (taskParamArray.Count() > 3)
                    {
                        string strGoods = taskParamArray[3];
                        this.inputCellGoods = strGoods.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                    }
                    break;
                }

                case SysCfg.EnumAsrsTaskType.移库:
                {
                    string[] cellTargetPos = taskParamArray[3].Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
                    if (cellTargetPos == null || cellTargetPos.Count() < 3)
                    {
                        reStr = "移库参数解析错误";
                        return(false);
                    }
                    row           = short.Parse(cellTargetPos[0]);
                    col           = short.Parse(cellTargetPos[1]);
                    layer         = short.Parse(cellTargetPos[2]);
                    this.cellPos2 = new CellCoordModel(row, col, layer);
                    if (taskParamArray.Count() > 4)
                    {
                        string strGoods = taskParamArray[4];
                        this.inputCellGoods = strGoods.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                    }
                    break;
                }

                default:
                {
                    reStr = "入库参数错误,不可识别的任务类型:" + taskType.ToString();
                    return(false);
                }
                }
                return(true);
            }
            catch (Exception ex)
            {
                reStr = ex.ToString();
                return(false);
            }
        }
Example #13
0
        public bool ParseParam(CtlDBAccess.Model.ControlTaskModel ctlTask, ref string reStr)
        {
            try
            {
                SysCfg.EnumAsrsTaskType taskType = (SysCfg.EnumAsrsTaskType)ctlTask.TaskType;
                if (ctlTask.DeviceCata != "堆垛机")
                {
                    reStr = "设备类型不支持,要求为 '堆垛机'类型,实际:" + ctlTask.DeviceCata;
                    return(false);
                }
                if (taskType == SysCfg.EnumAsrsTaskType.产品入库 || taskType == SysCfg.EnumAsrsTaskType.空筐入库)
                {
                    inputPort = int.Parse(ctlTask.StDevice);
                    string[] cellPos = ctlTask.EndDeviceParam.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
                    if (cellPos == null || cellPos.Count() < 3)
                    {
                        reStr = "出入库参数解析错误";
                        return(false);
                    }
                    short row   = short.Parse(cellPos[0]);
                    short col   = short.Parse(cellPos[1]);
                    short layer = short.Parse(cellPos[2]);
                    this.cellPos1 = new CellCoordModel(row, col, layer);
                }
                else if (taskType == SysCfg.EnumAsrsTaskType.产品出库 || taskType == SysCfg.EnumAsrsTaskType.空筐出库)
                {
                    outputPort = int.Parse(ctlTask.EndDevice);
                    string[] cellPos = ctlTask.StDeviceParam.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
                    if (cellPos == null || cellPos.Count() < 3)
                    {
                        reStr = "出入库参数解析错误,货位参数不足3个";
                        return(false);
                    }
                    short row   = short.Parse(cellPos[0]);
                    short col   = short.Parse(cellPos[1]);
                    short layer = short.Parse(cellPos[2]);
                    this.cellPos1 = new CellCoordModel(row, col, layer);
                }
                else if (taskType == SysCfg.EnumAsrsTaskType.移库)
                {
                    string[] cellPos = ctlTask.StDeviceParam.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
                    if (cellPos == null || cellPos.Count() < 3)
                    {
                        reStr = "出入库参数解析错误,货位参数不足3个";
                        return(false);
                    }
                    short row   = short.Parse(cellPos[0]);
                    short col   = short.Parse(cellPos[1]);
                    short layer = short.Parse(cellPos[2]);
                    this.cellPos1 = new CellCoordModel(row, col, layer);

                    cellPos = ctlTask.EndDeviceParam.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
                    if (cellPos == null || cellPos.Count() < 3)
                    {
                        reStr = "出入库参数解析错误,货位参数不足3个";
                        return(false);
                    }
                    row           = short.Parse(cellPos[0]);
                    col           = short.Parse(cellPos[1]);
                    layer         = short.Parse(cellPos[2]);
                    this.cellPos2 = new CellCoordModel(row, col, layer);
                }
                else
                {
                    reStr = "任务参数解析失败,不识别的任务类型:" + taskType.ToString();
                    return(false);
                }
                this.inputCellGoods = ctlTask.PalletCode.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                return(true);
            }
            catch (Exception ex)
            {
                reStr = ex.ToString();
                return(false);
            }
        }
Example #14
0
        //A1库出库任务委托
        public CtlDBAccess.Model.ControlTaskModel GetCheckoutOfA1(AsrsControl.AsrsCtlModel asrsCtl, IAsrsManageToCtl asrsResManage, IList <CtlDBAccess.Model.ControlTaskModel> taskList, SysCfg.EnumAsrsTaskType taskType)
        {
            if (asrsCtl.HouseName != AsrsModel.EnumStoreHouse.A1库房.ToString())
            {
                return(null);
            }
            if (taskList == null)
            {
                return(null);
            }
            NodeVirStation nodeStation = GetNodeByID("4001") as NodeVirStation;
            //AsrsModel.EnumLogicArea requireCheckoutArea = AsrsModel.EnumLogicArea.一次高温A区;
            List <AsrsModel.EnumLogicArea> areaList = new List <AsrsModel.EnumLogicArea>();

            if (nodeStation.Db2Vals[2] == 1)
            {
                //requireCheckoutArea = AsrsModel.EnumLogicArea.一次高温A区;
                areaList.Add(AsrsModel.EnumLogicArea.一次高温A区);
                areaList.Add(AsrsModel.EnumLogicArea.一次高温B区);
            }
            else if (nodeStation.Db2Vals[2] == 2)
            {
                areaList.Add(AsrsModel.EnumLogicArea.一次高温B区);
                areaList.Add(AsrsModel.EnumLogicArea.一次高温A区);
            }
            else
            {
                return(null);
            }
            string           houseName = asrsCtl.HouseName;
            ControlTaskModel task      = null;

            foreach (AsrsModel.EnumLogicArea requireCheckoutArea in areaList)
            {
                task = GetCheckoutOfArea(asrsCtl, asrsResManage, taskType, taskList, requireCheckoutArea);
                if (task != null)
                {
                    break;
                }
            }

            return(task);
        }
Example #15
0
        public override bool BuildCfg(System.Xml.Linq.XElement xe, ref string reStr)
        {
            if (!base.BuildCfg(xe, ref reStr))
            {
                return(false);
            }
            XElement selfDataXE = xe.Element("SelfDatainfo");

            this.portCata = int.Parse(selfDataXE.Element("PortType").Value.ToString());


            if (selfDataXE.Attribute("portSeq") != null)
            {
                this.portSeq = int.Parse(selfDataXE.Attribute("portSeq").Value.ToString());
            }
            if (selfDataXE.Attribute("capacity") != null)
            {
                this.PortinBufCapacity = int.Parse(selfDataXE.Attribute("capacity").Value.ToString());
            }
            if (selfDataXE.Attribute("emptyPalletCheckIn") != null)
            {
                if (selfDataXE.Attribute("emptyPalletCheckIn").Value.ToString().ToUpper() == "TRUE")
                {
                    this.EmptyPalletInputEnabled = true;
                }
            }

            if (selfDataXE.Attribute("bindedTask") != null)
            {
                string[] strArray = selfDataXE.Attribute("bindedTask").Value.ToString().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                if (strArray != null)
                {
                    if (strArray.Count() > 0)
                    {
                        foreach (string strTask in strArray)
                        {
                            bindedTaskList.Add((SysCfg.EnumAsrsTaskType)Enum.Parse(typeof(SysCfg.EnumAsrsTaskType), strTask));
                        }

                        if (this.portCata == 1)
                        {
                            this.bindedTaskInput = (SysCfg.EnumAsrsTaskType)Enum.Parse(typeof(SysCfg.EnumAsrsTaskType), strArray[0]);
                        }
                        else if (this.portCata == 2)
                        {
                            this.bindedTaskOutput = (SysCfg.EnumAsrsTaskType)Enum.Parse(typeof(SysCfg.EnumAsrsTaskType), strArray[0]);
                        }
                        else if (this.portCata == 3)
                        {
                            this.bindedTaskInput = (SysCfg.EnumAsrsTaskType)Enum.Parse(typeof(SysCfg.EnumAsrsTaskType), strArray[0]);
                            if (strArray.Count() > 1)
                            {
                                this.bindedTaskOutput = (SysCfg.EnumAsrsTaskType)Enum.Parse(typeof(SysCfg.EnumAsrsTaskType), strArray[1]);
                            }
                        }
                    }
                }
            }
            if (selfDataXE.Attribute("barcodeScanRequire") != null)
            {
                if (selfDataXE.Attribute("barcodeScanRequire").Value.ToString().ToUpper() == "TRUE")
                {
                    BarcodeScanRequire = true;
                }
            }
            return(true);
        }
Example #16
0
        public bool AsrsInputEnabled(ref SysCfg.EnumAsrsTaskType asrsTaskType)
        {
            lock (portBufLock)
            {
                if (this.portCata == 2)
                {
                    return(false);
                }
                if (this.db1ValsToSnd[0] == 2)
                {
                    return(false);
                }

                if (asrsTaskType == SysCfg.EnumAsrsTaskType.产品入库)
                {
                    if (this.PortinBufCapacity > 1)
                    {
                        //缓存满,并且入口有料,并且手动强制入库
                        if (this.db2Vals[this.PortinBufCapacity] == 2)
                        {
                            if ((this.palletBuffer.Count() > 0) && (this.db2Vals[0] == 2 || this.db2Vals[1] == 2))
                            {
                                return(true);
                            }
                            else
                            {
                                return(false);
                            }
                        }
                        else if (this.palletBuffer.Count() >= this.PortinBufCapacity)
                        {
                            for (int j = 0; j < Math.Min(PalletBuffer.Count(), PortinBufCapacity); j++)
                            {
                                if (this.Db2Vals[j] != 2)
                                {
                                    return(false);
                                }
                            }
                            return(true);
                        }
                        else
                        {
                            return(false);
                        }
                    }
                    else
                    {
                        if (this.palletBuffer.Count() > 0 && this.db2Vals[0] == 2)
                        {
                            return(true);
                        }
                        else
                        {
                            return(false);
                        }
                    }
                }
                else
                {
                    if (this.PortinBufCapacity > 1)
                    {
                        if ((this.db2Vals[this.PortinBufCapacity] == 2))
                        {
                            return(true);
                        }
                        else
                        {
                            for (int j = 0; j < PortinBufCapacity; j++)
                            {
                                if (this.Db2Vals[j] != 2)
                                {
                                    return(false);
                                }
                            }
                            return(true);
                        }
                    }
                    else
                    {
                        if (this.db2Vals[0] == 2)
                        {
                            return(true);
                        }
                        else
                        {
                            return(false);
                        }
                    }
                }
            }
        }
Example #17
0
        public bool CreateManualOutputTask(string houseName, CellCoordModel cell, ref string reStr)
        {
            AsrsCtlModel asrsModel = null;

            foreach (AsrsCtlModel m in asrsCtls)
            {
                if (m.HouseName == houseName)
                {
                    asrsModel = m;
                    break;
                }
            }
            if (asrsModel == null)
            {
                reStr = "未识别的: " + houseName;
                return(false);
            }

            SysCfg.EnumAsrsTaskType taskType       = SysCfg.EnumAsrsTaskType.产品出库;
            EnumCellStatus          cellStoreStats = EnumCellStatus.空闲;
            EnumGSTaskStatus        cellTaskStatus = EnumGSTaskStatus.完成;

            asrsResourceManage.GetCellStatus(houseName, cell, ref cellStoreStats, ref cellTaskStatus);
            EnumGSEnabledStatus cellEnabledStatus = EnumGSEnabledStatus.启用;

            if (!asrsResourceManage.GetCellEnabledStatus(houseName, cell, ref cellEnabledStatus))
            {
                reStr = string.Format("获取货位启用状态失败{0}-{1}-{2}", cell.Row, cell.Col, cell.Layer);
                return(false);
            }
            if (cellEnabledStatus == EnumGSEnabledStatus.禁用)
            {
                reStr = string.Format("货位{0}-{1}-{2}禁用,无法生成出库任务", cell.Row, cell.Col, cell.Layer);
                return(false);
            }
            if (cellTaskStatus == EnumGSTaskStatus.锁定)
            {
                reStr = "货位处于锁定状态";
                return(false);
            }

            if (cellStoreStats == EnumCellStatus.空料框)
            {
                taskType = SysCfg.EnumAsrsTaskType.空筐出库;
            }
            List <short>  asrsExtParams = new List <short>();
            List <string> cellGoods     = new List <string>();

            if (!this.asrsResourceManage.GetStockDetail(houseName, cell, ref cellGoods))
            {
                return(false);
            }
            if (dlgtAsrsExtParmas != null)
            {
                if (!dlgtAsrsExtParmas(cellGoods, ref asrsExtParams, ref reStr))
                {
                    return(false);
                }
            }
            //  asrsModel.GenerateOutputTask(cell, null,taskType, false,asrsExtParams,1000);
            return(asrsModel.GenerateCheckoutTask(cell, taskType, false, ref reStr, 1000));
        }
Example #18
0
        public bool ParseParam(SysCfg.EnumAsrsTaskType taskType, string strParam, string houseName, ref string reStr)
        {
            try
            {
                //任务参数格式 ""
                this.strTaskParam = strParam;
                string[] taskParamArray = this.strTaskParam.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
                if (taskParamArray == null || taskParamArray.Count() < 3)
                {
                    reStr = "出入库参数解析错误";
                    return(false);
                }
                inputPort  = int.Parse(taskParamArray[0]);
                outputPort = int.Parse(taskParamArray[1]);
                string[] cellPos = taskParamArray[2].Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
                if (cellPos == null || cellPos.Count() < 3)
                {
                    reStr = "出入库参数解析错误";
                    return(false);
                }
                short row   = short.Parse(cellPos[0]);
                short col   = short.Parse(cellPos[1]);
                short layer = short.Parse(cellPos[2]);
                this.cellPos1 = new CellCoordModel(row, col, layer);
                switch (taskType)
                {
                case SysCfg.EnumAsrsTaskType.产品入库:
                {
                    //产品入库
                    //  this.inputPort = 1;
                    if (taskParamArray.Count() > 3)
                    {
                        string strGoods = taskParamArray[3];
                        this.inputCellGoods = strGoods.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                    }

                    if (houseName == EnumStoreHouse.A1库房.ToString())
                    {
                        mesStep = "PS-2";
                    }
                    else
                    {
                        mesStep = "PS-8";
                    }


                    break;
                }
                //case SysCfg.EnumAsrsTaskType.空框入库:
                //    {
                //        //空框入库


                //        break;
                //    }
                case SysCfg.EnumAsrsTaskType.DCR出库:
                {
                    //产品出库

                    if (taskParamArray.Count() > 3)
                    {
                        string strGoods = taskParamArray[3];
                        this.inputCellGoods = strGoods.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                    }

                    if (houseName == EnumStoreHouse.A1库房.ToString())
                    {
                        mesStep = "PS-4";
                    }
                    else
                    {
                        mesStep = "PS-10";
                    }
                    break;
                }
                //case SysCfg.EnumAsrsTaskType.空框出库:
                //    {
                //        //空框出库

                //        break;

                //    }
                case SysCfg.EnumAsrsTaskType.移库:
                {
                    string[] cellTargetPos = taskParamArray[3].Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
                    if (cellTargetPos == null || cellTargetPos.Count() < 3)
                    {
                        reStr = "移库参数解析错误";
                        return(false);
                    }
                    row           = short.Parse(cellTargetPos[0]);
                    col           = short.Parse(cellTargetPos[1]);
                    layer         = short.Parse(cellTargetPos[2]);
                    this.cellPos2 = new CellCoordModel(row, col, layer);
                    if (taskParamArray.Count() > 4)
                    {
                        string strGoods = taskParamArray[4];
                        this.inputCellGoods = strGoods.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                    }

                    if (houseName == EnumStoreHouse.A1库房.ToString())
                    {
                        mesStep = "PS-2";
                    }
                    else
                    {
                        mesStep = "PS-8";
                    }

                    break;
                }

                case SysCfg.EnumAsrsTaskType.DCR测试:
                {
                    string[] cellTargetPos = taskParamArray[3].Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
                    if (cellTargetPos == null || cellTargetPos.Count() < 3)
                    {
                        reStr = "DCR出库参数解析错误";
                        return(false);
                    }
                    row           = short.Parse(cellTargetPos[0]);
                    col           = short.Parse(cellTargetPos[1]);
                    layer         = short.Parse(cellTargetPos[2]);
                    this.cellPos2 = new CellCoordModel(row, col, layer);

                    if (taskParamArray.Count() > 4)
                    {
                        string strGoods = taskParamArray[4];
                        this.inputCellGoods = strGoods.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                    }

                    if (houseName == EnumStoreHouse.A1库房.ToString())
                    {
                        mesStep = "PS-5";
                    }
                    else
                    {
                        mesStep = "PS-11";
                    }

                    break;
                }

                case SysCfg.EnumAsrsTaskType.紧急出库:
                {
                    string[] cellTargetPos = taskParamArray[2].Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
                    if (cellTargetPos == null || cellTargetPos.Count() < 3)
                    {
                        reStr = "DCR出库参数解析错误";
                        return(false);
                    }
                    row           = short.Parse(cellTargetPos[0]);
                    col           = short.Parse(cellTargetPos[1]);
                    layer         = short.Parse(cellTargetPos[2]);
                    this.cellPos2 = new CellCoordModel(row, col, layer);

                    if (taskParamArray.Count() > 3)
                    {
                        string strGoods = taskParamArray[3];
                        this.inputCellGoods = strGoods.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                    }
                    if (houseName == EnumStoreHouse.A1库房.ToString())
                    {
                        mesStep = "PS-14";
                    }
                    else
                    {
                        mesStep = "PS-15";
                    }
                    break;
                }

                default:
                {
                    reStr = "入库参数错误,不可识别的任务类型:" + taskType.ToString();
                    return(false);
                }
                }
                return(true);
            }
            catch (Exception ex)
            {
                reStr = ex.ToString();
                return(false);
            }
        }
Example #19
0
        /// <summary>
        /// 判断物流线是否堵塞,选择出库任务
        /// </summary>
        /// <param name="asrsCtl"></param>
        /// <param name="asrsResManage"></param>
        /// <param name="taskList"></param>
        /// <param name="taskType"></param>
        /// <returns></returns>
        public CtlDBAccess.Model.ControlTaskModel AsrsCheckoutTaskTorun(AsrsControl.AsrsCtlModel asrsCtl, IAsrsManageToCtl asrsResManage, IList <CtlDBAccess.Model.ControlTaskModel> taskList, SysCfg.EnumAsrsTaskType taskType)
        {
            try
            {
                if (taskList == null)
                {
                    return(null);
                }

                string houseName = asrsCtl.HouseName;
                CtlDBAccess.Model.ControlTaskModel task = null;
                foreach (CtlDBAccess.Model.ControlTaskModel t in taskList)
                {
                    if (t.TaskStatus != "待执行")
                    {
                        continue;
                    }
                    string             reStr      = "";
                    AsrsTaskParamModel paramModel = new AsrsTaskParamModel();
                    if (!paramModel.ParseParam(taskType, t.TaskParam, ref reStr))
                    {
                        continue;
                    }
                    AsrsPortalModel port          = asrsCtl.Ports[paramModel.OutputPort - 1];
                    int             switchPathSeq = 1;
                    CellCoordModel  cell          = paramModel.CellPos1;
                    if (asrsCtl.NodeName == "A1库房" || asrsCtl.HouseName == "A2库房")
                    {
                        string area = "注液高温区";
                        if (!this.asrsResManage.GetLogicAreaName(houseName, cell, ref area))
                        {
                            continue;
                        }
                        if (area == "注液高温区")
                        {
                            switchPathSeq = 1;
                        }
                        else if (area == "化成高温区")
                        {
                            switchPathSeq = 2;
                        }
                        else
                        {
                            continue;
                        }
                        if (port.Db2Vals[switchPathSeq] != 1)
                        {
                            continue;
                        }
                    }
                    else if (asrsCtl.HouseName == "C1库房" || asrsCtl.HouseName == "C2库房" || asrsCtl.HouseName == "C3库房")
                    {
                        if (taskType == SysCfg.EnumAsrsTaskType.空筐出库)
                        {
                            if (port.Db2Vals[switchPathSeq] != 1)
                            {
                                continue;
                            }
                        }
                    }

                    AsrsModel.EnumGSEnabledStatus cellEnabledStatus = AsrsModel.EnumGSEnabledStatus.启用;
                    if (!asrsResManage.GetCellEnabledStatus(houseName, paramModel.CellPos1, ref cellEnabledStatus))
                    {
                        // reStr = "获取货位启用状态失败";
                        continue;
                    }
                    if (cellEnabledStatus == AsrsModel.EnumGSEnabledStatus.禁用)
                    {
                        continue;
                    }
                    task = t;
                    break;
                }
                return(task);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                return(null);
            }
        }