private bool ExeSndTaskBusiness(ref string reStr) { try { switch (this.currentTaskPhase) { case 1: { this.currentTaskDescribe = "等待有板信号"; this.rfidUID = ""; this.db1ValsToSnd[5] = 0; this.db1ValsToSnd[6] = 1; this.db1ValsToSnd[7] = 0; this.db1ValsToSnd[8] = 0; this.db1ValsToSnd[9] = 0; if (this.db2Vals[0] != 2) { break; } if (SysCfg.SysCfgModel.SimMode) { this.rfidUID = this.SimRfidUID; logRecorder.AddDebugLog(this.nodeName, "读到托盘号:" + this.rfidUID); } else { if (this.barcodeRW != null && barcodeCheck) { this.rfidUID = this.barcodeRW.ReadBarcode().Trim(); //this.barcodeRW.Trim(); if (string.IsNullOrWhiteSpace(this.rfidUID)) { break; } logRecorder.AddDebugLog(this.nodeName, "读到托盘号:" + this.rfidUID); } } this.currentTaskPhase++; break; } case 2: { this.currentTask = null; currentTaskDescribe = "等待检索待执行任务"; List <CtlDBAccess.Model.ControlTaskModel> taskList = ctlTaskBll.GetTaskToRunList((int)SysCfg.EnumAsrsTaskType.输送机送出, "待执行", this.nodeID); // CtlDBAccess.Model.ControlTaskModel taskToRun = null; foreach (CtlDBAccess.Model.ControlTaskModel task in taskList) { if (0 != dlgtPathLockcheck(this, task, ref reStr)) { continue; } if (barcodeCheck) { if (task.PalletCode == this.rfidUID) { this.currentTask = task; break; } } else { this.currentTask = task; break; } } if (this.currentTask == null) { this.currentTaskDescribe = string.Format("没有匹配托盘{0}的任务", this.rfidUID); if (this.barcodeRW != null && barcodeCheck) { if (SysCfg.SysCfgModel.SimMode) { this.rfidUID = this.SimRfidUID; } else { this.rfidUID = this.barcodeRW.ReadBarcode().Trim(); //this.barcodeRW.Trim(); } if (string.IsNullOrWhiteSpace(this.rfidUID)) { break; } } break; } if (this.currentTask.TaskIndex == 1) { CtlDBAccess.BLL.MainControlTaskBll mainTaskBll = new CtlDBAccess.BLL.MainControlTaskBll(); CtlDBAccess.Model.MainControlTaskModel mainTask = mainTaskBll.GetModel(this.currentTask.MainTaskID); if (dlgtHeightChecked != null) { if (!dlgtHeightChecked(mainTask, db2Vals[2], ref reStr)) { string strHeightExceed = string.Format("货物{0}超高,与{1}目标货位{2}冲突", this.rfidUID, mainTask.EndDevice, mainTask.EndDeviceParam); if (this.db1ValsToSnd[0] != 3) { logRecorder.AddDebugLog(nodeName, strHeightExceed); } this.currentTaskDescribe = strHeightExceed; this.db1ValsToSnd[0] = 3; break; } } if (mainTask != null) { mainTask.TaskStatus = "执行中"; mainTaskBll.Update(mainTask); } } //发送任务参数 this.db1ValsToSnd[6] = 1; this.db1ValsToSnd[7] = 21; this.db1ValsToSnd[8] = (short)this.currentTask.ControlID; this.db1ValsToSnd[9] = short.Parse(this.currentTask.EndDevice); if (!string.IsNullOrWhiteSpace(this.rfidUID)) { logRecorder.AddDebugLog(this.nodeName, "读到托盘号:" + this.rfidUID); } logRecorder.AddDebugLog(nodeName, string.Format("控制ID{0}执行到第2步,发送参数,等待PLC读数据完成", this.currentTask.ControlID)); this.currentTaskPhase++; break; } case 3: { this.db1ValsToSnd[5] = 1; //写入数据 this.currentTask.TaskStatus = "执行中"; ctlTaskBll.Update(currentTask); //等待PLC 读数据完成 this.currentTaskDescribe = "等待输送机读数据完成"; if (this.db2Vals[5] != 2) { break; } this.db1ValsToSnd[5] = 2; this.db1ValsToSnd[7] = 0; this.db1ValsToSnd[8] = 0; this.db1ValsToSnd[9] = 0; logRecorder.AddDebugLog(nodeName, string.Format("控制ID{0}任务执行到第3步,参数复位", this.currentTask.ControlID)); this.currentTaskPhase++; ctlTaskBll.Update(currentTask); break; } case 4: { this.currentTaskDescribe = "输送任务发送完毕"; currentTask = null; break; } default: { break; } } return(true); } catch (Exception ex) { reStr = ex.ToString(); return(false); } }
public override bool WCSMainTaskStart(CtlDBAccess.Model.MainControlTaskModel mainTask, WCSFlowPathModel wcsPath, ref string reStr) { if (!base.WCSMainTaskStart(mainTask, wcsPath, ref reStr)) { return(false); } WCSPathNodeModel wcsNode = wcsPath.GetNodeByID(nodeID); WCSPathNodeModel wcsNodeNext = wcsPath.GetNodeByID(wcsNode.NextNodeID); CtlDBAccess.Model.ControlTaskModel ctlTask = null; ctlTask = new CtlDBAccess.Model.ControlTaskModel(); ctlTask.TaskID = System.Guid.NewGuid().ToString(); 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; ctlTask.TaskParam = ""; ctlTask.TaskStatus = "待执行"; ctlTask.TaskPhase = 0; ctlTask.CreateTime = System.DateTime.Now; ctlTask.CreateMode = "自动"; if (wcsNodeNext.DevCata == "库房") { ctlTask.DeviceID = wcsNodeNext.NodeID; ctlTask.DeviceCata = "堆垛机"; ctlTask.TaskType = (int)SysCfg.EnumAsrsTaskType.产品入库; } else if (wcsNodeNext.DevCata == "RGV") { ctlTask.DeviceID = wcsNodeNext.NodeID; ctlTask.DeviceCata = wcsNodeNext.DevCata; ctlTask.TaskType = (int)SysCfg.EnumAsrsTaskType.RGV上下料; } else { ctlTask.DeviceID = nodeID; ctlTask.DeviceCata = devCata; ctlTask.TaskType = (int)SysCfg.EnumAsrsTaskType.输送机送出; } if (ctlTask == null) { return(false); } 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); } }
public bool CreateNodeNextTask(FlowCtlBaseModel.CtlNodeBaseModel curNode, CtlDBAccess.Model.ControlTaskModel curTask, ref string reStr) { try { CtlDBAccess.Model.MainControlTaskModel mainTask = mainCtlTaskBll.GetModel(curTask.MainTaskID); if (mainTask == null) { reStr = "主任务为空,不存在的主任务ID:" + curTask.MainTaskID; return(false); } FlowCtlBaseModel.WCSFlowPathModel wcsPath = null; if (wcsPathMap.Keys.Contains(mainTask.FlowPathKey)) { wcsPath = wcsPathMap[mainTask.FlowPathKey]; } else { reStr = "路径不存在:" + mainTask.FlowPathKey; return(false); } FlowCtlBaseModel.WCSPathNodeModel wcsNode = wcsPath.GetNodeByID(curNode.NodeID); if (wcsNode.NodeFlag == "终点") { //管理任务完成 WMS_Interface.ResposeData res = WmsSvc.UpdateManageTaskStatus(mainTask.WMSTaskID, "已完成"); if (!res.Status) { reStr = string.Format("更新WMS任务:{0}状态失败,{1}", mainTask.WMSTaskID, res.Describe); return(false); } mainTask.TaskStatus = "已完成"; mainTask.FinishTime = System.DateTime.Now; if (!mainCtlTaskBll.Update(mainTask)) { reStr = string.Format("更新主控制任务:{0}状态失败", mainTask.MainTaskID); return(false); } return(true); } FlowCtlBaseModel.CtlNodeBaseModel nextNode = NodeManager.GetNodeByID(wcsNode.NextNodeID); if (curNode.DevCata == "站台") { if (nextNode.DevCata == "站台") { CtlDBAccess.Model.ControlTaskModel nextCtlTask = CreateConveyorTask(curTask.TaskIndex + 1, mainTask.MainTaskID, curNode as TransDevModel.NodeTransStation, nextNode as TransDevModel.NodeTransStation, curTask.PalletCode, ref reStr); if (nextCtlTask == null) { return(false); } return(ctlTaskBll.Add(nextCtlTask)); } else if (nextNode.DevCata == "RGV") { FlowCtlBaseModel.WCSPathNodeModel rgvTargetWcsNode = wcsPath.GetNodeByID(wcsNode.NextNodeID); FlowCtlBaseModel.CtlNodeBaseModel nextNode2 = NodeManager.GetNodeByID(rgvTargetWcsNode.NextNodeID); if (nextNode2 == null) { reStr = "不存在的设备号:" + wcsNode.NextNodeID; return(false); } FlowCtlBaseModel.WCSPathNodeModel nextWcsNode = wcsPath.GetNodeByID(nextNode2.NodeID); if (nextWcsNode == null) { reStr = "路径配置,RGV路径缺少下料站台"; return(false); } CtlDBAccess.Model.ControlTaskModel nextCtlTask = CreateRGVTask(curTask.TaskIndex + 1, mainTask.MainTaskID, nextNode as TransDevModel.NodeRGV, curNode as TransDevModel.NodeTransStation, nextNode2 as TransDevModel.NodeTransStation, curTask.PalletCode, ref reStr); if (nextCtlTask == null) { return(false); } return(ctlTaskBll.Add(nextCtlTask)); } else if (nextNode.DevCata == "堆垛机") { CtlDBAccess.Model.ControlTaskModel nextCtlTask = CreateStackerTask(curTask.TaskIndex + 1, mainTask, nextNode.NodeID, curNode as TransDevModel.NodeTransStation, curTask.PalletCode, ref reStr); if (nextCtlTask == null) { return(false); } return(ctlTaskBll.Add(nextCtlTask)); } } else if (curNode.DevCata == "RGV") { if (nextNode.DevCata != "站台") { reStr = "RGV目标设备应该为站台"; return(false); } FlowCtlBaseModel.WCSPathNodeModel rgvTargetWcsNode = wcsPath.GetNodeByID(wcsNode.NextNodeID); if (rgvTargetWcsNode.NodeFlag == "终点") { //管理任务完成 WMS_Interface.ResposeData res = WmsSvc.UpdateManageTaskStatus(mainTask.WMSTaskID, "已完成"); if (!res.Status) { reStr = string.Format("更新WMS任务:{0}状态失败,{1}", mainTask.WMSTaskID, res.Describe); return(false); } mainTask.TaskStatus = "已完成"; mainTask.FinishTime = System.DateTime.Now; if (!mainCtlTaskBll.Update(mainTask)) { reStr = string.Format("更新主控制任务:{0}状态失败", mainTask.MainTaskID); return(false); } return(true); } FlowCtlBaseModel.CtlNodeBaseModel rgvTargetNode = NodeManager.GetNodeByID(rgvTargetWcsNode.NodeID); FlowCtlBaseModel.CtlNodeBaseModel nextNode2 = NodeManager.GetNodeByID(rgvTargetWcsNode.NextNodeID); if (nextNode2.DevCata == "站台") { CtlDBAccess.Model.ControlTaskModel nextCtlTask = CreateConveyorTask(curTask.TaskIndex + 1, mainTask.MainTaskID, rgvTargetNode as TransDevModel.NodeTransStation, nextNode2 as TransDevModel.NodeTransStation, curTask.PalletCode, ref reStr); if (nextCtlTask == null) { return(false); } return(ctlTaskBll.Add(nextCtlTask)); } else if (nextNode2.DevCata == "堆垛机") { CtlDBAccess.Model.ControlTaskModel nextCtlTask = CreateStackerTask(curTask.TaskIndex + 1, mainTask, nextNode2.NodeID, rgvTargetNode as TransDevModel.NodeTransStation, curTask.PalletCode, ref reStr); if (nextCtlTask == null) { return(false); } return(ctlTaskBll.Add(nextCtlTask)); } else { reStr = "错误的路径配置,两台RGV不允许共用一个接驳站台"; return(false); } } else if (curNode.DevCata == "堆垛机") { if (nextNode.DevCata != "站台") { reStr = "堆垛机目标设备应该为站台"; return(false); } FlowCtlBaseModel.WCSPathNodeModel targetWcsNode = wcsPath.GetNodeByID(wcsNode.NextNodeID); if (targetWcsNode.NodeFlag == "终点") { //管理任务完成 WMS_Interface.ResposeData res = WmsSvc.UpdateManageTaskStatus(mainTask.WMSTaskID, "已完成"); if (!res.Status) { reStr = string.Format("更新WMS任务:{0}状态失败,{1}", mainTask.WMSTaskID, res.Describe); return(false); } mainTask.TaskStatus = "已完成"; mainTask.FinishTime = System.DateTime.Now; if (!mainCtlTaskBll.Update(mainTask)) { reStr = string.Format("更新主控制任务:{0}状态失败", mainTask.MainTaskID); return(false); } return(true); } FlowCtlBaseModel.CtlNodeBaseModel nextNode2 = NodeManager.GetNodeByID(targetWcsNode.NextNodeID); if (nextNode2.DevCata == "站台") { CtlDBAccess.Model.ControlTaskModel nextCtlTask = CreateConveyorTask(curTask.TaskIndex + 1, mainTask.MainTaskID, nextNode as TransDevModel.NodeTransStation, nextNode2 as TransDevModel.NodeTransStation, curTask.PalletCode, ref reStr); if (nextCtlTask == null) { return(false); } return(ctlTaskBll.Add(nextCtlTask)); } else if (nextNode2.DevCata == "RGV") { FlowCtlBaseModel.WCSPathNodeModel targetWcsNode2 = wcsPath.GetNodeByID(nextNode2.NodeID); FlowCtlBaseModel.CtlNodeBaseModel nextNode3 = NodeManager.GetNodeByID(targetWcsNode2.NextNodeID); if (nextNode3 == null) { return(false); } CtlDBAccess.Model.ControlTaskModel nextCtlTask = CreateRGVTask(curTask.TaskIndex + 1, mainTask.MainTaskID, nextNode2 as TransDevModel.NodeRGV, nextNode as TransDevModel.NodeTransStation, nextNode3 as TransDevModel.NodeTransStation, curTask.PalletCode, ref reStr); if (nextCtlTask == null) { return(false); } return(ctlTaskBll.Add(nextCtlTask)); } } return(true); } catch (Exception ex) { reStr = ex.ToString(); Console.WriteLine(ex.ToString()); return(false); } }