DataCollectionSysyem.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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. try
  44. {
  45. SqlSugarHelper.Do(db =>
  46. {
  47. DeviceDataPack pack = new DeviceDataPack();
  48. //处理输送线
  49. List<StationData> DevList = new List<StationData>();
  50. foreach (var item in ConvList)
  51. {
  52. var dev = new StationData()
  53. {
  54. Code = item.Entity.Code,
  55. Frame = DateTime.Now,
  56. D520 = TypeExtension.Mapper<WCS_Station520, IStation520>(item.Data),
  57. D521 = TypeExtension.Mapper<WCS_Station521, IStation521>(item.Data2),
  58. D523 = TypeExtension.Mapper<WCS_Station523, IStation523>(item.Data3),
  59. D90 = new WCS_Station90(),
  60. D91 = new WCS_Station91(),
  61. D80 = new WCS_BCR80(),
  62. D81 = new WCS_BCR81()
  63. };
  64. if (Conv91List.Any(v => v.Entity.Code == item.Entity.Code))
  65. {
  66. var d91 = Conv91List.First(v => v.Entity.Code == item.Entity.Code);
  67. dev.D91 = TypeExtension.Mapper<WCS_Station91, IStation91>(d91.Data);
  68. }
  69. if (Bcrs.Any(v => v.Entity.Code == item.Entity.Code))
  70. {
  71. var d81 = Bcrs.First(v => v.Entity.Code == item.Entity.Code);
  72. dev.D81 = TypeExtension.Mapper<WCS_BCR81, IBCR81>(d81.Data);
  73. }
  74. //保存报警
  75. RedisHub.WMS.Set($"{nameof(EquipmentAlarm)}:{item.Entity.Code}", JsonConvert.SerializeObject(new EquipmentAlarm()
  76. {
  77. Code = item.Entity.Code,
  78. Msg = item.Data3.Alarm.ToString(),
  79. Time = DateTime.Now
  80. }));
  81. DevList.Add(dev);
  82. }
  83. //保存模式
  84. var status = ConvList.Select(v => new Tuple<string, string>(v.Entity.Code, v.Data2.Mode.ToString()));
  85. RedisHub.WMS.Set($"ConvStatus", JsonConvert.SerializeObject(status));
  86. pack.StationDatas = new DeviceDataCollection<StationData>(DateTime.Now, DevList.ToArray());
  87. //处理堆垛机
  88. List<SRMData> srmList = new List<SRMData>();
  89. foreach (var item in Srms)
  90. {
  91. var dev = new SRMData()
  92. {
  93. Code = item.Entity.Code,
  94. Frame = DateTime.Now,
  95. D520 = TypeExtension.Mapper<WCS_SRM520, ISRM520>(item.Data),
  96. D521 = TypeExtension.Mapper<WCS_SRM521, ISRM521>(item.Data2),
  97. D537 = TypeExtension.Mapper<WCS_SRM537, ISRM537>(item.Data3),
  98. };
  99. //保存报警
  100. RedisHub.WMS.Set($"{nameof(EquipmentAlarm)}:{item.Entity.Code}", JsonConvert.SerializeObject(new EquipmentAlarm()
  101. {
  102. Code = item.Entity.Code,
  103. Msg = item.Data3.Alarm.ToString(),
  104. Time = DateTime.Now
  105. }));
  106. srmList.Add(dev);
  107. }
  108. //保存模式
  109. var status1 = Srms.Select(v => new Tuple<string, string>(v.Entity.Code, v.Data2.AutoStatus.ToString()));
  110. RedisHub.WMS.Set($"SrmStatus", JsonConvert.SerializeObject(status1));
  111. pack.SRMDatas = new DeviceDataCollection<SRMData>(DateTime.Now, srmList.ToArray());
  112. pack.Frame = DateTime.Now;
  113. //保存到Redis
  114. RedisHub.Monitor.RPush("Packs", pack);
  115. RedisHub.Monitor.Set(nameof(DeviceDataPack), pack);
  116. if (RedisHub.Monitor.LLen("Packs") > 500000)
  117. {
  118. RedisHub.Monitor.LTrim("Packs", 5000, -1);
  119. }
  120. ////保存到数据库
  121. //var plcData = new WCS_PlcData()
  122. //{
  123. // AddWho = "WCS",
  124. // WAREHOUSE = ServiceHub.WarehouseName,
  125. // CONTENT = JsonConvert.SerializeObject(pack, null, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }),
  126. //};
  127. //db.Default.Insertable(plcData).ExecuteCommand();
  128. });
  129. }
  130. catch (Exception ex)
  131. {
  132. World.Log(ex.StackTrace, ServiceCenter.Logs.LogLevelEnum.Mid);
  133. }
  134. }
  135. }
  136. /// <summary>
  137. /// 设备报警
  138. /// </summary>
  139. public class EquipmentAlarm
  140. {
  141. /// <summary>
  142. /// 设备号
  143. /// </summary>
  144. public string Code { get; set; }
  145. /// <summary>
  146. /// 内容
  147. /// </summary>
  148. public string Msg { get; set; }
  149. /// <summary>
  150. /// 时间
  151. /// </summary>
  152. public DateTime Time { get; set; }
  153. }
  154. }