| | |
| | | /// 设备运行时间 |
| | | /// </summary> |
| | | public static TimeSpan deviceRunTime; |
| | | public static TimeSpan deviceRunTime_Srm1; |
| | | public static TimeSpan deviceRunTime_Srm2; |
| | | /// <summary>设备等待时间 |
| | | /// 设备等待时间 |
| | | /// </summary> |
| | | public static TimeSpan deviceWaitTime; |
| | | public static TimeSpan deviceWaitTime_Srm1; |
| | | public static TimeSpan deviceWaitTime_Srm2; |
| | | /// <summary>设备报警时间 |
| | | /// 设备报警时间 |
| | | /// </summary> |
| | | public static TimeSpan deviceAlarmTime; |
| | | public static TimeSpan deviceAlarmTime_Srm1; |
| | | public static TimeSpan deviceAlarmTime_Srm2; |
| | | /// <summary>设备使用率 |
| | | /// 设备使用率 |
| | | /// </summary> |
| | |
| | | /// 设备运行计时器 |
| | | /// </summary> |
| | | Stopwatch deviceSw = new Stopwatch(); |
| | | Stopwatch deviceSw_Srm1 = new Stopwatch(); |
| | | Stopwatch deviceSw_Srm2 = new Stopwatch(); |
| | | /// <summary>上一次设备运行状态 |
| | | /// 上一次设备运行状态 |
| | | /// </summary> |
| | | public string lastStatus = "等待"; |
| | | public string lastStatus_Srm1 = "等待"; |
| | | public string lastStatus_Srm2 = "等待"; |
| | | /// <summary>上一次小时数--每隔一小时保存一次设备状态时间 |
| | | /// 上一次小时数--每隔一小时保存一次设备状态时间 |
| | | /// </summary> |
| | |
| | | |
| | | string[] containers = new string[19]; |
| | | deviceSw.Start();// 设备运行计算器开始记时 |
| | | deviceSw_Srm1.Start();// 设备运行计算器开始记时 |
| | | deviceSw_Srm2.Start();// 设备运行计算器开始记时 |
| | | #region 获取设备信息 |
| | | |
| | | if (allowGetDeviceInfo == true) |
| | |
| | | totalInfo.list11[1] = outTaskCount.Count; |
| | | } |
| | | |
| | | //更改数量 【Editby shaocx,2024-11-22】 |
| | | /* |
| | | if (stockUsingCount != null) |
| | | { |
| | | decimal cout = stockUsingCount.Count / 1140M * 100; |
| | | totalInfo.list11[2] = Convert.ToInt32(cout); |
| | | } |
| | | if (outTimeStockCount != null) |
| | | { |
| | | totalInfo.list11[3] = outTimeStockCount.Count; |
| | | } |
| | | //*/ |
| | | |
| | | totalInfo.list11[2] = 1152; |
| | | totalInfo.list11[3] = 1152 - stockUsingCount.Count(); |
| | | |
| | | if (lastHour != today.Hour) |
| | | //int aaaa = 1; |
| | | //if (aaaa == 2) |
| | | { |
| | | //每隔一小时保存一次设备状态时间 |
| | | lastHour = today.Hour; |
| | |
| | | } |
| | | else |
| | | { |
| | | //todayDeviceInfo.deviceWaitTime = deviceWaitTime.TotalMinutes > 0 ? Convert.ToDecimal(deviceWaitTime.TotalMinutes) : 0M;// deviceWaitTime.Hours * 60M + deviceWaitTime.Minutes; |
| | | |
| | | todayDeviceInfo.deviceRunTime = deviceRunTime.TotalMinutes > 0 ? Convert.ToDecimal(deviceRunTime.TotalMinutes) : 0M; |
| | | todayDeviceInfo.deviceAlarmTime = deviceAlarmTime.TotalMinutes > 0 ? Convert.ToDecimal(deviceAlarmTime.TotalMinutes) : 0M; |
| | | //重新计算设备等待时间 【Editby shaocx,2024-12-30】 |
| | | CommonCalcWaitTime(ref todayDeviceInfo); |
| | | DeviceGeneralInfoHelper.CommonCalcWaitTime(ref todayDeviceInfo); |
| | | |
| | | todayDeviceInfo.taskEnterCount = enterTaskCount.Count;//入库任务数 |
| | | todayDeviceInfo.taskOutCount = outTaskCount.Count;//出库任务数 |
| | | //更改数量 【Editby shaocx,2024-11-22】 |
| | | //decimal cout = stockUsingCount.Count / 1140M * 100; |
| | | decimal cout = stockUsingCount.Count / 1152M * 100; |
| | | todayDeviceInfo.stockProportion = Convert.ToInt32(cout);//已使用的库位 |
| | | todayDeviceInfo.outDate = outTimeStockCount.Count;//过期时间小于一个月的库存数据 |
| | | } |
| | | |
| | | DeviceGeneralInfoHelper.HandlerDeviceGeneralInfoForDetail(1, enterTaskCount, outTaskCount, stockUsingCount, outTimeStockCount, |
| | | mod, lastHour, todayTime, |
| | | deviceSw_Srm1, deviceRunTime_Srm1, deviceAlarmTime_Srm1, deviceWaitTime_Srm1 |
| | | ); |
| | | DeviceGeneralInfoHelper.HandlerDeviceGeneralInfoForDetail(2, enterTaskCount, outTaskCount, stockUsingCount, outTimeStockCount, |
| | | mod, lastHour, todayTime, |
| | | deviceSw_Srm2, deviceRunTime_Srm2, deviceAlarmTime_Srm2, deviceWaitTime_Srm2 |
| | | ); |
| | | |
| | | int chang = mod.SaveChanges(); |
| | | } |
| | |
| | | if (lastStatus != "运行") |
| | | { |
| | | setDeviceStatusTime(lastStatus, "运行"); |
| | | } |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region 统计设备运行效率(详细) 【Editby shaocx,2025-09-19】 |
| | | //1号堆垛机 |
| | | if (deviceListInfo.srm1.isAlarm == true) |
| | | { |
| | | if (lastStatus_Srm1 != "报警") |
| | | { |
| | | setDeviceStatusTimeForDetail(1, lastStatus_Srm1, "报警"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (deviceListInfo.srm1.status == "空闲") |
| | | { |
| | | if (lastStatus_Srm1 != "等待") |
| | | { |
| | | setDeviceStatusTimeForDetail(1, lastStatus_Srm1, "等待"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (lastStatus_Srm1 != "运行") |
| | | { |
| | | setDeviceStatusTimeForDetail(1, lastStatus_Srm1, "运行"); |
| | | } |
| | | } |
| | | } |
| | | //2号堆垛机 |
| | | if (deviceListInfo.srm2.isAlarm == true) |
| | | { |
| | | if (lastStatus_Srm2 != "报警") |
| | | { |
| | | setDeviceStatusTimeForDetail(2, lastStatus_Srm2, "报警"); |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | if (deviceListInfo.srm2.status == "空闲") |
| | | { |
| | | if (lastStatus_Srm2 != "等待") |
| | | { |
| | | setDeviceStatusTimeForDetail(2, lastStatus_Srm2, "等待"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (lastStatus_Srm2 != "运行") |
| | | { |
| | | setDeviceStatusTimeForDetail(2, lastStatus_Srm2, "运行"); |
| | | } |
| | | } |
| | | } |
| | |
| | | { |
| | | |
| | | } |
| | | } |
| | | /// <summary>设备状态变化的时候 保存状态时间(明细) |
| | | /// 设备状态变化的时候 保存状态时间 |
| | | /// </summary> |
| | | /// <param name="status"></param> |
| | | private void setDeviceStatusTimeForDetail(int srmNo, string lastStatuss, string nowStatus) |
| | | { |
| | | try |
| | | { |
| | | switch (lastStatuss) |
| | | { |
| | | case "等待": |
| | | if (srmNo == 1) |
| | | { |
| | | deviceWaitTime_Srm1 += deviceSw_Srm1.Elapsed; |
| | | } |
| | | else |
| | | { |
| | | deviceWaitTime_Srm2 += deviceSw_Srm2.Elapsed; |
| | | } |
| | | break; |
| | | case "运行": |
| | | if (srmNo == 1) |
| | | { |
| | | deviceRunTime_Srm1 += deviceSw_Srm1.Elapsed; |
| | | } |
| | | else |
| | | { |
| | | deviceRunTime_Srm2 += deviceSw_Srm2.Elapsed; |
| | | } |
| | | break; |
| | | case "报警": |
| | | if (srmNo == 1) |
| | | { |
| | | deviceAlarmTime_Srm1 += deviceSw_Srm1.Elapsed; |
| | | } |
| | | else |
| | | { |
| | | deviceAlarmTime_Srm2 += deviceSw_Srm2.Elapsed; |
| | | } |
| | | break; |
| | | } |
| | | |
| | | if (srmNo == 1) |
| | | { |
| | | deviceSw_Srm1.Restart(); |
| | | |
| | | lastStatus_Srm1 = nowStatus; |
| | | } |
| | | else |
| | | { |
| | | deviceSw_Srm2.Restart(); |
| | | |
| | | lastStatus_Srm2 = nowStatus; |
| | | } |
| | | } |
| | | catch (Exception) |
| | | { |
| | | |
| | | } |
| | | } |
| | | /// <summary>大屏信息初始化 |
| | | /// 大屏信息初始化 |
| | |
| | | //设备等待时间 |
| | | //creatTodayDeviceInfo.deviceWaitTime = Convert.ToDecimal(deviceWaitTime.Hours * 60M) + deviceWaitTime.Minutes;//单位分钟 |
| | | //重新计算设备等待时间 【Editby shaocx,2024-12-30】 |
| | | CommonCalcWaitTime(ref todayDeviceInfo); |
| | | DeviceGeneralInfoHelper.CommonCalcWaitTime(ref creatTodayDeviceInfo); |
| | | |
| | | creatTodayDeviceInfo.createTime = DateTime.Now; |
| | | mod.deviceGeneralInfo.Add(creatTodayDeviceInfo); |
| | |
| | | } |
| | | |
| | | } |
| | | |
| | | DeviceGeneralInfoHelper.deviceInfoInitForDetails(1, todayTime, lastHour, deviceAlarmTime_Srm1, deviceRunTime_Srm1, deviceWaitTime_Srm1); |
| | | DeviceGeneralInfoHelper.deviceInfoInitForDetails(2, todayTime, lastHour, deviceAlarmTime_Srm2, deviceRunTime_Srm2, deviceWaitTime_Srm2); |
| | | |
| | | deviceInfos = new Thread(deviceInfo); |
| | | deviceInfos.Start(); |
| | | } |
| | |
| | | return resultDate; |
| | | } |
| | | |
| | | private void CommonCalcWaitTime(ref deviceGeneralInfo todayDeviceInfo) |
| | | { |
| | | //重新计算设备等待时间 【Editby shaocx,2024-12-30】 |
| | | todayDeviceInfo.deviceWaitTime = 1440 - (todayDeviceInfo.deviceRunTime + todayDeviceInfo.deviceAlarmTime); |
| | | } |
| | | private void CommonCalcWaitTime(ref deviceGeneralInfoForDetail todayDeviceInfo) |
| | | { |
| | | //重新计算设备等待时间 【Editby shaocx,2024-12-30】 |
| | | todayDeviceInfo.deviceWaitTime = 1440 - (todayDeviceInfo.deviceRunTime + todayDeviceInfo.deviceAlarmTime); |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | |