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

3 years ago
  1. using Aborlen.Model;
  2. using FrameWork.Log;
  3. using Monitor.FrameWork.Cache;
  4. using SqlSugar;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace Aborlen.PlcCommunicationInit
  11. {
  12. public partial class WorkStation : StationBase
  13. {
  14. Dictionary<string, DateTime> AlarmStartTimeDic = new Dictionary<string, DateTime>();
  15. private void OpcTag_AlarmChanged(string tagId, int tagMarkCode, object tagValue, DateTime timeTrigger)
  16. {
  17. try
  18. {
  19. //结果为TRUE 直接保存报警记录
  20. if (Convert.ToBoolean(tagValue))
  21. {
  22. //判断当前报警是否存在
  23. StationAlarmStatus stationAlarmStatus = new StationAlarmStatus();
  24. //删除相同TagId数据
  25. StationAlarmStatus.Delete(p => p.TagId == tagId);
  26. //保存新的TagId数据
  27. stationAlarmStatus.TagId = tagId;
  28. stationAlarmStatus.StationId = thisStationInfo.StationId;
  29. stationAlarmStatus.AlarmText = StationAlarmTexts.Where(p => p.TagId == tagId).First().AlarmText;
  30. stationAlarmStatus.AlarmStatus = 1;
  31. stationAlarmStatus.StartTime = DateTime.Now;
  32. DictionaryHelper.DictionaryAddValue(AlarmStartTimeDic, tagId, stationAlarmStatus.StartTime);
  33. //保存报警状态
  34. StationAlarmStatus.InsertWithoutNullCol(stationAlarmStatus);
  35. //报警记录表增加数据
  36. StationAlarmRecord stationAlarmRecord = new StationAlarmRecord();
  37. stationAlarmRecord.TagId = tagId;
  38. stationAlarmRecord.StationId = thisStationInfo.StationId;
  39. stationAlarmRecord.AlarmText = stationAlarmStatus.AlarmText;
  40. stationAlarmRecord.AlarmStatus = stationAlarmStatus.AlarmStatus;
  41. stationAlarmRecord.StartTime = stationAlarmStatus.StartTime;
  42. StationAlarmRecord.Insert(stationAlarmRecord);
  43. }
  44. else
  45. {
  46. if (AlarmStartTimeDic.ContainsKey(tagId))
  47. {
  48. int timediff = Convert.ToInt32(ExecDateDiff(AlarmStartTimeDic[tagId], DateTime.Now));
  49. //修改数据 解除报警
  50. StationAlarmStatus.Update(p => new StationAlarmStatus() { AlarmStatus = 2, EndTime = DateTime.Now, TimeDiff = timediff }, p => p.TagId == tagId);
  51. //报警记录解除报警
  52. StationAlarmRecord.Update(p => new StationAlarmRecord() { AlarmStatus = 2, EndTime = DateTime.Now, TimeDiff = timediff }, q => q.TagId == tagId && q.AlarmStatus == 1);
  53. }
  54. }
  55. }
  56. catch(Exception ex)
  57. {
  58. LogHelper.WriteLog(LogHelper.GetMethodInfo(), ex);
  59. }
  60. }
  61. public static double ExecDateDiff(DateTime dateBegin, DateTime dateEnd)
  62. {
  63. TimeSpan ts1 = new TimeSpan(dateBegin.Ticks);
  64. TimeSpan ts2 = new TimeSpan(dateEnd.Ticks);
  65. TimeSpan ts3 = ts1.Subtract(ts2).Duration();
  66. //你想转的格式
  67. return ts3.TotalSeconds;
  68. }
  69. }
  70. }