예제 #1
0
        /// <summary>
        /// 是否存在未装货任务
        /// </summary>
        /// <param name="taskid"></param>
        /// <returns></returns>
        public int IsExistLoad(string loadSite)
        {
            int id = 0;

            if (!string.IsNullOrEmpty(loadSite))
            {
                NDCItem item = Items.Find(c =>
                {
                    return(c._mTask.LOADSITE == loadSite && c.PLCStatus <= NDCPlcStatus.Loading);
                });

                if (item != null)
                {
                    id = item._mTask.TASKID;
                }
            }
            return(id);
        }
예제 #2
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="ndcItem"></param>
 private void CheckCanUpdateTaskList(NDCItem ndcItem)
 {
     if (ndcItem._mTask.IKEY != 0 && ndcItem._mTask.ORDERINDEX != 0 && ndcItem._mTask.TASKID != 0)
     {
         if (TaskGridUpdate != null)
         {
             TaskGridUpdate(ndcItem);
         }
         else
         {
             if (_initItems.Contains(ndcItem))
             {
                 return;
             }
             _initItems.Add(ndcItem);
         }
     }
 }
예제 #3
0
 /// <summary>
 /// 检查AGV 棍台消息任务
 /// </summary>
 /// <param name="item"></param>
 /// <param name="v"></param>
 private void CheckPlc(NDCItem item, Message_vpil v)
 {
     Console.WriteLine("PLC:" + v.PlcLp1 + " Value:" + v.Value1);
     if (v.PlcLp1 == 29 && v.Value1 == 1)
     {
         //装货中
         item.PLCStatus = NDCPlcStatus.Loading;
         LoadItemList.Remove(item._mTask.NDCINDEX);
         //通知WCS
         _NoticeWcsLoading(item._mTask.TASKID, item.CARRIERID + "");
     }
     else if (v.PlcLp1 == 29 && v.Value1 == 2)
     {
         //卸货中
         item.PLCStatus = NDCPlcStatus.Unloading;
         UnLoadItemList.Remove(item._mTask.NDCINDEX);
     }
 }
예제 #4
0
        /// <summary>
        /// 更新S消息
        /// </summary>
        /// <param name="message"></param>
        internal override void UpdateItem(Message_s message)
        {
            try
            {
                //找出被挂起的任务的重定向站点,重新重定向任务
                if (message.Magic == 32) //32  Carwash sends this request
                {                        //TODO Carwash 重定向
                    DoCarWashReDirect(message);
                    return;
                }
                NDCItem ndcItem = Items.Find(c => { return(c._mTask.NDCINDEX == message.Index); });
                if (ndcItem == null)
                {
                    ndcItem = TempItems.Find(c => { return(c._mTask.NDCINDEX == message.Index); });

                    if (ndcItem != null)
                    {
                        ndcItem.CARRIERID = message.CarrierNumber;
                    }
                    else
                    {
                        ndcItem                 = new NDCItem();
                        ndcItem.CARRIERID       = message.CarrierNumber;
                        ndcItem._mTask.NDCINDEX = message.Index;
                        TempItems.Add(ndcItem);
                    }
                }
                ndcItem.SetSMessage(message);
                if (ndcItem.StatusInfo != "")
                {
                    Console.WriteLine(ndcItem.StatusInfo);
                    log.LOG(ndcItem.StatusInfo);
                }
                CheckMagic(ndcItem, message);

                _NoticeUpdate(ndcItem);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                log.LOG(e.Message);
            }
        }
예제 #5
0
 public void Update(NDCItem item)
 {
     if (taskid != item._mTask.TASKID)
     {
         TaskID = item._mTask.TASKID;
     }
     if (ikey != item._mTask.IKEY)
     {
         IKey = item._mTask.IKEY;
     }
     if (order != item._mTask.NDCINDEX)
     {
         Order = item._mTask.NDCINDEX;
     }
     if (agvname != item.CARRIERID)
     {
         AgvName = item.CARRIERID;
     }
     if (loadsite != item._mTask.LOADSITE)
     {
         LoadSite = item._mTask.LOADSITE;
     }
     if (unloadsite != item._mTask.UNLOADSITE)
     {
         UnLoadSite = item._mTask.UNLOADSITE;
     }
     if (redirectsite != item._mTask.REDIRECTSITE)
     {
         RedirectSite = item._mTask.REDIRECTSITE;
     }
     if (hasload != item._mTask.HADLOAD)
     {
         HasLoad = item._mTask.HADLOAD;
     }
     if (pause != item._mTask.PAUSE)
     {
         pause = item._mTask.PAUSE;
         Pause = "";
     }
 }
