120 lines
3.5 KiB
C#
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; }
|
|
}
|
|
}
|