private void checkForkliftPauseStat(ForkLiftWrapper fl, int pause_stat) { if (fl.getForkLift().shedulePause != pause_stat) { setCtrlTimes++; if (setCtrlTimes > 10) { setCtrlTimes = 0; AGVMessage message = new AGVMessage(); message.setMessageType(AGVMessageHandler_TYPE_T.AGVMessageHandler_SENDPAUSE_ERR); message.setMessageStr("检测中断错误"); } } }
private void flReconnect(ForkLiftWrapper forkLiftWrapper, bool status) { if (status) //如果接收成功 { forkLiftWrapper.getAGVSocketClient().startRecvMsg(); //重新启动接收程序线程 } else { AGVLog.WriteError(forkLiftWrapper.getForkLift().forklift_number + "号车 连接错误", new StackFrame(true)); AGVMessage message = new AGVMessage(); message.setMessageType(AGVMessageHandler_TYPE_T.AGVMessageHandler_NET_ERR); message.setMessageStr(forkLiftWrapper.getForkLift().forklift_number + "号车 连接错误"); AGVMessageHandler.getMessageHandler().setMessage(message); } }
private void checkForkliftPauseStat(ForkLiftWrapper fl, int pause_stat) { if (fl.getForkLift().shedulePause != pause_stat) //车的暂停状态与返回值不一样,说明没有发送成功 { setCtrlTimes++; if (setCtrlTimes > 10) { //setForkCtrl(fl, fl.isPaused); //重新发送车子暂停状态 //报警,需要人工处理 setCtrlTimes = 0; AGVMessage message = new AGVMessage(); message.setMessageType(AGVMessageHandler_TYPE_T.AGVMessageHandler_SENDPAUSE_ERR); message.setMessageStr("检测中断错误"); //AGVInitialize.getInitialize().getAGVMessageHandler().setMessage(message); } } }
/// <summary> /// 检查任务状态 /// </summary> private bool checkTaskSendStat(ForkLiftWrapper fl, string taskName) { bool stat = true; if (fl.getForkLift().finishStatus == 1) { foreach (TaskRecord tr in TaskReordService.getInstance().getTaskRecordList()) { if (tr.forkLiftWrapper != null && tr.forkLiftWrapper.getForkLift().id == fl.getForkLift().id) { if (tr.taskRecordStat == TASKSTAT_T.TASK_SEND) { if (fl.getForkLift().waitTimes > 15) { Console.WriteLine("send task: " + taskName + "to " + fl.getForkLift().forklift_number + "fail"); fl.getForkLift().waitTimes = 0; tr.forkLiftWrapper = null; fl.getForkLift().taskStep = TASK_STEP.TASK_IDLE; fl.getForkLift().currentTask = ""; DBDao.getDao().updateForkLift(fl); if (tr.singleTask.taskType == TASKTYPE_T.TASK_TYPE_UP_PICK) { DBDao.getDao().RemoveTaskRecord(tr); AGVLog.WriteWarn("forklift number: " + fl.getForkLift().forklift_number + " taskName: " + taskName + " 发送失败 移除任务", new StackFrame(true)); } else { tr.taskRecordStat = TASKSTAT_T.TASK_READY_SEND; tr.singleTask.taskStat = TASKSTAT_T.TASK_READY_SEND; DBDao.getDao().UpdateTaskRecord(tr); AGVLog.WriteWarn("forklift number: " + fl.getForkLift().forklift_number + " taskName: " + taskName + " 发送失败 更新任务状态,等待重新发送", new StackFrame(true)); } FormController.getFormController().getMainFrm().updateFrm(); } else { fl.getForkLift().waitTimes++; Console.WriteLine("fl: " + fl.getForkLift().forklift_number + "taskName: " + taskName + "waittimes: " + fl.getForkLift().waitTimes); AGVLog.WriteWarn("forklift number: " + fl.getForkLift().forklift_number + " taskName: " + taskName + " waittimes: " + fl.getForkLift().waitTimes, new StackFrame(true)); } break; } else if (tr.taskRecordStat == TASKSTAT_T.TASK_SEND_SUCCESS) { Console.WriteLine("task: " + taskName + "in " + fl.getForkLift().forklift_number + "finished"); AGVLog.WriteInfo("taskName: " + taskName + "in " + fl.getForkLift().forklift_number + " finished", new StackFrame(true)); DBDao.getDao().RemoveTaskRecord(tr); DBDao.getDao().InsertTaskRecordBak(tr); tr.singleTask.taskStat = TASKSTAT_T.TASK_END; tr.taskRecordStat = TASKSTAT_T.TASK_END; FormController.getFormController().getMainFrm().updateFrm(); fl.getForkLift().taskStep = TASK_STEP.TASK_IDLE; fl.getForkLift().currentTask = ""; DBDao.getDao().updateForkLift(fl); break; } else if (tr.taskRecordStat == TASKSTAT_T.TASK_END) { //break; 继续任务状态没及时删除,继续循环 } break; //每次只匹配一条记录,可能存在两条记录,对应singleTask一样,一条正在运行,一条待发送,适应一键添加功能 } } } else if (fl.getForkLift().finishStatus == 0) { //bool storeTask = true; //是否需要缓存该任务 foreach (TaskRecord tr in TaskReordService.getInstance().getTaskRecordList()) { //Console.WriteLine(" tr stat = " + tr.taskRecordStat + " taskName = " + tr.taskRecordName); if (tr.forkLiftWrapper != null && tr.forkLiftWrapper.getForkLift().id == fl.getForkLift().id) //任务列表中匹配到非待发送的该任务则不缓存 { if (tr.taskRecordStat == TASKSTAT_T.TASK_SEND) { tr.singleTask.taskStat = TASKSTAT_T.TASK_SEND_SUCCESS; tr.taskRecordStat = TASKSTAT_T.TASK_SEND_SUCCESS; DBDao.getDao().UpdateTaskRecord(tr); stat = true; } else if (tr.taskRecordStat == TASKSTAT_T.TASK_SEND_SUCCESS && tr.forkLiftWrapper.getForkLift().id == fl.getForkLift().id) { } fl.getForkLift().waitTimes = 0; //发送任务,等待确认是否发送成功 fl.getForkLift().taskStep = TASK_STEP.TASK_EXCUTE; fl.getForkLift().currentTask = tr.singleTask.taskText; break; //每次只匹配一条记录,可能存在两条记录,对应singleTask一样,一条正在运行,一条待发送,适应一键添加功能 } } } else { Console.WriteLine("fork status err"); AGVLog.WriteError("fork lift staus: " + fl.getForkLift().finishStatus + "err", new StackFrame(true)); } return(stat); }
/// <summary> /// 检查任务状态 /// </summary> /// <param name="fl">车子实例</param> /// <param name="taskName"></param> /// <returns></returns> private bool checkTaskSendStat(ForkLiftWrapper fl, string taskName) { bool stat = true; //Console.WriteLine(" fl id " + fl.getForkLift().id + " finishStatus = " + fl.finishStatus); if (fl.getForkLift().finishStatus == 1) //车子状态空闲有两种可能1:车子任务执行完成 2:任务在执行中 报文没有及时反馈 { foreach (TaskRecord tr in TaskReordService.getInstance().getTaskRecordList()) { //if (tr.forkLift != null && tr.taskRecordName.Equals(taskName)) if (tr.forkLiftWrapper != null && tr.forkLiftWrapper.getForkLift().id == fl.getForkLift().id) //可能存在任务没发送成功,反馈的taskName与现在taskrecord的名称不一样 { if (tr.taskRecordStat == TASKSTAT_T.TASK_SEND) { if (fl.getForkLift().waitTimes > 15) //等待次数超过15次,后面重新发送该任务 { Console.WriteLine("send task: " + taskName + "to " + fl.getForkLift().forklift_number + "fail"); fl.getForkLift().waitTimes = 0; tr.forkLiftWrapper = null; fl.getForkLift().taskStep = TASK_STEP.TASK_IDLE; //车子状态改为空闲 fl.getForkLift().currentTask = ""; DBDao.getDao().updateForkLift(fl); //赋值空字符串 if (tr.singleTask.taskType == TASKTYPE_T.TASK_TYPE_UP_PICK) { DBDao.getDao().RemoveTaskRecord(tr); AGVLog.WriteWarn("forklift number: " + fl.getForkLift().forklift_number + " taskName: " + taskName + " 发送失败 移除任务", new StackFrame(true)); } else { tr.taskRecordStat = TASKSTAT_T.TASK_READY_SEND; //改变任务的状态,后面重新发送 tr.singleTask.taskStat = TASKSTAT_T.TASK_READY_SEND; DBDao.getDao().UpdateTaskRecord(tr); AGVLog.WriteWarn("forklift number: " + fl.getForkLift().forklift_number + " taskName: " + taskName + " 发送失败 更新任务状态,等待重新发送", new StackFrame(true)); } FormController.getFormController().getMainFrm().updateFrm(); //设置更新界面 } else { fl.getForkLift().waitTimes++; Console.WriteLine("fl: " + fl.getForkLift().forklift_number + "taskName: " + taskName + "waittimes: " + fl.getForkLift().waitTimes); AGVLog.WriteWarn("forklift number: " + fl.getForkLift().forklift_number + " taskName: " + taskName + " waittimes: " + fl.getForkLift().waitTimes, new StackFrame(true)); } break; } else if (tr.taskRecordStat == TASKSTAT_T.TASK_SEND_SUCCESS) //确保没有重复进入,否则会插入多条备份记录 { Console.WriteLine("task: " + taskName + "in " + fl.getForkLift().forklift_number + "finished"); AGVLog.WriteInfo("taskName: " + taskName + "in " + fl.getForkLift().forklift_number + " finished", new StackFrame(true)); DBDao.getDao().RemoveTaskRecord(tr); //移除record是3的记录 DBDao.getDao().InsertTaskRecordBak(tr); tr.singleTask.taskStat = TASKSTAT_T.TASK_END; tr.taskRecordStat = TASKSTAT_T.TASK_END; FormController.getFormController().getMainFrm().updateFrm(); //设置更新界面 //设置更新界面 fl.getForkLift().taskStep = TASK_STEP.TASK_IDLE; fl.getForkLift().currentTask = ""; DBDao.getDao().updateForkLift(fl); break; } else if (tr.taskRecordStat == TASKSTAT_T.TASK_END) { //break; 继续任务状态没及时删除,继续循环 } break; //每次只匹配一条记录,可能存在两条记录,对应singleTask一样,一条正在运行,一条待发送,适应一键添加功能 } } } else if (fl.getForkLift().finishStatus == 0) { //bool storeTask = true; //是否需要缓存该任务 foreach (TaskRecord tr in TaskReordService.getInstance().getTaskRecordList()) { //Console.WriteLine(" tr stat = " + tr.taskRecordStat + " taskName = " + tr.taskRecordName); if (tr.forkLiftWrapper != null && tr.forkLiftWrapper.getForkLift().id == fl.getForkLift().id) //任务列表中匹配到非待发送的该任务则不缓存 { if (tr.taskRecordStat == TASKSTAT_T.TASK_SEND) { tr.singleTask.taskStat = TASKSTAT_T.TASK_SEND_SUCCESS; tr.taskRecordStat = TASKSTAT_T.TASK_SEND_SUCCESS; DBDao.getDao().UpdateTaskRecord(tr); stat = true; } else if (tr.taskRecordStat == TASKSTAT_T.TASK_SEND_SUCCESS && tr.forkLiftWrapper.getForkLift().id == fl.getForkLift().id) { } fl.getForkLift().waitTimes = 0; //发送任务,等待确认是否发送成功 fl.getForkLift().taskStep = TASK_STEP.TASK_EXCUTE; fl.getForkLift().currentTask = tr.singleTask.taskText; break; //每次只匹配一条记录,可能存在两条记录,对应singleTask一样,一条正在运行,一条待发送,适应一键添加功能 } } /* * if (storeTask) //系统启动后,车子可能正在执行任务起来,将正在执行的任务缓存 * { * TaskRecord tr = new TaskRecord(); * tr.taskRecordName = taskName; * tr.forkLift = fl; * tr.taskRecordStat = TASKSTAT_T.TASK_SEND_SUCCESS; //状态已经发送成功 * tr.setSingleTaskByTaskName(AGVUtil.parseTaskRecordName(taskName)); * fl.getForkLift().taskStep = TASK_STEP.TASK_EXCUTE; * addTs = tr; * //AGVInitialize.getInitialize().getMainFrm().updateCurrentTask(st.taskName); //更新界面上的当前任务 * Console.WriteLine("store task: " + tr.taskRecordName + "taskNumber:" + taskRecordList.Count); * AGVLog.WriteInfo("store task: " + tr.taskRecordName + "at boot task count: " + taskRecordList.Count, new StackFrame(true)); * } */ } else { Console.WriteLine("fork status err"); AGVLog.WriteError("fork lift staus: " + fl.getForkLift().finishStatus + "err", new StackFrame(true)); } return(stat); }