예제 #6
0
 public void Update(NDCItem item)
 {
     if (taskid != item._mTask.TASKID)
     {
         TaskID = item._mTask.TASKID;
     }
     if (ikey != item._mTask.IKEY)
     {
         IKey = item._mTask.IKEY;
     }
     if (order != item._mTask.ORDERINDEX)
     {
         Order = item._mTask.ORDERINDEX;
     }
     if (agvname != item.CarrierId)
     {
         AgvName = item.CarrierId;
     }
     if (loadsite != item._mTask.LOADSITE)
     {
         LoadSite = item._mTask.LOADSITE;
     }
     if (unloadsite != item._mTask.UNLOADSITE)
     {
         UnLoadSite = item._mTask.UNLOADSITE;
     }
     if (redirectsite != item._mTask.REDIRECTSITE)
     {
         RedirectSite = item._mTask.REDIRECTSITE;
     }
     if (hasload = item._mTask.HADLOAD)
     {
         HasLoad = item._mTask.HADLOAD;
     }
     if (hasunload = item._mTask.HADUNLOAD)
     {
         HasUnLoad = item._mTask.HADUNLOAD;
     }
 }
예제 #7
0
        /// <summary>
        /// 检查任务状态
        /// </summary>
        /// <param name="status"></param>
        private void CheckStatus(NDCItem item, Message_b b)
        {
            switch (item.Status)
            {
            case 37:     //小车已经分配
                item.CarrierId = b.ParNo;
                break;

            case 3:    //任务完成
                item.IsFinish   = true;
                item.finishTime = DateTime.Now;
                break;

            case 27:    //IKEY in use
                TempItem temp = TempList.Find(c => { return(c.IKey.Equals("" + item._mTask.IKEY)); });
                if (temp != null)
                {
                    temp.IKey = Ikey++;
                    DoStartOrder(temp);
                }
                break;
            }
        }
예제 #8
0
        /// <summary>
        /// 更新B消息
        /// </summary>
        /// <param name="message"></param>
        internal override void UpdateItem(Message_b message)
        {
            try
            {
                NDCItem ndcItem = Items.Find(c => { return(c._mTask.NDCINDEX == message.Index); });
                if (ndcItem == null)
                {
                    ndcItem = TempItems.Find(c => { return(c._mTask.NDCINDEX == message.Index); });
                    if (ndcItem != null)
                    {
                        ndcItem._mTask.IKEY = message.IKEY;
                    }
                    else
                    {
                        ndcItem                 = new NDCItem();
                        ndcItem._mTask.IKEY     = message.IKEY;
                        ndcItem._mTask.NDCINDEX = message.Index;
                        TempItems.Add(ndcItem);
                    }
                }
                ndcItem.SetBMessage(message);
                if (ndcItem.TaskInfo != "")
                {
                    Console.WriteLine(ndcItem.TaskInfo);
                    log.LOG(ndcItem.TaskInfo);
                }
                CheckStatus(ndcItem, message);

                _NoticeUpdate(ndcItem);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                log.LOG(e.Message);
            }
        }
예제 #9
0
        /// <summary>
        /// 将任务状态置为挂起/执行
        /// </summary>
        /// <param name="i"></param>
        /// <param name="v"></param>
        public void PauseNdcTask(NDCItem i, bool v)
        {
            string sql = string.Format(@"update WCS_NDC_TASK set PAUSE = '{0}' where TASKID = '{1}'", v ? Yes : No, i._mTask.TASKID);

            mysql.ExcuteSql(sql);
        }
예제 #10
0
 internal override void _NoticeDelete(NDCItem i)
 {
     NoticeDelete?.Invoke(i);
 }
예제 #11
0
 internal override void _NoticeRedirect(NDCItem i)
 {
     NoticeRedirect?.Invoke(i);
 }
