UploadManager.cs 4.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();
        static string errstring = "";
        /// <summary>
        /// 上传AGV状态,每10秒上传一次
        /// </summary>
        public static void UploadAgvState()
        {
            if (Monitor.TryEnter(locupdate))
            {
                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.StateID.Equals(eAGVState.Error) || item.StateID.Equals(eAGVState.EmergencyStop))
                        {
                            agvState.state = "故障中";
                            if (item.Errors != null && item.Errors.Count > 0)
                            {
                                string tmp = string.Join(";", item.Errors);
                                if (!tmp.Equals(errstring))
                                {
                                    Common.LogUtil.error(tmp);
                                    errstring = tmp;
                                }
                            }
                            // agvState.remark = string.Join(";",item.Errors);
                        }
                        else if (item.Auto)
                        {
                            if (item.IsDebug)
                                agvState.state = "调试中";
                            else if (item.CurJob != null && item.CurJob is StandyJob)
                            {
                                agvState.state = "归位中";
                            }
                            else if (item.CurJob != null && item.CurJob is ChargeJob)
                            {
                                agvState.state = "充电中";
                            }
                            else 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
                                agvState.state = "自动";
                        }
                        else
                        {
                            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,bool iserror=false)
        {
            try
            {
                string txt = Common.JsonHelper.SerializeObject(transportStatus);
                HttpManager.UpdateAGVtranstask(txt, iserror);
            }
            catch (Exception ex)
            {
                Common.LogUtil.error($"UploadTransportStatus:{Common.JsonHelper.SerializeObject(transportStatus)}", ex);
            }

        }
        #endregion
    }
}