PutBoxBase.cs 6.4 KB
using AGVLib;
using CtuDeviceLib;
using Mushiny;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DeviceLibrary.CtuService
{
    /// <summary>
    /// 放箱类
    /// </summary>
    public abstract class PutBoxBase : CtuTaskBase
    {
        public PutBoxBase(CTU ctu) : base(ctu)
        {

        }
        public PutBoxBase(CTU ctu, RobotTask robotTask) : base(ctu, robotTask)
        {

        }
        public PutBoxBase(CTU ctu, string dst, string boxCode) : base(ctu, dst, boxCode)
        {

        }
        public override void Excute() { }

        protected void NeedEnter()
        {
            //var clientNodes = RobotManager.AllClientNodes;
            //if (clientNodes != null)
            //{
            //    var node = clientNodes.Find(s => s.name.Equals(DstName));
            //    if (node == null)
            //    {
            //        Msg.add($"未查询到【{DstName}】,无法发送{NodeStatus.NeedEnter}", MsgLevel.warning);
            //    }
            //    else
            //    {
            //        node.status = NodeStatus.NeedEnter;
            //        RobotManager.SendToClientWitAPI(node);
            //    }
            //}
            //else
            //{
            //    Msg.add($"无法获取节点信息,请检查AGV调度软件是否开启", MsgLevel.warning);
            //}
        }

        /// <summary>
        /// 向设备请求入料箱
        /// </summary>
        protected void RequestEnter()
        {
            mayenter = RobotManager.unloadContainerReq(new ESS.EssModel()
            {
                containerAttribute = DateTime.Now,
                containerCode = boxCode,
                slotCode = DstName
            }, out errmsg);
            //var clientNodes = RobotManager.AllClientNodes;
            //if (clientNodes != null)
            //{
            //    var node = clientNodes.Find(s => s.name.Equals(DstName));
            //    if (node == null)
            //    {
            //        Msg.add($"未查询到【{DstName}】,无法发送{NodeStatus.RequestEnter}", MsgLevel.warning);
            //    }
            //    else
            //    {
            //        node.status = NodeStatus.RequestEnter;
            //        node.shelf_id = boxCode;
            //        RobotManager.SendToClientWitAPI(node);
            //    }
            //}
            //else
            //{
            //    Msg.add($"无法获取节点信息,请检查AGV调度软件是否开启", MsgLevel.warning);
            //}
        }

        bool mayenter = false;
        string errmsg = "";
        /// <summary>
        /// 设备允许入料箱
        /// </summary>
        /// <returns></returns>
        protected bool MayEnter()
        {
            if (mayenter == false)
            {
                Msg.add($"请求放容器失败:{errmsg}", MsgLevel.warning);
            }
            return mayenter;
            //var clientNodes = RobotManager.AllClientNodes;
            //if (clientNodes != null)
            //{
            //    var node = clientNodes.Find(s => s.name.Equals(DstName));
            //    if (node == null)
            //    {
            //        Msg.add($"未查询到【{DstName}】,无法检查{NodeStatus.MayEnter}", MsgLevel.warning);
            //    }
            //    else
            //    {
            //        return node.status == NodeStatus.MayEnter;
            //    }
            //}
            //else
            //{
            //    Msg.add($"无法获取节点信息,请检查AGV调度软件是否开启", MsgLevel.warning);
            //}
            //return false;
        }

        protected bool RejectEnter()
        {
            var clientNodes = RobotManager.AllClientNodes;
            if (clientNodes != null)
            {
                var node = clientNodes.Find(s => s.name.Equals(DstName));
                if (node == null)
                {
                    Msg.add($"未查询到【{DstName}】,无法检查{NodeStatus.RejectEnter}", MsgLevel.warning);
                }
                else
                {
                    return node.status == NodeStatus.RejectEnter;
                }
            }
            else
            {
                Msg.add($"无法获取节点信息,请检查AGV调度软件是否开启", MsgLevel.warning);
            }
            return false;
        }
        /// <summary>
        /// 检查料箱是否到达设备
        /// </summary>
        /// <returns></returns>
        protected bool CheckFinishEnter()
        {
            var clientNodes = RobotManager.AllClientNodes;
            if (clientNodes != null)
            {
                var node = clientNodes.Find(s => s.name.Equals(DstName));
                if (node == null)
                {
                    Msg.add($"未查询到【{DstName}】,无法检查{NodeStatus.FinishEnter}", MsgLevel.warning);
                }
                else
                {
                    return node.status == NodeStatus.FinishEnter;
                }
            }
            else
            {
                Msg.add($"无法获取节点信息,请检查AGV调度软件是否开启", MsgLevel.warning);
            }
            return false;
        }
        /// <summary>
        /// 对接完成-收到FinishEnter回复
        /// </summary>
        protected bool Complete()
        {
            return RobotManager.unloadContainerFinish(new ESS.EssModel()
            {
                containerAttribute = DateTime.Now,
                containerCode = boxCode,
                slotCode = DstName
            });
            //var clientNodes = RobotManager.AllClientNodes;
            //if (clientNodes != null)
            //{
            //    var node = clientNodes.Find(s => s.name.Equals(DstName));
            //    if (node == null)
            //    {
            //        Msg.add($"未查询到【{DstName}】,无法发送{NodeStatus.Complete}", MsgLevel.warning);
            //    }
            //    else
            //    {
            //        node.status = NodeStatus.Complete;
            //        node.shelf_id = boxCode;
            //        RobotManager.SendToClientWitAPI(node);
            //    }
            //}
            //else
            //{
            //    Msg.add($"无法获取节点信息,请检查AGV调度软件是否开启", MsgLevel.warning);
            //}
        }
    }
}