예제 #12
0
        /// <summary>
        /// 检查任务进程
        /// </summary>
        /// <param name="index"></param>
        /// <param name="magic"></param>
        private void CheckMagic(NDCItem item, Message_s s)
        {
            int index = item._mTask.ORDERINDEX;

            switch (item.Magic)
            {
            case 2:    //确定生成任务
                item._mTask.NDCLOADSITE   = item.s.Magic2 + "";
                item._mTask.NDCUNLOADSITE = item.s.Magic3 + "";
                break;

            case 4:     //小车到达接货点
                if (item.DirectStatus != NDCItemStatus.HasDirectInfo)
                {
                    item.DirectStatus = NDCItemStatus.CanRedirect;
                }
                if (!ReDirectList.Contains(item._mTask.ORDERINDEX))
                {
                    ReDirectList.Add(item._mTask.ORDERINDEX);
                }
                //TODO 告诉WCS 车已经到达

                //准备好装货了
                item.PLCStatus = NDCPlcStatus.LoadReady;
                break;

            case 6:     //小车接货完成
                if (item.DirectStatus == NDCItemStatus.CanRedirect || item.DirectStatus == NDCItemStatus.Init)
                {
                    if (item.HadDirectInfo)
                    {
                        item.DirectStatus = NDCItemStatus.HasDirectInfo;
                    }
                    else
                    {
                        item.DirectStatus = NDCItemStatus.NeedRedirect;
                    }
                }

                if (!ReDirectList.Contains(item._mTask.ORDERINDEX))
                {
                    ReDirectList.Add(item._mTask.ORDERINDEX);
                }

                //装货完成
                item.PLCStatus      = NDCPlcStatus.Loaded;
                item._mTask.HADLOAD = true;

                if (item.DirectStatus == NDCItemStatus.NeedRedirect)
                {
                    NoticeRedirect?.Invoke(item);
                }
                break;

            case 254:    //重新定位成功
                item.DirectStatus = NDCItemStatus.Redirected;
                ReDirectList.Remove(item._mTask.ORDERINDEX);
                break;

            case 8:    //到达卸货点

                //准备好卸货了
                item.PLCStatus = NDCPlcStatus.UnloadReady;
                break;

            case 10:    //卸货完成

                //卸货完成
                item.PLCStatus        = NDCPlcStatus.Unloaded;
                item._mTask.HADUNLOAD = true;
                break;

            case 11:    //任务完成
                item.IsFinish   = true;
                item.finishTime = DateTime.Now;
                break;

            default:
                break;
            }
            GetTempInfo(item);
        }
예제 #13
0
 internal abstract void _NoticeRedirect(NDCItem model);
예제 #14
0
 internal abstract void _NoticeUpdate(NDCItem model);
예제 #15
0
 internal abstract void _NoticeDelete(NDCItem model);
