DataCollectionSysyem.cs 6.1 KB

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