Beispiel #1
0
 /// <summary>
 /// AGV 装货中
 /// </summary>
 /// <param name="id"></param>
 /// <param name="agv"></param>
 public void SubmitAgvLoading(int id, string agv)
 {
     try
     {
         // 获取对应AGV任务资讯
         String    sql = String.Format(@"select * from wcs_agv_info where MAGIC = '{0}' and ID = '{1}' and AGV = '{2}'", AGVMagic.到达装货点, id.ToString(), agv);
         DataTable dt  = DataControl._mMySql.SelectAll(sql);
         if (DataControl._mStools.IsNoData(dt))
         {
             // LOG
             DataControl._mTaskTools.RecordTaskErrLog("SubmitNDCPlcLoading()", "AGV装货中[AGV任务ID,AGV设备号]", id.ToString(), agv, "找不到对应AGV任务资讯!");
             return;
         }
         WCS_AGV_INFO info = dt.ToDataEntity <WCS_AGV_INFO>();
         // 生成包装线固定辊台指令
         FRT frt = new FRT(info.PICKSTATION);
         // 获取指令-- 反向送货
         byte[] order = FRT._RollerControl(frt.FRTNum(), FRT.RollerRunAll, FRT.RunObverse, FRT.GoodsDeliver, FRT.GoodsQty1);
         // 加入任务作业链表
         WCS_TASK_ITEM item = new WCS_TASK_ITEM()
         {
             ITEM_ID = "包装线送货",
             WCS_NO  = info.TASK_UID,
             ID      = info.ID,
             DEVICE  = info.PICKSTATION,
             LOC_TO  = info.AGV
         };
         DataControl._mTaskControler.StartTask(new AGVFRTTack(item, DeviceType.固定辊台, order));
     }
     catch (Exception ex)
     {
         // LOG
         DataControl._mTaskTools.RecordTaskErrLog("SubmitNDCPlcLoading()", "AGV装货中[AGV任务ID,AGV设备号]", id.ToString(), agv, ex.ToString());
     }
 }
Beispiel #2
0
 public FRTDeviceModel(string devid, string area)
 {
     frt      = new FRT(devid);
     DeviceID = devid;
     Area     = area;
     Update();
 }
Beispiel #3
0
        /// <summary>
        /// 终止任务
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TerminateBtn_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (CBdev.SelectedIndex == -1)
                {
                    Notice.Show("请选择设备!", "提示", 3, MessageBoxIcon.Info);
                    return;
                }
                string dev = CBdev.Text;
                FRT    frt = new FRT(dev);
                if (frt.DeviceStatus() == FRT.DeviceError)
                {
                    Notice.Show("指令发送失败:设备故障!", "错误", 3, MessageBoxIcon.Error);
                    return;
                }

                byte[] order = FRT._StopTask(frt.FRTNum());
                if (!DataControl._mSocket.SendToClient(dev, order, out string result))
                {
                    Notice.Show("指令发送失败:" + result.ToString(), "错误", 3, MessageBoxIcon.Error);
                    return;
                }
                Notice.Show("终止任务 指令发送成功!", "成功", 3, MessageBoxIcon.Success);
                DataControl._mSocket.SwithRefresh(dev, true);
            }
            catch (Exception ex)
            {
                Notice.Show("指令发送失败:" + ex.ToString(), "错误", 3, MessageBoxIcon.Error);
            }
        }
Beispiel #4
0
 public FRTTack(WCS_TASK_ITEM item, string deviceType, byte[] order) : base(item, deviceType, order)
 {
     _device = new FRT(ITEM.DEVICE);
     log     = new Log("Task_FRT-" + ITEM.ID + "-");
     // 记录生成指令LOG
     log.LOG(DataControl._mTaskTools.GetLogMessC(item, order));
 }
