DataCollectionSysyem.cs 5.9 KB

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