コード例 #1
0
ファイル: AGVMsgHandle.cs プロジェクト: return001/MES-1
 //执行人工上下料时AGV收到消息的处理方法
 private void ManualOperate()
 {
     if (package.Head == 10003)   //收到消息
     {
         ExecuteOrder.SendAGVCmdEnable         = false;
         MainWindow.agvUIHandle.AGV_POS_ACTION = "AGV已收到消息";
         DataBaseHandle db  = new DataBaseHandle();
         SqlConnection  con = new SqlConnection();
         db.UpdateAGVComState(con, package.TaskID);   //更新AGV指令表中的通讯状态为【已收到】
         return;
     }
     if (package.Head == 10005)       //执行指令完成
     {
         if (package.TaskStepID == 0) //执行取货任务完成
         {
             //得到AGV的起点和终点
             int            StartPoint, EndPoint = 0;
             DataBaseHandle db  = new DataBaseHandle();
             SqlConnection  con = new SqlConnection();
             StartPoint = db.SelectAGVStartEndPoint(con, package.TaskID, ref EndPoint);
             MainWindow.agvUIHandle.AGV_POS_ACTION = ConfigClass.GetMapString(StartPoint) + "取货完毕";
             LogInfoHelp.GetInstance().WriteInfoToLogFile(MainWindow.agvUIHandle.AGV_POS_ACTION, LogInfoHelp.LOG_TYPE.LOG_INFO);
         }
         if (package.TaskStepID == 1)
         {
             DataBaseHandle db  = new DataBaseHandle();
             SqlConnection  con = new SqlConnection();
             //得到AGV的起点和终点
             int StartPoint, EndPoint = 0;
             StartPoint = db.SelectAGVStartEndPoint(con, package.TaskID, ref EndPoint);
             MainWindow.agvUIHandle.AGV_POS_ACTION = ConfigClass.GetMapString(EndPoint) + "卸货完毕";
             LogInfoHelp.GetInstance().WriteInfoToLogFile(MainWindow.agvUIHandle.AGV_POS_ACTION, LogInfoHelp.LOG_TYPE.LOG_INFO);
             db.UpdateAGVWorkState(con, package.TaskID);   //更新AGV指令表中的通讯状态为【完成】
             ExecuteOrder.SendAGVCmdEnable = true;
             //AGV的起点是立库人工上料区,终点是立库入库区,则是人工上料任务,此时通知立库入库
             if (StartPoint == ConfigClass.HandUpArea && EndPoint == ConfigClass.WHInlibArea)
             {
                 //这里用线程,是为了防止接收到多次一样的消息从而重复通知立库的bug。
                 if (InformWHThreadState == false)  //防止线程重复创建
                 {
                     InformWHThread = new Thread(new ParameterizedThreadStart(InformInlib));
                     InformWHThread.IsBackground = true;
                     InformWHThreadState         = true;
                     InformWHThread.Start(package.TaskID);
                     InformWHThread.Priority = ThreadPriority.AboveNormal;
                 }
                 return;
             }
             //AGV的起点是立库出库区,终点是人工下料区,则是人工下料任务,则AGV完成完成了任务后什么也不需要干了
             if (StartPoint == ConfigClass.WHOutlibArea1 && EndPoint == ConfigClass.HandDownArea)
             {
                 //当前人工下料订单完成 恢复上下料的按钮功能。
                 UDDelegate();
                 return;
             }
         }
     }
 }
コード例 #2
0
ファイル: LogInfoHelp.cs プロジェクト: return001/MES-1
        public static LogInfoHelp GetInstance()
        {
            if (null == _instance)
            {
                _instance = new LogInfoHelp();
            }

            return(_instance);
        }
コード例 #3
0
ファイル: AGVMsgHandle.cs プロジェクト: return001/MES-1
 //手动操作AGV时收到消息的处理方法
 private void HandOperate()
 {
     if (package.Head == 10003)   //收到消息
     {
         MainWindow.agvUIHandle.AGV_POS_ACTION = "AGV已收到消息";
         LogInfoHelp.GetInstance().WriteInfoToLogFile("AGV已收到消息", LogInfoHelp.LOG_TYPE.LOG_INFO);
         return;
     }
     if (package.Head == 10005)       //执行指令完成
     {
         if (package.TaskStepID == 0) //执行取货任务完成
         {
             MainWindow.agvUIHandle.AGV_POS_ACTION = "AGV取货动作完毕";
             LogInfoHelp.GetInstance().WriteInfoToLogFile("AGV取货动作完毕", LogInfoHelp.LOG_TYPE.LOG_INFO);
         }
         if (package.TaskStepID == 1)  //执行卸货任务完成
         {
             MainWindow.agvUIHandle.AGV_POS_ACTION = "AGV卸货动作完毕";
             LogInfoHelp.GetInstance().WriteInfoToLogFile("AGV卸货动作完毕", LogInfoHelp.LOG_TYPE.LOG_INFO);
             MainWindow.AGVOperState = 0;
             return;
         }
     }
 }
コード例 #4
0
ファイル: AGVMsgHandle.cs プロジェクト: return001/MES-1
        //执行订单(自动操作)AGV时收到消息的处理方法
        private void AutoOperate()
        {
            if (package.Head == 10003)   //收到消息
            {
                ExecuteOrder.SendAGVCmdEnable         = false;
                MainWindow.agvUIHandle.AGV_POS_ACTION = "AGV已收到消息";
                LogInfoHelp.GetInstance().WriteInfoToLogFile("AGV已收到消息", LogInfoHelp.LOG_TYPE.LOG_INFO);
                DataBaseHandle db  = new DataBaseHandle();
                SqlConnection  con = new SqlConnection();
                db.UpdateAGVComState(con, package.TaskID);   //更新AGV指令表中的通讯状态为【已收到】
                return;
            }
            if (package.Head == 10005)       //执行指令完成
            {
                if (package.TaskStepID == 0) //执行取货任务完成
                {
                    //得到AGV的起点和终点
                    int            StartPoint, EndPoint = 0;
                    DataBaseHandle db  = new DataBaseHandle();
                    SqlConnection  con = new SqlConnection();
                    StartPoint = db.SelectAGVStartEndPoint(con, package.TaskID, ref EndPoint);
                    MainWindow.agvUIHandle.AGV_POS_ACTION = ConfigClass.GetMapString(StartPoint) + "取货完毕";
                    LogInfoHelp.GetInstance().WriteInfoToLogFile(MainWindow.agvUIHandle.AGV_POS_ACTION, LogInfoHelp.LOG_TYPE.LOG_INFO);
                    //如过是送往立库入库区来的,向加工PLC  装配PLC  检测PLC发布当前状态
                    //AGV在各个机构区域取托盘完毕
                    if (EndPoint == ConfigClass.WHInlibArea)
                    {
                        PublishAGVState(StartPoint, EndPoint);
                        Thread t = new Thread(delegate()
                        {
                            Thread.Sleep(new TimeSpan(0, 0, 5));
                            SetNull();
                        });
                        t.Start();
                        t.Priority     = ThreadPriority.AboveNormal;
                        t.IsBackground = true;
                        //判断立库表指令是否超过两条,如果超过两条则挂起,否则不挂起
                        Thread th = new Thread(delegate()
                        {
                            SendPackage pac = new SendPackage();
                            while (true)
                            {
                                bool IsNoPause = db.SelectWHCmdNum(con); //查询立库指令表是否具备AGV挂起的条件
                                if (IsNoPause == false)                  //如果指令没超过一条
                                {
                                    pac.Head     = 10012;
                                    pac.ESSignal = 6;       //解急停
                                    sendESDelegate(pac);
                                    break;
                                }
                                //如果超过两条
                                pac.Head     = 10012;
                                pac.ESSignal = 5;      //急停
                                sendESDelegate(pac);
                                Thread.Sleep(TimeSpan.FromSeconds(3));
                            }
                        });
                        th.Start();
                        th.Priority     = ThreadPriority.AboveNormal;
                        th.IsBackground = true;
                    }
                    return;
                }
                if (package.TaskStepID == 1)  //执行卸货任务完成
                {
                    DataBaseHandle db  = new DataBaseHandle();
                    SqlConnection  con = new SqlConnection();
                    //得到AGV的起点和终点
                    int StartPoint, EndPoint = 0;
                    StartPoint = db.SelectAGVStartEndPoint(con, package.TaskID, ref EndPoint);
                    MainWindow.agvUIHandle.AGV_POS_ACTION = ConfigClass.GetMapString(EndPoint) + "卸货完毕";
                    LogInfoHelp.GetInstance().WriteInfoToLogFile(MainWindow.agvUIHandle.AGV_POS_ACTION, LogInfoHelp.LOG_TYPE.LOG_INFO);
                    db.UpdateAGVWorkState(con, package.TaskID);   //更新AGV指令表中的通讯状态为【完成】
                    ExecuteOrder.SendAGVCmdEnable = true;
                    //如果是从立库出库区来的,向加工PLC  装配PLC  检测PLC发布当前状态

                    //AGV在各个机构区域放托盘完毕
                    if (StartPoint == ConfigClass.WHOutlibArea1)
                    {
                        //发布AGV的状态给各个PLC
                        PublishAGVState(StartPoint, EndPoint);
                        //AGV在各工作区卸货完成后,检查是否还有订单,并且检查每个工作区是否有空闲,
                        //如果两个条件都满足,我们就通知立库继续出库(向立库指令表中插入出库信息)
                        //这里用线程,是为了防止接收到多次一样的消息从而重复通知立库的bug。
                        if (InformWHThreadState == false)  //防止线程重复创建
                        {
                            InformWHThread = new Thread(new ParameterizedThreadStart(CheckAndInformWH));
                            InformWHThread.IsBackground = true;
                            InformWHThreadState         = true;
                            InformWHThread.Start(EndPoint);
                            InformWHThread.Priority = ThreadPriority.AboveNormal;
                        }
                        return;
                    }
                    //如过是送往立库入库区来的,则向立库表中插入入库指令信息
                    if (EndPoint == ConfigClass.WHInlibArea)
                    {
                        //AGV在立库入库区卸货完成,然后向立库表中插入入库指令信息
                        if (InformWHThreadState == false)  //防止线程重复创建
                        {
                            InformWHThread = new Thread(new ParameterizedThreadStart(InformWHInlib));
                            InformWHThread.IsBackground = true;
                            InformWHThreadState         = true;
                            InformWHThread.Start(StartPoint);
                            InformWHThread.Priority = ThreadPriority.AboveNormal;
                        }
                        return;
                    }
                }
            }
        }
