You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

139 lines
5.3 KiB

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
{
/// <summary>
/// 通道1公共报警信息采集应用类
/// </summary>
public class PlcPublicT1AlarmUtils
{
/// <summary>
/// 通道1报警事件
/// </summary>
public static event EventHandler<RecvedAlarmEventArgs> AlarmChanged;
/// <summary>
/// 设置连接状态字符串
/// </summary>
/// <param name="status">连接状态字符串。比如:“连接成功”</param>
private static void SetConnectStatusEvent(HsmsEapAlarmRpt eapAlmRpt)
{
EventHandler<RecvedAlarmEventArgs> AlarmHandler;
AlarmHandler = AlarmChanged;
if (AlarmHandler != null)
{
AlarmHandler.Invoke(null, new RecvedAlarmEventArgs() { EapAlarmRpt = eapAlmRpt });
}
}
/// <summary>
/// 通道1报警值改变事件
/// </summary>
public static event EventHandler<EqmAlarmEventArgs> AlarmValChanged;
/// <summary>
/// 通道1报警值改变事件方法
/// </summary>
/// <param name="valMsg">报警状态值改变消息</param>
private static void SetEqmAlarmValChangedEvent(MAlarmValMsg valMsg)
{
EventHandler<EqmAlarmEventArgs> AlarmHandler;
AlarmHandler = AlarmValChanged;
if (AlarmHandler != null)
{
AlarmHandler.Invoke(null, new EqmAlarmEventArgs() { AlarmValMsg = valMsg });
}
}
/// <summary>
/// 读取通道1报警数据
/// </summary>
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();
}
}
}
}