|
@@ -45,8 +45,6 @@ namespace WCS.WorkEngineering.Systems
|
|
|
|
|
|
protected override bool ParallelDo => true;
|
|
|
|
|
|
- protected override bool SaveLogsToFile => true;
|
|
|
-
|
|
|
public override bool Select(Device dev)
|
|
|
{
|
|
|
return dev.Code == "1";
|
|
@@ -56,7 +54,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
{
|
|
|
//通过数据条数处理
|
|
|
var db = new SqlSugarHelper().PLC;
|
|
|
- //ExRobotRunInfo(db);
|
|
|
+ ExRobotRunInfo(db);
|
|
|
ExRobotAlarmInfo(db);
|
|
|
ExSrmAlarmInfo(db);
|
|
|
ExRgvAlarmInfo(db);
|
|
@@ -1048,6 +1046,135 @@ namespace WCS.WorkEngineering.Systems
|
|
|
|
|
|
#endregion 异常报警信息
|
|
|
|
|
|
+ #region 任务状态分析
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 机械臂
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="db"></param>
|
|
|
+ public void ExRobotTaskSumRunInfo(SqlSugarScopeProvider db)
|
|
|
+ {
|
|
|
+ var startTime = DateTime.Now;
|
|
|
+ var endTime = DateTime.Now;
|
|
|
+ IEnumerable<IGrouping<string, WCS_Robot520>> robot520 = new List<IGrouping<string, WCS_Robot520>>();
|
|
|
+ //查看rgv类型是否存在运行信息,用于系统被第一次启用时进行初始化
|
|
|
+ if (db.Queryable<DevRunInfo>().Any(x => x.Type == DevType.RobotTaskSum))
|
|
|
+ {
|
|
|
+ //已有信息,查找最后一条信息用于获取开始时间,最后一条通常是前一天的最后条数据
|
|
|
+ var runInfo = db.Queryable<DevRunInfo>().Where(x => x.Type == DevType.RobotTaskSum).OrderByDescending(x => x.Frame).First();
|
|
|
+ startTime = runInfo.Frame.AddDays(+1).Date;//后一天的初始时间
|
|
|
+ endTime = startTime.AddDays(+1).AddMilliseconds(-1);//
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (!db.Queryable<WCS_Robot520>().Any()) return;
|
|
|
+ startTime = db.Queryable<WCS_Robot520>().OrderBy(x => x.Frame).First().Frame.Date;
|
|
|
+ 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;
|
|
|
+
|
|
|
+ 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()
|
|
|
+ {
|
|
|
+ Frame = endTime,
|
|
|
+ Code = "当前时段无有效数据",
|
|
|
+ RunMode = "当前时段无有效数据",
|
|
|
+ RunStatus = "当前时段无有效数据",
|
|
|
+ StartTime = startTime,
|
|
|
+ EndTime = endTime,
|
|
|
+ Duration = Convert.ToInt64((endTime - startTime).TotalMilliseconds),
|
|
|
+ Type = DevType.RobotTaskSum
|
|
|
+ }).ExecuteCommand();
|
|
|
+ }
|
|
|
+
|
|
|
+ Parallel.ForEach(robot520, infos =>
|
|
|
+ {
|
|
|
+ //infos = infos.Where(x => x.TaskNumber1 != 0 || x.TaskNumber2 != 0).ToList();
|
|
|
+
|
|
|
+ // 获取第一条数据与最后一条数据
|
|
|
+ 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));
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion 任务状态分析
|
|
|
+
|
|
|
public string GetString(string value)
|
|
|
{
|
|
|
return value.Replace(",N'", ",'")
|