コード例 #5
0
 //手动操作AGV时收到消息的处理方法
 private void HandOperate()
 {
     if (package.Head == 10004)
     {
         MainWindow.whUIHandle.WH_OPER_STATE = "已收到出库指令";
         LogInfoHelp.GetInstance().WriteInfoToLogFile("已收到出库指令", LogInfoHelp.LOG_TYPE.LOG_INFO);
         return;
     }
     if (package.Head == 20004)
     {
         if (package.InlibMatchingID == 1)
         {
             MainWindow.whUIHandle.WH_OPER_STATE = "已收到入库指令";
             LogInfoHelp.GetInstance().WriteInfoToLogFile("已收到入库指令", LogInfoHelp.LOG_TYPE.LOG_INFO);
         }
         else
         {
             MainWindow.whUIHandle.WH_OPER_STATE = "入库托盘匹配不成功";
             MessageBox.Show("入库托盘匹配不成功,请选择正确的托盘类型,或者检查托盘RFID码是否正确,否则RFID读写器可能出现异常");
             LogInfoHelp.GetInstance().WriteInfoToLogFile("入库托盘匹配不成功", LogInfoHelp.LOG_TYPE.LOG_ERROR);
         }
         return;
     }
     if (package.Head == 30004)
     {
         MainWindow.whUIHandle.WH_OPER_STATE = "已收到侧边出库指令";
         LogInfoHelp.GetInstance().WriteInfoToLogFile("已收到侧边出库指令", LogInfoHelp.LOG_TYPE.LOG_INFO);
         return;
     }
     if (package.Head == 10005)
     {
         if (package.OutlibMatchingID == 2)
         {
             MainWindow.whUIHandle.WH_OPER_STATE = "出库托盘匹配不成功";
             MessageBox.Show("出库托盘匹配不成功,请检查MES系统的托盘位置和立库实际的托盘位置是否一致,否则RFID读写器可能出现异常");
             LogInfoHelp.GetInstance().WriteInfoToLogFile("出库托盘匹配不成功", LogInfoHelp.LOG_TYPE.LOG_ERROR);
         }
         MainWindow.whUIHandle.WH_OPER_STATE = "已出库";
         LogInfoHelp.GetInstance().WriteInfoToLogFile("已出库", LogInfoHelp.LOG_TYPE.LOG_INFO);
         DataBaseHandle db  = new DataBaseHandle();
         SqlConnection  con = new SqlConnection();
         db.SaveKuweiArray(con, MainWindow.whHandInfo.Position, 0); //更新库位表中的库位信息
         db.UpdateKuweiArray(con);
         MainWindow.WHOperState = 0;                                //一个动作完成后,将手动动作置为默认
         return;
     }
     if (package.Head == 20005)
     {
         MainWindow.whUIHandle.WH_OPER_STATE = "已入库";
         LogInfoHelp.GetInstance().WriteInfoToLogFile("已入库", LogInfoHelp.LOG_TYPE.LOG_INFO);
         DataBaseHandle db  = new DataBaseHandle();
         SqlConnection  con = new SqlConnection();
         db.SaveKuweiArray(con, MainWindow.whHandInfo.Position, MainWindow.whHandInfo.TrayStyle); //更新库位表中的库位信息
         db.UpdateKuweiArray(con);
         MainWindow.WHOperState = 0;                                                              //一个动作完成后,将手动动作置为默认
         return;
     }
     if (package.Head == 30005)
     {
         if (package.OutlibMatchingID == 1)
         {
             MainWindow.whUIHandle.WH_OPER_STATE = "已侧边出库";
             LogInfoHelp.GetInstance().WriteInfoToLogFile("已侧边出库", LogInfoHelp.LOG_TYPE.LOG_INFO);
             DataBaseHandle db  = new DataBaseHandle();
             SqlConnection  con = new SqlConnection();
             db.SaveKuweiArray(con, MainWindow.whHandInfo.Position, 0); //更新库位表中的库位信息
             db.UpdateKuweiArray(con);
             MainWindow.WHOperState = 0;                                //一个动作完成后,将手动动作置为默认
             return;
         }
         else if (package.OutlibMatchingID == 2)
         {
             MainWindow.whUIHandle.WH_OPER_STATE = "侧边托盘匹配不成功";
             MessageBox.Show("侧边出库托盘匹配不成功,请检查MES系统的托盘位置和立库实际的托盘位置是否一致,否则RFID读写器可能出现异常");
             LogInfoHelp.GetInstance().WriteInfoToLogFile("侧边托盘匹配不成功", LogInfoHelp.LOG_TYPE.LOG_ERROR);
         }
     }
 }
