数据采集.cs 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using FreeRedis;
  2. using PlcSiemens.Core.Extension;
  3. using System.ComponentModel;
  4. using System.Diagnostics;
  5. using WCS.Core;
  6. namespace WCS.WorkEngineering.Systems
  7. {
  8. // [BelongTo(typeof(MainWorld))]
  9. [Description("数据采集系统")]
  10. public class 数据采集 : SystemBase
  11. {
  12. private RedisClient Redis = new RedisClient("");
  13. public 数据采集()
  14. {
  15. var gs = Device.All.SelectMany(v => v.Protocols.Select(d => new { DB = $"{d.Value.DBInfo.No}:{d.Value.DBInfo.PLCInfo.IP}", d.Value.Position, TypeStr = d.Key, Dev = v }))
  16. .GroupBy(v => v.DB);
  17. foreach (var g in gs)
  18. {
  19. var min = g.OrderBy(v => v.Position).First();
  20. var max = g.OrderByDescending(v => v.Position).First();
  21. var t = Type.GetType(min.TypeStr);
  22. min.Dev.Protocol(t, this.World);
  23. max.Dev.Protocol(t, this.World);
  24. }
  25. }
  26. public override List<object> GetObjects()
  27. {
  28. return new List<object>();
  29. }
  30. public override void Update(List<WorkTimes> list)
  31. {
  32. //var sw = new Stopwatch();
  33. //sw.Start();
  34. //var pack = new DataPack();
  35. //pack.Frame = DateTime.Now;
  36. //var ps = pack.GetType().GetProperties();
  37. //foreach (var p in ps)
  38. //{
  39. // if (!p.PropertyType.IsArray)
  40. // continue;
  41. // var t = p.PropertyType.GetElementType();
  42. // if (t.IsGenericType)
  43. // {
  44. // var entType = t.GetGenericArguments()[0];
  45. // var protType = GetProtocolType(entType);
  46. // var arr = Device.All.Where(v => v.HasProtocol(protType))
  47. // .Select(v =>
  48. // {
  49. // try
  50. // {
  51. // var obj = Activator.CreateInstance(t);
  52. // t.GetProperty("Code").SetValue(obj, v.Code);
  53. // var value = v.Protocol(protType, World).Copy(entType);
  54. // t.GetProperty("Data").SetValue(obj, value);
  55. // return obj;
  56. // }
  57. // catch (Exception ex)
  58. // {
  59. // return null;
  60. // }
  61. // }).Where(v => v != null).ToArray();
  62. // var m = typeof(Enumerable).GetMethod("OfType", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
  63. // m = m.MakeGenericMethod(t);
  64. // var arr2 = m.Invoke(null, new object[] { arr });
  65. // m = typeof(Enumerable).GetMethod("ToArray", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
  66. // m = m.MakeGenericMethod(t);
  67. // var arr3 = m.Invoke(null, new object[] { arr2 });
  68. // p.SetValue(pack, arr3);
  69. // }
  70. //}
  71. //Redis.RPush("Packs", pack);
  72. //if (Redis.LLen("Packs") > 50000)
  73. //{
  74. // Redis.LTrim("Packs", 5000, -1);
  75. //}
  76. //sw.Stop();
  77. //list.Add(new WorkTimes { Total = sw.ElapsedMilliseconds, Key = "采集数据" });
  78. }
  79. private Type GetProtocolType(Type source)
  80. {
  81. var t = source.GetInterfaces().FirstOrDefault(v => v.GetInterfaces().Any(d => d.Name == "IProtocol"));
  82. return t;
  83. }
  84. }
  85. }