Exemplo n.º 1
0
        /// <summary>
        /// 开启任务
        /// </summary>
        /// <param name="taskId">任务</param>
        /// <param name="oper">操作类型</param>
        /// <param name="mark">客户端标记</param>
        /// <returns></returns>
        public static bool StartDispatch(DispatchOrderObj order, out string msg)
        {
            msg = "未连接服务端!";

            if (!_channelState && !Open())
            {
                return(false);
            }

            lock (_ans) { try { msg = _backupsClass.StartDispatch(order); } catch { return(false); } }

            return(msg == "s" ? true : false);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 事务处理
        /// </summary>
        public String 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);
                return(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.Sta_Material == EnumSta_Material.传送中)&&
                                true)
                            {
                                _agv.SendOrdr(EnumType.料操作, EnumPara.agv上料启动);

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


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

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

                                if (true
                                    //&&_agv.Sta_Monitor == EnumSta_Monitor.电机停止
                                    )
                                {
                                    ISetTaskSuc();
                                }
                            }
                        }
                        return("");
                    }
                    else if (_operType == EnumOper.放货)
                    {
                        ///当前AGV的到达的地标 与 棍台绑定地标一致
                        if (_agv.Site == _plc.Site)
                        {
                            if (//(_plc.Sta_Material == EnumSta_Material.有货 || _plc.Sta_Material == EnumSta_Material.无货 )&&
                                //(_agv.Sta_Material == EnumSta_Material.传送中 || _agv.Sta_Material == EnumSta_Material.有货) &&
                                true)
                            {
                                _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台上料中);

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


                            if (//_plc.Sta_Material == EnumSta_Material.有货 &&
                                //_agv.Sta_Material == EnumSta_Material.无货 &&
                                true)
                            {
                                _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台上料完成);

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


                                if (true
                                    //&& _agv.Sta_Monitor == EnumSta_Monitor.电机停止
                                    )
                                {
                                    ISetTaskSuc();
                                }
                            }
                        }
                        return("");
                    }
                    else if (_operType == EnumOper.充电)
                    {
                        ISetTaskSuc();
                        return("");
                    }
                    else if (_operType == EnumOper.无动作)
                    {
                        ISetTaskSuc();
                        return("");
                    }
                }
                return("");
            }
        }
Exemplo n.º 3
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();
                    }
                }
            }
        }
