DataCollectionSysyem.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. using Newtonsoft.Json;
  2. using ServiceCenter.Extensions;
  3. using ServiceCenter.Redis;
  4. using System.ComponentModel;
  5. using WCS.Core;
  6. using WCS.Entity.Protocol.Protocol.BCR;
  7. using WCS.Entity.Protocol.Protocol.DataStructure;
  8. using WCS.Entity.Protocol.Protocol.SRM;
  9. using WCS.Entity.Protocol.Protocol.Station;
  10. using WCS.WorkEngineering.Extensions;
  11. using WCS.WorkEngineering.Protocol.DataStructure;
  12. namespace WCS.WorkEngineering.Systems
  13. {
  14. /// <summary>
  15. /// 数据采集系统
  16. /// </summary>
  17. //[BelongTo(typeof(DataCollectionWorld))]
  18. [Description("数据采集系统")]
  19. public class DataCollectionSysyem : DeviceSystem<SRM>
  20. {
  21. public List<Station> ConvList;
  22. public List<Device<IStation91>> Conv91List;
  23. public List<Device<IBCR81>> Bcrs;
  24. public List<SRM> Srms;
  25. public DataCollectionSysyem()
  26. {
  27. ConvList = Device.All.Where(v => v.HasProtocol(typeof(IStation523))).Select(v => new Station(v, this.World)).ToList();
  28. Conv91List = Device.All.Where(v => v.HasProtocol(typeof(IStation91))).Select(v => new Device<IStation91>(v, this.World)).ToList();
  29. Bcrs = Device.All.Where(v => v.HasProtocol(typeof(IBCR81))).Select(v => new Device<IBCR81>(v, this.World)).ToList();
  30. Srms = Device.All.Where(v => v.HasProtocol(typeof(ISRM520))).Select(v => new SRM(v, this.World)).ToList();
  31. }
  32. protected override bool ParallelDo => true;
  33. protected override bool SaveLogsToFile => true;
  34. public override bool Select(Device dev)
  35. {
  36. return dev.Code == "SRM1";
  37. }
  38. public override void Do(SRM obj)
  39. {
  40. try
  41. {
  42. DeviceDataPack pack = new DeviceDataPack();
  43. //处理输送线
  44. List<StationData> DevList = new List<StationData>();
  45. foreach (var item in ConvList)
  46. {
  47. var dev = new StationData()
  48. {
  49. Code = item.Entity.Code,
  50. Frame = DateTime.Now,
  51. D520 = TypeExtension.Mapper<WCS_Station520, IStation520>(item.Data),
  52. D521 = TypeExtension.Mapper<WCS_Station521, IStation521>(item.Data2),
  53. D523 = TypeExtension.Mapper<WCS_Station523, IStation523>(item.Data3),
  54. D90 = new WCS_Station90(),
  55. D91 = new WCS_Station91(),
  56. D80 = new WCS_BCR80(),
  57. D81 = new WCS_BCR81()
  58. };
  59. if (Conv91List.Any(v => v.Entity.Code == item.Entity.Code))
  60. {
  61. var d91 = Conv91List.First(v => v.Entity.Code == item.Entity.Code);
  62. dev.D91 = TypeExtension.Mapper<WCS_Station91, IStation91>(d91.Data);
  63. }
  64. if (Bcrs.Any(v => v.Entity.Code == item.Entity.Code))
  65. {
  66. var d81 = Bcrs.First(v => v.Entity.Code == item.Entity.Code);
  67. dev.D81 = TypeExtension.Mapper<WCS_BCR81, IBCR81>(d81.Data);
  68. }
  69. //保存报警
  70. RedisHub.WMS.Set($"{nameof(EquipmentAlarm)}:{item.Entity.Code}", JsonConvert.SerializeObject(new EquipmentAlarm()
  71. {
  72. Code = item.Entity.Code,
  73. Msg = item.Data3.Alarm.ToString(),
  74. Time = DateTime.Now
  75. }));
  76. DevList.Add(dev);
  77. }
  78. //保存模式
  79. var status = ConvList.Select(v => new Tuple<string, string>(v.Entity.Code, v.Data2.Mode.ToString()));
  80. RedisHub.WMS.Set($"ConvStatus", JsonConvert.SerializeObject(status));
  81. pack.StationDatas = new DeviceDataCollection<StationData>(DateTime.Now, DevList.ToArray());
  82. //处理堆垛机
  83. List<SRMData> srmList = new List<SRMData>();
  84. foreach (var item in Srms)
  85. {
  86. var dev = new SRMData()
  87. {
  88. Code = item.Entity.Code,
  89. Frame = DateTime.Now,
  90. D520 = TypeExtension.Mapper<WCS_SRM520, ISRM520>(item.Data),
  91. D521 = TypeExtension.Mapper<WCS_SRM521, ISRM521>(item.Data2),
  92. D537 = TypeExtension.Mapper<WCS_SRM537, ISRM537>(item.Data3),
  93. };
  94. //保存报警
  95. RedisHub.WMS.Set($"{nameof(EquipmentAlarm)}:{item.Entity.Code}", JsonConvert.SerializeObject(new EquipmentAlarm()
  96. {
  97. Code = item.Entity.Code,
  98. Msg = item.Data3.Alarm.ToString(),
  99. Time = DateTime.Now
  100. }));
  101. srmList.Add(dev);
  102. }
  103. //保存模式
  104. var status1 = Srms.Select(v => new Tuple<string, string>(v.Entity.Code, v.Data2.AutoStatus.ToString()));
  105. RedisHub.WMS.Set($"SrmStatus", JsonConvert.SerializeObject(status1));
  106. pack.SRMDatas = new DeviceDataCollection<SRMData>(DateTime.Now, srmList.ToArray());
  107. pack.Frame = DateTime.Now;
  108. //保存到Redis
  109. RedisHub.Monitor.RPush("Packs", pack);
  110. RedisHub.Monitor.Set(nameof(DeviceDataPack), pack);
  111. if (RedisHub.Monitor.LLen("Packs") > 500000)
  112. {
  113. RedisHub.Monitor.LTrim("Packs", 5000, -1);
  114. }
  115. }
  116. catch (Exception ex)
  117. {
  118. World.Log(ex.StackTrace, ServiceCenter.Logs.LogLevelEnum.Mid);
  119. }
  120. }
  121. }
  122. /// <summary>
  123. /// 设备报警
  124. /// </summary>
  125. public class EquipmentAlarm
  126. {
  127. /// <summary>
  128. /// 设备号
  129. /// </summary>
  130. public string Code { get; set; }
  131. /// <summary>
  132. /// 内容
  133. /// </summary>
  134. public string Msg { get; set; }
  135. /// <summary>
  136. /// 时间
  137. /// </summary>
  138. public DateTime Time { get; set; }
  139. }
  140. }