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

            if (!_isStart)
            {
                if (++_triggerCounter > F_DataCenter.ClearTime)
                {
                    _isOverTime = true;
                }
            }

            if (_agv != null)
            {
                if (_agv.IsAlive)
                {
                    _disAliveCounter = 0;
                }
                else
                {
                    if (++_disAliveCounter > F_DataCenter.ClearTime)
                    {
                        _isDisaliveOverTime = true;
                    }
                }
            }
            else
            {
                if (++_triggerCounter > F_DataCenter.ClearTime)
                {
                    _isOverTime = true;
                }
            }

            _taskDispatch = WcfMainHelper.GetDispatch(Id);

            if (_taskDispatch == null)
            {
                FDispatchOrder dis = new FDispatchOrder();

                dis.NavigationType = EnumNavigationType.Magnet;

                dis.Id = Id;

                dis.EndSite = _endSite;

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

                ///修改By fujun
                dis.DevList.Add(Id);

                string back = "";

                WcfMainHelper.StartDispatch(dis, out back);

                return(back);
            }
            else
            {
                ///修改By fujun
                _isStart = true;

                #region 滚筒逻辑
                ///确定此时任务的AGV
                if (_agv == null)
                {
                    _agv = new F_AGV(_taskDispatch.Dev);
                }

                ///此次调度任务已经完成
                if (_taskDispatch.Statue == EnumResultType.Suc)
                {
                    if (_operType == EnumOper.取货)       //窑尾
                    {
                        ///当前AGV的到达的地标 与 棍台绑定地标一致
                        if (_agv.Site == _plc.Site)
                        {
                            FLog.Log(_agv.Id + "到达窑尾,开始取货");
                            if (_agv != null && _plc.EnterChargeAgv == _agv.Id)
                            {
                                if (_plc.IsEnterBatteryLock
                                    //&& !ParamControl.Do_EnterEndChargeLock
                                    )
                                {
                                    _plc.IsEnterBatteryLock = false;

                                    ParamControl.Do_EnterEndChargeLock = true;

                                    ParamControl.EndChargeLock = _plc.IsEnterBatteryLock;

                                    _plc.EnterChargeAgv = null;
                                }
                            }

                            //如果界面打开忽略《窑尾》AGV货物状态和Plc货物状态则 直接发送棍台转动命令
                            if (ParamControl.Is_IgnoreTailUnloadStatus ||
                                (_plc.Sta_Material == EnumSta_Material.货 &&
                                 (_agv.Sta_Material == EnumagvSta_Material.无货 || _agv.Sta_Material == EnumagvSta_Material.送中)))
                            {
                                if (_agv.Sta_Monitor != EnumSta_Monitor.电机反转)
                                {
                                    _agv.SendOrdr(EnumType.料操作, EnumPara.agv上料启动);
                                    FLog.Log(_agv.Id + "启动车载辊台");
                                }
                                else
                                {
                                    if (BeginTime == null)
                                    {
                                        BeginTime = System.DateTime.Now;
                                    }
                                    _agv.SendOrdr(EnumType.料操作, EnumPara.agv上料启动);

                                    _plc.SendOrdr(EnumType.料操作, EnumPara.窑尾辊台允许下料);

                                    FLog.Log(_agv.Id + "启动车载辊台,启动窑尾辊台");
                                }
                            }

                            //如果界面打开忽略《窑尾》AGV货物状态,并且上面已经发送了指定时间的棍台转动时间
                            if ((ParamControl.Is_IgnoreTailUnloadStatus && IsTailRunTimeFinish()) ||
                                (//_plc.Sta_Material == EnumSta_Material.无货  &&
                                    _agv.Sta_Material == EnumagvSta_Material.货))
                            {
                                _agv.SendOrdr(EnumType.料操作, EnumPara.agv辊台停止);

                                _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台上料完成);
                                FLog.Log(_agv.Id + "停止车载辊台,停止窑尾辊台");
                                //如果界面打开忽略《窑尾》AGV棍台状态,则进去结束任务
                                if (ParamControl.Is_IgnoreTailStaStatus ||
                                    _agv.Sta_Monitor == EnumSta_Monitor.电机停止
                                    )
                                {
                                    //取货完成,解锁窑尾
                                    if (_plc != null
                                        // && !ParamControl.Do_EndPlcLock
                                        )
                                    {
                                        _plc.IsLock = false;

                                        ParamControl.Do_EndPlcLock = true;
                                    }

                                    ISetTaskSuc();
                                }
                            }
                        }
                        else
                        {
                            ISetTaskSuc();
                        }
                        return("");
                    }
                    else if (_operType == EnumOper.放货)      //窑头
                    {
                        ///当前AGV的到达的地标 与 棍台绑定地标一致
                        if (_agv.Site == _plc.Site)
                        {
                            FLog.Log(_agv.Id + "到达窑头,开始放货");
                            if (_agv != null && _plc.EnterChargeAgv == _agv.Id)
                            {
                                if (_plc.IsEnterBatteryLock
                                    )
                                {
                                    _plc.IsEnterBatteryLock = false;

                                    _plc.EnterChargeAgv = null;
                                }
                            }
                            //如果界面打开忽略《窑头》AGV货物状态和Plc货物状态则 直接发送棍台转动命令
                            if (ParamControl.Is_IgnoreHeadUnloadStatus ||
                                ((_plc.Sta_Material == EnumSta_Material.允许下料 || _plc.Sta_Material == EnumSta_Material.无货 ||
                                  _plc.Sta_Material == EnumSta_Material.未知) &&
                                 (_agv.Sta_Material == EnumagvSta_Material.送中 || _agv.Sta_Material == EnumagvSta_Material.货)))
                            {
                                if (_agv.Sta_Monitor != EnumSta_Monitor.电机反转)
                                {
                                    _agv.SendOrdr(EnumType.料操作, EnumPara.agv下料启动);
                                    FLog.Log(_agv.Id + "启动车载辊台");
                                }
                                else
                                {
                                    if (BeginTime == null)
                                    {
                                        BeginTime = System.DateTime.Now;
                                    }
                                    _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台上料中);

                                    _agv.SendOrdr(EnumType.料操作, EnumPara.agv下料启动);
                                    FLog.Log(_agv.Id + "启动车载辊台,启动窑头辊台");
                                }
                            }

                            //如果界面打开忽略《窑头》AGV货物状态,并且上面已经发送了指定时间的棍台转动时间
                            if ((ParamControl.Is_IgnoreHeadUnloadStatus && IsHeadRunTimeFinish()) ||
                                (//(_plc.Sta_Material == EnumSta_Material.允许下料 || _plc.Sta_Material == EnumSta_Material.未知) &&
                                    _agv.Sta_Material == EnumagvSta_Material.无货))
                            {
                                _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台上料完成);

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

                                FLog.Log(_agv.Id + "停止车载辊台,停止窑头辊台");
                                //如果界面打开忽略《窑头》AGV棍台状态,则进去结束任务
                                if (ParamControl.Is_IgnoreHeadStaStatus ||
                                    _agv.Sta_Monitor == EnumSta_Monitor.电机停止
                                    )
                                {
                                    //放货完成,解锁窑头
                                    if (_plc != null
                                        //&& !ParamControl.Do_HeadPlcLock
                                        )
                                    {
                                        _plc.IsLock = false;

                                        ParamControl.Do_HeadPlcLock = true;
                                    }

                                    ISetTaskSuc();
                                }
                            }
                        }
                        else
                        {
                            ISetTaskSuc();
                        }
                        return("");
                    }
                    else if (_operType == EnumOper.充电)
                    {
                        if (!_plc.ExitFlag)
                        {
                            _plc.ExitFlag = true;
                        }
                        ISetTaskSuc();

                        return("");
                    }
                    else if (_operType == EnumOper.无动作)
                    {
                        ISetTaskSuc();

                        return("");
                    }
                    else if (_operType == EnumOper.对接完成)
                    {
                        if (_plc.IsExitBatteryLock && _plc.ExitChargeAgv == _agv.Id)
                        {
                            if (_plc.Site == "14")
                            {
                                ParamControl.Do_ExitHeadChargeLock = true;
                            }
                            //else if (_plc.Site == "11")
                            //{
                            //    ParamControl.Do_ExitEndChargeLock = true ;
                            //}

                            _plc.IsExitBatteryLock = false;

                            _plc.ExitChargeAgv = null;

                            ParamControl.HeadChargeAGV  = _plc.ExitChargeAgv;
                            ParamControl.HeadChargeLock = _plc.IsExitBatteryLock;
                        }

                        if (!_plc.ExitFlag)
                        {
                            _plc.ExitFlag = true;
                        }
                        ISetTaskSuc();
                        return("");
                    }
                }
                return("");

                #endregion
            }
        }