コード例 #6
0
        private void ManualOperate()
        {
            if (package.Head == 10004)
            {
                MainWindow.whUIHandle.WH_OPER_STATE = "已收到出库指令";
                ExecuteOrder.SendWHCmdEnable        = false;
                LogInfoHelp.GetInstance().WriteInfoToLogFile("已收到出库指令", LogInfoHelp.LOG_TYPE.LOG_INFO);
                //更新立库表通信状态为【已收到】
                DataBaseHandle db  = new DataBaseHandle();
                SqlConnection  con = new SqlConnection();
                db.UpdateWHComState(con, package.SerialNumber);
            }

            if (package.Head == 20004)
            {
                if (package.InlibMatchingID == 1)  // 与预期的托盘号一致,匹配成功
                {
                    MainWindow.whUIHandle.WH_OPER_STATE = "已收到入库指令";
                    ExecuteOrder.SendWHCmdEnable        = false;
                    LogInfoHelp.GetInstance().WriteInfoToLogFile("已收到入库指令", LogInfoHelp.LOG_TYPE.LOG_INFO);
                    //更新立库表通信状态为【已收到】
                    DataBaseHandle db  = new DataBaseHandle();
                    SqlConnection  con = new SqlConnection();
                    db.UpdateWHComState(con, package.SerialNumber);
                }
                else
                {
                    MainWindow.whUIHandle.WH_OPER_STATE = "入库托盘匹配不成功";
                    LogInfoHelp.GetInstance().WriteInfoToLogFile("入库托盘匹配不成功", LogInfoHelp.LOG_TYPE.LOG_ERROR);
                    MessageBox.Show("入库托盘匹配不成功,请选择正确的托盘类型,或者检查托盘RFID码是否正确,否则RFID读写器可能出现异常");
                    ExecuteOrder.HandAndDownFlag = false;
                    DataBaseHandle db1  = new DataBaseHandle();
                    SqlConnection  con1 = new SqlConnection();
                    db1.DeleteAGVCmdTable(con1);
                    db1.DeleteWHCmdTable(con1);
                }
                return;
            }
            if (package.Head == 10005)
            {
                if (package.OutlibMatchingID == 2)
                {
                    MainWindow.whUIHandle.WH_OPER_STATE = "出库托盘匹配不成功";
                    LogInfoHelp.GetInstance().WriteInfoToLogFile("出库托盘匹配不成功", LogInfoHelp.LOG_TYPE.LOG_ERROR);
                    MessageBox.Show("出库托盘匹配不成功,请检查MES系统的托盘位置和立库实际的托盘位置是否一致,否则RFID读写器可能出现异常");
                    ExecuteOrder.HandAndDownFlag = false;
                    DataBaseHandle db1  = new DataBaseHandle();
                    SqlConnection  con1 = new SqlConnection();
                    db1.DeleteAGVCmdTable(con1);
                    db1.DeleteWHCmdTable(con1);
                    return;
                }
                MainWindow.whUIHandle.WH_OPER_STATE = "已出库";
                LogInfoHelp.GetInstance().WriteInfoToLogFile("已出库", LogInfoHelp.LOG_TYPE.LOG_INFO);
                //更新立库表工作状态为【完成】
                DataBaseHandle db  = new DataBaseHandle();
                SqlConnection  con = new SqlConnection();
                db.UpdateWHWorkState(con, package.SerialNumber);
                ExecuteOrder.SendWHCmdEnable = true;
                //更新库位表(根据流水号得到出库的货位ID,然后将此ID号对应的货位类型置为0,选中状态置为未选中)
                db.UpdateCargoInfo(con, package.SerialNumber);

                //通知AGV来取货物,并送往立库下料区
                //(根据当前出库的托盘类型和订单类型和各个工作区的PLC状态来判断应该将货物送往哪里,然后向AGV指令表中插入数据)

                //防止由于连续接收到相同信息,从而导致连续插入相同的指令以及防止线程重复创建
                if (InformAGVThread1State == false)
                {
                    InformAGVThread1 = new Thread(new ParameterizedThreadStart(CheckAndInformAGV1));
                    InformAGVThread1.IsBackground = true;
                    InformAGVThread1State         = true;
                    InformAGVThread1.Start(package);
                }
                return;
            }
            if (package.Head == 20005)
            {
                MainWindow.whUIHandle.WH_OPER_STATE = "已入库";
                LogInfoHelp.GetInstance().WriteInfoToLogFile("已入库", LogInfoHelp.LOG_TYPE.LOG_INFO);
                //更新立库表工作状态为【完成】
                DataBaseHandle db  = new DataBaseHandle();
                SqlConnection  con = new SqlConnection();
                db.UpdateWHWorkState(con, package.SerialNumber);
                ExecuteOrder.SendWHCmdEnable = true;
                //更新库位表(根据流水号得出入库的货位ID,然后根据得到的托盘类型,将货位类型置为相应的类型。选中状态置为未选中)
                db.UpdateCargoInfo(con, package.SerialNumber, package.TrayStyle);

                //当前上料订单完成事件,恢复上下料的按钮功能。
                UDDelegate();
            }
        }
