333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
siemenswmssditcode/wmsService/wcftest/Form1.cs
@@ -66,14 +66,20 @@
        /// 设备运行时间
        /// </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>
@@ -82,10 +88,14 @@
        /// 设备运行计时器
        /// </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>
@@ -3122,6 +3132,8 @@
                    string[] containers = new string[19];
                    deviceSw.Start();// 设备运行计算器开始记时
                    deviceSw_Srm1.Start();// 设备运行计算器开始记时
                    deviceSw_Srm2.Start();// 设备运行计算器开始记时
                    #region 获取设备信息
                    if (allowGetDeviceInfo == true)
@@ -3195,24 +3207,11 @@
                            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;
@@ -3232,20 +3231,28 @@
                            }
                            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();
                        }
@@ -3275,6 +3282,60 @@
                            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, "运行");
                            }
                        }
                    }
@@ -3324,9 +3385,66 @@
            {
            }
        }
        /// <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>大屏信息初始化
        /// 大屏信息初始化
@@ -3361,7 +3479,7 @@
                        //设备等待时间
                        //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);
@@ -3371,6 +3489,10 @@
                    }
                }
                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();
            }
@@ -3605,16 +3727,7 @@
            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