//出库后任务处理,通知物流线是空筐还是满筐 private bool AsrsOutTaskBusiness(AsrsControl.AsrsPortalModel outPort, CtlDBAccess.Model.ControlTaskModel task, ref string reStr) { try { if (task == null) { reStr = "任务为空"; return(false); } if (task.TaskType == (int)SysCfg.EnumAsrsTaskType.产品出库) { outPort.Db1ValsToSnd[1] = 2; } else if (task.TaskType == (int)SysCfg.EnumAsrsTaskType.空筐出库) { outPort.Db1ValsToSnd[1] = 1; } if (!outPort.NodeCmdCommit(true, ref reStr)) { reStr = string.Format("出库站台{0}状态'出库完成'提交失败", outPort.PortSeq); return(false); } System.Threading.Thread.Sleep(500); return(true); } catch (Exception ex) { reStr = ex.ToString(); return(false); } }
/// <summary> /// RGV任务调度 /// </summary> /// <param name="ctlTaskList"></param> /// <param name="reStr"></param> /// <returns></returns> private CtlDBAccess.Model.ControlTaskModel RgvTasksndAllocate(TransDevModel.NodeRGV rgv, ref string reStr) { CtlDBAccess.Model.ControlTaskModel ctlTask = null; List <CtlDBAccess.Model.ControlTaskModel> taskList = ctlTaskBll.GetTaskToRunList((int)SysCfg.EnumAsrsTaskType.RGV上下料, SysCfg.EnumTaskStatus.待执行.ToString(), rgv.NodeID, true); foreach (CtlDBAccess.Model.ControlTaskModel taskModel in taskList) { if (0 != TaskLockCheck(rgv, taskModel, ref reStr)) { continue; } string devSt = taskModel.StDevice; string devTarget = taskModel.EndDevice; FlowCtlBaseModel.CtlNodeBaseModel stNode = NodeManager.GetNodeByID(devSt); FlowCtlBaseModel.CtlNodeBaseModel targetNode = NodeManager.GetNodeByID(devTarget); if (stNode == null || stNode.DevCata != "站台") { continue; } if (targetNode == null || targetNode.DevCata != "站台") { continue; } //起点有板,终点空闲,无板 if (stNode.Db2Vals[0] == 2 && targetNode.Db2Vals[0] == 1) { ctlTask = taskModel; break; } } return(ctlTask); }
private CtlDBAccess.Model.ControlTaskModel CreateRGVTask(int taskIndex, string mainTaskID, TransDevModel.NodeRGV rgv, TransDevModel.NodeTransStation stNode, TransDevModel.NodeTransStation targetNode, string palletID, ref string reStr) { CtlDBAccess.Model.ControlTaskModel nextCtlTask = new CtlDBAccess.Model.ControlTaskModel(); short nextCtlID = (short)ctlTaskBll.GetUnusedControlID(); if (nextCtlID == 0) { reStr = "没有可用的控制ID"; return(null); } nextCtlTask.TaskID = System.Guid.NewGuid().ToString(); nextCtlTask.DeviceID = rgv.NodeID; nextCtlTask.DeviceCata = rgv.DevCata; nextCtlTask.StDevice = stNode.NodeID; nextCtlTask.StDeviceCata = stNode.DevCata; nextCtlTask.StDeviceParam = ""; nextCtlTask.EndDevice = targetNode.NodeID; nextCtlTask.EndDeviceCata = targetNode.DevCata; nextCtlTask.EndDeviceParam = ""; nextCtlTask.MainTaskID = mainTaskID; nextCtlTask.PalletCode = palletID; nextCtlTask.ControlID = nextCtlID; nextCtlTask.TaskIndex = taskIndex; nextCtlTask.TaskType = 13; nextCtlTask.TaskParam = ""; nextCtlTask.TaskStatus = "待执行"; nextCtlTask.TaskPhase = 0; nextCtlTask.CreateTime = System.DateTime.Now; nextCtlTask.CreateMode = "自动"; return(nextCtlTask); }
/// <summary> /// 设备执行任务之前,检查是否路径被锁定,防止上下架冲突 /// </summary> /// <param name="curNode"></param> /// <param name="curTask"></param> /// <param name="reStr">若可用,返回0,1:路径被锁定,不可用,2:其它错误,-1:系统异常</param> /// <returns></returns> public int TaskLockCheck(FlowCtlBaseModel.CtlNodeBaseModel curNode, CtlDBAccess.Model.ControlTaskModel curTask, ref string reStr) { try { lock (pathCheckLock) { if (curTask == null) { reStr = "任务为空"; return(2); } CtlDBAccess.Model.MainControlTaskModel mainTask = mainCtlTaskBll.GetModel(curTask.MainTaskID); if (!wcsPathMap.Keys.Contains(mainTask.FlowPathKey)) { reStr = "不存在的路径:" + mainTask.FlowPathKey; return(2); } FlowCtlBaseModel.WCSFlowPathModel wcsPath = wcsPathMap[mainTask.FlowPathKey]; if (wcsPath.PathCata == "上架") { // List<CtlDBAccess.Model.MainControlTaskModel> lockedMaintaskList = GetLockedTaskList(curNode, "下架"); if (!NodeLockedBytask(curNode, "下架")) { return(0); } else { return(1); } } else if (wcsPath.PathCata == "下架") { //List<CtlDBAccess.Model.MainControlTaskModel> lockedMaintaskList = GetLockedTaskList(curNode, "上架"); if (!NodeLockedBytask(curNode, "上架")) { return(0); } else { return(1); } } else { return(0); } } } catch (Exception ex) { reStr = ex.ToString(); return(-1); } }
/// <summary> /// 增加一条数据 /// </summary> public bool Add(CtlDBAccess.Model.ControlTaskModel model) { StringBuilder strSql = new StringBuilder(); strSql.Append("insert into ControlTask("); strSql.Append("TaskID,TaskType,TaskParam,TaskStatus,TaskPhase,CreateTime,FinishTime,CreateMode,Remark,DeviceID,tag1,tag2,tag3,tag4,tag5)"); strSql.Append(" values ("); strSql.Append("@TaskID,@TaskType,@TaskParam,@TaskStatus,@TaskPhase,@CreateTime,@FinishTime,@CreateMode,@Remark,@DeviceID,@tag1,@tag2,@tag3,@tag4,@tag5)"); SqlParameter[] parameters = { new SqlParameter("@TaskID", SqlDbType.NVarChar, 255), new SqlParameter("@TaskType", SqlDbType.Int, 4), new SqlParameter("@TaskParam", SqlDbType.NVarChar, 255), new SqlParameter("@TaskStatus", SqlDbType.NVarChar, 50), new SqlParameter("@TaskPhase", SqlDbType.Int, 4), new SqlParameter("@CreateTime", SqlDbType.DateTime), new SqlParameter("@FinishTime", SqlDbType.DateTime), new SqlParameter("@CreateMode", SqlDbType.NVarChar, 50), new SqlParameter("@Remark", SqlDbType.NVarChar, 50), new SqlParameter("@DeviceID", SqlDbType.NVarChar, 50), new SqlParameter("@tag1", SqlDbType.NVarChar, 255), new SqlParameter("@tag2", SqlDbType.NVarChar, 255), new SqlParameter("@tag3", SqlDbType.NVarChar, 255), new SqlParameter("@tag4", SqlDbType.NVarChar, 255), new SqlParameter("@tag5", SqlDbType.NVarChar, 255) }; parameters[0].Value = model.TaskID; parameters[1].Value = model.TaskType; parameters[2].Value = model.TaskParam; parameters[3].Value = model.TaskStatus; parameters[4].Value = model.TaskPhase; parameters[5].Value = model.CreateTime; parameters[6].Value = model.FinishTime; parameters[7].Value = model.CreateMode; parameters[8].Value = model.Remark; parameters[9].Value = model.DeviceID; parameters[10].Value = model.tag1; parameters[11].Value = model.tag2; parameters[12].Value = model.tag3; parameters[13].Value = model.tag4; parameters[14].Value = model.tag5; int rows = DbHelperSQL.ExecuteSql(strSql.ToString(), parameters); if (rows > 0) { return(true); } else { return(false); } }
private CtlDBAccess.Model.ControlTaskModel CreateStackerTask(int taskIndex, CtlDBAccess.Model.MainControlTaskModel mainTask, string stackerNodeID, TransDevModel.NodeTransStation portNode, string palletID, ref string reStr) { CtlDBAccess.Model.ControlTaskModel nextCtlTask = new CtlDBAccess.Model.ControlTaskModel(); short nextCtlID = (short)ctlTaskBll.GetUnusedControlID(); if (nextCtlID == 0) { reStr = "没有可用的控制ID"; return(null); } nextCtlTask.TaskID = System.Guid.NewGuid().ToString(); nextCtlTask.DeviceID = stackerNodeID; nextCtlTask.DeviceCata = "堆垛机"; if (mainTask.TaskType == "上架") { nextCtlTask.StDevice = portNode.NodeID; nextCtlTask.StDeviceCata = portNode.DevCata; nextCtlTask.StDeviceParam = ""; nextCtlTask.EndDevice = stackerNodeID; nextCtlTask.EndDeviceCata = "货位"; nextCtlTask.EndDeviceParam = mainTask.EndDeviceParam; nextCtlTask.TaskType = (int)SysCfg.EnumAsrsTaskType.产品入库; } else if (mainTask.TaskType == "下架") { nextCtlTask.StDevice = stackerNodeID; nextCtlTask.StDeviceCata = "货位"; nextCtlTask.StDeviceParam = mainTask.StDeviceParam; nextCtlTask.EndDevice = portNode.NodeID; nextCtlTask.EndDeviceCata = portNode.DevCata; nextCtlTask.EndDeviceParam = ""; nextCtlTask.TaskType = (int)SysCfg.EnumAsrsTaskType.产品出库; } else { throw new NotImplementedException(); } nextCtlTask.MainTaskID = mainTask.MainTaskID; nextCtlTask.PalletCode = palletID; nextCtlTask.ControlID = nextCtlID; nextCtlTask.TaskIndex = taskIndex; nextCtlTask.TaskParam = ""; nextCtlTask.TaskStatus = "待执行"; nextCtlTask.TaskPhase = 0; nextCtlTask.CreateTime = System.DateTime.Now; nextCtlTask.CreateMode = "自动"; return(nextCtlTask); }
private void GenerateAsrsCheckoutTask() { try { BindingSource bs = this.dataGridView1.DataSource as BindingSource; DataTable dt = bs.DataSource as DataTable; if (dt == null) { return; } int pri = int.Parse(this.textBoxPrivilege.Text); foreach (DataRow dr in dt.Rows) { string houseName = dr["库房"].ToString(); string strCell = dr["库位"].ToString(); AsrsControl.AsrsCtlModel asrsCtl = AsrsPresenter.GetAsrsCtlByName(houseName); AsrsModel.CellCoordModel cell = new CellCoordModel(0, 0, 0); if (!cell.Parse(strCell)) { continue; } EnumCellStatus cellStoreStat = EnumCellStatus.空闲; EnumGSTaskStatus cellTaskStat = EnumGSTaskStatus.完成; if (!asrsResMana.GetCellStatus(houseName, cell, ref cellStoreStat, ref cellTaskStat)) { Console.WriteLine("获取货位{0}:{1}状态失败", houseName, strCell); continue; } if (cellStoreStat != EnumCellStatus.满位 || cellTaskStat == EnumGSTaskStatus.锁定) { continue; } CtlDBAccess.Model.ControlTaskModel asrsTask = null; if (!asrsCtl.GenerateOutputTask(cell, null, SysCfg.EnumAsrsTaskType.产品出库, false, ref asrsTask, null, pri)) { logRecorder.AddDebugLog(this.Text, string.Format("生成{0}:{1}出库任务失败", houseName, strCell)); } else { logRecorder.AddDebugLog(this.Text, string.Format("生成{0}:{1}产品出库任务成功", houseName, strCell)); } dr["出库任务ID"] = asrsTask.TaskID; } this.dataGridView1.Refresh(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
/// <summary> /// 得到一个对象实体 /// </summary> public CtlDBAccess.Model.ControlTaskModel GetModel(string TaskID) { StringBuilder strSql = new StringBuilder(); strSql.Append("select top 1 "); strSql.Append(" TaskID,DeviceID,DeviceCata,StDevice,StDeviceCata,StDeviceParam,EndDevice,EndDeviceCata,EndDeviceParam,MainTaskID,PalletCode,ControlID,TaskIndex,TaskType,TaskParam,TaskStatus,TaskPhase,CreateTime,FinishTime,CreateMode,Remark,tag1,tag2,tag3,tag4,tag5 "); strSql.Append(" from ControlTask "); strSql.Append(" where TaskID='" + TaskID + "' "); CtlDBAccess.Model.ControlTaskModel model = new CtlDBAccess.Model.ControlTaskModel(); DataSet ds = DbHelperSQL.Query(strSql.ToString()); if (ds.Tables[0].Rows.Count > 0) { return(DataRowToModel(ds.Tables[0].Rows[0])); } else { return(null); } }
/// <summary> /// 得到一个对象实体 /// </summary> public CtlDBAccess.Model.ControlTaskModel GetModel(string TaskID) { StringBuilder strSql = new StringBuilder(); strSql.Append("select top 1 TaskID,TaskType,TaskParam,TaskStatus,TaskPhase,CreateTime,FinishTime,CreateMode,Remark,DeviceID,tag1,tag2,tag3,tag4,tag5 from ControlTask "); strSql.Append(" where TaskID=@TaskID "); SqlParameter[] parameters = { new SqlParameter("@TaskID", SqlDbType.NVarChar, 255) }; parameters[0].Value = TaskID; CtlDBAccess.Model.ControlTaskModel model = new CtlDBAccess.Model.ControlTaskModel(); DataSet ds = DbHelperSQL.Query(strSql.ToString(), parameters); if (ds.Tables[0].Rows.Count > 0) { return(DataRowToModel(ds.Tables[0].Rows[0])); } else { return(null); } }
/// <summary> /// 增加一条数据 /// </summary> public bool Add(CtlDBAccess.Model.ControlTaskModel model) { StringBuilder strSql = new StringBuilder(); StringBuilder strSql1 = new StringBuilder(); StringBuilder strSql2 = new StringBuilder(); if (model.TaskID != null) { strSql1.Append("TaskID,"); strSql2.Append("'" + model.TaskID + "',"); } if (model.DeviceID != null) { strSql1.Append("DeviceID,"); strSql2.Append("'" + model.DeviceID + "',"); } if (model.DeviceCata != null) { strSql1.Append("DeviceCata,"); strSql2.Append("'" + model.DeviceCata + "',"); } if (model.StDevice != null) { strSql1.Append("StDevice,"); strSql2.Append("'" + model.StDevice + "',"); } if (model.StDeviceCata != null) { strSql1.Append("StDeviceCata,"); strSql2.Append("'" + model.StDeviceCata + "',"); } if (model.StDeviceParam != null) { strSql1.Append("StDeviceParam,"); strSql2.Append("'" + model.StDeviceParam + "',"); } if (model.EndDevice != null) { strSql1.Append("EndDevice,"); strSql2.Append("'" + model.EndDevice + "',"); } if (model.EndDeviceCata != null) { strSql1.Append("EndDeviceCata,"); strSql2.Append("'" + model.EndDeviceCata + "',"); } if (model.EndDeviceParam != null) { strSql1.Append("EndDeviceParam,"); strSql2.Append("'" + model.EndDeviceParam + "',"); } if (model.MainTaskID != null) { strSql1.Append("MainTaskID,"); strSql2.Append("'" + model.MainTaskID + "',"); } if (model.PalletCode != null) { strSql1.Append("PalletCode,"); strSql2.Append("'" + model.PalletCode + "',"); } if (model.ControlID != null) { strSql1.Append("ControlID,"); strSql2.Append("" + model.ControlID + ","); } if (model.TaskIndex != null) { strSql1.Append("TaskIndex,"); strSql2.Append("" + model.TaskIndex + ","); } if (model.TaskType != null) { strSql1.Append("TaskType,"); strSql2.Append("" + model.TaskType + ","); } if (model.TaskParam != null) { strSql1.Append("TaskParam,"); strSql2.Append("'" + model.TaskParam + "',"); } if (model.TaskStatus != null) { strSql1.Append("TaskStatus,"); strSql2.Append("'" + model.TaskStatus + "',"); } if (model.TaskPhase != null) { strSql1.Append("TaskPhase,"); strSql2.Append("" + model.TaskPhase + ","); } if (model.CreateTime != null) { strSql1.Append("CreateTime,"); strSql2.Append("'" + model.CreateTime + "',"); } if (model.FinishTime != null) { strSql1.Append("FinishTime,"); strSql2.Append("'" + model.FinishTime + "',"); } if (model.CreateMode != null) { strSql1.Append("CreateMode,"); strSql2.Append("'" + model.CreateMode + "',"); } if (model.Remark != null) { strSql1.Append("Remark,"); strSql2.Append("'" + model.Remark + "',"); } if (model.tag1 != null) { strSql1.Append("tag1,"); strSql2.Append("'" + model.tag1 + "',"); } if (model.tag2 != null) { strSql1.Append("tag2,"); strSql2.Append("'" + model.tag2 + "',"); } if (model.tag3 != null) { strSql1.Append("tag3,"); strSql2.Append("'" + model.tag3 + "',"); } if (model.tag4 != null) { strSql1.Append("tag4,"); strSql2.Append("'" + model.tag4 + "',"); } if (model.tag5 != null) { strSql1.Append("tag5,"); strSql2.Append("'" + model.tag5 + "',"); } strSql.Append("insert into ControlTask("); strSql.Append(strSql1.ToString().Remove(strSql1.Length - 1)); strSql.Append(")"); strSql.Append(" values ("); strSql.Append(strSql2.ToString().Remove(strSql2.Length - 1)); strSql.Append(")"); int rows = DbHelperSQL.ExecuteSql(strSql.ToString()); if (rows > 0) { return(true); } else { return(false); } }
/// <summary> /// 更新一条数据 /// </summary> public bool Update(CtlDBAccess.Model.ControlTaskModel model) { StringBuilder strSql = new StringBuilder(); strSql.Append("update ControlTask set "); if (model.DeviceID != null) { strSql.Append("DeviceID='" + model.DeviceID + "',"); } if (model.DeviceCata != null) { strSql.Append("DeviceCata='" + model.DeviceCata + "',"); } if (model.StDevice != null) { strSql.Append("StDevice='" + model.StDevice + "',"); } if (model.StDeviceCata != null) { strSql.Append("StDeviceCata='" + model.StDeviceCata + "',"); } if (model.StDeviceParam != null) { strSql.Append("StDeviceParam='" + model.StDeviceParam + "',"); } else { strSql.Append("StDeviceParam= null ,"); } if (model.EndDevice != null) { strSql.Append("EndDevice='" + model.EndDevice + "',"); } if (model.EndDeviceCata != null) { strSql.Append("EndDeviceCata='" + model.EndDeviceCata + "',"); } if (model.EndDeviceParam != null) { strSql.Append("EndDeviceParam='" + model.EndDeviceParam + "',"); } else { strSql.Append("EndDeviceParam= null ,"); } if (model.MainTaskID != null) { strSql.Append("MainTaskID='" + model.MainTaskID + "',"); } if (model.PalletCode != null) { strSql.Append("PalletCode='" + model.PalletCode + "',"); } if (model.ControlID != null) { strSql.Append("ControlID=" + model.ControlID + ","); } if (model.TaskIndex != null) { strSql.Append("TaskIndex=" + model.TaskIndex + ","); } if (model.TaskType != null) { strSql.Append("TaskType=" + model.TaskType + ","); } if (model.TaskParam != null) { strSql.Append("TaskParam='" + model.TaskParam + "',"); } if (model.TaskStatus != null) { strSql.Append("TaskStatus='" + model.TaskStatus + "',"); } if (model.TaskPhase != null) { strSql.Append("TaskPhase=" + model.TaskPhase + ","); } if (model.CreateTime != null) { strSql.Append("CreateTime='" + model.CreateTime + "',"); } if (model.FinishTime != null) { strSql.Append("FinishTime='" + model.FinishTime + "',"); } else { strSql.Append("FinishTime= null ,"); } if (model.CreateMode != null) { strSql.Append("CreateMode='" + model.CreateMode + "',"); } if (model.Remark != null) { strSql.Append("Remark='" + model.Remark + "',"); } else { strSql.Append("Remark= null ,"); } if (model.tag1 != null) { strSql.Append("tag1='" + model.tag1 + "',"); } else { strSql.Append("tag1= null ,"); } if (model.tag2 != null) { strSql.Append("tag2='" + model.tag2 + "',"); } else { strSql.Append("tag2= null ,"); } if (model.tag3 != null) { strSql.Append("tag3='" + model.tag3 + "',"); } else { strSql.Append("tag3= null ,"); } if (model.tag4 != null) { strSql.Append("tag4='" + model.tag4 + "',"); } else { strSql.Append("tag4= null ,"); } if (model.tag5 != null) { strSql.Append("tag5='" + model.tag5 + "',"); } else { strSql.Append("tag5= null ,"); } int n = strSql.ToString().LastIndexOf(","); strSql.Remove(n, 1); strSql.Append(" where TaskID='" + model.TaskID + "' "); int rowsAffected = DbHelperSQL.ExecuteSql(strSql.ToString()); if (rowsAffected > 0) { return(true); } else { return(false); } }
/// <summary> /// 更新一条数据 /// </summary> public bool Update(CtlDBAccess.Model.ControlTaskModel model) { StringBuilder strSql = new StringBuilder(); strSql.Append("update ControlTask set "); strSql.Append("TaskType=@TaskType,"); strSql.Append("TaskParam=@TaskParam,"); strSql.Append("TaskStatus=@TaskStatus,"); strSql.Append("TaskPhase=@TaskPhase,"); strSql.Append("CreateTime=@CreateTime,"); strSql.Append("FinishTime=@FinishTime,"); strSql.Append("CreateMode=@CreateMode,"); strSql.Append("Remark=@Remark,"); strSql.Append("DeviceID=@DeviceID,"); strSql.Append("tag1=@tag1,"); strSql.Append("tag2=@tag2,"); strSql.Append("tag3=@tag3,"); strSql.Append("tag4=@tag4,"); strSql.Append("tag5=@tag5"); strSql.Append(" where TaskID=@TaskID "); SqlParameter[] parameters = { new SqlParameter("@TaskType", SqlDbType.Int, 4), new SqlParameter("@TaskParam", SqlDbType.NVarChar, 255), new SqlParameter("@TaskStatus", SqlDbType.NVarChar, 50), new SqlParameter("@TaskPhase", SqlDbType.Int, 4), new SqlParameter("@CreateTime", SqlDbType.DateTime), new SqlParameter("@FinishTime", SqlDbType.DateTime), new SqlParameter("@CreateMode", SqlDbType.NVarChar, 50), new SqlParameter("@Remark", SqlDbType.NVarChar, 50), new SqlParameter("@DeviceID", SqlDbType.NVarChar, 50), new SqlParameter("@tag1", SqlDbType.NVarChar, 255), new SqlParameter("@tag2", SqlDbType.NVarChar, 255), new SqlParameter("@tag3", SqlDbType.NVarChar, 255), new SqlParameter("@tag4", SqlDbType.NVarChar, 255), new SqlParameter("@tag5", SqlDbType.NVarChar, 255), new SqlParameter("@TaskID", SqlDbType.NVarChar, 255) }; parameters[0].Value = model.TaskType; parameters[1].Value = model.TaskParam; parameters[2].Value = model.TaskStatus; parameters[3].Value = model.TaskPhase; parameters[4].Value = model.CreateTime; parameters[5].Value = model.FinishTime; parameters[6].Value = model.CreateMode; parameters[7].Value = model.Remark; parameters[8].Value = model.DeviceID; parameters[9].Value = model.tag1; parameters[10].Value = model.tag2; parameters[11].Value = model.tag3; parameters[12].Value = model.tag4; parameters[13].Value = model.tag5; parameters[14].Value = model.TaskID; int rows = DbHelperSQL.ExecuteSql(strSql.ToString(), parameters); if (rows > 0) { return(true); } else { return(false); } }
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); } }
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); } }
/// <summary> /// 得到一个对象实体 /// </summary> public CtlDBAccess.Model.ControlTaskModel DataRowToModel(DataRow row) { CtlDBAccess.Model.ControlTaskModel model = new CtlDBAccess.Model.ControlTaskModel(); if (row != null) { if (row["TaskID"] != null) { model.TaskID = row["TaskID"].ToString(); } if (row["DeviceID"] != null) { model.DeviceID = row["DeviceID"].ToString(); } if (row["DeviceCata"] != null) { model.DeviceCata = row["DeviceCata"].ToString(); } if (row["StDevice"] != null) { model.StDevice = row["StDevice"].ToString(); } if (row["StDeviceCata"] != null) { model.StDeviceCata = row["StDeviceCata"].ToString(); } if (row["StDeviceParam"] != null) { model.StDeviceParam = row["StDeviceParam"].ToString(); } if (row["EndDevice"] != null) { model.EndDevice = row["EndDevice"].ToString(); } if (row["EndDeviceCata"] != null) { model.EndDeviceCata = row["EndDeviceCata"].ToString(); } if (row["EndDeviceParam"] != null) { model.EndDeviceParam = row["EndDeviceParam"].ToString(); } if (row["MainTaskID"] != null) { model.MainTaskID = row["MainTaskID"].ToString(); } if (row["PalletCode"] != null) { model.PalletCode = row["PalletCode"].ToString(); } if (row["ControlID"] != null && row["ControlID"].ToString() != "") { model.ControlID = int.Parse(row["ControlID"].ToString()); } if (row["TaskIndex"] != null && row["TaskIndex"].ToString() != "") { model.TaskIndex = int.Parse(row["TaskIndex"].ToString()); } if (row["TaskType"] != null && row["TaskType"].ToString() != "") { model.TaskType = int.Parse(row["TaskType"].ToString()); } if (row["TaskParam"] != null) { model.TaskParam = row["TaskParam"].ToString(); } if (row["TaskStatus"] != null) { model.TaskStatus = row["TaskStatus"].ToString(); } if (row["TaskPhase"] != null && row["TaskPhase"].ToString() != "") { model.TaskPhase = int.Parse(row["TaskPhase"].ToString()); } if (row["CreateTime"] != null && row["CreateTime"].ToString() != "") { model.CreateTime = DateTime.Parse(row["CreateTime"].ToString()); } if (row["FinishTime"] != null && row["FinishTime"].ToString() != "") { model.FinishTime = DateTime.Parse(row["FinishTime"].ToString()); } if (row["CreateMode"] != null) { model.CreateMode = row["CreateMode"].ToString(); } if (row["Remark"] != null) { model.Remark = row["Remark"].ToString(); } if (row["tag1"] != null) { model.tag1 = row["tag1"].ToString(); } if (row["tag2"] != null) { model.tag2 = row["tag2"].ToString(); } if (row["tag3"] != null) { model.tag3 = row["tag3"].ToString(); } if (row["tag4"] != null) { model.tag4 = row["tag4"].ToString(); } if (row["tag5"] != null) { model.tag5 = row["tag5"].ToString(); } } return(model); }
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); } }
/// <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); } }