コード例 #7
0
        //执行订单(自动操作)AGV时收到消息的处理方法
        private void AutoOperate()
        {
            if (package.Head == 30000)
            {
                MainWindow.whUIHandle.WH_OPER_STATE = "写码完成";
                LogInfoHelp.GetInstance().WriteInfoToLogFile("写码完成", LogInfoHelp.LOG_TYPE.LOG_INFO);
                DataBaseHandle db  = new DataBaseHandle();
                SqlConnection  con = new SqlConnection();
                db.InsertAGVCmd(con, ConfigClass.WHOutlibArea2, ConfigClass.WHInlibArea);
                return;
            }
            if (package.Head == 10004)
            {
                MainWindow.whUIHandle.WH_OPER_STATE = "已收到出库指令";
                ExecuteOrder.SendWHCmdEnable        = false;
                LogInfoHelp.GetInstance().WriteInfoToLogFile("已收到出库指令", LogInfoHelp.LOG_TYPE.LOG_INFO);
                //更新立库表通信状态为【已收到】
                DataBaseHandle db  = new DataBaseHandle();
                SqlConnection  con = new SqlConnection();
                db.UpdateWHComState(con, package.SerialNumber);
                return;
            }

            if (package.Head == 20004)
            {
                if (package.InlibMatchingID == 1)  // 与预期的托盘号一致,匹配成功
                {
                    MainWindow.whUIHandle.WH_OPER_STATE = "已收到入库指令";
                    ExecuteOrder.SendWHCmdEnable        = false;
                    LogInfoHelp.GetInstance().WriteInfoToLogFile("已收到入库指令", LogInfoHelp.LOG_TYPE.LOG_INFO);
                    //更新立库表通信状态为【已收到】
                    DataBaseHandle db  = new DataBaseHandle();
                    SqlConnection  con = new SqlConnection();
                    db.UpdateWHComState(con, package.SerialNumber);
                }
                else
                {
                    MainWindow.whUIHandle.WH_OPER_STATE = "入库托盘匹配不成功";
                    LogInfoHelp.GetInstance().WriteInfoToLogFile("入库托盘匹配不成功", LogInfoHelp.LOG_TYPE.LOG_ERROR);
                    MessageBox.Show("入库托盘匹配不成功,RFID读写器可能出现异常或者出现一些不可预见因素");
                    ExecuteOrder.ExecuteFlag = false;
                    DataBaseHandle db  = new DataBaseHandle();
                    SqlConnection  con = new SqlConnection();
                    db.DeleteAGVCmdTable(con);
                    db.DeleteWHCmdTable(con);
                }
                return;
            }
            if (package.Head == 30004)
            {
                MainWindow.whUIHandle.WH_OPER_STATE = "已收到侧边出库命令";
                ExecuteOrder.SendWHCmdEnable        = false;
                LogInfoHelp.GetInstance().WriteInfoToLogFile("已收到侧边出库命令", LogInfoHelp.LOG_TYPE.LOG_INFO);
                //更新立库表通信状态为【已收到】
                DataBaseHandle db  = new DataBaseHandle();
                SqlConnection  con = new SqlConnection();
                db.UpdateWHComState(con, package.SerialNumber);
                return;
            }
            if (package.Head == 10005)
            {
                if (package.OutlibMatchingID == 2)
                {
                    MainWindow.whUIHandle.WH_OPER_STATE = "出库托盘匹配不成功";
                    LogInfoHelp.GetInstance().WriteInfoToLogFile("出库托盘匹配不成功", LogInfoHelp.LOG_TYPE.LOG_ERROR);
                    MessageBox.Show("出库托盘匹配不成功,请检查MES系统的托盘位置和立库实际的托盘位置是否一致,否则RFID读写器可能出现异常");
                    ExecuteOrder.ExecuteFlag = false;
                    DataBaseHandle db1  = new DataBaseHandle();
                    SqlConnection  con1 = new SqlConnection();
                    db1.DeleteAGVCmdTable(con1);
                    db1.DeleteWHCmdTable(con1);
                    return;
                }
                MainWindow.whUIHandle.WH_OPER_STATE = "已出库";
                LogInfoHelp.GetInstance().WriteInfoToLogFile("已出库", LogInfoHelp.LOG_TYPE.LOG_INFO);
                //更新立库表工作状态为【完成】
                DataBaseHandle db  = new DataBaseHandle();
                SqlConnection  con = new SqlConnection();
                db.UpdateWHWorkState(con, package.SerialNumber);
                ExecuteOrder.SendWHCmdEnable = true;
                //更新库位表(根据流水号得到出库的货位ID,然后将此ID号对应的货位类型置为0,选中状态置为未选中)
                db.UpdateCargoInfo(con, package.SerialNumber);

                //通知AGV来取货物,并送往指定位置
                //(根据当前出库的托盘类型和订单类型和各个工作区的PLC状态来判断应该将货物送往哪里,然后向AGV指令表中插入数据)

                //防止由于连续接收到相同信息,从而导致连续插入相同的指令以及防止线程重复创建
                if (InformAGVThreadState == false)
                {
                    InformAGVThread = new Thread(new ParameterizedThreadStart(CheckAndInformAGV));
                    InformAGVThread.IsBackground = true;
                    InformAGVThread1State        = true;
                    InformAGVThread.Start(package);
                    InformAGVThread.Priority = ThreadPriority.AboveNormal;
                }
                return;
            }
            if (package.Head == 20005)
            {
                MainWindow.whUIHandle.WH_OPER_STATE = "已入库";
                LogInfoHelp.GetInstance().WriteInfoToLogFile("已入库", LogInfoHelp.LOG_TYPE.LOG_INFO);
                //更新立库表工作状态为【完成】
                DataBaseHandle db  = new DataBaseHandle();
                SqlConnection  con = new SqlConnection();
                db.UpdateWHWorkState(con, package.SerialNumber);
                ExecuteOrder.SendWHCmdEnable = true;
                //更新库位表(根据流水号得出入库的货位ID,然后根据得到的托盘类型,将货位类型置为相应的类型。选中状态置为未选中)
                db.UpdateCargoInfo(con, package.SerialNumber, package.TrayStyle);

                //如果订单类型是入库订单的话,我们就根据其托盘类型更新订单表 ,然后判断立库中订单表的数量,
                //如果为0停止响应的机器工作
                //不为0的话则通知出库。
                if (UpdateOrderThreadState == false)
                {
                    UpdateOrderThread = new Thread(new ParameterizedThreadStart(UpdateOrderTable));
                    UpdateOrderThread.IsBackground = true;
                    UpdateOrderThreadState         = true;
                    UpdateOrderThread.Start(package.SerialNumber);
                    UpdateOrderThread.Priority = ThreadPriority.AboveNormal;
                }
            }

            if (package.Head == 30005)
            {
                if (package.OutlibMatchingID == 2)
                {
                    MainWindow.whUIHandle.WH_OPER_STATE = "托盘匹配不成功";
                    LogInfoHelp.GetInstance().WriteInfoToLogFile("侧边托盘匹配不成功", LogInfoHelp.LOG_TYPE.LOG_ERROR);
                    MessageBox.Show("侧边出库托盘匹配不成功,请检查MES系统的托盘位置和立库实际的托盘位置是否一致,否则RFID读写器可能出现异常");
                    ExecuteOrder.ExecuteFlag = false;
                    DataBaseHandle db1  = new DataBaseHandle();
                    SqlConnection  con1 = new SqlConnection();
                    db1.DeleteAGVCmdTable(con1);
                    db1.DeleteWHCmdTable(con1);
                    return;
                }
                MainWindow.whUIHandle.WH_OPER_STATE = "已侧边出库";
                LogInfoHelp.GetInstance().WriteInfoToLogFile("已侧边出库", LogInfoHelp.LOG_TYPE.LOG_INFO);
                //更新立库表工作状态为【完成】
                DataBaseHandle db  = new DataBaseHandle();
                SqlConnection  con = new SqlConnection();
                db.UpdateWHWorkState(con, package.SerialNumber);
                ExecuteOrder.SendWHCmdEnable = true;
                //更新库位表(根据流水号得到出库的货位ID,然后将此ID号对应的货位类型置为0,选中状态置为未选中)
                db.UpdateCargoInfo(con, package.SerialNumber);

                //通知加工区机器人来取货物
                DTUSendPackage.Raw_Tray_Out = 1;

                return;
            }
        }