| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 | 
							- using FreeRedis;
 
- using ServiceCenter.Extensions;
 
- using System.ComponentModel;
 
- using System.Diagnostics;
 
- using WCS.Core;
 
- using WCS.Entity.Protocol.BCR;
 
- using WCS.Entity.Protocol.DataStructure;
 
- using WCS.Entity.Protocol.Station;
 
- using WCS.WorkEngineering.Worlds;
 
- namespace WCS.WorkEngineering.Systems
 
- {
 
-     //[BelongTo(typeof(MainWorld))]
 
-     [Description("数据采集系统")]
 
-     public class 数据采集 : SystemBase
 
-     {
 
-         private RedisClient Redis = new RedisClient("");
 
-         public 数据采集()
 
-         {
 
-             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 }))
 
-                 .GroupBy(v => v.DB);
 
-             foreach (var g in gs)
 
-             {
 
-                 var min = g.OrderBy(v => v.Position).First();
 
-                 var max = g.OrderByDescending(v => v.Position).First();
 
-                 var t = Type.GetType(min.TypeStr);
 
-                 min.Dev.Protocol(t, this.World);
 
-                 max.Dev.Protocol(t, this.World);
 
-             }
 
-         }
 
-         public override List<object> GetObjects()
 
-         {
 
-             return new List<object>();
 
-         }
 
-         public override void Update(List<WorkTimes> list)
 