예제 #16
0
        /// <summary>
        /// 重新读取装货点,卸货点对应NDC实际使用信息
        /// </summary>
        public void DoReadSQL()
        {
            try
            {
                NDCSQLControl control = new NDCSQLControl();
                control.ReadWcsNdcSite(out loadStaDic, out unLoadStaDic);

                control.ReadNDCServerAndIKEY(out IPaddress, out Port, out Ikey);

                if (control.ReadUnFinishTask(out List <WCS_NDC_TASK> list))
                {
                    foreach (var i in list)
                    {
                        if (i.ORDERINDEX == 0)
                        {
                            TempItem item = TempList.Find(c => { return(c.TaskID == i.TASKID || c.IKey == i.IKEY); });
                            if (item == null)
                            {
                                TempList.Add(new TempItem()
                                {
                                    TaskID          = i.TASKID,
                                    IKey            = i.IKEY,
                                    LoadSite        = i.LOADSITE,
                                    UnloadSite      = i.UNLOADSITE,
                                    RedirectSite    = i.REDIRECTSITE,
                                    NdcLoadSite     = i.NDCLOADSITE,
                                    NdcUnloadSite   = i.NDCUNLOADSITE,
                                    NdcRedirectSite = i.NDCREDIRECTSITE
                                });
                            }
                        }
                        else
                        {
                            NDCItem item = Items.Find(c =>
                            {
                                return(c._mTask.IKEY == i.IKEY || c._mTask.TASKID == i.TASKID ||
                                       c._mTask.ORDERINDEX == i.ORDERINDEX);
                            });
                            if (item != null)
                            {
                                item._mTask = i;
                            }
                            else
                            {
                                NDCItem it = new NDCItem()
                                {
                                    _mTask = i
                                };
                                Items.Add(it);
                                CheckCanUpdateTaskList(it);
                            }
                        }
                    }

                    control.DelectUnFinishTaskAfter();
                }
            }catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
예제 #17
0
        /// <summary>
        /// 检查任务进程
        /// </summary>
        /// <param name="index"></param>
        /// <param name="magic"></param>
        private void CheckMagic(NDCItem item, Message_s s)
        {
            int index = item._mTask.NDCINDEX;

            switch (item.Magic)
            {
            case 2:    //确定生成任务
                item._mTask.NDCLOADSITE   = s.Magic2 + "";
                item._mTask.NDCUNLOADSITE = s.Magic3 + "";
                break;

            case 5:
                #region 小车到达接货点
                if (item.DirectStatus != NDCItemStatus.HasDirectInfo)
                {
                    item.DirectStatus = NDCItemStatus.CanRedirect;
                }
                if (!ReDirectList.Contains(item._mTask.NDCINDEX))
                {
                    ReDirectList.Add(item._mTask.NDCINDEX);
                }

                //准备好装货了
                item.PLCStatus = NDCPlcStatus.LoadReady;
                #endregion
                break;

            case 6:
                #region 小车接货完成
                if (item.DirectStatus == NDCItemStatus.CanRedirect || item.DirectStatus == NDCItemStatus.Init)
                {
                    if (item.HadDirectInfo)
                    {
                        item.DirectStatus = NDCItemStatus.HasDirectInfo;
                    }
                    else
                    {
                        item.DirectStatus = NDCItemStatus.NeedRedirect;
                    }
                }

                if (!ReDirectList.Contains(item._mTask.NDCINDEX))
                {
                    ReDirectList.Add(item._mTask.NDCINDEX);
                }

                //装货完成
                item.PLCStatus      = NDCPlcStatus.Loaded;
                item._mTask.HADLOAD = true;

                if (item.DirectStatus == NDCItemStatus.NeedRedirect)
                {
                    _NoticeRedirect(item);
                }
                #endregion
                break;

            case 254:    //重新定位成功
                item.DirectStatus = NDCItemStatus.Redirected;
                ReDirectList.Remove(item._mTask.NDCINDEX);
                break;

            case 9:    //到达卸货点

                //准备好卸货了
                item.PLCStatus = NDCPlcStatus.UnloadReady;
                break;

            case 10:    //卸货完成

                item.PLCStatus        = NDCPlcStatus.Unloaded;
                item._mTask.HADUNLOAD = true;
                break;

            case 255:                       //取消任务
            case 48:                        //取消任务
                if (!item.CancleFromSystem) //Carwash
                {
                    item._mTask.PAUSE = true;
                }
                break;

            case 11:    //任务完成
                if (item.PLCStatus != NDCPlcStatus.Unloaded && item._mTask.PAUSE)
                {
                    item.IsFinish = false;
                    //装货前 取消任务不用恢复,只需重新呼叫AGV
                    if (!item._mTask.HADLOAD && !item._mTask.HADUNLOAD)
                    {
                        item.BeforeReCall(Ikey++);
                        DoStartOrder(item);
                        log.LOG(item._mTask.TASKID + ":任务车出现问题,现在重新呼叫AGV");
                    }
                }
                else
                {
                    item.IsFinish   = true;
                    item.finishTime = DateTime.Now;
                }
                break;

            default:
                break;
            }
            MatchTempInfo(item);
        }
예제 #18
0
        /// <summary>
        /// 根据任务ID,重新定位卸货地点
        /// </summary>
        /// <param name="taskid"></param>
        /// <param name="unloadstation"></param>
        /// <returns></returns>
        public bool DoReDerect(int taskid, string unloadstation, out string result, int order = -1)
        {
            NDCItem item = Items.Find(c =>
            {
                return(c._mTask.TASKID == taskid && (order == -1 || c._mTask.ORDERINDEX == order));
            });

            if (item == null)
            {
                TempItem temp = TempList.Find(c => { return(c.TaskID == taskid); });
                if (temp != null)
                {
                    if (unLoadStaDic.TryGetValue(unloadstation, out string ndcUnloadSta))
                    {
                        temp.RedirectSite    = unloadstation;
                        temp.NdcRedirectSite = ndcUnloadSta;
                    }
                    else
                    {
                        result = "该区域的对应关系还没有";
                        return(false);
                    }
                }
                else
                {
                    result = "并未找到任务ID为:" + taskid + "的任务";
                    return(false);
                }
            }
            else
            {
                if (item.DirectStatus == NDCItemStatus.Redirected)
                {
                    result = "任务已经重定位了";
                    return(false);
                }
                else
                {
                    if (unLoadStaDic.TryGetValue(unloadstation, out string ndcUnloadSta))
                    {
                        item._mTask.NDCREDIRECTSITE = ndcUnloadSta;
                        item._mTask.REDIRECTSITE    = unloadstation;
                        if (item.DirectStatus == NDCItemStatus.NeedRedirect)
                        {
                            item.DirectStatus = NDCItemStatus.HasDirectInfo;
                        }
                        else if (item.DirectStatus == NDCItemStatus.CanRedirect || item.DirectStatus == NDCItemStatus.Init)
                        {
                            item.HadDirectInfo = true;
                        }
                    }
                    else
                    {
                        result = "该区域的对应关系还没有";
                        return(false);
                    }
                }
                CheckCanUpdateTaskList(item);
            }

            result = "";
            return(true);
        }