123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- using FreeRedis;
- using MessagePack;
- using MessagePack.Resolvers;
- using NetTaste;
- using NPOI.SS.Formula.Functions;
- using OracleInternal.Common;
- using PlcSiemens.Core.Extension;
- using ServiceCenter.Redis;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Diagnostics;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using WCS.Core;
- using WCS.Entity;
- using WCS.Entity.Protocol.DataStructure;
- using WCS.Entity.Protocol.Station;
- using WCS.WorkEngineering.Extensions;
- using WCS.WorkEngineering.Worlds;
- namespace WCS.WorkEngineering.Systems
- {
- [BelongTo(typeof(MainWorld))]
- [Description("数据采集系统")]
- public class DataCollecctor : SystemBase
- {
- public static DataPack Pack;
-
- public DataCollecctor()
- {
- 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 channel = Ltc.GetChannel();
- Ltc.SetChannel(null);
- var sw = new Stopwatch();
- sw.Start();
- Pack = new DataPack();
- Pack.Frame = World.Frame;
- var ps = Pack.GetType().GetProperties();
- foreach (var p in ps)
- {
- if (!p.PropertyType.IsArray)
- continue;
- var t = p.PropertyType.GetElementType();
- if (t.IsGenericType)
- {
- var entType = t.GetGenericArguments()[0];
- var protType =GetProtocolType( entType);
- if (protType == null)
- continue;
- var arr = Device.All.Where(v => v.HasProtocol(protType))
- .Select(v =>
- {
- try
- {
- var protObj = v.Protocol(protType, World) as ProtocolProxyBase;
- if (protObj.Db.Failed)
- {
- return null;
- }
- var obj = Activator.CreateInstance(t);
- t.GetProperty("Code").SetValue(obj, v.Code);
- var value = WCS.Core.Extentions.Copy(protObj, entType);
- t.GetProperty("Data").SetValue(obj, value);
- t.GetProperty("Frame").SetValue(obj, protObj.Frame);
- 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);
- }
- }
- sw.Stop();
- list.Add(new WorkTimes { Total = sw.ElapsedMilliseconds, Key = "采集数据" });
- Ltc.SetChannel(channel);
- }
- Type GetProtocolType(Type source)
- {
- var t = source.GetInterfaces()
- .Where(v => v.GetInterfaces().Any(d => d.Name == "IProtocol")).FirstOrDefault();
- return t;
- }
- }
- }
|