Beispiel #5
0
 public AGVFRTTack(WCS_TASK_ITEM item, string deviceType, byte[] order) : base(item, deviceType, order)
 {
     _device = new FRT(ITEM.DEVICE);
     log     = new Log("AGV_FRT-" + ITEM.ID + "-");
     // 记录生成指令LOG
     log.LOG(String.Format(@"【CreatOrder】{0}:WMS任务ID[ {1} ],AGV任务ID[ {2} ],设备号[ {3} ], 指令[ {4} ].",
                           item.ITEM_ID, item.WCS_NO, item.ID, item.DEVICE, DataControl._mStools.BytetToString(order)));
 }
Beispiel #6
0
        /// <summary>
        /// 连接网络设备
        /// </summary>
        public void LinkDevicesClient()
        {
            try
            {
                // 清空设备
                DataControl._mSocket.Close();
                // 获取设备设定档资讯
                String    sql = "select * from wcs_config_device where FLAG <> 'N' order by CREATION_TIME";
                DataTable dt  = DataControl._mMySql.SelectAll(sql);
                if (DataControl._mStools.IsNoData(dt))
                {
                    return;
                }
                List <WCS_CONFIG_DEVICE> devList = dt.ToDataList <WCS_CONFIG_DEVICE>();
                // 遍历加入网络设备
                foreach (WCS_CONFIG_DEVICE dev in devList)
                {
                    byte[] refreshB = null;
                    switch (dev.TYPE)
                    {
                    case DeviceType.固定辊台:
                        refreshB = FRT._GetData();
                        break;

                    case DeviceType.摆渡车:
                        refreshB = ARF._GetData();
                        break;

                    case DeviceType.行车:
                        refreshB = ABC._GetData();
                        break;

                    case DeviceType.运输车:
                        refreshB = RGV._GetData();
                        break;

                    default:
                        continue;
                    }
                    if (!DataControl._mSocket.AddClient(dev.DEVICE, dev.IP, dev.PORT, refreshB, out string result))
                    {
                        throw new Exception(result);
                    }
                }
            }
            catch (Exception ex)
            {
                // 记录LOG
                RecordTaskErrLog("LinkDevicesClient()", "连接网络设备", null, null, ex.ToString());
                MessageBox.Show("连接网络设备发生异常:" + ex.ToString(), "Error");
                System.Environment.Exit(0);
            }
        }
Beispiel #7
0
        /// <summary>
        /// 终止任务
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TerminateBtn_Click(object sender, RoutedEventArgs e)
        {
            string dev = "";

            byte[] order = null;
            try
            {
                if (CBdev.SelectedIndex == -1)
                {
                    Notice.Show("请选择设备!", "提示", 3, MessageBoxIcon.Info);
                    return;
                }
                dev = CBdev.Text;
                FRT frt = new FRT(dev);
                if (frt.DeviceStatus() == FRT.DeviceError)
                {
                    Notice.Show("指令发送失败:设备故障!", "错误", 3, MessageBoxIcon.Error);
                    return;
                }

                order = FRT._StopTask(frt.FRTNum());
                if (!DataControl._mSocket.SendToClient(dev, order, out string result))
                {
                    Notice.Show("指令发送失败:" + result.ToString(), "错误", 3, MessageBoxIcon.Error);
                    // LOG
                    DataControl._mTaskTools.RecordTaskErrLog("TerminateBtn_Click()", "固定辊台-终止任务[FRT,指令]", dev, DataControl._mStools.BytetToString(order), result.ToString());
                    return;
                }
                Notice.Show("终止任务 指令发送成功!", "成功", 3, MessageBoxIcon.Success);
                DataControl._mSocket.SwithRefresh(dev, true);
            }
            catch (Exception ex)
            {
                Notice.Show("指令发送失败:" + ex.Message, "错误", 3, MessageBoxIcon.Error);
                // LOG
                DataControl._mTaskTools.RecordTaskErrLog("TerminateBtn_Click()", "固定辊台-终止任务[FRT,指令]", dev, DataControl._mStools.BytetToString(order), ex.Message);
            }
        }
