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 { /// /// 报警单元 /// public class AlarmCell { public AlarmCell(Channel channel, string content, string address, int level, ushort bitindex) { CurTimeInfo = new AlarmTimeInfo(); Content = content; Address = address; Level = level; BitIndex = bitindex; AlarmChannel = channel; } /// /// 报警通道数据 /// public Channel AlarmChannel { get; set; } /// /// 发布报警信息 /// public event EventHandler PubBmsAlarmEventHandler; /// /// 报警状态 /// public bool State { get; set; } /// /// 更新值 返回当前的报警状态 这个状态用于返回给PLC 用于屏蔽后面的报警数据 /// /// 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, } }); } } /// /// 报警时间信息 /// public AlarmTimeInfo CurTimeInfo { get; set; } /// /// 报警内容 /// public string Content { get; set; } /// /// 地址 /// public string Address { get; set; } /// /// 报警等级 /// public int Level { get; set; } /// /// 索引位置 队列位位置 /// public ushort BitIndex { get; set; } } }