Пример #1
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);
            }
        }
Пример #2
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);
                }
            }
        }
Пример #3
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);
            }
        }
Пример #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
        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);
            }
        }