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 AlarmStartTimeDic = new Dictionary(); 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; } } }