|
@@ -1,350 +0,0 @@
|
|
|
-using ServiceCenter.Redis;
|
|
|
-using ServiceCenter.SqlSugars;
|
|
|
-using SqlSugar;
|
|
|
-using System.Collections.Concurrent;
|
|
|
-using System.ComponentModel;
|
|
|
-using System.Diagnostics;
|
|
|
-using System.Text;
|
|
|
-using WCS.Core;
|
|
|
-using WCS.Entity.Protocol.BCR;
|
|
|
-using WCS.Entity.Protocol.DataStructure;
|
|
|
-using WCS.Entity.Protocol.RGV;
|
|
|
-using WCS.Entity.Protocol.Robot;
|
|
|
-using WCS.Entity.Protocol.SRM;
|
|
|
-using WCS.Entity.Protocol.Station;
|
|
|
-using WCS.Entity.Protocol.Truss;
|
|
|
-using WCS.WorkEngineering.Extensions;
|
|
|
-using WCS.WorkEngineering.Worlds;
|
|
|
-
|
|
|
-namespace WCS.WorkEngineering.Systems
|
|
|
-{
|
|
|
- /// <summary>
|
|
|
- /// 数据采集系统
|
|
|
- /// </summary>
|
|
|
- //[BelongTo(typeof(DataCollectionWorld))]
|
|
|
- [Description("数据采集系统")]
|
|
|
- public class DataCollectionSysyem : DeviceSystem<Device<IStation520>>
|
|
|
- {
|
|
|
- public static DeviceDataPack pack = new DeviceDataPack();
|
|
|
-
|
|
|
- private static object locker = new object();
|
|
|
-
|
|
|
- public DataCollectionSysyem()
|
|
|
- {
|
|
|
- //var sw = new Stopwatch();
|
|
|
- //sw.Start();
|
|
|
- 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);
|
|
|
- }
|
|
|
- //sw.Stop();
|
|
|
- //World.Log($"获取所有设备:{sw.ElapsedMilliseconds}");
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 所有设备数据
|
|
|
- /// Key 是不同设备所使用的类型 例如DeviceDataCollection<SRMData>
|
|
|
- /// value 不同设备的具体数据
|
|
|
- /// </summary>
|
|
|
- public static ConcurrentDictionary<string, DeviceData> AllDatas = new ConcurrentDictionary<string, DeviceData>();
|
|
|
-
|
|
|
- protected override bool ParallelDo => true;
|
|
|
-
|
|
|
- protected override bool SaveLogsToFile => true;
|
|
|
-
|
|
|
- public override bool Select(Device dev)
|
|
|
- {
|
|
|
- return dev.Code == "1";
|
|
|
- }
|
|
|
-
|
|
|
- public override void Do(Device<IStation520> objDev)
|
|
|
- {
|
|
|
- //var sql = new StringBuilder();
|
|
|
- //try
|
|
|
- //{
|
|
|
- // var sw = new Stopwatch();
|
|
|
- // sw.Start();
|
|
|
- // var pack = new DeviceDataPack();
|
|
|
- // pack.Frame = World.Frame;
|
|
|
- // sql.Append("INSERT INTO ");
|
|
|
- // var ps = pack.GetType().GetProperties().OrderBy(x => x.Name);
|
|
|
- // //var db = new SqlSugarHelper().PLC;
|
|
|
-
|
|
|
- // Parallel.ForEach(ps, p =>
|
|
|
- // {
|
|
|
- // if (!p.PropertyType.IsArray) return;
|
|
|
-
|
|
|
- // var t = p.PropertyType.GetElementType();
|
|
|
- // if (t.IsGenericType)
|
|
|
- // {
|
|
|
- // var entType = t.GetGenericArguments()[0];
|
|
|
- // var protType = GetProtocolType(entType);
|
|
|
- // if (protType == null) return;
|
|
|
-
|
|
|
- // var devices = Device.All.Where(v => v.HasProtocol(protType));
|
|
|
- // List<object> arr = new List<object>();
|
|
|
- // Parallel.ForEach(devices, x =>
|
|
|
- // {
|
|
|
- // try
|
|
|
- // {
|
|
|
- // var protObj = x.Protocol(protType, World) as ProtocolProxyBase;
|
|
|
- // if (protObj.Db.failed)
|
|
|
- // {
|
|
|
- // return;
|
|
|
- // }
|
|
|
-
|
|
|
- // var obj = Activator.CreateInstance(t);
|
|
|
- // t.GetProperty("Code").SetValue(obj, x.Code);
|
|
|
- // //var value = WCS.Core.Extentions.Copy(protObj, entType);
|
|
|
- // t.GetProperty("Data").SetValue(obj, value);
|
|
|
- // t.GetProperty("Frame").SetValue(obj, protObj.Frame);
|
|
|
- // entType.GetProperty("Code").SetValue(value, x.Code);
|
|
|
- // //var sql1 = GetSql(entType, value, db);
|
|
|
- // //Append(sql, sql1);
|
|
|
- // arr.Add(obj);
|
|
|
- // }
|
|
|
- // catch
|
|
|
- // {
|
|
|
- // }
|
|
|
- // });
|
|
|
-
|
|
|
- // 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);
|
|
|
- // }
|
|
|
- // });
|
|
|
- // var sw3 = new Stopwatch();
|
|
|
- // sw3.Start();
|
|
|
- // RedisHub.Monitor.RPush("Packs", pack);
|
|
|
- // if (RedisHub.Monitor.LLen("Packs") > 50000)
|
|
|
- // {
|
|
|
- // RedisHub.Monitor.LTrim("Packs", 5000, -1);
|
|
|
- // }
|
|
|
-
|
|
|
-
|
|
|
- // sw3.Stop();
|
|
|
- // World.Log($"redis存储耗时:{sw3.ElapsedMilliseconds}");
|
|
|
- // //var sw4 = new Stopwatch();
|
|
|
- // //sw4.Start();
|
|
|
- // //db.Ado.ExecuteCommand(sql.ToString());
|
|
|
- // //sw4.Stop();
|
|
|
- // //World.Log($"执行SQL耗时:{sw4.ElapsedMilliseconds}");
|
|
|
-
|
|
|
- // sw.Stop();
|
|
|
-
|
|
|
- // World.Log($"数据采集耗时:{sw.ElapsedMilliseconds}");
|
|
|
- //}
|
|
|
- //catch (Exception e)
|
|
|
- //{
|
|
|
- // World.Log($"错误内容:{e.Message}");
|
|
|
- //}
|
|
|
- }
|
|
|
-
|
|
|
- public void Set(StringBuilder sql, string cSql)
|
|
|
- {
|
|
|
- lock (locker)
|
|
|
- {
|
|
|
- sql.Append(cSql);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private Type GetProtocolType(Type source)
|
|
|
- {
|
|
|
- var t = source.GetInterfaces().FirstOrDefault(v => v.GetInterfaces().Any(d => d.Name == "IProtocol"));
|
|
|
- var t1 = source.GetInterfaces().FirstOrDefault(v => v.GetInterfaces().Any(d => d.Name == "IProtocol"));
|
|
|
- return t;
|
|
|
- }
|
|
|
-
|
|
|
- private object AppendLock = new object();
|
|
|
-
|
|
|
- public StringBuilder Append(StringBuilder sql, string value)
|
|
|
- {
|
|
|
- lock (AppendLock)
|
|
|
- {
|
|
|
- return sql.Append(value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public string GetSql(Type type, object entity, SqlSugarScopeProvider db)
|
|
|
- {
|
|
|
- string sql = string.Empty;
|
|
|
-
|
|
|
- //var ty = entity.GetType().GetProperty("CreateSql");
|
|
|
- switch (type.Name)
|
|
|
- {
|
|
|
- case nameof(WCS_SRM520):
|
|
|
- var item = entity as WCS_SRM520;
|
|
|
- sql = GetString(db.Insertable(item).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_SRM521):
|
|
|
- var item1 = entity as WCS_SRM521;
|
|
|
- sql = GetString(db.Insertable(item1).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_SRM537):
|
|
|
- var item2 = entity as WCS_SRM537;
|
|
|
- sql = GetString(db.Insertable(item2).ToSqlString());
|
|
|
- //ty.SetValue(entity, GetString(db.Insertable(item2).ToSqlString()));
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_RGV520):
|
|
|
- var item3 = entity as WCS_RGV520; sql = GetString(db.Insertable(item3).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_RGV521):
|
|
|
- var item4 = entity as WCS_RGV521; sql = GetString(db.Insertable(item4).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_BCR80):
|
|
|
- var item5 = entity as WCS_BCR80; sql = GetString(db.Insertable(item5).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_BCR81):
|
|
|
- var item6 = entity as WCS_BCR81; sql = GetString(db.Insertable(item6).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_BCR83):
|
|
|
- var item7 = entity as WCS_BCR83; sql = GetString(db.Insertable(item7).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_Station520):
|
|
|
- var item8 = entity as WCS_Station520; sql = GetString(db.Insertable(item8).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_Station521):
|
|
|
- var item9 = entity as WCS_Station521; sql = GetString(db.Insertable(item9).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_Station523):
|
|
|
- var item10 = entity as WCS_Station523; sql = GetString(db.Insertable(item10).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_Station524):
|
|
|
- var item11 = entity as WCS_Station524; sql = GetString(db.Insertable(item11).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_Station525):
|
|
|
- var item12 = entity as WCS_Station525; sql = GetString(db.Insertable(item12).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_Station90):
|
|
|
- var item13 = entity as WCS_Station90; sql = GetString(db.Insertable(item13).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_Station91):
|
|
|
- var item14 = entity as WCS_Station91; sql = GetString(db.Insertable(item14).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_Truss520):
|
|
|
- var item15 = entity as WCS_Truss520; sql = GetString(db.Insertable(item15).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_Truss521):
|
|
|
- var item16 = entity as WCS_Truss521; sql = GetString(db.Insertable(item16).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_Truss523):
|
|
|
- var item17 = entity as WCS_Truss523; sql = GetString(db.Insertable(item17).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_Truss530):
|
|
|
- var item18 = entity as WCS_Truss530; sql = GetString(db.Insertable(item18).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_Truss531):
|
|
|
- var item19 = entity as WCS_Truss531; sql = GetString(db.Insertable(item19).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_Robot520):
|
|
|
- var item20 = entity as WCS_Robot520; sql = GetString(db.Insertable(item20).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_Robot521):
|
|
|
- var item21 = entity as WCS_Robot521; sql = GetString(db.Insertable(item21).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_Robot522):
|
|
|
- var item22 = entity as WCS_Robot522; sql = GetString(db.Insertable(item22).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_Robot530):
|
|
|
- var item23 = entity as WCS_Robot530; sql = GetString(db.Insertable(item23).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
-
|
|
|
- case nameof(WCS_Robot531):
|
|
|
- var item24 = entity as WCS_Robot531; sql = GetString(db.Insertable(item24).ToSqlString());
|
|
|
- //ty.SetValue(entity, sql);
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- return sql;
|
|
|
- }
|
|
|
-
|
|
|
- public string GetString(string value)
|
|
|
- {
|
|
|
- return value.Replace("INSERT INTO ", "")
|
|
|
- .Replace(",N'", ",'")
|
|
|
- .Replace("\0", "")
|
|
|
- .Replace("wcs_", "")
|
|
|
- .Replace("(N'", "('") + "\r";
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 设备报警
|
|
|
- /// </summary>
|
|
|
- public class EquipmentAlarm
|
|
|
- {
|
|
|
- /// <summary>
|
|
|
- /// 设备号
|
|
|
- /// </summary>
|
|
|
- public string Code { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 内容
|
|
|
- /// </summary>
|
|
|
- public string Msg { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 时间
|
|
|
- /// </summary>
|
|
|
- public DateTime Time { get; set; }
|
|
|
- }
|
|
|
-}
|