using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Module.DB.Model; using Module.Common; using Module.DB.SQLServerDAL; using StackExchange.Redis; using Module.Hsms.Model; namespace Module.Plc.Profinet.Tool { /// /// 通道1公共报警信息采集应用类 /// public class PlcPublicT1AlarmUtils { /// /// 通道1报警事件 /// public static event EventHandler AlarmChanged; /// /// 设置连接状态字符串 /// /// 连接状态字符串。比如:“连接成功” private static void SetConnectStatusEvent(HsmsEapAlarmRpt eapAlmRpt) { EventHandler AlarmHandler; AlarmHandler = AlarmChanged; if (AlarmHandler != null) { AlarmHandler.Invoke(null, new RecvedAlarmEventArgs() { EapAlarmRpt = eapAlmRpt }); } } /// /// 通道1报警值改变事件 /// public static event EventHandler AlarmValChanged; /// /// 通道1报警值改变事件方法 /// /// 报警状态值改变消息 private static void SetEqmAlarmValChangedEvent(MAlarmValMsg valMsg) { EventHandler AlarmHandler; AlarmHandler = AlarmValChanged; if (AlarmHandler != null) { AlarmHandler.Invoke(null, new EqmAlarmEventArgs() { AlarmValMsg = valMsg }); } } /// /// 读取通道1报警数据 /// public static void ReadT1AlarmData() { try { var service = new AlarmInfo(); for (var i = 0; i < PublicParams.t1AlarmList.Length; i++) { var item = PublicParams.t1AlarmList[i]; var readerTemp = PlcCommon.DeltaTcpNetClient01.ReadBool(item.address, 10); if (readerTemp.IsSuccess) { // 获取当前状态 var state = readerTemp.Content[0]; if (state != item.currentErrorState) { item.currentErrorState = state; // 由正常变成异常状态,则添加日志 if (state) { service.AddAlarmInfo( new AlarmRecord() { f_type = i + 1, f_content = item.title, // todo 需要根据具体轨道修改 f_track = 1, f_create_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), }); if (PublicParams.Track01Alarm.ContainsKey(i + 1)) { PublicParams.Track01Alarm[i + 1] = item.title; } else { PublicParams.Track01Alarm.Add(i + 1, item.title); } //将报警状态值发送给TCP中的事件 MAlarmValMsg valMsg=new MAlarmValMsg() { F_AlarmName="T1"+item.address.Replace(".","_"),F_AlarmValue=state}; SetEqmAlarmValChangedEvent(valMsg); //将状态报警发送给EAP string plcAddr = item.address; if(EapPubParams._HSMS_EAP_T1ALARM_RPT!=null) { if(EapPubParams._HSMS_EAP_T1ALARM_RPT.ContainsKey(plcAddr)) { HsmsEapAlarmRpt alarmResult = EapPubParams._HSMS_EAP_T1ALARM_RPT[plcAddr]; SetConnectStatusEvent(alarmResult); } } } else { // 由异常变为正常状态,则更新日志解除报警时间 service.UpdateAlarmInfo(i + 1, 1); PublicParams.Track01Alarm.Remove(i + 1); //将报警状态值发送给TCP中的事件 MAlarmValMsg valMsg = new MAlarmValMsg() { F_AlarmName = "T1" + item.address.Replace(".", "_"), F_AlarmValue = state }; SetEqmAlarmValChangedEvent(valMsg); } } } } } catch (Exception ex) { ex.ToString(); } } } }