Files
YuPu-OrpaonEMS/OrpaonEMS.App/Models/AlarmCell.cs
2025-02-28 22:23:13 +08:00

120 lines
3.5 KiB
C#

using OrpaonEMS.Core.ChannelModel;
using OrpaonEMS.Core.EventHandMsg;
using OrpaonEMS.Core.Model;
using System;
using System.Threading.Channels;
using System.Threading.Tasks;
namespace OrpaonEMS.App.Models
{
/// <summary>
/// 报警单元
/// </summary>
public class AlarmCell
{
public AlarmCell(Channel<AlarmChannelData> channel, string content, string address, int level, ushort bitindex)
{
CurTimeInfo = new AlarmTimeInfo();
Content = content;
Address = address;
Level = level;
BitIndex = bitindex;
AlarmChannel = channel;
}
/// <summary>
/// 报警通道数据
/// </summary>
public Channel<AlarmChannelData> AlarmChannel { get; set; }
/// <summary>
/// 发布报警信息
/// </summary>
public event EventHandler<BmsAlarmCellEventHandMsg> PubBmsAlarmEventHandler;
/// <summary>
/// 报警状态
/// </summary>
public bool State { get; set; }
/// <summary>
/// 更新值 返回当前的报警状态 这个状态用于返回给PLC 用于屏蔽后面的报警数据
/// </summary>
/// <param name="value"></param>
public void UpdateValue(bool value)
{
if (State == false && value == true)//初次触发报警为On时机
{
CurTimeInfo.StartTime = DateTime.Now;
State = true;//报警开始
// 需要异步执行吗???
PubBmsAlarmEventHandler(this, new BmsAlarmCellEventHandMsg()
{
AlarmLevel = Level,
AlarmContent = Content,
AlarmTime = DateTime.Now,
AlarmState = true
});
//return false;
}
else if (State == true && value == false)//报警结束 报警为OFF时机
{
CurTimeInfo.EndTime = DateTime.Now;
State = false;
PubBmsAlarmEventHandler(this, new BmsAlarmCellEventHandMsg()
{
AlarmLevel = Level,
AlarmContent = Content,
AlarmTime = CurTimeInfo.StartTime,
AlarmState = false
});
//报警结束,可以采集数据
AlarmChannel.Writer.WriteAsync(new AlarmChannelData()
{
MsgTime = DateTime.Now,
alarmChannel = new AlarmChannel()
{
Content = Content,
StartTime = CurTimeInfo.StartTime,
EndTime = CurTimeInfo.EndTime,
AlarmDur = (decimal)CurTimeInfo.AlarmDur,
Level = Level,
}
});
}
}
/// <summary>
/// 报警时间信息
/// </summary>
public AlarmTimeInfo CurTimeInfo { get; set; }
/// <summary>
/// 报警内容
/// </summary>
public string Content { get; set; }
/// <summary>
/// 地址
/// </summary>
public string Address { get; set; }
/// <summary>
/// 报警等级
/// </summary>
public int Level { get; set; }
/// <summary>
/// 索引位置 队列位位置
/// </summary>
public ushort BitIndex { get; set; }
}
}