Beispiel #8
0
        /// <summary>
        /// 启动辊台
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BTNrun_Click(object sender, EventArgs e)
        {
            string dev = "";

            byte[] order = null;
            try
            {
                if (CBdev.SelectedIndex == -1)
                {
                    Notice.Show("请选择设备!", "提示", 3, MessageBoxIcon.Info);
                    return;
                }
                dev = CBdev.Text;
                FRT frt = new FRT(dev);
                if (frt.ActionStatus() == FRT.Run)
                {
                    Notice.Show("指令发送失败:设备运行中!", "错误", 3, MessageBoxIcon.Error);
                    return;
                }
                if (frt.DeviceStatus() == FRT.DeviceError)
                {
                    Notice.Show("指令发送失败:设备故障!", "错误", 3, MessageBoxIcon.Error);
                    return;
                }

                if (!WindowCommon.ConfirmAction("是否进行[滚筒启动任务]!!"))
                {
                    return;
                }

                // 方式
                byte site1 = FRT.RollerRun1;
                if (CBsite1.SelectedValue.ToString() == "启动2#辊台")
                {
                    site1 = FRT.RollerRun2;
                }
                if (CBsite1.SelectedValue.ToString() == "启动全部辊台")
                {
                    site1 = FRT.RollerRunAll;
                }
                // 方向
                byte site2 = FRT.RunFront;
                if (CBsite2.SelectedValue.ToString() == "反向启动")
                {
                    site2 = FRT.RunObverse;
                }
                // 类型
                byte site3 = FRT.GoodsReceive;
                if (CBsite3.SelectedValue.ToString() == "送货")
                {
                    site3 = FRT.GoodsDeliver;
                }
                // 数量
                byte site4 = FRT.GoodsQty1;
                if (CBsite4.SelectedValue.ToString() == "货物数量2")
                {
                    site4 = FRT.GoodsQty2;
                }

                order = FRT._RollerControl(frt.FRTNum(), site1, site2, site3, site4);
                DataControl._mSocket.SwithRefresh(dev, false);
                if (!DataControl._mSocket.SendToClient(dev, order, out string result))
                {
                    DataControl._mSocket.SwithRefresh(dev, true);
                    Notice.Show("指令发送失败:" + result.ToString(), "错误", 3, MessageBoxIcon.Error);
                    // LOG
                    DataControl._mTaskTools.RecordTaskErrLog("BTNrun_Click()", "固定辊台-启动辊台任务[FRT,指令]", dev, DataControl._mStools.BytetToString(order), result.ToString());
                    return;
                }
                Notice.Show("启动辊台 指令发送成功!", "成功", 3, MessageBoxIcon.Success);
            }
            catch (Exception ex)
            {
                Notice.Show("指令发送失败:" + ex.Message, "错误", 3, MessageBoxIcon.Error);
                // LOG
                DataControl._mTaskTools.RecordTaskErrLog("BTNrun_Click()", "固定辊台-启动辊台任务[FRT,指令]", dev, DataControl._mStools.BytetToString(order), ex.Message);
            }
        }