-         {
 
-             var sw = new Stopwatch();
 
-             sw.Start();
 
-             var pack = new DeviceDataPack();
 
-             pack.Frame = DateTime.Now;
 
-             var ps = pack.GetType().GetProperties().OrderBy(x => x.Name);
 
-             foreach (var p in ps)
 
-             {
 
-                 if (!p.PropertyType.IsArray&&p.PropertyType!= typeof(IBCR80[]))
 
-                     continue;
 
-                 var dev = p.PropertyType.GetElementType();
 
-                 if (dev.GetInterfaces().Any(v => v.GetInterfaces().Any(d => d.Name == "IProtocol")))
 
-                 {
 
-                     var t = p.PropertyType.GetElementType();
 
-                     var protType = GetProtocolType(t);
 
-                     var arr = Device.All.Where(v => v.HasProtocol(protType))
 
-                     .Select(v =>
 
-                     {
 
-                         try
 
-                         {
 
-                             var obj = Activator.CreateInstance(t);
 
-                             t.GetProperty("Code").SetValue(obj, v.Code);
 
-                             dynamic protObj = v.Protocol(protType, World);
 
-                             if (protType == typeof(IBCR81))
 
-                             {
 
-                                 var a = new Device<IBCR81>(v, World);
 
-                                 var b = a.Data.Content;
 
-                             }
 
-                             var value = ServiceCenter.Extensions.TypeExtension.Copy(protObj, t);
 
-                             //t.GetProperty("Data").SetValue(obj, value);
 
-                             return obj;
 
-                         }
 
-                         catch (Exception ex)
 
-                         {
 
-                             return null;
 
-                         }
 
-                     }).Where(v => v != null).ToArray();
 
-                     var m = typeof(Enumerable).GetMethod("OfType", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
 
-                     m = m.MakeGenericMethod(t);
 
-                     var arr2 = m.Invoke(null, new object[] { arr });
 
-                     m = typeof(Enumerable).GetMethod("ToArray", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
 
-                     m = m.MakeGenericMethod(t);
 
-                     var arr3 = m.Invoke(null, new object[] { arr2 });
 
-                     p.SetValue(pack, arr3);
 
-                 }
 
-             }
 
-             //Redis.RPush("Packs", pack);
 
-             //if (Redis.LLen("Packs") > 50000)
 
-             //{
 
-             //    Redis.LTrim("Packs", 5000, -1);
 
-             //}
 
-             sw.Stop();
 
-             list.Add(new WorkTimes { Total = sw.ElapsedMilliseconds, Key = "采集数据" });
 
-             //var sw = new Stopwatch();
 
-             //sw.Start();
 
-             //var pack = new DeviceDataPack();
 
-             //pack.Frame = DateTime.Now;
 
-             //var ps = pack.GetType().GetProperties();
 
-             //foreach (var p in ps)
 
-             //{
 
-             //    if (!p.PropertyType.IsClass) continue;
 
-             //    var packAct = Activator.CreateInstance(p.PropertyType);
 
-             //    var prs = p.PropertyType.GetProperties();
 
-             //    foreach (var pr in prs)
 
-             //    {
 
-             //        if (!pr.PropertyType.IsArray) continue;
 
-             //        var yt = pr.PropertyType.GetElementType();
 
-             //        if (yt.IsClass)
 
-             //        {
 
-             //            var pros = yt.GetProperties();
 
-             //            //var entType = yt.GetGenericArguments()[0];
 
-             //            //var protType = GetProtocolType(entType);
 
-             //            var dataAct = Activator.CreateInstance(yt);
 
-             //            Parallel.ForEach(pros, pro =>
 
-             //            {
 
-             //                try
 
-             //                {
 
-             //                    if (pro.PropertyType != typeof(DateTime))
 
-             //                    {
 
-             //                        if (pro.PropertyType != typeof(string))
 
-             //                        {
 
-             //                            var protType = GetProtocolType(pro.PropertyType);
 
-             //                            var dev = Device.All
 
-             //                                .Where(v => v.HasProtocol(protType)).Select(v =>
 
-             //                                {
 
-             //                                    try
 
-             //                                    {
 
-             //                                        var obj = Activator.CreateInstance(pro.PropertyType);
 
-             //                                        pro.PropertyType.GetProperty("Code").SetValue(obj, v.Code);
 
-             //                                        var a = v.Protocol(protType, World);
 
-             //                                        var value = v.Protocol(protType, World).Copy(pro.PropertyType);
 
-             //                                        pro.SetValue(obj, value);
 
-             //                                        return obj;
 
-             //                                    }
 
-             //                                    catch (Exception ex)
 
-             //                                    {
 
-             //                                        return null;
 
-             //                                    }
 
-             //                                }).FirstOrDefault(v => v != null);
 
-             //                            if (dev != null)
 
-             //                            {
 
-             //                                pro.SetValue(dataAct, dev);
 
-             //                            }
 
-             //                        }
 
-             //                        else
 
-             //                        {
 
-             //                        }
 
-             //                    }
 
-             //                }
 
-             //                catch (Exception e)
 
-             //                {
 
-             //                    Console.WriteLine(e);
 
-             //                }
 
-             //            });
 
-             //            var a = 1;
 
-             //            //var m = typeof(Enumerable).GetMethod("OfType", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
 
-             //            //m = m.MakeGenericMethod(yt);
 
-             //            //var arr2 = m.Invoke(null, new object[] { datasAct });
 
-             //            //m = typeof(Enumerable).GetMethod("ToArray", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
 
-             //            //m = m.MakeGenericMethod(yt);
 
-             //            //var arr3 = m.Invoke(null, new object[] { arr2 });
 
-             //            //p.SetValue(pack, arr3);
 
-             //            //var entType = yt.GetGenericArguments()[0];
 
-             //            //var protType = GetProtocolType(entType);
 
-             //            //var arr = Device.All.Where(v => v.HasProtocol(protType))
 
-             //            //    .Select(v =>
 
-             //            //    {
 
-             //            //        try
 
-             //            //        {
 
-             //            //            var obj = Activator.CreateInstance(yt);
 
-             //            //            yt.GetProperty("Code").SetValue(obj, v.Code);
 
-             //            //            //var value = v.Protocol(protType, World).Copy(entType);
 
-             //            //            //t.GetProperty("Data").SetValue(obj, value);
 
-             //            //            return obj;
 
-             //            //        }
 
-             //            //        catch (Exception ex)
 
-             //            //        {
 
-             //            //            return null;
 
-             //            //        }
 
-             //            //    }).Where(v => v != null).ToArray();
 
-             //            //var m = typeof(Enumerable).GetMethod("OfType", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
 
-             //            //m = m.MakeGenericMethod(yt);
 
-             //            //var arr2 = m.Invoke(null, new object[] { arr });
 
-             //            //m = typeof(Enumerable).GetMethod("ToArray", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
 
-             //            //m = m.MakeGenericMethod(yt);
 
-             //            //var arr3 = m.Invoke(null, new object[] { arr2 });
 
-             //            //p.SetValue(pack, arr3);
 
-             //        }
 
-             //    }
 
-             //    //var t = p.PropertyType.GetElementType();
 
-             //    //if (t.IsGenericType)
 
-             //    //{
 
-             //    //    var entType = t.GetGenericArguments()[0];
 
-             //    //    var protType = GetProtocolType(entType);
 
-             //    //    var arr = Device.All.Where(v => v.HasProtocol(protType))
 
-             //    //    .Select(v =>
 
-             //    //    {
 
-             //    //        try
 
-             //    //        {
 
-             //    //            var obj = Activator.CreateInstance(t);
 
-             //    //            t.GetProperty("Code").SetValue(obj, v.Code);
 
-             //    //            //var value = v.Protocol(protType, World).Copy(entType);
 
-             //    //            //t.GetProperty("Data").SetValue(obj, value);
 
-             //    //            return obj;
 
-             //    //        }
 
-             //    //        catch (Exception ex)
 
-             //    //        {
 
-             //    //            return null;
 
-             //    //        }
 
-             //    //    }).Where(v => v != null).ToArray();
 
-             //    //    var m = typeof(Enumerable).GetMethod("OfType", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
 
-             //    //    m = m.MakeGenericMethod(t);
 
-             //    //    var arr2 = m.Invoke(null, new object[] { arr });
 
-             //    //    m = typeof(Enumerable).GetMethod("ToArray", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
 
-             //    //    m = m.MakeGenericMethod(t);
 
-             //    //    var arr3 = m.Invoke(null, new object[] { arr2 });
 
-             //    //    p.SetValue(pack, arr3);
 
-             //    //}
 
-             //}
 
-             ////Redis.RPush("Packs", pack);
 
-             ////if (Redis.LLen("Packs") > 50000)
 
-             ////{
 
-             ////    Redis.LTrim("Packs", 5000, -1);
 
-             ////}
 
-             //sw.Stop();
 
-             //list.Add(new WorkTimes { Total = sw.ElapsedMilliseconds, Key = "采集数据" });
 
-         }
 
-         private Type GetProtocolType(Type source)
 
-         {
 
-             var t = source.GetInterfaces().FirstOrDefault(v => v.GetInterfaces().Any(d => d.Name == "IProtocol"));
 
-             return t;
 
-         }
 
-     }
 
- }
 
 
  |