Example #1
0
        /// <summary>
        /// 事务处理
        /// </summary>
        public void DoWork()
        {
            if (_isSuc)
            {
                return;
            }

            _taskDispatch = JTWcfHelper.WcfMainHelper.GetDispatch(Id);

            if (_taskDispatch == null)
            {
                DispatchOrderObj dis = new DispatchOrderObj(); dis.DisGuid = Id;

                dis.EndSite = _endSite;

                if (!string.IsNullOrEmpty(_startSite))
                {
                    dis.StartSiteList.Add(_startSite);
                }

                string back = "";

                JTWcfHelper.WcfMainHelper.StartDispatch(dis, out back);
            }
            else
            {
                ///确定此时任务的AGV
                if (_agv == null)
                {
                    _agv = new F_AGV(_taskDispatch.DisDevId);
                }

                ///此次调度任务已经完成
                if (_taskDispatch.OrderStatue == ResultTypeEnum.Suc)
                {
                    if (_operType == EnumOper.取货)
                    {
                        ///当前AGV的到达的地标 与 棍台绑定地标一致
                        if (_agv.Site == _plc.Site)
                        {
                            if (_plc.Sta_Material == EnumSta_Material.货 && _agv.Sta_Material == EnumSta_Material.无货)
                            {
                                _agv.SendOrdr(EnumType.料操作, EnumPara.反向启动);

                                _plc.SendOrdr(EnumType.料操作, EnumPara.正向启动);
                            }

                            if (_plc.Sta_Material == EnumSta_Material.无货 && _agv.Sta_Material == EnumSta_Material.货)
                            {
                                _agv.SendOrdr(EnumType.料操作, EnumPara.辊台停止);

                                _plc.SendOrdr(EnumType.料操作, EnumPara.辊台停止);

                                if (_plc.Sta_Monitor == EnumSta_Monitor.停止)
                                {
                                    ISetTaskSuc();
                                }
                            }
                        }
                    }
                    else if (_operType == EnumOper.放货)
                    {
                        ///当前AGV的到达的地标 与 棍台绑定地标一致
                        if (_agv.Site == _plc.Site)
                        {
                        }
                    }
                    else if (_operType == EnumOper.无动作)
                    {
                        ISetTaskSuc();
                    }
                }
            }
        }