UploadManager.cs 3.4 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace DeviceLibrary.manager
{
   public class UploadManager
    {
        #region 上传到ITS
        static object locupdate = new object();
        /// <summary>
        /// 上传AGV状态,每10秒上传一次
        /// </summary>
        public static void UploadAgvState()
        {
            if (Monitor.TryEnter(locupdate, 2000))
            {
                try
                {
                    List<service.model.AgvState> agvStates = new List<service.model.AgvState>();
                    foreach (AgvInfo item in AGVManager.agvInfo)
                    {
                        service.model.AgvState agvState = new service.model.AgvState()
                        {
                            agvNum = item.Name,

                            workshop = item.Scope.Workshop,
                            battery = item.Battery,

                            position = item.Position,
                            curTarget = item.Place.Name,
                            statusTxt = item.MissionText
                        };
                        if (item.CurJob != null && item.CurJob.JobParam != null && item.CurJob.JobParam.GetMissionInfo() != null)
                        {
                            agvState.state = "执行任务";
                            agvState.missionId = item.CurJob.JobParam.GetMissionInfo().missionId;
                            agvState.remark = item.CurJob.JobParam.GetMissionInfo().Remark;
                        }
                        else
                        {
                            if(item.StateID.Equals(eAGVState.Error) || item.StateID.Equals(eAGVState.EmergencyStop))
                            {
                                agvState.state = "故障中";
                            }
                            else if(item.CurJob!=null && item.CurJob is StandyJob)
                            {
                                agvState.state = "归位中";
                            }
                            else if (item.CurJob != null && item.CurJob is ChargeJob)
                            {
                                agvState.state = "充电中";
                            }
                        }
                        agvStates.Add(agvState);
                    }
                    string txt = Common.JsonHelper.SerializeObject(agvStates);
                    HttpManager.AgvReportState(txt);
                    //Common.LogUtil.debug($"输出所有Agv信息:{txt}");
                }
                finally
                {
                    Monitor.Exit(locupdate);
                }
            }

        }

        /// <summary>
        /// 运输状态上报
        /// </summary>
        /// <param name="transportStatus"></param>
        public static void UploadTransportStatus(service.model.TransportStatus transportStatus)
        {
            try
            {
                string txt = Common.JsonHelper.SerializeObject(transportStatus);
                //Common.LogUtil.info($"运输状态上报{txt}");
                HttpManager.UpdateAGVtranstask(txt);
                System.Threading.Thread.Sleep(2000);
            }
            catch(Exception ex) {
                Common.LogUtil.error($"UploadTransportStatus:{Common.JsonHelper.SerializeObject(transportStatus)}",ex);
            }
        }
        #endregion
    }
}