AgvManager.cs 2.4 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AgvManager
{
    public class AgvManager{

        public static Dictionary<string,Node> nodeMap = new Dictionary<string, Node>();

        public static Dictionary<string,AgvBean> agvBeanMap = new Dictionary<string, AgvBean>();

        public static void UpdateNodeStatus(string nodeName, NodeStatus nodeStatus)
        {
            
        }

        public static void UpdateAgvStatus(string agvName, AgvStatus agvStatus)
        {

        }

        public void onTimer()
        {
            foreach (var agvName in agvBeanMap)
            {
                AgvBean agvBean = agvBeanMap[agvName];
                if (agvBean.isIdle() || agvBean.isInCharge())
                {
                    //空闲,判断电量,是否要进行充电
                    if (agvBean.needCharge())
                    {
                        if (!agvBean.isInCharge())
                        {
                            //充电
                        }

                    }
                    else
                    {
                        //执行优先级最高的新任务
                        Job jobToExecute = null;
                        foreach (var nodeName in agvBeanMap)
                        {
                            Node node = nodeMap[nodeName];
                            Job job = node.GetNewJob(agvBean, nodeMap, agvBeanMap);
                            if (job != null)
                            {
                                if (jobToExecute == null || job.priority > jobToExecute.priority)
                                {
                                    jobToExecute = job;
                                }
                            }
                        }

                        if (jobToExecute != null)
                        {
                            if (agvBean.isInCharge())
                            {
                                //充电取消
                            }
                            agvBean.executeNewJob(jobToExecute);
                        }



                    }
                }
                else
                {
                    //有任务,继续监控任务状态
                    agvBean.JobContinue(agvBean, nodeMap, agvBeanMap);
                }

            }
        }
    }
}