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

namespace HHECS.DAQHandle.EquipmentHandle
{
    internal class WeldRobotV2Analysis : AnalysisBase
    {
        public WeldRobotV2Analysis(AnalysisParameter parameter) : base(parameter)
        {
        }

        protected override BllResult<EquipmentStatus> GetEquipmentStatus(EquipmentExtend equipment, EquipmentDataRecord record)
        {
            try
            {
                var tagResult = JsonConvertToTagList(record.Tags);
                if (!tagResult.Success)
                {
                    return BllResultFactory.Error<EquipmentStatus>(tagResult.Msg);
                }
                var dictionaryResult = TagListConvertToDictionary(equipment.EquipmentProps, tagResult.Data);
                if (!dictionaryResult.Success)
                {
                    return BllResultFactory.Error<EquipmentStatus>(dictionaryResult.Msg);
                }

                var dictionary = dictionaryResult.Data;

                var nstatus = dictionary[RobotV2Prop.Nstatus.ToString()];
                var totalError = dictionary[RobotV2Prop.Alarm.ToString()];

                var validationResult = ValidationIsNullOrWhiteSpace(nstatus, totalError);
                if (!validationResult.Success)
                {
                    return BllResultFactory.Error<EquipmentStatus>(validationResult.Msg);
                }

                var equipmentStatus = EquipmentStatus.None;
                if (nstatus == "4")
                {
                    equipmentStatus = EquipmentStatus.Offline;
                    return BllResultFactory.Success(equipmentStatus);
                }

                //故障,T1、T2模式不记录报警
                if (totalError == "1" || nstatus == "3")
                {
                    equipmentStatus = EquipmentStatus.Failure;
                    return BllResultFactory.Success(equipmentStatus);
                }

                //运行
                if (nstatus == "1")
                {
                    equipmentStatus = EquipmentStatus.Running;
                    return BllResultFactory.Success(equipmentStatus);
                }

                //待机
                equipmentStatus = EquipmentStatus.Free;
                return BllResultFactory.Success(equipmentStatus);
            }
            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, List<string>) GenerateAlarmMessage(EquipmentExtend equipment, EquipmentPropExtend totalAlarmProp, IEnumerable<EquipmentPropExtend> monitorPropTemps, IEnumerable<TagItemDto> tagItems)
        {
            //主报警文本
            var mainAlarm = totalAlarmProp.EquipmentTypePropTemplate.MonitorFailure;
            if (string.IsNullOrWhiteSpace(mainAlarm))
            {
                mainAlarm = totalAlarmProp.EquipmentTypePropTemplate.Name;
            }

            var detailAlarms = new List<string>();
            var alarmProp = monitorPropTemps.Where(x => x.EquipmentTypePropTemplateCode == RobotV2Prop.Alarmmsg.ToString()).FirstOrDefault();
            if (alarmProp != null)
            {
                var tag = tagItems.Where(x => x.Tag == alarmProp.EquipmentTypePropTemplateCode || x.Tag == alarmProp.Address).FirstOrDefault();
                if (tag != null && !string.IsNullOrWhiteSpace(tag.Value))
                {
                    var alarmDto = JsonSerializer.Deserialize<RobotAlarmDto>(tag.Value);
                    detailAlarms.Add(alarmDto.AlarmMessage);
                }
            }

            return (mainAlarm, detailAlarms);
        }
    }
}