Ejemplo n.º 1
0
 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("检测中断错误");
         }
     }
 }
Ejemplo n.º 2
0
        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);
                }
            }
        }
Ejemplo n.º 4
0
        /// <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);
        }