Exemplo n.º 4
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 = 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);
                }

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

                string back = "";

                JTWcfHelper.WcfMainHelper.StartDispatch(dis, out back);
                return(back);
            }
            else
            {
                ///修改By fujun
                _isStart = true;

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

                ///此次调度任务已经完成
                if (_taskDispatch.OrderStatue == ResultTypeEnum.Suc)
                {
                    if (_operType == EnumOper.取货)
                    {
                        ///当前AGV的到达的地标 与 棍台绑定地标一致
                        if (_agv.Site == _plc.Site)
                        {
                            // 判断窑尾PLC的货物状态和AGV货物状态
                            if (
                                (_plc.Sta_Material_End == EnumSta_Material_End.窑尾传输中
                                 //|| _plc.Sta_Material_End == EnumSta_Material_End.状态未知
                                 || _plc.Sta_Material_End == EnumSta_Material_End.窑尾有货) &&
                                (_agv.Sta_Material == EnumSta_AGV.AGV无货 ||
                                 _agv.Sta_Material == EnumSta_AGV.AGV传输中)
                                )
                            {
                                _agv.SendOrdr(EnumType.料操作, EnumPara.agv上料启动);

                                _plc.SendOrdr(EnumType.料操作, EnumPara.窑尾辊台启动);
                            }

                            // // 判断窑尾是否出料完成
                            if (//_plc.Sta_Material_End == EnumSta_Material_End.窑尾出料完成 &&
                                _agv.Sta_Material == EnumSta_AGV.AGV有货 &&
                                true)
                            {
                                _agv.SendOrdr(EnumType.料操作, EnumPara.agv辊台停止);

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

                                if (true &&
                                    _agv.Sta_Monitor == EnumSta_AGVMonitor.AGV电机停止
                                    )
                                {
                                    //取货完成,解锁窑尾
                                    if (_plc != null)
                                    {
                                        _plc.IsLock = false;
                                    }
                                    ISetTaskSuc();
                                }
                            }
                        }
                        else
                        {
                            ISetTaskSuc();
                        }
                        return("");
                    }
                    else if (_operType == EnumOper.放货)
                    {
                        ///当前AGV的到达的地标 与 棍台绑定地标一致
                        if (_agv.Site == _plc.Site)
                        {
                            if ((_plc.Sta_Material_Head == EnumSta_Material_Head.窑头无货 ||
                                 _plc.Sta_Material_Head == EnumSta_Material_Head.窑头传输中) &&
                                (_agv.Sta_Material == EnumSta_AGV.AGV传输中 ||
                                 _agv.Sta_Material == EnumSta_AGV.AGV有货) &&
                                true)
                            {
                                _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台启动);

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


                            if (//_plc.Sta_Material_Head == EnumSta_Material_Head.窑头接料完成 &&
                                _agv.Sta_Material == EnumSta_AGV.AGV无货 &&
                                true)
                            {
                                _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台停止);

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

                                if (_agv.Sta_Monitor == EnumSta_AGVMonitor.AGV电机停止 &&
                                    true)
                                {
                                    //放货完成,解锁窑头
                                    if (_plc != null)
                                    {
                                        _plc.IsLock = false;
                                    }

                                    Thread.Sleep(5000);
                                    ISetTaskSuc();
                                }
                            }
                        }
                        else
                        {
                            ISetTaskSuc();
                        }
                        return("");
                    }
                    else if (_operType == EnumOper.充电)
                    {
                        ISetTaskSuc();
                        return("");
                    }
                    else if (_operType == EnumOper.窑尾1号机械手)
                    {
                        ///当前AGV的地标是否为窑尾1号机械手位置
                        if (_agv.Site == _plc.Site)
                        {
                            _plc.SendOrdr(EnumType.料操作, EnumPara.窑尾1号机械手启动);

                            if (_plc.Sta_Material_End == EnumSta_Material_End.窑尾1号机械手完成 &&
                                true
                                )
                            {
                                //1号机械手完成动作
                                ISetTaskSuc();
                            }
                        }
                        return("");
                    }
                    else if (_operType == EnumOper.窑尾2号机械手)
                    {
                        ///当前AGV的地标是否为窑尾2号机械手位置
                        if (_agv.Site == Site.窑尾2)
                        {
                            _plc.SendOrdr(EnumType.料操作, EnumPara.窑尾2号机械手启动);

                            if (_plc.Sta_Material_End == EnumSta_Material_End.窑尾2号机械手完成 &&
                                true
                                )
                            {
                                ISetTaskSuc();
                            }
                        }
                        return("");
                    }
                    else if (_operType == EnumOper.窑头机械手)
                    {
                        ///当前AGV的地标是否为窑头机械手位置
                        if (_agv.Site == Site.窑头3)
                        {
                            _plc.SendOrdr(EnumType.料操作, EnumPara.窑头机械手启动);

                            if (true &&
                                _plc.Sta_Material_HeadMLP == EnumSta_Material_HeadMLP.窑头机械手完成
                                )
                            {
                                ISetTaskSuc();
                            }
                        }

                        return("");
                    }
                    else if (_operType == EnumOper.无动作)
                    {
                        ISetTaskSuc();
                        return("");
                    }
                }
                return("");
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// 事务处理
        /// </summary>
        public String 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);
                return(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)
                        {
                            // 判断窑尾PLC的货物状态和AGV货物状态
                            if ((_plc.Sta_Material == EnumSta_Material.窑尾传输中 || _plc.Sta_Material == EnumSta_Material.AGV未知 || _plc.Sta_Material == EnumSta_Material.窑尾有货) &&
                                (_agv.Sta_Material == EnumSta_Material.AGV无货 || _agv.Sta_Material == EnumSta_Material.AGV传输中))
                            {
                                _agv.SendOrdr(EnumType.料操作, EnumPara.agv上料启动);

                                _plc.SendOrdr(EnumType.料操作, EnumPara.窑尾辊台启动);
                            }

                            // // 判断窑尾是否出料完成
                            if (_plc.Sta_Material == EnumSta_Material.窑尾出料完成 &&
                                _agv.Sta_Material == EnumSta_Material.AGV有货 &&
                                true)
                            {
                                _agv.SendOrdr(EnumType.料操作, EnumPara.agv辊台停止);

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

                                if (true &&
                                    _agv.Sta_Monitor == EnumSta_Monitor.AGV电机停止
                                    )
                                {
                                    ISetTaskSuc();
                                }
                            }
                        }
                        return("");
                    }
                    else if (_operType == EnumOper.放货)
                    {
                        ///当前AGV的到达的地标 与 棍台绑定地标一致
                        if (_agv.Site == _plc.Site)
                        {
                            if ((_plc.Sta_Material == EnumSta_Material.窑头无货 || _plc.Sta_Material == EnumSta_Material.窑头无货 || _plc.Sta_Material == EnumSta_Material.窑头传输中) &&
                                (_agv.Sta_Material == EnumSta_Material.AGV传输中 || _agv.Sta_Material == EnumSta_Material.AGV有货))
                            {
                                _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台启动);

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


                            if (_plc.Sta_Material == EnumSta_Material.窑头接料完成 &&
                                _agv.Sta_Material == EnumSta_Material.AGV无货 &&
                                true)
                            {
                                _plc.SendOrdr(EnumType.料操作, EnumPara.窑头辊台停止);

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

                                if (_agv.Sta_Monitor == EnumSta_Monitor.AGV电机停止 &&
                                    true)
                                {
                                    Thread.Sleep(5000);
                                    ISetTaskSuc();
                                }
                            }
                        }
                        return("");
                    }
                    else if (_operType == EnumOper.充电)
                    {
                        ISetTaskSuc();
                        return("");
                    }
                    else if (_operType == EnumOper.窑尾1号机械手)
                    {
                        ///当前AGV的地标是否为窑尾1号机械手位置
                        if (_agv.Site == _plc.Site)
                        {
                            _plc.SendOrdr(EnumType.料操作, EnumPara.窑尾1号机械手启动);

                            if (_plc.Sta_Material == EnumSta_Material.窑尾1号机械手完成 &&
                                true
                                )
                            {
                                //1号机械手完成动作
                                ISetTaskSuc();
                            }
                        }
                        return("");
                    }
                    else if (_operType == EnumOper.窑尾2号机械手)
                    {
                        ///当前AGV的地标是否为窑尾2号机械手位置
                        if (_agv.Site == Site.窑尾2)
                        {
                            _plc.SendOrdr(EnumType.料操作, EnumPara.窑尾2号机械手启动);

                            if (_plc.Sta_Material == EnumSta_Material.窑尾2号机械手完成 &&
                                true
                                )
                            {
                                ISetTaskSuc();
                            }
                        }
                        return("");
                    }
                    else if (_operType == EnumOper.窑头机械手)
                    {
                        ///当前AGV的地标是否为窑头机械手位置
                        if (_agv.Site == Site.窑头3)
                        {
                            _plc.SendOrdr(EnumType.料操作, EnumPara.窑头机械手启动);

                            if (true &&
                                _plc.Sta_Material == EnumSta_Material.窑头机械手完成
                                )
                            {
                                ISetTaskSuc();
                            }
                        }

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