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); } }
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); } } }
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); } }
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); } } }
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); } }