|
@@ -22,10 +22,10 @@ using WCS.WorkEngineering.Worlds;
|
|
|
namespace WCS.WorkEngineering.Systems
|
|
|
{
|
|
|
/// <summary>
|
|
|
- /// 数据采集系统
|
|
|
+ /// 数据处理系统
|
|
|
/// </summary>
|
|
|
[BelongTo(typeof(MainWorld))]
|
|
|
- [Description("数据采集系统")]
|
|
|
+ [Description("数据处理系统")]
|
|
|
public class DataCollectionSysyem : DeviceSystem<Device<IStation520>>
|
|
|
{
|
|
|
public static DeviceDataPack pack = new DeviceDataPack();
|
|
@@ -54,62 +54,16 @@ namespace WCS.WorkEngineering.Systems
|
|
|
{
|
|
|
//通过数据条数处理
|
|
|
var db = new SqlSugarHelper().PLC;
|
|
|
- ExRobotRunInfo(db);
|
|
|
- ExRobotAlarmInfo(db);
|
|
|
- ExSrmAlarmInfo(db);
|
|
|
- ExRgvAlarmInfo(db);
|
|
|
-
|
|
|
- //Parallel.ForEach(robot522, infos =>
|
|
|
- //{
|
|
|
- // var start = infos.OrderBy(x => x.Frame).First();
|
|
|
- // var end = infos.OrderByDescending(x => x.Frame).First();
|
|
|
- // if (db.Queryable<DevAlarmInfo>().Any(x => x.Frame == end.Frame)) return;
|
|
|
- // List<DevAlarmInfo> runInfos = new List<DevAlarmInfo>();
|
|
|
- // foreach (var info in infos)
|
|
|
- // {
|
|
|
- // if (info.Frame == start.Frame)
|
|
|
- // {
|
|
|
- // runInfos.Add(new DevAlarmInfo()
|
|
|
- // {
|
|
|
- // Frame = info.Frame,
|
|
|
- // Code = info.Code,
|
|
|
- // Alarm = info.Alarm.ToString(),
|
|
|
- // StartTime = startTime,
|
|
|
- // EndTime = info.Frame,
|
|
|
- // Duration = Convert.ToInt64((info.Frame - startTime).Milliseconds)
|
|
|
- // });
|
|
|
- // }
|
|
|
- // else if (info.Frame == end.Frame)
|
|
|
- // {
|
|
|
- // runInfos.Add(new DevAlarmInfo()
|
|
|
- // {
|
|
|
- // Frame = info.Frame,
|
|
|
- // Code = info.Code,
|
|
|
- // Alarm = info.Alarm.ToString(),
|
|
|
- // StartTime = info.Frame,
|
|
|
- // EndTime = endTime,
|
|
|
- // Duration = Convert.ToInt64((endTime - info.Frame).Milliseconds)
|
|
|
- // });
|
|
|
- // }
|
|
|
- // else
|
|
|
- // {
|
|
|
- // if (start.Alarm != info.Alarm)
|
|
|
- // {
|
|
|
- // runInfos.Add(new DevAlarmInfo()
|
|
|
- // {
|
|
|
- // Frame = info.Frame,
|
|
|
- // Code = info.Code,
|
|
|
- // Alarm = info.Alarm.ToString(),
|
|
|
- // StartTime = start.Frame,
|
|
|
- // EndTime = info.Frame,
|
|
|
- // Duration = Convert.ToInt64((info.Frame - start.Frame).Milliseconds)
|
|
|
- // });
|
|
|
- // start = info;
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // db.Insertable(runInfos).ExecuteCommand();
|
|
|
- // });
|
|
|
+ var plcEx= new SqlSugarHelper().PLCEX;
|
|
|
+ ExRobotRunInfo(db, plcEx);
|
|
|
+ ExSrmRunInfo(db, plcEx);
|
|
|
+ ExRgvRunInfo(db, plcEx);
|
|
|
+ ExTrussRunInfo(db, plcEx);
|
|
|
+ ExRobotAlarmInfo(db, plcEx);
|
|
|
+ ExSrmAlarmInfo(db, plcEx);
|
|
|
+ ExRgvAlarmInfo(db, plcEx);
|
|
|
+ ExTrussAlarmInfo(db, plcEx);
|
|
|
+ ExRobotTaskSumRunInfo(db, plcEx);
|
|
|
}
|
|
|
|
|
|
#region 设备运行信息收集
|
|
@@ -118,16 +72,17 @@ namespace WCS.WorkEngineering.Systems
|
|
|
/// 机械臂
|
|
|
/// </summary>
|
|
|
/// <param name="db"></param>
|
|
|
- public void ExRobotRunInfo(SqlSugarScopeProvider db)
|
|
|
+ public void ExRobotRunInfo(SqlSugarScopeProvider db, SqlSugarScopeProvider plcEx)
|
|
|
{
|
|
|
var startTime = DateTime.Now;
|
|
|
var endTime = DateTime.Now;
|
|
|
IEnumerable<IGrouping<string, WCS_Robot521>> robot521 = new List<IGrouping<string, WCS_Robot521>>();
|
|
|
+ var type = DevType.Robot.ToString();
|
|
|
//查看rgv类型是否存在运行信息,用于系统被第一次启用时进行初始化
|
|
|
- if (db.Queryable<DevRunInfo>().Any(x => x.Type == DevType.Robot))
|
|
|
+ if (plcEx.Queryable<DevRunInfo>().Any(x => x.Type == type))
|
|
|
{
|
|
|
//已有信息,查找最后一条信息用于获取开始时间,最后一条通常是前一天的最后条数据
|
|
|
- var runInfo = db.Queryable<DevRunInfo>().Where(x => x.Type == DevType.Robot).OrderByDescending(x => x.Frame).First();
|
|
|
+ var runInfo = plcEx.Queryable<DevRunInfo>().Where(x => x.Type == type).OrderByDescending(x => x.Frame).First();
|
|
|
startTime = runInfo.Frame.AddDays(+1).Date;//后一天的初始时间
|
|
|
endTime = startTime.AddDays(+1).AddMilliseconds(-1);//
|
|
|
}
|
|
@@ -138,13 +93,13 @@ namespace WCS.WorkEngineering.Systems
|
|
|
endTime = startTime.AddDays(+1).AddMilliseconds(-1);
|
|
|
}
|
|
|
if (endTime > DateTime.Now.AddHours(1)) return; //一次处理24小时的数据
|
|
|
- if (db.Queryable<DevRunInfo>().Any(x => x.EndTime == endTime && x.Type == DevType.Robot)) return;
|
|
|
+ if (plcEx.Queryable<DevRunInfo>().Any(x => x.EndTime == endTime && x.Type == type)) return;
|
|
|
|
|
|
robot521 = db.Queryable<WCS_Robot521>().Where(x => x.Frame > startTime && x.Frame <= endTime).ToList().GroupBy(x => x.Code).ToList();
|
|
|
|
|
|
if (!robot521.Any())
|
|
|
{
|
|
|
- db.Insertable(new DevRunInfo()
|
|
|
+ plcEx.Insertable(new DevRunInfo()
|
|
|
{
|
|
|
Frame = endTime,
|
|
|
Code = "当前时段无有效数据",
|
|
@@ -153,7 +108,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = startTime,
|
|
|
EndTime = endTime,
|
|
|
Duration = Convert.ToInt64((endTime - startTime).TotalMilliseconds),
|
|
|
- Type = DevType.Robot
|
|
|
+ Type = type
|
|
|
}).ExecuteCommand();
|
|
|
}
|
|
|
|
|
@@ -163,9 +118,9 @@ namespace WCS.WorkEngineering.Systems
|
|
|
var start = infos.OrderBy(x => x.Frame).First();
|
|
|
var end = infos.OrderByDescending(x => x.Frame).First();
|
|
|
//通过是否有最后一条数据来确定当前数据是否有分析存储过
|
|
|
- if (db.Queryable<DevRunInfo>().Any(x => x.Code == infos.Key && x.EndTime == end.Frame)) return;
|
|
|
+ if (plcEx.Queryable<DevRunInfo>().Any(x => x.Code == infos.Key && x.EndTime == end.Frame)) return;
|
|
|
//获取前一天最后的一条数据
|
|
|
- var yesterEnd = db.Queryable<DevRunInfo>().Where(x => x.Code == infos.Key && x.Frame < endTime).OrderByDescending(x => x.Frame).First();
|
|
|
+ var yesterEnd = plcEx.Queryable<DevRunInfo>().Where(x => x.Code == infos.Key && x.Frame < endTime).OrderByDescending(x => x.Frame).First();
|
|
|
List<DevRunInfo> runInfos = new List<DevRunInfo>();
|
|
|
foreach (var info in infos.OrderBy(x => x.Frame))
|
|
|
{
|
|
@@ -182,7 +137,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = startTime,
|
|
|
EndTime = info.Frame,
|
|
|
Duration = Convert.ToInt64((info.Frame - startTime).TotalMilliseconds),
|
|
|
- Type = DevType.Robot
|
|
|
+ Type = type
|
|
|
});
|
|
|
}
|
|
|
else //如果有就用前一天的最后一条数据做计算
|
|
@@ -196,7 +151,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = startTime,
|
|
|
EndTime = info.Frame,
|
|
|
Duration = Convert.ToInt64((info.Frame - startTime).TotalMilliseconds),
|
|
|
- Type = DevType.Robot
|
|
|
+ Type = type
|
|
|
});
|
|
|
}
|
|
|
}
|
|
@@ -211,7 +166,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = info.Frame,
|
|
|
EndTime = endTime,
|
|
|
Duration = Convert.ToInt64((endTime - info.Frame).TotalMilliseconds),
|
|
|
- Type = DevType.Robot
|
|
|
+ Type = type
|
|
|
});
|
|
|
}
|
|
|
else //中间数据
|
|
@@ -226,14 +181,14 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = start.Frame,
|
|
|
EndTime = info.Frame,
|
|
|
Duration = Convert.ToInt64((info.Frame - start.Frame).TotalMilliseconds),
|
|
|
- Type = DevType.Robot
|
|
|
+ Type = type
|
|
|
});
|
|
|
start = info;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- var sql = db.Insertable(runInfos).ToSqlString();
|
|
|
- db.Ado.ExecuteCommand(GetString(sql));
|
|
|
+ var sql = plcEx.Insertable(runInfos).ToSqlString();
|
|
|
+ plcEx.Ado.ExecuteCommand(GetString(sql));
|
|
|
});
|
|
|
}
|
|
|
|
|
@@ -241,16 +196,17 @@ namespace WCS.WorkEngineering.Systems
|
|
|
/// 堆垛机
|
|
|
/// </summary>
|
|
|
/// <param name="db"></param>
|
|
|
- public void ExSrmRunInfo(SqlSugarScopeProvider db)
|
|
|
+ public void ExSrmRunInfo(SqlSugarScopeProvider db, SqlSugarScopeProvider plcEx)
|
|
|
{
|
|
|
var startTime = DateTime.Now;
|
|
|
var endTime = DateTime.Now;
|
|
|
IEnumerable<IGrouping<string, WCS_SRM521>> srm521 = new List<IGrouping<string, WCS_SRM521>>();
|
|
|
+ var type = DevType.SRM.ToString();
|
|
|
//查看rgv类型是否存在运行信息,用于系统被第一次启用时进行初始化
|
|
|
- if (db.Queryable<DevRunInfo>().Any(x => x.Type == DevType.SRM))
|
|
|
+ if (plcEx.Queryable<DevRunInfo>().Any(x => x.Type == type))
|
|
|
{
|
|
|
//已有信息,查找最后一条信息用于获取开始时间,最后一条通常是前一天的最后条数据
|
|
|
- var runInfo = db.Queryable<DevRunInfo>().Where(x => x.Type == DevType.SRM).OrderByDescending(x => x.Frame).First();
|
|
|
+ var runInfo = plcEx.Queryable<DevRunInfo>().Where(x => x.Type == type).OrderByDescending(x => x.Frame).First();
|
|
|
startTime = runInfo.Frame.AddDays(+1).Date;//后一天的初始时间
|
|
|
endTime = startTime.AddDays(+1).AddMilliseconds(-1);//
|
|
|
}
|
|
@@ -261,13 +217,13 @@ namespace WCS.WorkEngineering.Systems
|
|
|
endTime = startTime.AddDays(+1).AddMilliseconds(-1);
|
|
|
}
|
|
|
if (endTime > DateTime.Now.AddHours(1)) return; //一次处理24小时的数据
|
|
|
- if (db.Queryable<DevRunInfo>().Any(x => x.EndTime == endTime && x.Type == DevType.SRM)) return;
|
|
|
+ if (plcEx.Queryable<DevRunInfo>().Any(x => x.EndTime == endTime && x.Type == type)) return;
|
|
|
|
|
|
srm521 = db.Queryable<WCS_SRM521>().Where(x => x.Frame > startTime && x.Frame <= endTime).ToList().GroupBy(x => x.Code).ToList();
|
|
|
|
|
|
if (!srm521.Any())
|
|
|
{
|
|
|
- db.Insertable(new DevRunInfo()
|
|
|
+ plcEx.Insertable(new DevRunInfo()
|
|
|
{
|
|
|
Frame = endTime,
|
|
|
Code = "当前时段无有效数据",
|
|
@@ -276,7 +232,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = startTime,
|
|
|
EndTime = endTime,
|
|
|
Duration = Convert.ToInt64((endTime - startTime).TotalMilliseconds),
|
|
|
- Type = DevType.SRM
|
|
|
+ Type = type
|
|
|
}).ExecuteCommand();
|
|
|
}
|
|
|
|
|
@@ -286,9 +242,9 @@ namespace WCS.WorkEngineering.Systems
|
|
|
var start = infos.OrderBy(x => x.Frame).First();
|
|
|
var end = infos.OrderByDescending(x => x.Frame).First();
|
|
|
//通过是否有最后一条数据来确定当前数据是否有分析存储过
|
|
|
- if (db.Queryable<DevRunInfo>().Any(x => x.Code == infos.Key && x.EndTime == end.Frame)) return;
|
|
|
+ if (plcEx.Queryable<DevRunInfo>().Any(x => x.Code == infos.Key && x.EndTime == end.Frame)) return;
|
|
|
//获取前一天最后的一条数据
|
|
|
- var yesterEnd = db.Queryable<DevRunInfo>().Where(x => x.Code == infos.Key && x.Frame < endTime).OrderByDescending(x => x.Frame).First();
|
|
|
+ var yesterEnd = plcEx.Queryable<DevRunInfo>().Where(x => x.Code == infos.Key && x.Frame < endTime).OrderByDescending(x => x.Frame).First();
|
|
|
List<DevRunInfo> runInfos = new List<DevRunInfo>();
|
|
|
foreach (var info in infos.OrderBy(x => x.Frame))
|
|
|
{
|
|
@@ -305,7 +261,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = startTime,
|
|
|
EndTime = info.Frame,
|
|
|
Duration = Convert.ToInt64((info.Frame - startTime).TotalMilliseconds),
|
|
|
- Type = DevType.SRM
|
|
|
+ Type = type
|
|
|
});
|
|
|
}
|
|
|
else //如果有就用前一天的最后一条数据做计算
|
|
@@ -319,7 +275,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = startTime,
|
|
|
EndTime = info.Frame,
|
|
|
Duration = Convert.ToInt64((info.Frame - startTime).TotalMilliseconds),
|
|
|
- Type = DevType.SRM
|
|
|
+ Type = type
|
|
|
});
|
|
|
}
|
|
|
}
|
|
@@ -334,7 +290,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = info.Frame,
|
|
|
EndTime = endTime,
|
|
|
Duration = Convert.ToInt64((endTime - info.Frame).TotalMilliseconds),
|
|
|
- Type = DevType.SRM
|
|
|
+ Type = type
|
|
|
});
|
|
|
}
|
|
|
else //中间数据
|
|
@@ -349,14 +305,14 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = start.Frame,
|
|
|
EndTime = info.Frame,
|
|
|
Duration = Convert.ToInt64((info.Frame - start.Frame).TotalMilliseconds),
|
|
|
- Type = DevType.SRM
|
|
|
+ Type = type
|
|
|
});
|
|
|
start = info;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- var sql = db.Insertable(runInfos).ToSqlString();
|
|
|
- db.Ado.ExecuteCommand(GetString(sql));
|
|
|
+ var sql = plcEx.Insertable(runInfos).ToSqlString();
|
|
|
+ plcEx.Ado.ExecuteCommand(GetString(sql));
|
|
|
});
|
|
|
}
|
|
|
|
|
@@ -364,16 +320,17 @@ namespace WCS.WorkEngineering.Systems
|
|
|
/// rgv
|
|
|
/// </summary>
|
|
|
/// <param name="db"></param>
|
|
|
- public void ExRgvRunInfo(SqlSugarScopeProvider db)
|
|
|
+ public void ExRgvRunInfo(SqlSugarScopeProvider db, SqlSugarScopeProvider plcEx)
|
|
|
{
|
|
|
var startTime = DateTime.Now;
|
|
|
var endTime = DateTime.Now;
|
|
|
IEnumerable<IGrouping<string, WCS_RGV521>> rgv521 = new List<IGrouping<string, WCS_RGV521>>();
|
|
|
+ var type = DevType.RGV.ToString();
|
|
|
//查看rgv类型是否存在运行信息,用于系统被第一次启用时进行初始化
|
|
|
- if (db.Queryable<DevRunInfo>().Any(x => x.Type == DevType.RGV))
|
|
|
+ if (plcEx.Queryable<DevRunInfo>().Any(x => x.Type == type))
|
|
|
{
|
|
|
//已有信息,查找最后一条信息用于获取开始时间,最后一条通常是前一天的最后条数据
|
|
|
- var runInfo = db.Queryable<DevRunInfo>().Where(x => x.Type == DevType.RGV).OrderByDescending(x => x.Frame).First();
|
|
|
+ var runInfo = plcEx.Queryable<DevRunInfo>().Where(x => x.Type == type).OrderByDescending(x => x.Frame).First();
|
|
|
startTime = runInfo.Frame.AddDays(+1).Date;//后一天的初始时间
|
|
|
endTime = startTime.AddDays(+1).AddMilliseconds(-1);//
|
|
|
}
|
|
@@ -384,7 +341,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
endTime = startTime.AddDays(+1).AddMilliseconds(-1);
|
|
|
}
|
|
|
if (endTime > DateTime.Now.AddHours(1)) return; //一次处理24小时的数据
|
|
|
- if (db.Queryable<DevRunInfo>().Any(x => x.EndTime == endTime && x.Type == DevType.RGV)) return;
|
|
|
+ if (plcEx.Queryable<DevRunInfo>().Any(x => x.EndTime == endTime && x.Type == type)) return;
|
|
|
|
|
|
rgv521 = db.Queryable<WCS_RGV521>().Where(x => x.Frame > startTime && x.Frame <= endTime).ToList().GroupBy(x => x.Code).ToList();
|
|
|
|
|
@@ -399,7 +356,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = startTime,
|
|
|
EndTime = endTime,
|
|
|
Duration = Convert.ToInt64((endTime - startTime).TotalMilliseconds),
|
|
|
- Type = DevType.RGV
|
|
|
+ Type = type
|
|
|
}).ExecuteCommand();
|
|
|
}
|
|
|
|
|
@@ -409,9 +366,9 @@ namespace WCS.WorkEngineering.Systems
|
|
|
var start = infos.OrderBy(x => x.Frame).First();
|
|
|
var end = infos.OrderByDescending(x => x.Frame).First();
|
|
|
//通过是否有最后一条数据来确定当前数据是否有分析存储过
|
|
|
- if (db.Queryable<DevRunInfo>().Any(x => x.Code == infos.Key && x.EndTime == end.Frame)) return;
|
|
|
+ if (plcEx.Queryable<DevRunInfo>().Any(x => x.Code == infos.Key && x.EndTime == end.Frame)) return;
|
|
|
//获取前一天最后的一条数据
|
|
|
- var yesterEnd = db.Queryable<DevRunInfo>().Where(x => x.Code == infos.Key && x.Frame < endTime).OrderByDescending(x => x.Frame).First();
|
|
|
+ var yesterEnd = plcEx.Queryable<DevRunInfo>().Where(x => x.Code == infos.Key && x.Frame < endTime).OrderByDescending(x => x.Frame).First();
|
|
|
List<DevRunInfo> runInfos = new List<DevRunInfo>();
|
|
|
foreach (var info in infos.OrderBy(x => x.Frame))
|
|
|
{
|
|
@@ -428,7 +385,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = startTime,
|
|
|
EndTime = info.Frame,
|
|
|
Duration = Convert.ToInt64((info.Frame - startTime).TotalMilliseconds),
|
|
|
- Type = DevType.RGV
|
|
|
+ Type = type
|
|
|
});
|
|
|
}
|
|
|
else //如果有就用前一天的最后一条数据做计算
|
|
@@ -442,7 +399,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = startTime,
|
|
|
EndTime = info.Frame,
|
|
|
Duration = Convert.ToInt64((info.Frame - startTime).TotalMilliseconds),
|
|
|
- Type = DevType.RGV
|
|
|
+ Type = type
|
|
|
});
|
|
|
}
|
|
|
}
|
|
@@ -457,7 +414,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = info.Frame,
|
|
|
EndTime = endTime,
|
|
|
Duration = Convert.ToInt64((endTime - info.Frame).TotalMilliseconds),
|
|
|
- Type = DevType.RGV
|
|
|
+ Type = type
|
|
|
});
|
|
|
}
|
|
|
else //中间数据
|
|
@@ -472,14 +429,14 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = start.Frame,
|
|
|
EndTime = info.Frame,
|
|
|
Duration = Convert.ToInt64((info.Frame - start.Frame).TotalMilliseconds),
|
|
|
- Type = DevType.Robot
|
|
|
+ Type = type
|
|
|
});
|
|
|
start = info;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- var sql = db.Insertable(runInfos).ToSqlString();
|
|
|
- db.Ado.ExecuteCommand(GetString(sql));
|
|
|
+ var sql = plcEx.Insertable(runInfos).ToSqlString();
|
|
|
+ plcEx.Ado.ExecuteCommand(GetString(sql));
|
|
|
});
|
|
|
}
|
|
|
|
|
@@ -487,16 +444,17 @@ namespace WCS.WorkEngineering.Systems
|
|
|
/// 桁架
|
|
|
/// </summary>
|
|
|
/// <param name="db"></param>
|
|
|
- public void ExTrussRunInfo(SqlSugarScopeProvider db)
|
|
|
+ public void ExTrussRunInfo(SqlSugarScopeProvider db, SqlSugarScopeProvider plcEx)
|
|
|
{
|
|
|
var startTime = DateTime.Now;
|
|
|
var endTime = DateTime.Now;
|
|
|
IEnumerable<IGrouping<string, WCS_Truss521>> truss521 = new List<IGrouping<string, WCS_Truss521>>();
|
|
|
+ var type = DevType.Truss.ToString();
|
|
|
//查看rgv类型是否存在运行信息,用于系统被第一次启用时进行初始化
|
|
|
- if (db.Queryable<DevRunInfo>().Any(x => x.Type == DevType.Truss))
|
|
|
+ if (plcEx.Queryable<DevRunInfo>().Any(x => x.Type == type))
|
|
|
{
|
|
|
//已有信息,查找最后一条信息用于获取开始时间,最后一条通常是前一天的最后条数据
|
|
|
- var runInfo = db.Queryable<DevRunInfo>().Where(x => x.Type == DevType.Truss).OrderByDescending(x => x.Frame).First();
|
|
|
+ var runInfo = plcEx.Queryable<DevRunInfo>().Where(x => x.Type == type).OrderByDescending(x => x.Frame).First();
|
|
|
startTime = runInfo.Frame.AddDays(+1).Date;//后一天的初始时间
|
|
|
endTime = startTime.AddDays(+1).AddMilliseconds(-1);//
|
|
|
}
|
|
@@ -507,7 +465,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
endTime = startTime.AddDays(+1).AddMilliseconds(-1);
|
|
|
}
|
|
|
if (endTime > DateTime.Now.AddHours(1)) return; //一次处理24小时的数据
|
|
|
- if (db.Queryable<DevRunInfo>().Any(x => x.EndTime == endTime && x.Type == DevType.Truss)) return;
|
|
|
+ if (plcEx.Queryable<DevRunInfo>().Any(x => x.EndTime == endTime && x.Type == type)) return;
|
|
|
|
|
|
truss521 = db.Queryable<WCS_Truss521>().Where(x => x.Frame > startTime && x.Frame <= endTime).ToList().GroupBy(x => x.Code).ToList();
|
|
|
|
|
@@ -522,7 +480,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = startTime,
|
|
|
EndTime = endTime,
|
|
|
Duration = Convert.ToInt64((endTime - startTime).TotalMilliseconds),
|
|
|
- Type = DevType.Truss
|
|
|
+ Type = type
|
|
|
}).ExecuteCommand();
|
|
|
}
|
|
|
|
|
@@ -532,9 +490,9 @@ namespace WCS.WorkEngineering.Systems
|
|
|
var start = infos.OrderBy(x => x.Frame).First();
|
|
|
var end = infos.OrderByDescending(x => x.Frame).First();
|
|
|
//通过是否有最后一条数据来确定当前数据是否有分析存储过
|
|
|
- if (db.Queryable<DevRunInfo>().Any(x => x.Code == infos.Key && x.EndTime == end.Frame)) return;
|
|
|
+ if (plcEx.Queryable<DevRunInfo>().Any(x => x.Code == infos.Key && x.EndTime == end.Frame)) return;
|
|
|
//获取前一天最后的一条数据
|
|
|
- var yesterEnd = db.Queryable<DevRunInfo>().Where(x => x.Code == infos.Key && x.Frame < endTime).OrderByDescending(x => x.Frame).First();
|
|
|
+ var yesterEnd = plcEx.Queryable<DevRunInfo>().Where(x => x.Code == infos.Key && x.Frame < endTime).OrderByDescending(x => x.Frame).First();
|
|
|
List<DevRunInfo> runInfos = new List<DevRunInfo>();
|
|
|
foreach (var info in infos.OrderBy(x => x.Frame))
|
|
|
{
|
|
@@ -550,7 +508,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = startTime,
|
|
|
EndTime = info.Frame,
|
|
|
Duration = Convert.ToInt64((info.Frame - startTime).TotalMilliseconds),
|
|
|
- Type = DevType.Truss
|
|
|
+ Type = type
|
|
|
});
|
|
|
}
|
|
|
else //如果有就用前一天的最后一条数据做计算
|
|
@@ -564,7 +522,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = startTime,
|
|
|
EndTime = info.Frame,
|
|
|
Duration = Convert.ToInt64((info.Frame - startTime).TotalMilliseconds),
|
|
|
- Type = DevType.Robot
|
|
|
+ Type = type
|
|
|
});
|
|
|
}
|
|
|
}
|
|
@@ -578,7 +536,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = info.Frame,
|
|
|
EndTime = endTime,
|
|
|
Duration = Convert.ToInt64((endTime - info.Frame).TotalMilliseconds),
|
|
|
- Type = DevType.Truss
|
|
|
+ Type = type
|
|
|
});
|
|
|
}
|
|
|
else //中间数据
|
|
@@ -592,14 +550,14 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = start.Frame,
|
|
|
EndTime = info.Frame,
|
|
|
Duration = Convert.ToInt64((info.Frame - start.Frame).TotalMilliseconds),
|
|
|
- Type = DevType.Truss
|
|
|
+ Type = type
|
|
|
});
|
|
|
start = info;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- var sql = db.Insertable(runInfos).ToSqlString();
|
|
|
- db.Ado.ExecuteCommand(GetString(sql));
|
|
|
+ var sql = plcEx.Insertable(runInfos).ToSqlString();
|
|
|
+ plcEx.Ado.ExecuteCommand(GetString(sql));
|
|
|
});
|
|
|
}
|
|
|
|
|
@@ -611,16 +569,17 @@ namespace WCS.WorkEngineering.Systems
|
|
|
/// 机械臂
|
|
|
/// </summary>
|
|
|
/// <param name="db"></param>
|
|
|
- public void ExRobotAlarmInfo(SqlSugarScopeProvider db)
|
|
|
+ public void ExRobotAlarmInfo(SqlSugarScopeProvider db, SqlSugarScopeProvider plcEx)
|
|
|
{
|
|
|
var startTime = DateTime.Now;
|
|
|
var endTime = DateTime.Now;
|
|
|
IEnumerable<IGrouping<string, QuestDb_Robot522>> robot522 = new List<IGrouping<string, QuestDb_Robot522>>();
|
|
|
+ var type = DevType.Robot.ToString();
|
|
|
//查看rgv类型是否存在运行信息,用于系统被第一次启用时进行初始化
|
|
|
- if (db.Queryable<DevAlarmInfo>().Any(x => x.Type == DevType.Robot))
|
|
|
+ if (plcEx.Queryable<DevAlarmInfo>().Any(x => x.Type == type))
|
|
|
{
|
|
|
//已有信息,查找最后一条信息用于获取开始时间,最后一条通常是前一天的最后条数据
|
|
|
- var alarmInfo = db.Queryable<DevAlarmInfo>().Where(x => x.Type == DevType.Robot).OrderByDescending(x => x.Frame).First();
|
|
|
+ var alarmInfo = plcEx.Queryable<DevAlarmInfo>().Where(x => x.Type == type).OrderByDescending(x => x.Frame).First();
|
|
|
startTime = alarmInfo.Frame.AddDays(+1).Date;//后一天的初始时间
|
|
|
endTime = startTime.AddDays(+1).AddMilliseconds(-1);//
|
|
|
}
|
|
@@ -631,13 +590,13 @@ namespace WCS.WorkEngineering.Systems
|
|
|
endTime = startTime.AddDays(+1).AddMilliseconds(-1);
|
|
|
}
|
|
|
if (endTime > DateTime.Now.AddHours(1)) return; //一次处理24小时的数据
|
|
|
- if (db.Queryable<DevAlarmInfo>().Any(x => x.EndTime == endTime && x.Type == DevType.Robot)) return;
|
|
|
+ if (plcEx.Queryable<DevAlarmInfo>().Any(x => x.EndTime == endTime && x.Type == type)) return;
|
|
|
|
|
|
robot522 = db.Queryable<QuestDb_Robot522>().Where(x => x.Frame > startTime && x.Frame <= endTime).ToList().GroupBy(x => x.Code).ToList();
|
|
|
|
|
|
if (!robot522.Any())
|
|
|
{
|
|
|
- db.Insertable(new DevAlarmInfo()
|
|
|
+ plcEx.Insertable(new DevAlarmInfo()
|
|
|
{
|
|
|
Frame = endTime,
|
|
|
Code = "当前时段无有效数据",
|
|
@@ -645,7 +604,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = startTime,
|
|
|
EndTime = endTime,
|
|
|
Duration = Convert.ToInt64((endTime - startTime).TotalMilliseconds),
|
|
|
- Type = DevType.Robot
|
|
|
+ Type = type
|
|
|
}).ExecuteCommand();
|
|
|
}
|
|
|
|
|
@@ -655,9 +614,9 @@ namespace WCS.WorkEngineering.Systems
|
|
|
var start = infos.OrderBy(x => x.Frame).First();
|
|
|
var end = infos.OrderByDescending(x => x.Frame).First();
|
|
|
//通过是否有最后一条数据来确定当前数据是否有分析存储过
|
|
|
- if (db.Queryable<DevAlarmInfo>().Any(x => x.Code == infos.Key && x.EndTime == end.Frame)) return;
|
|
|
+ if (plcEx.Queryable<DevAlarmInfo>().Any(x => x.Code == infos.Key && x.EndTime == end.Frame)) return;
|
|
|
//获取前一天最后的一条数据
|
|
|
- var yesterEnd = db.Queryable<DevAlarmInfo>().Where(x => x.Code == infos.Key && x.Frame < endTime).OrderByDescending(x => x.Frame).First();
|
|
|
+ var yesterEnd = plcEx.Queryable<DevAlarmInfo>().Where(x => x.Code == infos.Key && x.Frame < endTime).OrderByDescending(x => x.Frame).First();
|
|
|
List<DevAlarmInfo> runInfos = new List<DevAlarmInfo>();//需要保存的数据
|
|
|
var alarmList = new List<EquipmentAlarm>();//未结束的报警信息
|
|
|
foreach (var info in infos.OrderBy(x => x.Frame))
|
|
@@ -683,7 +642,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = alarm.Time,
|
|
|
EndTime = endTime,
|
|
|
Duration = Convert.ToInt64((endTime - alarm.Time).TotalMilliseconds),
|
|
|
- Type = DevType.Robot
|
|
|
+ Type = type
|
|
|
}));
|
|
|
}
|
|
|
else
|
|
@@ -698,7 +657,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = alarm.Time,
|
|
|
EndTime = info.Frame,
|
|
|
Duration = Convert.ToInt64((info.Frame - alarm.Time).TotalMilliseconds),
|
|
|
- Type = DevType.Robot
|
|
|
+ Type = type
|
|
|
}));
|
|
|
|
|
|
alarmList = new List<EquipmentAlarm>(); //清空现有报警信息
|
|
@@ -722,7 +681,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = alarm.Time,
|
|
|
EndTime = info.Frame,
|
|
|
Duration = Convert.ToInt64((info.Frame - alarm.Time).TotalMilliseconds),
|
|
|
- Type = DevType.Robot
|
|
|
+ Type = type
|
|
|
});
|
|
|
treatedAlarm.Add(alarm.Msg);
|
|
|
}
|
|
@@ -734,12 +693,12 @@ namespace WCS.WorkEngineering.Systems
|
|
|
|
|
|
if (runInfos.Any())
|
|
|
{
|
|
|
- var sql = db.Insertable(runInfos).ToSqlString();
|
|
|
- db.Ado.ExecuteCommand(GetString(sql));
|
|
|
+ var sql = plcEx.Insertable(runInfos).ToSqlString();
|
|
|
+ plcEx.Ado.ExecuteCommand(GetString(sql));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- db.Insertable(new DevAlarmInfo()
|
|
|
+ plcEx.Insertable(new DevAlarmInfo()
|
|
|
{
|
|
|
Frame = endTime,
|
|
|
Code = infos.Key,
|
|
@@ -747,7 +706,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = startTime,
|
|
|
EndTime = endTime,
|
|
|
Duration = Convert.ToInt64((endTime - startTime).TotalMilliseconds),
|
|
|
- Type = DevType.Robot
|
|
|
+ Type = type
|
|
|
}).ExecuteCommand();
|
|
|
}
|
|
|
});
|
|
@@ -757,16 +716,17 @@ namespace WCS.WorkEngineering.Systems
|
|
|
/// 堆垛机
|
|
|
/// </summary>
|
|
|
/// <param name="db"></param>
|
|
|
- public void ExSrmAlarmInfo(SqlSugarScopeProvider db)
|
|
|
+ public void ExSrmAlarmInfo(SqlSugarScopeProvider db, SqlSugarScopeProvider plcEx)
|
|
|
{
|
|
|
var startTime = DateTime.Now;
|
|
|
var endTime = DateTime.Now;
|
|
|
IEnumerable<IGrouping<string, QuestDb_SRM523>> srm523 = new List<IGrouping<string, QuestDb_SRM523>>();
|
|
|
+ var type = DevType.SRM.ToString();
|
|
|
//查看rgv类型是否存在运行信息,用于系统被第一次启用时进行初始化
|
|
|
- if (db.Queryable<DevAlarmInfo>().Any(x => x.Type == DevType.SRM))
|
|
|
+ if (plcEx.Queryable<DevAlarmInfo>().Any(x => x.Type == type))
|
|
|
{
|
|
|
//已有信息,查找最后一条信息用于获取开始时间,最后一条通常是前一天的最后条数据
|
|
|
- var alarmInfo = db.Queryable<DevAlarmInfo>().Where(x => x.Type == DevType.SRM).OrderByDescending(x => x.Frame).First();
|
|
|
+ var alarmInfo = plcEx.Queryable<DevAlarmInfo>().Where(x => x.Type == type).OrderByDescending(x => x.Frame).First();
|
|
|
startTime = alarmInfo.Frame.AddDays(+1).Date;//后一天的初始时间
|
|
|
endTime = startTime.AddDays(+1).AddMilliseconds(-1);//
|
|
|
}
|
|
@@ -777,13 +737,13 @@ namespace WCS.WorkEngineering.Systems
|
|
|
endTime = startTime.AddDays(+1).AddMilliseconds(-1);
|
|
|
}
|
|
|
if (endTime > DateTime.Now.AddHours(1)) return; //一次处理24小时的数据
|
|
|
- if (db.Queryable<DevAlarmInfo>().Any(x => x.EndTime == endTime && x.Type == DevType.SRM)) return;
|
|
|
+ if (plcEx.Queryable<DevAlarmInfo>().Any(x => x.EndTime == endTime && x.Type == type)) return;
|
|
|
|
|
|
srm523 = db.Queryable<QuestDb_SRM523>().Where(x => x.Frame > startTime && x.Frame <= endTime).ToList().GroupBy(x => x.Code).ToList();
|
|
|
|
|
|
if (!srm523.Any())
|
|
|
{
|
|
|
- db.Insertable(new DevAlarmInfo()
|
|
|
+ plcEx.Insertable(new DevAlarmInfo()
|
|
|
{
|
|
|
Frame = endTime,
|
|
|
Code = "当前时段无有效数据",
|
|
@@ -791,7 +751,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = startTime,
|
|
|
EndTime = endTime,
|
|
|
Duration = Convert.ToInt64((endTime - startTime).TotalMilliseconds),
|
|
|
- Type = DevType.SRM
|
|
|
+ Type = type
|
|
|
}).ExecuteCommand();
|
|
|
}
|
|
|
|
|
@@ -801,9 +761,9 @@ namespace WCS.WorkEngineering.Systems
|
|
|
var start = infos.OrderBy(x => x.Frame).First();
|
|
|
var end = infos.OrderByDescending(x => x.Frame).First();
|
|
|
//通过是否有最后一条数据来确定当前数据是否有分析存储过
|
|
|
- if (db.Queryable<DevAlarmInfo>().Any(x => x.Code == infos.Key && x.EndTime == end.Frame)) return;
|
|
|
+ if (plcEx.Queryable<DevAlarmInfo>().Any(x => x.Code == infos.Key && x.EndTime == end.Frame)) return;
|
|
|
//获取前一天最后的一条数据
|
|
|
- var yesterEnd = db.Queryable<DevAlarmInfo>().Where(x => x.Code == infos.Key && x.Frame < endTime).OrderByDescending(x => x.Frame).First();
|
|
|
+ var yesterEnd = plcEx.Queryable<DevAlarmInfo>().Where(x => x.Code == infos.Key && x.Frame < endTime).OrderByDescending(x => x.Frame).First();
|
|
|
List<DevAlarmInfo> runInfos = new List<DevAlarmInfo>();//需要保存的数据
|
|
|
var alarmList = new List<EquipmentAlarm>();//未结束的报警信息
|
|
|
foreach (var info in infos.OrderBy(x => x.Frame))
|
|
@@ -829,7 +789,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = alarm.Time,
|
|
|
EndTime = endTime,
|
|
|
Duration = Convert.ToInt64((endTime - alarm.Time).TotalMilliseconds),
|
|
|
- Type = DevType.SRM
|
|
|
+ Type = type
|
|
|
}));
|
|
|
}
|
|
|
else
|
|
@@ -844,7 +804,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = alarm.Time,
|
|
|
EndTime = info.Frame,
|
|
|
Duration = Convert.ToInt64((info.Frame - alarm.Time).TotalMilliseconds),
|
|
|
- Type = DevType.SRM
|
|
|
+ Type = type
|
|
|
}));
|
|
|
|
|
|
alarmList = new List<EquipmentAlarm>(); //清空现有报警信息
|
|
@@ -868,7 +828,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = alarm.Time,
|
|
|
EndTime = info.Frame,
|
|
|
Duration = Convert.ToInt64((info.Frame - alarm.Time).TotalMilliseconds),
|
|
|
- Type = DevType.SRM
|
|
|
+ Type = type
|
|
|
});
|
|
|
treatedAlarm.Add(alarm.Msg);
|
|
|
}
|
|
@@ -880,12 +840,12 @@ namespace WCS.WorkEngineering.Systems
|
|
|
|
|
|
if (runInfos.Any())
|
|
|
{
|
|
|
- var sql = db.Insertable(runInfos).ToSqlString();
|
|
|
- db.Ado.ExecuteCommand(GetString(sql));
|
|
|
+ var sql = plcEx.Insertable(runInfos).ToSqlString();
|
|
|
+ plcEx.Ado.ExecuteCommand(GetString(sql));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- db.Insertable(new DevAlarmInfo()
|
|
|
+ plcEx.Insertable(new DevAlarmInfo()
|
|
|
{
|
|
|
Frame = endTime,
|
|
|
Code = infos.Key,
|
|
@@ -893,7 +853,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = startTime,
|
|
|
EndTime = endTime,
|
|
|
Duration = Convert.ToInt64((endTime - startTime).TotalMilliseconds),
|
|
|
- Type = DevType.SRM
|
|
|
+ Type = type
|
|
|
}).ExecuteCommand();
|
|
|
}
|
|
|
});
|
|
@@ -903,16 +863,17 @@ namespace WCS.WorkEngineering.Systems
|
|
|
/// rgv
|
|
|
/// </summary>
|
|
|
/// <param name="db"></param>
|
|
|
- public void ExRgvAlarmInfo(SqlSugarScopeProvider db)
|
|
|
+ public void ExRgvAlarmInfo(SqlSugarScopeProvider db, SqlSugarScopeProvider plcEx)
|
|
|
{
|
|
|
var startTime = DateTime.Now;
|
|
|
var endTime = DateTime.Now;
|
|
|
IEnumerable<IGrouping<string, QuestDb_RGV523>> rgv523 = new List<IGrouping<string, QuestDb_RGV523>>();
|
|
|
+ var type = DevType.RGV.ToString();
|
|
|
//查看rgv类型是否存在运行信息,用于系统被第一次启用时进行初始化
|
|
|
- if (db.Queryable<DevAlarmInfo>().Any(x => x.Type == DevType.RGV))
|
|
|
+ if (plcEx.Queryable<DevAlarmInfo>().Any(x => x.Type == type))
|
|
|
{
|
|
|
//已有信息,查找最后一条信息用于获取开始时间,最后一条通常是前一天的最后条数据
|
|
|
- var alarmInfo = db.Queryable<DevAlarmInfo>().Where(x => x.Type == DevType.RGV).OrderByDescending(x => x.Frame).First();
|
|
|
+ var alarmInfo = plcEx.Queryable<DevAlarmInfo>().Where(x => x.Type == type).OrderByDescending(x => x.Frame).First();
|
|
|
startTime = alarmInfo.Frame.AddDays(+1).Date;//后一天的初始时间
|
|
|
endTime = startTime.AddDays(+1).AddMilliseconds(-1);//
|
|
|
}
|
|
@@ -923,13 +884,13 @@ namespace WCS.WorkEngineering.Systems
|
|
|
endTime = startTime.AddDays(+1).AddMilliseconds(-1);
|
|
|
}
|
|
|
if (endTime > DateTime.Now.AddHours(1)) return; //一次处理24小时的数据
|
|
|
- if (db.Queryable<DevAlarmInfo>().Any(x => x.EndTime == endTime && x.Type == DevType.RGV)) return;
|
|
|
+ if (plcEx.Queryable<DevAlarmInfo>().Any(x => x.EndTime == endTime && x.Type == type)) return;
|
|
|
|
|
|
rgv523 = db.Queryable<QuestDb_RGV523>().Where(x => x.Frame > startTime && x.Frame <= endTime).ToList().GroupBy(x => x.Code).ToList();
|
|
|
|
|
|
if (!rgv523.Any())
|
|
|
{
|
|
|
- db.Insertable(new DevAlarmInfo()
|
|
|
+ plcEx.Insertable(new DevAlarmInfo()
|
|
|
{
|
|
|
Frame = endTime,
|
|
|
Code = "当前时段无有效数据",
|
|
@@ -937,7 +898,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = startTime,
|
|
|
EndTime = endTime,
|
|
|
Duration = Convert.ToInt64((endTime - startTime).TotalMilliseconds),
|
|
|
- Type = DevType.RGV
|
|
|
+ Type = type
|
|
|
}).ExecuteCommand();
|
|
|
}
|
|
|
|
|
@@ -947,9 +908,9 @@ namespace WCS.WorkEngineering.Systems
|
|
|
var start = infos.OrderBy(x => x.Frame).First();
|
|
|
var end = infos.OrderByDescending(x => x.Frame).First();
|
|
|
//通过是否有最后一条数据来确定当前数据是否有分析存储过
|
|
|
- if (db.Queryable<DevAlarmInfo>().Any(x => x.Code == infos.Key && x.EndTime == end.Frame)) return;
|
|
|
+ if (plcEx.Queryable<DevAlarmInfo>().Any(x => x.Code == infos.Key && x.EndTime == end.Frame)) return;
|
|
|
//获取前一天最后的一条数据
|
|
|
- var yesterEnd = db.Queryable<DevAlarmInfo>().Where(x => x.Code == infos.Key && x.Frame < endTime).OrderByDescending(x => x.Frame).First();
|
|
|
+ var yesterEnd = plcEx.Queryable<DevAlarmInfo>().Where(x => x.Code == infos.Key && x.Frame < endTime).OrderByDescending(x => x.Frame).First();
|
|
|
List<DevAlarmInfo> runInfos = new List<DevAlarmInfo>();//需要保存的数据
|
|
|
var alarmList = new List<EquipmentAlarm>();//未结束的报警信息
|
|
|
foreach (var info in infos.OrderBy(x => x.Frame))
|
|
@@ -975,7 +936,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = alarm.Time,
|
|
|
EndTime = endTime,
|
|
|
Duration = Convert.ToInt64((endTime - alarm.Time).TotalMilliseconds),
|
|
|
- Type = DevType.RGV
|
|
|
+ Type = type
|
|
|
}));
|
|
|
}
|
|
|
else
|
|
@@ -990,7 +951,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = alarm.Time,
|
|
|
EndTime = info.Frame,
|
|
|
Duration = Convert.ToInt64((info.Frame - alarm.Time).TotalMilliseconds),
|
|
|
- Type = DevType.RGV
|
|
|
+ Type = type
|
|
|
}));
|
|
|
|
|
|
alarmList = new List<EquipmentAlarm>(); //清空现有报警信息
|
|
@@ -1014,7 +975,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = alarm.Time,
|
|
|
EndTime = info.Frame,
|
|
|
Duration = Convert.ToInt64((info.Frame - alarm.Time).TotalMilliseconds),
|
|
|
- Type = DevType.RGV
|
|
|
+ Type = type
|
|
|
});
|
|
|
treatedAlarm.Add(alarm.Msg);
|
|
|
}
|
|
@@ -1026,11 +987,11 @@ namespace WCS.WorkEngineering.Systems
|
|
|
|
|
|
if (runInfos.Any())
|
|
|
{
|
|
|
- db.Insertable(runInfos).ExecuteCommand();
|
|
|
+ plcEx.Insertable(runInfos).ExecuteCommand();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- db.Insertable(new DevAlarmInfo()
|
|
|
+ plcEx.Insertable(new DevAlarmInfo()
|
|
|
{
|
|
|
Frame = endTime,
|
|
|
Code = infos.Key,
|
|
@@ -1038,7 +999,153 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = startTime,
|
|
|
EndTime = endTime,
|
|
|
Duration = Convert.ToInt64((endTime - startTime).TotalMilliseconds),
|
|
|
- Type = DevType.RGV
|
|
|
+ Type = type
|
|
|
+ }).ExecuteCommand();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Truss
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="db"></param>
|
|
|
+ public void ExTrussAlarmInfo(SqlSugarScopeProvider db, SqlSugarScopeProvider plcEx)
|
|
|
+ {
|
|
|
+ var startTime = DateTime.Now;
|
|
|
+ var endTime = DateTime.Now;
|
|
|
+ IEnumerable<IGrouping<string, QuestDb_Truss523>> rgv523 = new List<IGrouping<string, QuestDb_Truss523>>();
|
|
|
+ var type = DevType.Truss.ToString();
|
|
|
+ //查看rgv类型是否存在运行信息,用于系统被第一次启用时进行初始化
|
|
|
+ if (plcEx.Queryable<DevAlarmInfo>().Any(x => x.Type == type))
|
|
|
+ {
|
|
|
+ //已有信息,查找最后一条信息用于获取开始时间,最后一条通常是前一天的最后条数据
|
|
|
+ var alarmInfo = plcEx.Queryable<DevAlarmInfo>().Where(x => x.Type == type).OrderByDescending(x => x.Frame).First();
|
|
|
+ startTime = alarmInfo.Frame.AddDays(+1).Date;//后一天的初始时间
|
|
|
+ endTime = startTime.AddDays(+1).AddMilliseconds(-1);//
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (!db.Queryable<QuestDb_Truss523>().Any()) return;
|
|
|
+ startTime = db.Queryable<QuestDb_Truss523>().OrderBy(x => x.Frame).First().Frame.Date;
|
|
|
+ endTime = startTime.AddDays(+1).AddMilliseconds(-1);
|
|
|
+ }
|
|
|
+ if (endTime > DateTime.Now.AddHours(1)) return; //一次处理24小时的数据
|
|
|
+ if (plcEx.Queryable<DevAlarmInfo>().Any(x => x.EndTime == endTime && x.Type == type)) return;
|
|
|
+
|
|
|
+ rgv523 = db.Queryable<QuestDb_Truss523>().Where(x => x.Frame > startTime && x.Frame <= endTime).ToList().GroupBy(x => x.Code).ToList();
|
|
|
+
|
|
|
+ if (!rgv523.Any())
|
|
|
+ {
|
|
|
+ plcEx.Insertable(new DevAlarmInfo()
|
|
|
+ {
|
|
|
+ Frame = endTime,
|
|
|
+ Code = "当前时段无有效数据",
|
|
|
+ Alarm = "当前时段无有效数据",
|
|
|
+ StartTime = startTime,
|
|
|
+ EndTime = endTime,
|
|
|
+ Duration = Convert.ToInt64((endTime - startTime).TotalMilliseconds),
|
|
|
+ Type = type
|
|
|
+ }).ExecuteCommand();
|
|
|
+ }
|
|
|
+
|
|
|
+ Parallel.ForEach(rgv523/*.Where(x => x.Key == "RGV4")*/, infos =>
|
|
|
+ {
|
|
|
+ // 获取第一条数据与最后一条数据
|
|
|
+ var start = infos.OrderBy(x => x.Frame).First();
|
|
|
+ var end = infos.OrderByDescending(x => x.Frame).First();
|
|
|
+ //通过是否有最后一条数据来确定当前数据是否有分析存储过
|
|
|
+ if (plcEx.Queryable<DevAlarmInfo>().Any(x => x.Code == infos.Key && x.EndTime == end.Frame)) return;
|
|
|
+ //获取前一天最后的一条数据
|
|
|
+ var yesterEnd = plcEx.Queryable<DevAlarmInfo>().Where(x => x.Code == infos.Key && x.Frame < endTime).OrderByDescending(x => x.Frame).First();
|
|
|
+ List<DevAlarmInfo> runInfos = new List<DevAlarmInfo>();//需要保存的数据
|
|
|
+ var alarmList = new List<EquipmentAlarm>();//未结束的报警信息
|
|
|
+ foreach (var info in infos.OrderBy(x => x.Frame))
|
|
|
+ {
|
|
|
+ if (info.Frame == end.Frame) //最后一条数据
|
|
|
+ {
|
|
|
+ if (info.Alarm != "无")
|
|
|
+ {
|
|
|
+ //先判断是否有没有记录的报警信息
|
|
|
+ var alarmMsg = Convert.ToString(info.Alarm).Split(",").Select(x => x.Split(",")).SelectMany(x => x).ToList();
|
|
|
+ var msgList = alarmList.Select(x => x.Msg);
|
|
|
+
|
|
|
+ //将未记录的报警信息增加到缓存中
|
|
|
+ alarmList.AddRange(alarmMsg.Where(msg => !msgList.Contains(msg)).Select(msg => new EquipmentAlarm() { Time = info.Frame, Msg = msg }));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!alarmList.Any()) continue;
|
|
|
+ runInfos.AddRange(alarmList.Select(alarm => new DevAlarmInfo()
|
|
|
+ {
|
|
|
+ Frame = alarm.Time,
|
|
|
+ Code = info.Code,
|
|
|
+ Alarm = alarm.Msg,
|
|
|
+ StartTime = alarm.Time,
|
|
|
+ EndTime = endTime,
|
|
|
+ Duration = Convert.ToInt64((endTime - alarm.Time).TotalMilliseconds),
|
|
|
+ Type = type
|
|
|
+ }));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (info.Alarm == "无" && alarmList.Any()) //代表报警全部清空了
|
|
|
+ {
|
|
|
+ runInfos.AddRange(alarmList.Select(alarm => new DevAlarmInfo()
|
|
|
+ {
|
|
|
+ Frame = alarm.Time,
|
|
|
+ Code = info.Code,
|
|
|
+ Alarm = alarm.Msg,
|
|
|
+ StartTime = alarm.Time,
|
|
|
+ EndTime = info.Frame,
|
|
|
+ Duration = Convert.ToInt64((info.Frame - alarm.Time).TotalMilliseconds),
|
|
|
+ Type = type
|
|
|
+ }));
|
|
|
+
|
|
|
+ alarmList = new List<EquipmentAlarm>(); //清空现有报警信息
|
|
|
+ }
|
|
|
+ else if (info.Alarm != "无")
|
|
|
+ {
|
|
|
+ var alarmMsg = Convert.ToString(info.Alarm).Split(",").Select(x => x.Split(",")).SelectMany(x => x).ToList();
|
|
|
+ var msgList = alarmList.Select(x => x.Msg);
|
|
|
+
|
|
|
+ //将未记录的报警信息增加到缓存中
|
|
|
+ alarmList.AddRange(alarmMsg.Where(msg => !msgList.Contains(msg)).Select(msg => new EquipmentAlarm() { Time = info.Frame, Msg = msg }));
|
|
|
+ var treatedAlarm = new List<string>();
|
|
|
+ //将已记录,但当前信息中没有的报警结束
|
|
|
+ foreach (var alarm in alarmList.Where(x => !alarmMsg.Contains(x.Msg)))
|
|
|
+ {
|
|
|
+ runInfos.Add(new DevAlarmInfo()
|
|
|
+ {
|
|
|
+ Frame = alarm.Time,
|
|
|
+ Code = info.Code,
|
|
|
+ Alarm = alarm.Msg,
|
|
|
+ StartTime = alarm.Time,
|
|
|
+ EndTime = info.Frame,
|
|
|
+ Duration = Convert.ToInt64((info.Frame - alarm.Time).TotalMilliseconds),
|
|
|
+ Type = type
|
|
|
+ });
|
|
|
+ treatedAlarm.Add(alarm.Msg);
|
|
|
+ }
|
|
|
+
|
|
|
+ alarmList = alarmList.Where(x => !treatedAlarm.Contains(x.Msg)).ToList();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (runInfos.Any())
|
|
|
+ {
|
|
|
+ plcEx.Insertable(runInfos).ExecuteCommand();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ plcEx.Insertable(new DevAlarmInfo()
|
|
|
+ {
|
|
|
+ Frame = endTime,
|
|
|
+ Code = infos.Key,
|
|
|
+ Alarm = "当前时段无有效数据",
|
|
|
+ StartTime = startTime,
|
|
|
+ EndTime = endTime,
|
|
|
+ Duration = Convert.ToInt64((endTime - startTime).TotalMilliseconds),
|
|
|
+ Type = type
|
|
|
}).ExecuteCommand();
|
|
|
}
|
|
|
});
|
|
@@ -1049,19 +1156,20 @@ namespace WCS.WorkEngineering.Systems
|
|
|
#region 任务状态分析
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 机械臂
|
|
|
+ /// 机械臂分析单双爪任务占比,需要按照任务类型分类
|
|
|
/// </summary>
|
|
|
/// <param name="db"></param>
|
|
|
- public void ExRobotTaskSumRunInfo(SqlSugarScopeProvider db)
|
|
|
+ public void ExRobotTaskSumRunInfo(SqlSugarScopeProvider db, SqlSugarScopeProvider plcEx)
|
|
|
{
|
|
|
var startTime = DateTime.Now;
|
|
|
var endTime = DateTime.Now;
|
|
|
IEnumerable<IGrouping<string, WCS_Robot520>> robot520 = new List<IGrouping<string, WCS_Robot520>>();
|
|
|
+ var type = DevType.RobotTaskSum.ToString();
|
|
|
//查看rgv类型是否存在运行信息,用于系统被第一次启用时进行初始化
|
|
|
- if (db.Queryable<DevRunInfo>().Any(x => x.Type == DevType.RobotTaskSum))
|
|
|
+ if (plcEx.Queryable<DevRunInfo>().Any(x => x.Type == type))
|
|
|
{
|
|
|
//已有信息,查找最后一条信息用于获取开始时间,最后一条通常是前一天的最后条数据
|
|
|
- var runInfo = db.Queryable<DevRunInfo>().Where(x => x.Type == DevType.RobotTaskSum).OrderByDescending(x => x.Frame).First();
|
|
|
+ var runInfo = plcEx.Queryable<DevRunInfo>().Where(x => x.Type == type).OrderByDescending(x => x.Frame).First();
|
|
|
startTime = runInfo.Frame.AddDays(+1).Date;//后一天的初始时间
|
|
|
endTime = startTime.AddDays(+1).AddMilliseconds(-1);//
|
|
|
}
|
|
@@ -1072,13 +1180,13 @@ namespace WCS.WorkEngineering.Systems
|
|
|
endTime = startTime.AddDays(+1).AddMilliseconds(-1);
|
|
|
}
|
|
|
if (endTime > DateTime.Now.AddHours(1)) return; //一次处理24小时的数据
|
|
|
- if (db.Queryable<DevRunInfo>().Any(x => x.EndTime == endTime && x.Type == DevType.RobotTaskSum)) return;
|
|
|
+ if (plcEx.Queryable<DevRunInfo>().Any(x => x.EndTime == endTime && x.Type == type)) return;
|
|
|
|
|
|
robot520 = db.Queryable<WCS_Robot520>().Where(x => x.Frame > startTime && x.Frame <= endTime).ToList().GroupBy(x => x.Code).ToList();
|
|
|
|
|
|
if (!robot520.Any())
|
|
|
{
|
|
|
- db.Insertable(new DevRunInfo()
|
|
|
+ plcEx.Insertable(new DevRunInfo()
|
|
|
{
|
|
|
Frame = endTime,
|
|
|
Code = "当前时段无有效数据",
|
|
@@ -1087,89 +1195,33 @@ namespace WCS.WorkEngineering.Systems
|
|
|
StartTime = startTime,
|
|
|
EndTime = endTime,
|
|
|
Duration = Convert.ToInt64((endTime - startTime).TotalMilliseconds),
|
|
|
- Type = DevType.RobotTaskSum
|
|
|
+ Type = type
|
|
|
}).ExecuteCommand();
|
|
|
}
|
|
|
|
|
|
Parallel.ForEach(robot520, infos =>
|
|
|
{
|
|
|
- //infos = infos.Where(x => x.TaskNumber1 != 0 || x.TaskNumber2 != 0).ToList();
|
|
|
+ var infoList = infos.Where(x => x.TaskNumber1 != 0 || x.TaskNumber2 != 0).ToList().DistinctItemBy(x => x.VoucherNo);
|
|
|
|
|
|
- // 获取第一条数据与最后一条数据
|
|
|
- var start = infos.OrderBy(x => x.Frame).First();
|
|
|
- var end = infos.OrderByDescending(x => x.Frame).First();
|
|
|
- //通过是否有最后一条数据来确定当前数据是否有分析存储过
|
|
|
- if (db.Queryable<DevRunInfo>().Any(x => x.Code == infos.Key && x.EndTime == end.Frame)) return;
|
|
|
- //获取前一天最后的一条数据
|
|
|
- var yesterEnd = db.Queryable<DevRunInfo>().Where(x => x.Code == infos.Key && x.Frame < endTime).OrderByDescending(x => x.Frame).First();
|
|
|
List<DevRunInfo> runInfos = new List<DevRunInfo>();
|
|
|
- //foreach (var info in infos.OrderBy(x => x.Frame))
|
|
|
- //{
|
|
|
- // if (info.Frame == start.Frame) //当天的第一条数据
|
|
|
- // {
|
|
|
- // if (yesterEnd == null) //如果没有前一天的最后一条数据,就有用当天的第一条数据状态做计算
|
|
|
- // {
|
|
|
- // runInfos.Add(new DevRunInfo()
|
|
|
- // {
|
|
|
- // Frame = info.Frame,
|
|
|
- // Code = info.Code,
|
|
|
- // RunMode = info.RobotMode.GetDescription(),
|
|
|
- // RunStatus = info.RunStatus.GetDescription(),
|
|
|
- // StartTime = startTime,
|
|
|
- // EndTime = info.Frame,
|
|
|
- // Duration = Convert.ToInt64((info.Frame - startTime).TotalMilliseconds),
|
|
|
- // Type = DevType.RobotTaskSum
|
|
|
- // });
|
|
|
- // }
|
|
|
- // else //如果有就用前一天的最后一条数据做计算
|
|
|
- // {
|
|
|
- // runInfos.Add(new DevRunInfo()
|
|
|
- // {
|
|
|
- // Frame = info.Frame,
|
|
|
- // Code = info.Code,
|
|
|
- // RunMode = yesterEnd.RunMode,
|
|
|
- // RunStatus = yesterEnd.RunStatus,
|
|
|
- // StartTime = startTime,
|
|
|
- // EndTime = info.Frame,
|
|
|
- // Duration = Convert.ToInt64((info.Frame - startTime).TotalMilliseconds),
|
|
|
- // Type = DevType.RobotTaskSum
|
|
|
- // });
|
|
|
- // }
|
|
|
- // }
|
|
|
- // else if (info.Frame == end.Frame) //当天的最后一条数据
|
|
|
- // {
|
|
|
- // runInfos.Add(new DevRunInfo()
|
|
|
- // {
|
|
|
- // Frame = info.Frame,
|
|
|
- // Code = info.Code,
|
|
|
- // RunMode = info.RobotMode.GetDescription(),
|
|
|
- // RunStatus = info.RunStatus.GetDescription(),
|
|
|
- // StartTime = info.Frame,
|
|
|
- // EndTime = endTime,
|
|
|
- // Duration = Convert.ToInt64((endTime - info.Frame).TotalMilliseconds),
|
|
|
- // Type = DevType.RobotTaskSum
|
|
|
- // });
|
|
|
- // }
|
|
|
- // else //中间数据
|
|
|
- // {
|
|
|
- // if (start.RobotMode == info.RobotMode && start.RunStatus == info.RunStatus) continue;
|
|
|
- // runInfos.Add(new DevRunInfo()
|
|
|
- // {
|
|
|
- // Frame = info.Frame,
|
|
|
- // Code = info.Code,
|
|
|
- // RunMode = start.RobotMode.GetDescription(),
|
|
|
- // RunStatus = start.RunStatus.GetDescription(),
|
|
|
- // StartTime = start.Frame,
|
|
|
- // EndTime = info.Frame,
|
|
|
- // Duration = Convert.ToInt64((info.Frame - start.Frame).TotalMilliseconds),
|
|
|
- // Type = DevType.RobotTaskSum
|
|
|
- // });
|
|
|
- // start = info;
|
|
|
- // }
|
|
|
- //}
|
|
|
-
|
|
|
- var sql = db.Insertable(runInfos).ToSqlString();
|
|
|
- db.Ado.ExecuteCommand(GetString(sql));
|
|
|
+ foreach (var info in infoList.OrderBy(x => x.Frame))
|
|
|
+ {
|
|
|
+ var taskSum = 0;
|
|
|
+ if (info.TaskNumber1 != 0) taskSum += 1;
|
|
|
+ if (info.TaskNumber2 != 0) taskSum += 1;
|
|
|
+ runInfos.Add(new DevRunInfo()
|
|
|
+ {
|
|
|
+ Frame = info.Frame,
|
|
|
+ Code = info.Code,
|
|
|
+ RunMode = taskSum.ToString(),
|
|
|
+ RunStatus = $"{info.TaskNumber1}--{info.TaskNumber2}--{info.TaskType}",
|
|
|
+ Duration = 0,
|
|
|
+ Type = type
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ var sql = plcEx.Insertable(runInfos).ToSqlString();
|
|
|
+ plcEx.Ado.ExecuteCommand(GetString(sql));
|
|
|
});
|
|
|
}
|
|
|
|