Beispiel #9
0
        /// <summary>
        /// 生成对应辊台任务指令
        /// </summary>
        /// <param name="agv"></param>
        public void CreatOrderTask(WCS_AGV_INFO agv)
        {
            try
            {
                // 按任务当前状态处理
                switch (Convert.ToInt32(agv.MAGIC))
                {
                case AGVMagic.到达装货点:
                    // 获取对应包装线固定辊台资讯
                    FRT frt = new FRT(agv.PICKSTATION);
                    // 是否作业中
                    if (frt.CurrentStatus() != FRT.RollerStop)
                    {
                        return;
                    }
                    // 是否存在货物
                    //if (frt.GoodsStatus() == FRT.GoodsYesAll)
                    if (frt.GoodsStatus() == FRT.GoodsYesAll || PublicParam.IsIgnoreFRT)      //add调试判断
                    {
                        // 分配 WMS TASK
                        if (String.IsNullOrEmpty(agv.TASK_UID.Trim()))
                        {
                            // 获取WMS TASK ID
                            String    sql = String.Format(@"select TASK_UID from wcs_task_info where TASK_TYPE = '{0}' and W_S_LOC = '{1}' and TASK_UID not in 
(select DISTINCT TASK_UID from wcs_agv_info where TASK_UID is not null)", TaskType.AGV搬运, DataControl._mTaskTools.GetArea(agv.PICKSTATION));
                            DataTable dt  = DataControl._mMySql.SelectAll(sql);
                            if (DataControl._mStools.IsNoData(dt))
                            {
                                // LOG
                                DataControl._mTaskTools.RecordTaskErrLog("CreatOrderTask()", "AGV辊台任务[AGV任务ID]", agv.ID.ToString(), "", "无对应 WMS Task!");
                                return;
                            }
                            // 更新AGV任务资讯-- WMS TASK ID
                            agv.TASK_UID = dt.Rows[0]["TASK_UID"].ToString();
                            sql          = String.Format(@"update wcs_agv_info set TASK_UID = '{1}' where ID = '{0}'", agv.ID, agv.TASK_UID);
                            DataControl._mMySql.ExcuteSql(sql);
                        }

                        // 分配卸货点
                        if (agv.UPDATE_TIME == null)
                        {
                            // 获取 WMS 任务目标点
                            String    sqlloc = String.Format(@"select distinct DEVICE from wcs_config_device where FLAG in('{1}','{2}') and TYPE = '{3}' 
                                                                   and AREA in (select W_D_LOC from wcs_task_info where TASK_UID = '{0}')
	                                                               and DEVICE in (select distinct DROPSTATION From wcs_agv_info where MAGIC <> {4} group by DROPSTATION HAVING count(DROPSTATION) < {5})
                                                                 order by FLAG,CREATION_TIME", agv.TASK_UID, DeviceFlag.占用, DeviceFlag.空闲, DeviceType.固定辊台, AGVMagic.任务完成, 3);//最多三辆车
                            DataTable dtloc  = DataControl._mMySql.SelectAll(sqlloc);
                            if (DataControl._mStools.IsNoData(dtloc))
                            {
                                // LOG
                                DataControl._mTaskTools.RecordTaskErrLog("CreatOrderTask()", "AGV辊台任务[AGV任务ID]", agv.ID.ToString(), "", "无对应 WMS Task 目标位置!");
                                return;
                            }
                            // 更新AGV任务资讯-- 卸货点
                            agv.DROPSTATION = dtloc.Rows[0]["DEVICE"].ToString();
                            sqlloc          = String.Format(@"update wcs_agv_info set UPDATE_TIME = NOW(), DROPSTATION = '{1}' where ID = '{0}';
                                                         update wcs_config_device set FLAG = '{2}' where DEVICE = '{1}'", agv.ID, agv.DROPSTATION, DeviceFlag.占用);
                            DataControl._mMySql.ExcuteSql(sqlloc);

                            // 发送 NDC 更新点位
                            UpdateAGVStation(agv.ID, agv.DROPSTATION);
                        }

                        // 发指令请求AGV启动辊台装货
                        if (!DataControl._mNDCControl.DoLoad(agv.ID, Convert.ToInt32(agv.AGV), out string result))
                        {
                            // LOG
                            DataControl._mTaskTools.RecordTaskErrLog("CreatOrderTask()", "AGV辊台任务[AGV任务ID]", agv.ID.ToString(), "", result.ToString());
                            return;
                        }
                    }

                    break;

                case AGVMagic.到达卸货点:
                    // 获取对应包装线固定辊台资讯
                    FRT frtdrop = new FRT(agv.DROPSTATION);
                    // 是否作业中
                    if (frtdrop.CurrentStatus() != FRT.RollerStop)
                    {
                        // 当已启动辊台
                        if (frtdrop.CurrentTask() == FRT.TaskTake && (frtdrop.CurrentStatus() == FRT.RollerRun1 || frtdrop.CurrentStatus() == FRT.RollerRunAll))
                        {
                            // 发指令请求AGV启动辊台装货
                            if (!DataControl._mNDCControl.DoUnLoad(agv.ID, Convert.ToInt32(agv.AGV), out string result))
                            {
                                // LOG
                                DataControl._mTaskTools.RecordTaskErrLog("CreatOrderTask()", "AGV辊台任务[AGV任务ID]", agv.ID.ToString(), "", result.ToString());
                                return;
                            }
                        }
                        return;
                    }
                    else     // 未启动辊台
                    {
                        byte[] order = null;
                        // 当辊台都无货
                        //if (frtdrop.GoodsStatus() == FRT.GoodsNoAll)
                        if (frtdrop.GoodsStatus() == FRT.GoodsNoAll || PublicParam.IsIgnoreFRT)     //add调试判断
                        {
                            // 获取指令-- 启动所有辊台 正向接货
                            order = FRT._RollerControl(frtdrop.FRTNum(), FRT.RollerRunAll, FRT.RunFront, FRT.GoodsReceive, FRT.GoodsQty1);
                        }
                        // 当仅2#辊台有货
                        else if (frtdrop.GoodsStatus() == FRT.GoodsYes2)
                        {
                            // 获取指令-- 只启动1#辊台 正向接货
                            order = FRT._RollerControl(frtdrop.FRTNum(), FRT.RollerRun1, FRT.RunFront, FRT.GoodsReceive, FRT.GoodsQty1);
                        }
                        // 加入任务作业链表
                        WCS_TASK_ITEM item = new WCS_TASK_ITEM()
                        {
                            ITEM_ID  = "库区接货",
                            WCS_NO   = agv.TASK_UID,
                            ID       = agv.ID,
                            DEVICE   = agv.DROPSTATION,
                            LOC_FROM = agv.AGV
                        };
                        DataControl._mTaskControler.StartTask(new AGVFRTTack(item, DeviceType.固定辊台, order));
                    }

                    break;

                default:
                    return;
                }
            }
            catch (Exception ex)
            {
                // LOG
                DataControl._mTaskTools.RecordTaskErrLog("CreatOrderTask()", "AGV辊台任务[AGV任务ID]", agv.ID.ToString(), "", ex.ToString());
            }
        }
Beispiel #10
0
        /// <summary>
        /// 启动辊台
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BTNrun_Click(object sender, EventArgs e)
        {
            try
            {
                if (CBdev.SelectedIndex == -1)
                {
                    Notice.Show("请选择设备!", "提示", 3, MessageBoxIcon.Info);
                    return;
                }
                string dev = CBdev.Text;
                FRT    frt = new FRT(dev);
                if (frt.ActionStatus() == FRT.Run)
                {
                    Notice.Show("指令发送失败:设备运行中!", "错误", 3, MessageBoxIcon.Error);
                    return;
                }
                if (frt.DeviceStatus() == FRT.DeviceError)
                {
                    Notice.Show("指令发送失败:设备故障!", "错误", 3, MessageBoxIcon.Error);
                    return;
                }

                // 方式
                byte site1 = FRT.RollerRun1;
                if (CBsite1.SelectedValue.ToString() == "启动2#辊台")
                {
                    site1 = FRT.RollerRun2;
                }
                if (CBsite1.SelectedValue.ToString() == "启动全部辊台")
                {
                    site1 = FRT.RollerRunAll;
                }
                // 方向
                byte site2 = FRT.RunFront;
                if (CBsite2.SelectedValue.ToString() == "反向启动")
                {
                    site2 = FRT.RunObverse;
                }
                // 类型
                byte site3 = FRT.GoodsReceive;
                if (CBsite3.SelectedValue.ToString() == "送货")
                {
                    site3 = FRT.GoodsDeliver;
                }
                // 数量
                byte site4 = FRT.GoodsQty1;
                if (CBsite4.SelectedValue.ToString() == "货物数量2")
                {
                    site4 = FRT.GoodsQty2;
                }

                byte[] order = FRT._RollerControl(frt.FRTNum(), site1, site2, site3, site4);
                if (!DataControl._mSocket.SendToClient(dev, order, out string result))
                {
                    Notice.Show("指令发送失败:" + result.ToString(), "错误", 3, MessageBoxIcon.Error);
                    return;
                }
                Notice.Show("启动辊台 指令发送成功!", "成功", 3, MessageBoxIcon.Success);
                DataControl._mSocket.SwithRefresh(dev, false);
            }
            catch (Exception ex)
            {
                Notice.Show("指令发送失败:" + ex.ToString(), "错误", 3, MessageBoxIcon.Error);
            }
        }
Beispiel #11
0
        public override void DoWork()
        {
            try
            {
                // 异常
                if (_device.DeviceStatus() == ARF.DeviceError || _device.CommandStatus() == ARF.CommandError)
                {
                    ISetTaskErr();
                    // LOG
                    log.LOG(DataControl._mTaskTools.GetLogMessE(ITEM, Order, "设备故障或命令错误."));
                    return;
                }
                // 对接任务
                if (ITEM.ITEM_ID.Substring(0, 2) == "11")
                {
                    #region 调试
                    if (PublicParam.IsIgnoreARF) //add调试判断
                    {
                        if (_device.ActionStatus() == ARF.Stop)
                        {
                            // 发送指令
                            if (!DataControl._mSocket.SendToClient(ITEM.DEVICE, Order, out string result))
                            {
                                throw new Exception(result);
                            }
                            DataControl._mSocket.SwithRefresh(ITEM.DEVICE, false);
                            // LOG
                            log.LOG(DataControl._mTaskTools.GetLogMess(ITEM, Order));
                        }
                        else
                        {
                            Thread.Sleep(5000);
                            // 完成任务
                            ISetTaskSuc();
                            // 解锁设备数据状态
                            DataControl._mTaskTools.DeviceUnLock(ITEM.DEVICE);
                            // LOG
                            log.LOG(DataControl._mTaskTools.GetLogMessS(ITEM, Order));
                        }
                        return;
                    }
                    #endregion

                    if (!string.IsNullOrEmpty(ITEM.LOC_TO.Trim())) // 目标不为空即最终无货
                    {
                        // 获取目标设备类型
                        String typeTo = DataControl._mTaskTools.GetDeviceType(ITEM.LOC_TO);
                        // 摆渡车对接 固定辊台/运输车
                        switch (typeTo)
                        {
                        case DeviceType.固定辊台:
                            FRT _frt = new FRT(ITEM.LOC_TO);
                            // 固定辊台停止状态
                            if (_frt.CurrentStatus() == FRT.RollerStop)
                            {
                                // 固定辊台上无货物
                                if (_frt.GoodsStatus() == FRT.GoodsNoAll)
                                {
                                    return;
                                }
                            }
                            else if (_device.GoodsStatus() == ARF.GoodsYesAll && _device.ActionStatus() == ARF.Stop &&
                                     _frt.GoodsStatus() == FRT.GoodsYesAll && _frt.ActionStatus() == FRT.Stop)
                            {
                                return;     // 摆渡车与摆渡车都有货,不启动辊台
                            }
                            break;

                        case DeviceType.运输车:
                            RGV _rgv = new RGV(ITEM.LOC_TO);
                            // 运输车辊台停止状态
                            if (_rgv.CurrentStatus() == RGV.RollerStop)
                            {
                                // 运输车辊台上无货物
                                if (_rgv.GoodsStatus() == RGV.GoodsNoAll)
                                {
                                    return;
                                }
                            }
                            else if (_device.GoodsStatus() == ARF.GoodsYesAll && _device.ActionStatus() == ARF.Stop &&
                                     _rgv.GoodsStatus() == RGV.GoodsYesAll && _rgv.ActionStatus() == RGV.Stop)
                            {
                                return;     // 摆渡车与运输车都有货,不启动辊台
                            }
                            break;

                        default:
                            break;
                        }
                        // 摆渡车无货物
                        if (_device.GoodsStatus() == ARF.GoodsNoAll && _device.ActionStatus() == ARF.Stop)
                        {
                            // 完成任务
                            ISetTaskSuc();
                            // 解锁设备数据状态
                            DataControl._mTaskTools.DeviceUnLock(ITEM.DEVICE);
                            // LOG
                            log.LOG(DataControl._mTaskTools.GetLogMessS(ITEM, Order));
                            return;
                        }
                    }
                    else
                    {
                        // 获取目标设备类型
                        String typeFrom = DataControl._mTaskTools.GetDeviceType(ITEM.LOC_FROM);
                        // 摆渡车对接 固定辊台/运输车
                        switch (typeFrom)
                        {
                        case DeviceType.固定辊台:
                            FRT _frt = new FRT(ITEM.LOC_FROM);
                            // 固定辊台上无货物,摆渡车辊台上有货物
                            if (_frt.GoodsStatus() == FRT.GoodsNoAll && _device.GoodsStatus() != ARF.GoodsNoAll && _device.ActionStatus() == ARF.Stop)
                            {
                                // 完成任务
                                ISetTaskSuc();
                                // LOG
                                log.LOG(DataControl._mTaskTools.GetLogMessS(ITEM, Order));
                                return;
                            }
                            else if (_device.GoodsStatus() == ARF.GoodsYesAll && _device.ActionStatus() == ARF.Stop &&
                                     _frt.GoodsStatus() == FRT.GoodsYesAll && _frt.ActionStatus() == FRT.Stop)
                            {
                                return;     // 摆渡车与摆渡车都有货,不启动辊台
                            }
                            break;

                        case DeviceType.运输车:
                            RGV _rgv = new RGV(ITEM.LOC_FROM);
                            // 运输车辊台上无货物,摆渡车辊台上有货物
                            if (_rgv.GoodsStatus() == FRT.GoodsNoAll && _device.GoodsStatus() != ARF.GoodsNoAll)
                            {
                                // 完成任务
                                ISetTaskSuc();
                                // LOG
                                log.LOG(DataControl._mTaskTools.GetLogMessS(ITEM, Order));
                                return;
                            }
                            else if (_device.GoodsStatus() == ARF.GoodsYesAll && _device.ActionStatus() == ARF.Stop &&
                                     _rgv.GoodsStatus() == RGV.GoodsYesAll && _rgv.ActionStatus() == RGV.Stop)
                            {
                                return;     // 摆渡车与运输车都有货,不启动辊台
                            }
                            break;

                        default:
                            break;
                        }
                    }
                    // 发送指令
                    if (_device.ActionStatus() == ARF.Stop)
                    {
                        if (!DataControl._mSocket.SendToClient(ITEM.DEVICE, Order, out string result))
                        {
                            throw new Exception(result);
                        }
                        DataControl._mSocket.SwithRefresh(ITEM.DEVICE, false);
                        // LOG
                        log.LOG(DataControl._mTaskTools.GetLogMess(ITEM, Order));
                    }
                }
                // 定位任务
                else
                {
                    // 发送指令
                    if (_device.ActionStatus() == ARF.Stop)
                    {
                        if (!DataControl._mSocket.SendToClient(ITEM.DEVICE, Order, out string result))
                        {
                            throw new Exception(result);
                        }
                        DataControl._mSocket.SwithRefresh(ITEM.DEVICE, false);
                        // LOG
                        log.LOG(DataControl._mTaskTools.GetLogMess(ITEM, Order));
                    }
                    // 当前位置与目的位置一致 视为任务完成
                    if (_device.CurrentSite() == Convert.ToInt32(ITEM.LOC_TO) && _device.ActionStatus() == ARF.Stop)
                    {
                        // 等待对接
                        ISetTaskWait();
                        // LOG
                        log.LOG(DataControl._mTaskTools.GetLogMessW(ITEM, Order));
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                // LOG
                log.LOG(DataControl._mTaskTools.GetLogMessE(ITEM, Order, ex.ToString()));
            }
        }