Exemple #2
0
        /// <summary>
        /// 事务处理
        /// </summary>
        public String DoWork()
        {
            if (_isSuc)
            {
                return("");
            }

            _taskDispatch = WcfMainHelper.GetDispatch(Id);

            if (_taskDispatch == null)
            {
                FDispatchOrder dis = new FDispatchOrder();

                dis.NavigationType = EnumNavigationType.Magnet;

                dis.Id = Id;

                dis.EndSite = _endSite;


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

                string back = "";

                WcfMainHelper.StartDispatch(dis, out back);

                return(back);
            }
            else
            {
                ///确定此时任务的AGV
                if (_agv == null)
                {
                    _agv = new F_AGV(_taskDispatch.Dev);
                }

                ///此次调度任务已经完成
                if (_taskDispatch.Statue == EnumResultType.Suc)
                {
                    if (_operType == EnumOper.取货)       //窑尾
                    {
                        ///当前AGV的到达的地标 与 棍台绑定地标一致
                        if (_agv.Site == _plc.Site)
                        {
                            if (_agv != null && _plc.EnterChargeAgv == _agv.Id)
                            {
                                if (_plc.IsEnterBatteryLock)
                                {
                                    _plc.IsEnterBatteryLock = false;
                                }
                            }

                            //如果界面打开忽略《窑尾》AGV货物状态和Plc货物状态则 直接发送棍台转动命令
                            if (ParamControl.Is_IgnoreTailUnloadStatus ||
                                (_plc.Sta_Material == EnumSta_Material.货 &&
                                 (_agv.Sta_Material == EnumSta_Material.无货 || _agv.Sta_Material == EnumSta_Material.送中)))
                            {
                                if (BeginTime == null)
                                {
                                    BeginTime = System.DateTime.Now;
                                }
                                _agv.SendOrdr(EnumType.料操作, EnumPara.agv上料启动);

                                _plc.SendOrdr(EnumType.料操作, EnumPara.窑尾辊台允许下料);
                            }

                            //如果界面打开忽略《窑尾》AGV货物状态,并且上面已经发送了指定时间的棍台转动时间
                            if ((ParamControl.Is_IgnoreTailUnloadStatus && IsTailRunTimeFinish()) ||
                                (_plc.Sta_Material == EnumSta_Material.无货 && _agv.Sta_Material == EnumSta_Material.货))
                            {
                                _agv.SendOrdr(EnumType.料操作, EnumPara.agv辊台停止);

                                _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台上料完成);

                                //如果界面打开忽略《窑尾》AGV棍台状态,则进去结束任务
                                if (ParamControl.Is_IgnoreTailStaStatus ||
                                    _agv.Sta_Monitor == EnumSta_Monitor.电机停止
                                    )
                                {
                                    ISetTaskSuc();
                                }
                            }
                        }
                        return("");
                    }
                    else if (_operType == EnumOper.放货)      //窑头
                    {
                        ///当前AGV的到达的地标 与 棍台绑定地标一致
                        if (_agv.Site == _plc.Site)
                        {
                            if (_agv != null && _plc.EnterChargeAgv == _agv.Id)
                            {
                                if (_plc.IsEnterBatteryLock)
                                {
                                    _plc.IsEnterBatteryLock = false;
                                }
                            }

                            //如果界面打开忽略《窑头》AGV货物状态和Plc货物状态则 直接发送棍台转动命令
                            if (ParamControl.Is_IgnoreHeadUnloadStatus ||
                                ((_plc.Sta_Material == EnumSta_Material.货 || _plc.Sta_Material == EnumSta_Material.无货) &&
                                 (_agv.Sta_Material == EnumSta_Material.送中 || _agv.Sta_Material == EnumSta_Material.货)))
                            {
                                if (BeginTime == null)
                                {
                                    BeginTime = System.DateTime.Now;
                                }
                                _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台上料中);

                                _agv.SendOrdr(EnumType.料操作, EnumPara.agv下料启动);
                            }

                            //如果界面打开忽略《窑头》AGV货物状态,并且上面已经发送了指定时间的棍台转动时间
                            if ((ParamControl.Is_IgnoreHeadUnloadStatus && IsHeadRunTimeFinish()) ||
                                (_plc.Sta_Material == EnumSta_Material.货 &&
                                 _agv.Sta_Material == EnumSta_Material.无货))
                            {
                                _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台上料完成);

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

                                //如果界面打开忽略《窑头》AGV棍台状态,则进去结束任务
                                if (ParamControl.Is_IgnoreHeadStaStatus ||
                                    _agv.Sta_Monitor == EnumSta_Monitor.电机停止
                                    )
                                {
                                    ISetTaskSuc();
                                }
                            }
                        }
                        return("");
                    }
                    else if (_operType == EnumOper.充电)
                    {
                        ISetTaskSuc();
                        return("");
                    }
                    else if (_operType == EnumOper.无动作)
                    {
                        ISetTaskSuc();
                        return("");
                    }
                    else if (_operType == EnumOper.对接完成)
                    {
                        if (_plc.IsExitBatteryLock && _plc.ExitChargeAgv == _agv.Id)
                        {
                            _plc.IsExitBatteryLock = false;
                        }
                        if (_plc.ExitFlag)
                        {
                            _plc.ExitFlag = true;
                        }
                        ISetTaskSuc();
                        return("");
                    }
                }
                return("");
            }
        }