MissionSys.cs 5.5 KB
using Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DeviceLibrary
{
    /// <summary>
    /// 任务系统
    /// </summary>
    public class MissionSys
    {
        /// <summary>
        /// 任务列表
        /// </summary>
        public static List<Mission> Missions;

        /// <summary>
        /// 加载任务列表
        /// </summary>
        public static void Init()
        {
            try
            {
                Missions = new List<Mission>();
                string path = AGVManager.CONFIG_PATH + SettingString.FileName_AgvMission;
                string[] line = System.IO.File.ReadAllLines(path, Encoding.UTF8);
                string[] temp;
                for (int i = 1; i < line.Length; i++)
                {
                    temp = line[i].Split(',');
                    if (temp.Length != 5) continue;
                    Missions.Add(new Mission(temp[0], temp[1], temp[2], temp[3], temp[4]));
                }
                LogUtil.info("加载任务成功");
            }
            catch (Exception ex)
            {
                LogUtil.error("加载任务失败", ex);
            }

        }
        /// <summary>
        /// 根据目的地名获取guid号
        /// </summary>
        /// <param name="taskName"></param>
        /// <returns></returns>
        public static string GetMissionGuidByName(string name)
        {
            Mission mission = Missions.Find(s => s.TargetName.Equals(name));
            if (mission != null)
                return mission.Guid;
            else
                LogUtil.error(string.Format("任务目的地{0}不存在,请检查!", name));
            return "";
        }
        /// <summary>
        /// 根据任务名获取guid号
        /// </summary>
        /// <param name="taskName"></param>
        /// <returns></returns>
        public static string GetMissionGuidByTaskName(string taskName)
        {
            Mission mission = Missions.Find(s => s.Name.Equals(taskName));
            if (mission != null)
                return mission.Guid;
            else
                LogUtil.error(string.Format("任务{0}不存在,请检查!", taskName));
            return "";
        }
        /// <summary>
        /// 向小车发送任务
        /// </summary>
        /// <returns></returns>
        public static bool AssignMission(Agv_Info agv, string missionName)
        {
            bool rtn = false;
            string guid = GetMissionGuidByName(missionName);
            if (!guid.Equals(""))
            {
                if (agv.UseFleet)
                {
                    rtn = MiR_API.Add_Mission_Fleet(agv, guid);
                    MiR_API.State_Ready(agv);
                    if (rtn)
                    {
                        LogUtil.info(string.Format("{0} Add_Mission_Fleet [{1}] OK", agv.Name, missionName));
                    }
                    else
                    {
                        LogUtil.info(string.Format("{0} Add_Mission_Fleet [{1}] Fail", agv.Name, missionName));
                    }
                }
                else
                {
                    rtn = MiR_API.Add_Mission(agv, guid);
                    MiR_API.State_Ready(agv);
                    if (rtn)
                    {
                        LogUtil.info(string.Format("{0} Add_Mission [{1}] OK", agv.Name, missionName));
                    }
                    else
                    {
                        LogUtil.info(string.Format("{0} Add_Mission [{1}] Fail", agv.Name, missionName));
                    }
                }

            }
            return rtn;
        }
        /// <summary>
        /// 删除任务
        /// </summary>
        /// <returns></returns>
        public static void DelMission(Agv_Info agv)
        {
            if (agv.UseFleet)
            {
                MiR_API.Del_Mission_Fleet(agv, agv.CurTaskGUID);
            }
            else
            {
                MiR_API.Del_Mission(agv);
            }
            LogUtil.info(string.Format("{0} DelMission [{1}] OK", agv.Name, agv.CurTarName));

        }
        /// <summary>
        /// 检查当前任务是否结束
        /// </summary>
        /// <param name="taskName">任务名称</param>
        /// <param name="taskGUID">任务GUID</param>
        /// <returns></returns>
        public static bool CheckTaskFinished(Agv_Info agv, string taskName, string curTaskState)
        {
            LogUtil.debug(agv.Name + " 检查当前任务是否结束: " + taskName + " " + curTaskState);
            return GetMissionGuidByName(taskName).Equals(agv.CurTaskGUID) && curTaskState.Equals(SettingString.Done);
        }
        /// <summary>
        /// 检查当前是否分配成功
        /// </summary>
        /// <param name="taskName">任务名称</param>
        /// <param name="taskGUID">任务GUID</param>
        /// <returns></returns>
        public static bool CheckTaskIsOK(Agv_Info agv, string taskName, string curTaskState)
        {
            return GetMissionGuidByName(taskName).Equals(agv.CurTaskGUID) && curTaskState.Equals(SettingString.Executing);
        }
        /// <summary>
        /// 获取Fleet Job任务状态
        /// </summary>
        /// <param name="CurTaskID"></param>
        /// <returns></returns>
        public static string GetTakJobState(int CurTaskID)
        {
            if (!CurTaskID.Equals(-1) && MiR_API.Get_Task_State(CurTaskID, out string st))
                return st;
            return SettingString.Wait;
        }
    }
}