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.
 

95 lines
3.4 KiB

using Aborlen.Model;
using FrameWork.Log;
using Monitor.FrameWork.Cache;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Aborlen.PlcCommunicationInit
{
public partial class WorkStation : StationBase
{
Dictionary<string, DateTime> AlarmStartTimeDic = new Dictionary<string, DateTime>();
private void OpcTag_AlarmChanged(string tagId, int tagMarkCode, object tagValue, DateTime timeTrigger)
{
try
{
//结果为TRUE 直接保存报警记录
if (Convert.ToBoolean(tagValue))
{
//判断当前报警是否存在
StationAlarmStatus stationAlarmStatus = new StationAlarmStatus();
//删除相同TagId数据
StationAlarmStatus.Delete(p => p.TagId == tagId);
//保存新的TagId数据
stationAlarmStatus.TagId = tagId;
stationAlarmStatus.StationId = thisStationInfo.StationId;
stationAlarmStatus.AlarmText = StationAlarmTexts.Where(p => p.TagId == tagId).First().AlarmText;
stationAlarmStatus.AlarmStatus = 1;
stationAlarmStatus.StartTime = DateTime.Now;
DictionaryHelper.DictionaryAddValue(AlarmStartTimeDic, tagId, stationAlarmStatus.StartTime);
//保存报警状态
StationAlarmStatus.InsertWithoutNullCol(stationAlarmStatus);
//报警记录表增加数据
StationAlarmRecord stationAlarmRecord = new StationAlarmRecord();
stationAlarmRecord.TagId = tagId;
stationAlarmRecord.StationId = thisStationInfo.StationId;
stationAlarmRecord.AlarmText = stationAlarmStatus.AlarmText;
stationAlarmRecord.AlarmStatus = stationAlarmStatus.AlarmStatus;
stationAlarmRecord.StartTime = stationAlarmStatus.StartTime;
StationAlarmRecord.Insert(stationAlarmRecord);
}
else
{
if (AlarmStartTimeDic.ContainsKey(tagId))
{
int timediff = Convert.ToInt32(ExecDateDiff(AlarmStartTimeDic[tagId], DateTime.Now));
//修改数据 解除报警
StationAlarmStatus.Update(p => new StationAlarmStatus() { AlarmStatus = 2, EndTime = DateTime.Now, TimeDiff = timediff }, p => p.TagId == tagId);
//报警记录解除报警
StationAlarmRecord.Update(p => new StationAlarmRecord() { AlarmStatus = 2, EndTime = DateTime.Now, TimeDiff = timediff }, q => q.TagId == tagId && q.AlarmStatus == 1);
}
}
}
catch(Exception ex)
{
LogHelper.WriteLog(LogHelper.GetMethodInfo(), ex);
}
}
public static double ExecDateDiff(DateTime dateBegin, DateTime dateEnd)
{
TimeSpan ts1 = new TimeSpan(dateBegin.Ticks);
TimeSpan ts2 = new TimeSpan(dateEnd.Ticks);
TimeSpan ts3 = ts1.Subtract(ts2).Duration();
//你想转的格式
return ts3.TotalSeconds;
}
}
}