示例#1
0
 /// <summary>
 /// 停止摆渡车接货
 /// </summary>
 /// <param name="area"></param>
 /// <param name="tt"></param>
 /// <param name="goodsNum"></param>
 public bool IsStopTaking(string area, TaskTypeEnum tt, int goodsNum)
 {
     try
     {
         bool res = false;
         if (devices.Exists(c => c.area == area && c.taskType == tt))
         {
             DevInfoARF arf = devices.Find(c => c.area == area && c.taskType == tt);
             if ((goodsNum == 2 && arf._.GoodsStatus == GoodsEnum.辊台满货) ||
                 (goodsNum == 1 && arf._.GoodsStatus == GoodsEnum.辊台1有货 && tt == TaskTypeEnum.入库) ||
                 (goodsNum == 1 && arf._.GoodsStatus == GoodsEnum.辊台2有货 && tt == TaskTypeEnum.出库))
             {
                 if (arf._.ActionStatus == ActionEnum.停止 && arf._.FinishTask == TaskEnum.停止辊台任务)
                 {
                     res = true;
                 }
                 else
                 {
                     arf.StopRoller();
                 }
             }
         }
         return(res);
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
示例#2
0
 /// <summary>
 /// 添加摆渡车信息
 /// </summary>
 private void AddArf(DevInfoARF arf)
 {
     if (!devices.Exists(c => c.devName == arf.devName))
     {
         devices.Add(arf);
     }
 }
示例#3
0
 /// <summary>
 /// 摆渡车是否接货中
 /// </summary>
 /// <param name="area"></param>
 /// <param name="tt"></param>
 /// <returns></returns>
 public bool IsTaking(string area, TaskTypeEnum tt)
 {
     try
     {
         bool res = false;
         if (devices.Exists(c => c.area == area && c.taskType == tt && c.isUseful))
         {
             DevInfoARF a = devices.Find(c => c.area == area && c.taskType == tt && c.isUseful);
             if (ADS.mSocket.IsConnected(a.devName) && a._.CommandStatus == CommandEnum.命令正常 && a._.DeviceStatus == DeviceEnum.设备正常)
             {
                 if (a._.ActionStatus == ActionEnum.停止)
                 {
                     a.StartTakeRoll(tt, 2);
                 }
                 else
                 {
                     if (a._.CurrentTask == TaskEnum.辊台任务)
                     {
                         res = true;
                     }
                 }
             }
         }
         return(res);
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
示例#4
0
        /// <summary>
        /// 添加所有摆渡车信息
        /// </summary>
        private void AddAllArf()
        {
            List <WCS_CONFIG_DEVICE> list = CommonSQL.GetDevInfo(DeviceType.摆渡车);

            if (list == null || list.Count == 0)
            {
                return;
            }

            foreach (WCS_CONFIG_DEVICE d in list)
            {
                AddArf(new DevInfoARF()
                {
                    devName  = d.DEVICE,
                    area     = d.AREA,
                    isLock   = d.IS_LOCK == 1 ? true : false,
                    isUseful = d.IS_USEFUL == 1 ? true : false,
                    lockID   = d.LOCK_ID1,
                    taskType = (TaskTypeEnum)d.FLAG,
                    _        = new DeviceARF()
                });

                ADS.mSocket.AddClient(d.DEVICE, d.IP, d.PORT, DevInfoARF.GetDataOrder());

                if (d.IS_USEFUL == 0)
                {
                    ADS.mSocket.UpdateUserful(d.DEVICE, false);
                }
            }
        }
示例#5
0
        /// <summary>
        /// 是否会撞车
        /// </summary>
        private bool IsHit(DevInfoARF da, int site)
        {
            DevInfoARF arf = devices.Find(c => c.area.Equals(da.area) && c.devName != da.devName);

            if (arf == null)
            {
                return(false);
            }
            int safe = ADS.mDis.GetArfSafeDis(da.area);
            int loc;

            switch (da.taskType)
            {
            case TaskTypeEnum.入库:
                loc = ADS.mDis.GetArfStandByP2(da.area);
                if (arf._.CurrentSite <= (site + safe) && arf._.ActionStatus == ActionEnum.运行中)
                {
                    return(true);
                }
                break;

            case TaskTypeEnum.出库:
                loc = ADS.mDis.GetArfStandByP1(da.area);
                if (arf._.CurrentSite >= (site - safe) && arf._.ActionStatus == ActionEnum.运行中)
                {
                    return(true);
                }
                break;

            default:
                return(true);
            }
            arf.ToSite(loc);
            return(false);
        }
示例#6
0
 /// <summary>
 /// 停止摆渡车送货
 /// </summary>
 /// <param name="area"></param>
 /// <param name="tt"></param>
 /// <param name="goodsNum"></param>
 public bool IsStopGiving(string area, TaskTypeEnum tt)
 {
     try
     {
         bool res = false;
         if (devices.Exists(c => c.area == area && c.taskType == tt))
         {
             DevInfoARF arf = devices.Find(c => c.area == area && c.taskType == tt);
             if (arf._.GoodsStatus == GoodsEnum.辊台无货)
             {
                 if (arf._.ActionStatus == ActionEnum.停止 && arf._.FinishTask == TaskEnum.停止辊台任务)
                 {
                     if (!arf.isLock)
                     {
                         res = true;
                     }
                     else
                     {
                         // 送完货直接解锁
                         arf.IsLockUnlock(false);
                     }
                 }
                 else
                 {
                     arf.StopRoller();
                 }
             }
         }
         return(res);
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
示例#7
0
        /// <summary>
        /// 是否有锁定摆渡车
        /// </summary>
        /// <returns></returns>
        public bool IsLockARF(string area, TaskTypeEnum tt, out int goods)
        {
            try
            {
                ChangeFlag(area);

                bool res = false;
                goods = 0;
                if (devices.Exists(c => c.isUseful && c.area == area && c.taskType == tt))
                {
                    DevInfoARF a = devices.Find(c => c.isUseful && c.area == area && c.taskType == tt);

                    if (ADS.mSocket.IsConnected(a.devName) &&
                        a._.CommandStatus != CommandEnum.命令错误 && a._.DeviceStatus != DeviceEnum.设备故障)
                    {
                        if (a._.CurrentTask == TaskEnum.辊台任务 && a._.FinishTask == TaskEnum.辊台任务)
                        {
                            a.StopRoller();
                        }
                        switch (a._.GoodsStatus)
                        {
                        case GoodsEnum.辊台1有货:
                        case GoodsEnum.辊台2有货:
                        case GoodsEnum.辊台中间有货:
                            goods = 1;
                            break;

                        case GoodsEnum.辊台满货:
                            goods = 2;
                            break;

                        default:
                            break;
                        }

                        if (a.isLock)
                        {
                            if (a._.GoodsStatus == GoodsEnum.辊台无货 && a._.RollerStatus == RollerStatusEnum.辊台停止)
                            {
                                // 停止&解锁
                                a.StopTask();
                                a.IsLockUnlock(false);
                            }
                            else
                            {
                                res = true;
                            }
                        }
                    }
                }
                return(res);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
示例#8
0
        /// <summary>
        /// 移至待命点
        /// </summary>
        /// <returns></returns>
        public bool Standby(string area, TaskTypeEnum tt, int site)
        {
            try
            {
                bool res = false;
                if (devices.Exists(c => c.area == area && c.taskType == tt && c.isUseful))
                {
                    DevInfoARF a = devices.Find(c => c.area == area && c.taskType == tt && c.isUseful);

                    if (a._.CurrentTask == TaskEnum.辊台任务 && a._.FinishTask == TaskEnum.辊台任务)
                    {
                        a.StopRoller();
                    }
                    if (a.isLock)
                    {
                        if (a._.CurrentSite != site)
                        {
                            res = true;
                        }
                    }
                    else
                    {
                        int sb = tt == TaskTypeEnum.入库 ? ADS.mDis.GetArfStandByP1(a.area) : ADS.mDis.GetArfStandByP2(a.area);
                        if (Math.Abs(a._.CurrentSite - sb) <= 2)
                        {
                            res = true;
                        }
                        else
                        {
                            if (a.isUseful && ADS.mSocket.IsConnected(a.devName) && a._.ActionStatus == ActionEnum.停止)
                            {
                                a.ToSite(sb);
                            }
                        }
                    }
                }
                else
                {
                    res = true;
                }
                return(res);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
示例#9
0
        /// <summary>
        /// 锁定摆渡车
        /// </summary>
        /// <param name="area"></param>
        /// <param name="tt"></param>
        /// <returns></returns>
        public bool IsLock(string area, TaskTypeEnum tt, string lockid)
        {
            try
            {
                bool res = false;
                if (devices.Exists(c => c.area == area && c.taskType == tt && c.isUseful))
                {
                    DevInfoARF a = devices.Find(c => c.area == area && c.taskType == tt && c.isUseful);
                    switch (tt)
                    {
                    case TaskTypeEnum.入库:
                        if (a.isLock && a.lockID == lockid)
                        {
                            res = true;
                        }
                        else if (a._.GoodsStatus == GoodsEnum.辊台无货)
                        {
                            a.IsLockUnlock(true, lockid);
                        }
                        break;

                    case TaskTypeEnum.出库:
                        if (a.isLock && a.lockID == lockid)
                        {
                            res = true;
                        }
                        else if (a._.GoodsStatus != GoodsEnum.辊台无货)
                        {
                            a.IsLockUnlock(true, lockid);
                        }
                        break;

                    default:
                        break;
                    }
                }
                return(res);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
示例#10
0
        /// <summary>
        /// 移动对接点
        /// </summary>
        public bool MovingButtSite(string area, TaskTypeEnum tt, int site)
        {
            try
            {
                bool res = false;
                if (devices.Exists(c => c.area == area && c.taskType == tt && c.isUseful))
                {
                    DevInfoARF a = devices.Find(c => c.area == area && c.taskType == tt && c.isUseful);

                    if (!ADS.mSocket.IsConnected(a.devName) ||
                        a._.CommandStatus == CommandEnum.命令错误 ||
                        a._.DeviceStatus == DeviceEnum.设备故障)
                    {
                        return(res);
                    }

                    if (a._.CurrentTask == TaskEnum.辊台任务 && a._.FinishTask == TaskEnum.辊台任务)
                    {
                        a.StopRoller();
                    }

                    if (Standby(area, tt == TaskTypeEnum.入库 ? TaskTypeEnum.出库 : TaskTypeEnum.入库, site))
                    {
                        if (a._.CurrentSite != site)
                        {
                            if (a._.ActionStatus == ActionEnum.停止)
                            {
                                a.ToSite(site);
                            }
                        }
                        else
                        {
                            res = true;
                        }
                    }
                }
                return(res);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
示例#11
0
        /// <summary>
        /// 是否有空闲摆渡车
        /// </summary>
        /// <returns></returns>
        public bool IsFreeARF(string area, TaskTypeEnum tt)
        {
            try
            {
                ChangeFlag(area);

                bool res = false;
                if (devices.Exists(c => c.area == area && c.taskType == tt && c.isUseful))
                {
                    DevInfoARF a = devices.Find(c => c.area == area && c.taskType == tt && c.isUseful);

                    if (ADS.mSocket.IsConnected(a.devName) &&
                        a._.CommandStatus != CommandEnum.命令错误 && a._.DeviceStatus != DeviceEnum.设备故障)
                    {
                        if (a._.CurrentTask == TaskEnum.辊台任务 && a._.FinishTask == TaskEnum.辊台任务)
                        {
                            a.StopRoller();
                        }
                        if (a.isLock)
                        {
                            if (a._.GoodsStatus == GoodsEnum.辊台无货 && a._.ActionStatus == ActionEnum.停止)
                            {
                                // 停止&解锁
                                a.StopTask();
                                a.IsLockUnlock(false);
                                res = true;
                            }
                        }
                        else
                        {
                            res = true;
                        }
                    }
                }
                return(res);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
示例#12
0
        public void Update()
        {
            bool con = ADS.mSocket.IsConnected(DevName);

            DevInfoARF arf = ADS.mArf.devices.Find(c => c.devName == DevName);

            if (isconnect != con)
            {
                IsConnected = con;
            }

            if (isUseful != arf.isUseful)
            {
                IsUseful = arf.isUseful;
            }

            if (!con)
            {
                return;
            }

            if (actionsta != arf._.ActionStatus)
            {
                ActionStatus = arf._.ActionStatus;
            }

            if (devicesta != arf._.DeviceStatus)
            {
                DeviceStatus = arf._.DeviceStatus;
            }

            if (commandsta != arf._.CommandStatus)
            {
                CommandStatus = arf._.CommandStatus;
            }

            if (currenttask != arf._.CurrentTask)
            {
                CurrentTask = arf._.CurrentTask;
            }

            if (finishtask != arf._.FinishTask)
            {
                FinishTask = arf._.FinishTask;
            }

            if (site != arf._.CurrentSite)
            {
                CurrentSite = arf._.CurrentSite;
            }

            if (rollersta != arf._.RollerStatus)
            {
                RollerStatus = arf._.RollerStatus;
            }

            if (rollerdir != arf._.RollerDiretion)
            {
                RollerDiretion = arf._.RollerDiretion;
            }

            if (goodstatus != arf._.GoodsStatus)
            {
                GoodsStatus = arf._.GoodsStatus;
            }

            if (errormsg != arf._.ErrorMessage)
            {
                ErrorMessage = arf._.ErrorMessage;
            }

            UpdateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        }
示例#13
0
        /// <summary>
        /// 摆渡车是否到位
        /// </summary>
        public bool IsArfOk(string area, TaskTypeEnum tt, int site)
        {
            try
            {
                bool res = false;
                if (devices.Exists(c => c.area == area && c.taskType == tt && c.isUseful && c.isLock))
                {
                    DevInfoARF arf = devices.Find(c => c.area == area && c.taskType == tt && c.isUseful && c.isLock);
                    if (arf._.ActionStatus == ActionEnum.停止 || ADS.mSocket.IsConnected(arf.devName) ||
                        arf._.CommandStatus == CommandEnum.命令正常 || arf._.DeviceStatus == DeviceEnum.设备正常)
                    {
                        if (arf._.CurrentSite == site)
                        {
                            res = true;
                        }
                        else
                        {
                            int safe = ADS.mDis.GetArfSafeDis(area);
                            if (devices.Exists(c => c.area == area && c.taskType != tt && !c.isLock))
                            {
                                DevInfoARF a = devices.Find(c => c.area == area && c.taskType != tt && !c.isLock);
                                if (ADS.mSocket.IsConnected(a.devName) || a._.CommandStatus == CommandEnum.命令正常 || a._.DeviceStatus == DeviceEnum.设备正常)
                                {
                                    int loc = 0;
                                    switch (a.taskType)
                                    {
                                    case TaskTypeEnum.入库:
                                        loc = ADS.mDis.GetArfStandByP1(area);
                                        if (a._.CurrentSite <= (site - safe))
                                        {
                                            arf.ToSite(site);
                                        }
                                        else if (a._.ActionStatus == ActionEnum.停止)
                                        {
                                            a.ToSite(loc);
                                        }
                                        break;

                                    case TaskTypeEnum.出库:
                                        loc = ADS.mDis.GetArfStandByP2(area);
                                        if (a._.CurrentSite >= (site + safe))
                                        {
                                            arf.ToSite(site);
                                        }
                                        else if (a._.ActionStatus == ActionEnum.停止)
                                        {
                                            a.ToSite(loc);
                                        }
                                        break;

                                    default:
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }

                return(res);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
示例#14
0
        /// <summary>
        /// 锁定摆渡车
        /// </summary>
        /// <returns></returns>
        public bool LockARF(string area, TaskTypeEnum tt)
        {
            try
            {
                ChangeFlag(area);

                bool res = false;
                if (devices.Exists(c => c.isUseful && c.area == area && c.taskType == tt))
                {
                    DevInfoARF a = devices.Find(c => c.isUseful && c.area == area && c.taskType == tt);
                    if (ADS.mSocket.IsConnected(a.devName) &&
                        a._.CommandStatus == CommandEnum.命令正常 && a._.DeviceStatus == DeviceEnum.设备正常)
                    {
                        if (a._.CurrentTask == TaskEnum.辊台任务 && a._.FinishTask == TaskEnum.辊台任务)
                        {
                            a.StopRoller();
                        }
                        if (a._.GoodsStatus == GoodsEnum.辊台无货)
                        {
                            if (a._.ActionStatus == ActionEnum.停止)
                            {
                                res = true;
                            }
                        }
                        else
                        {
                            if (a.isLock)
                            {
                                res = true;
                            }
                            else
                            {
                                bool run = false;
                                switch (tt)
                                {
                                case TaskTypeEnum.入库:
                                    if ((a._.GoodsStatus == GoodsEnum.辊台满货 && a._.RollerStatus == RollerStatusEnum.辊台停止) ||
                                        (a._.GoodsStatus == GoodsEnum.辊台1有货 &&
                                         a._.RollerStatus != RollerStatusEnum.辊台1启动 && a._.RollerStatus != RollerStatusEnum.辊台全启动))
                                    {
                                        run = true;
                                    }
                                    break;

                                case TaskTypeEnum.出库:
                                    if ((a._.GoodsStatus == GoodsEnum.辊台满货 && a._.RollerStatus == RollerStatusEnum.辊台停止) ||
                                        (a._.GoodsStatus == GoodsEnum.辊台2有货 &&
                                         a._.RollerStatus != RollerStatusEnum.辊台2启动 && a._.RollerStatus != RollerStatusEnum.辊台全启动))
                                    {
                                        run = true;
                                    }
                                    break;

                                default:
                                    break;
                                }
                                if (run)
                                {
                                    // 停止 & 锁定
                                    a.StopTask();
                                    a.IsLockUnlock(true);
                                    res = true;
                                }
                                else
                                {
                                    if (a._.ActionStatus == ActionEnum.停止)
                                    {
                                        a.StartTakeRoll(tt, 2);
                                    }
                                }
                            }
                        }
                    }
                }
                return(res);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
示例#15
0
        /// <summary>
        /// 改变属性
        /// </summary>
        /// <param name="area"></param>
        private void ChangeFlag(string area)
        {
            try
            {
                if (devices == null || devices.Count == 0)
                {
                    return;
                }

                if (devices.Exists(c => c.area == area && c.isUseful))
                {
                    if (devices.FindAll(c => c.area == area && c.isUseful).Count == 1)
                    {
                        DevInfoARF a = devices.Find(c => c.area == area && c.isUseful);
                        if (!ADS.mSocket.IsConnected(a.devName) || a.isLock ||
                            a._.ActionStatus == ActionEnum.运行中 || a._.GoodsStatus != GoodsEnum.辊台无货)
                        {
                            return;
                        }

                        if (PublicParam.IsDoJobIn && !PublicParam.IsDoJobOut)
                        {
                            if (a.taskType == TaskTypeEnum.入库)
                            {
                                return;
                            }

                            // 判断当前运输车任务
                            if (ADS.mRgv.GetNowTaskType(area) != TaskTypeEnum.出库)
                            {
                                a.UpdateFlag(TaskTypeEnum.入库);
                            }
                        }
                        else if (!PublicParam.IsDoJobIn && PublicParam.IsDoJobOut)
                        {
                            if (a.taskType == TaskTypeEnum.出库)
                            {
                                return;
                            }

                            a.UpdateFlag(TaskTypeEnum.出库);
                        }
                    }
                    else
                    {
                        if (devices.FindAll(c => c.area == area && c.taskType == TaskTypeEnum.入库).Count != 1 ||
                            devices.FindAll(c => c.area == area && c.taskType == TaskTypeEnum.出库).Count != 1)
                        {
                            DevInfoARF a1 = devices.Find(c => c.area == area);
                            DevInfoARF a2 = devices.Find(c => c.area == area && c.devName != a1.devName);
                            if (a1._.CurrentSite == 0 || a2._.CurrentSite == 0)
                            {
                                throw new Exception(area + " 区域有摆渡车无效坐标0!");
                            }

                            if (a1._.GoodsStatus != GoodsEnum.辊台无货 || a2._.GoodsStatus != GoodsEnum.辊台无货)
                            {
                                throw new Exception(area + " 区域有停启摆渡车有货,无法分配属性!");
                            }

                            if (a1._.CurrentSite <= a2._.CurrentSite)
                            {
                                a1.UpdateFlag(TaskTypeEnum.入库);
                                a2.UpdateFlag(TaskTypeEnum.出库);
                            }
                            else
                            {
                                a1.UpdateFlag(TaskTypeEnum.出库);
                                a2.UpdateFlag(TaskTypeEnum.入库);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }