WeldRobotV2Analysis.cs 3.4 KB
using HHECS.BllModel;
using HHECS.DAQHandle.Dto;
using HHECS.DAQShared.Common.Enums;
using HHECS.DAQShared.Common.Utils;
using HHECS.DAQShared.Dto;
using HHECS.DAQShared.Models;
using System.Text.Json;

namespace HHECS.DAQHandle.EquipmentHandle.WeldRobot
{
    /// <summary>
    /// 焊接机器人报警解析
    /// </summary>
    /// <remarks>昆山、徐州版本</remarks>
    internal class WeldRobotV2Analysis : AnalysisBase
    {
        public WeldRobotV2Analysis(AnalysisParameter parameter) : base(parameter)
        {
        }

        protected override BllResult<EquipmentStatus> GetEquipmentStatus(Equipment equipment, EquipmentDataRecord record)
        {
            try
            {
                var tagResult = JsonConvertToTagList(record.Tags);
                if (!tagResult.Success)
                {
                    return BllResultFactory.Error<EquipmentStatus>(tagResult.Msg);
                }
                return EquipmentStatusHelper.GetEquipmentStatus(EquipmentTypeConst.WeldRobotV2, equipment.EquipmentProps, tagResult.Data);
            }
            catch (Exception ex)
            {
                return BllResultFactory.Error<EquipmentStatus>(ex.Message);
            }
        }

        /// <summary>
        /// 生成报警信息报警
        /// </summary>
        /// <param name="equipment"></param>
        /// <param name="totalAlarmProp"></param>
        /// <param name="monitorPropTemps"></param>
        /// <param name="tagItems"></param>
        /// <returns></returns>
        protected override (string, Dictionary<string, string>) GenerateAlarmMessage(Equipment equipment, EquipmentProp totalAlarmProp, IEnumerable<EquipmentProp> monitorPropTemps, IEnumerable<TagItemDto> tagItems)
        {
            //主报警文本
            var mainAlarm = totalAlarmProp.MonitorFailure;
            if (string.IsNullOrWhiteSpace(mainAlarm))
            {
                mainAlarm = totalAlarmProp.Name;
            }

            var detailAlarms = new Dictionary<string, string>();
            var alarmProp = equipment.EquipmentProps.Where(x => x.Code.Equals(RobotV2Prop.AlarmMsg.ToString(), StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
            if (alarmProp != null)
            {
                //报警明细
                var tagCodes = new List<string>
                {
                    alarmProp.Code,
                    alarmProp.Address
                };

                var alarmTag = tagItems.Where(x => tagCodes.Contains(x.Tag, StringComparer.OrdinalIgnoreCase)).FirstOrDefault();
                if (alarmTag != null && !string.IsNullOrWhiteSpace(alarmTag.Value))
                {
                    var msg = alarmTag.Value;
                    try
                    {
                        //兼容旧程序,报警信息可能是json格式
                        var doc = JsonDocument.Parse(alarmTag.Value);
                        if (doc.RootElement.TryGetProperty("AlarmMessage", out var propertyValue))
                        {
                            msg = $"{propertyValue}";
                        }
                    }
                    //Json转换异常,不处理
                    catch (JsonException) { }
                    mainAlarm = msg.Split(';').First();
                    detailAlarms.Add(RobotV2Prop.AlarmMsg.ToString(), msg);
                }
            }
            return (mainAlarm, detailAlarms);
        }
    }
}