using Casic.Birmm.RbFreqStandMeasure.info; using Casic.Birmm.RbFreqStandMeasure.R_DataBase.Model; using Casic.Birmm.RbFreqStandMeasure.R_DataBase.Service; using Casic.Birmm.RbFreqStandMeasure.R_DataBase.Service.Impl; using Casic.Birmm.RbFreqStandMeasure.Tools; using System; using System.Collections; using System.Collections.Generic; using System.IO.Ports; using System.Reflection; using System.Text; using System.Threading; using System.Windows.Forms; namespace Casic.Birmm.RbFreqStandMeasure.tools { public class DetectionHelper { private readonly object obj = new object(); private bool isUsing = false; public static DetectionHelper detectionHelper; public List<Detection> detections; private bool isUpdate = false; public long detectionItemId = -1; private System.Threading.Timer timerAccuracy; delegate void TimerDelegate(string text); private long devIdAccuracy = -1; private SerialPort portAccuracy; private System.Threading.Timer timerStability1; private System.Threading.Timer timerStability10; private System.Threading.Timer timerStability20; private System.Threading.Timer timerStability100; private long devIdStability = -1; private SerialPort portStability; private Hashtable resultStability1 = new Hashtable(); private Hashtable resultStability10 = new Hashtable(); private Hashtable resultStability20 = new Hashtable(); private Hashtable resultStability100 = new Hashtable(); private System.Threading.Timer timerBootFeature; private long devIdBootFeature = -1; private SerialPort portBootFeature; private List<string> resultBootFeature = new List<string>(); private System.Threading.Timer timerAgeRate; private long devIdAgeRate = -1; private SerialPort portAgeRate; private List<string> resultAgeRate = new List<string>(); private DetectionService detectionService = new DetectionServiceImpl(); private DetectionItemService detectionItemService = new DetectionItemServiceImpl(); private DeviceService deviceService = new DeviceServiceImpl(); private int count1s = 0; private int count10s = 0; private int count20s = 0; private bool isStarted = true; private DetectionItem item=null; //1-STABILITY,2-ACCURACY,3-BOOT_FEATURE,4-AGE_RATE public DetectionHelper() { detectionHelper = this; } #region 稳定度 public void detecStability(long deviceId, string startTime, string interval, SerialPort port,bool isNow, bool isUpdates) { try { resultStability1 = new Hashtable(); resultStability10 = new Hashtable(); resultStability20 = new Hashtable(); resultStability100 = new Hashtable(); count1s = 0; count10s = 0; count20s = 0; if (isUpdates) { isUpdate = true; LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "重新检测稳定度 interval =" + interval + ";detectionItemId=" + detectionItemId); } portStability = port; devIdStability = deviceId; int delay = 0; if (Convert.ToDateTime(startTime) > DateTime.Now) { isStarted = false; TimeSpan secondSpan = new TimeSpan(Convert.ToDateTime(startTime).Ticks - DateTime.Now.Ticks); delay = (int)secondSpan.TotalMilliseconds; } string[] arr = interval.Split(','); foreach (string inter in arr) { if (inter.Equals("1")) timerStability1 = new System.Threading.Timer(exeStability1, null, delay + 100, 1000); if (inter.Equals("10")) timerStability10 = new System.Threading.Timer(exeStability10, null, delay + 100, 10 * 1000); if (inter.Equals("20")) timerStability20 = new System.Threading.Timer(exeStability20, null, delay + 100, 20 * 1000); if (inter.Equals("100")) timerStability100 = new System.Threading.Timer(exeStability100, null, delay + 100, 100 * 1000); } } catch (Exception ex) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "detecStability error: "+ ex.Message + ex.ToString()); } } private void exeStability1(Object State) { try { lock (obj) { lock(resultStability1) { while (true) { try { if (detectionItemId != -1) { //if (item == null || (item != null && item.IsDetecting.Equals("0"))) if(HomeCtrlForm.stoppedItemIdTable.ContainsValue(detectionItemId)) { timerStability1.Dispose(); LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "已停止检测,稳定度1s,devId=" + devIdStability + ";detectionItemId=" + detectionItemId); return; } if (!isStarted) { isStarted = true; DetectionItem item = detectionItemService.getById(detectionItemId); if (item.Stability1.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "-1", "", "", ""); if (item.Stability10.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "-1", "", ""); if (item.Stability20.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "", "-1", ""); if (item.Stability100.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "", "", "-1"); if (item.Accuracy.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "", "-1", "", "", "", "", "", "", ""); if (item.BootFeature.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "", "", "-1", "", "", "", "", "", ""); if (item.AgeRate.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "", "", "", "-1", "", "", "", "", ""); LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "更新通道列表; detectionItemId=" + detectionItemId); HomeCtrlForm.homeCtrlForm.LoadChannelStatus(); } break; } } catch(Exception ex) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "检测错误1:"+ex.ToString()); } } string result = ""; string fre = getFrequencyData(portStability,false); try { if (fre.Equals("close")) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "端口异常关闭,稳定度1s,devId=" + devIdStability + ";detectionItemId=" + detectionItemId); timerStability1.Dispose(); //DetectionItem detectionItem0 = detectionItemService.searchById(detectionItemId); //if (detectionItem0.Stability.Equals("-1")) detectionItemService.updateDetecStatus(detectionItemId, "0", "", "", "", "", "", "", "", ""); //if (detectionItem0.Stability1.Equals("-1")) detectionItemService.updateDetecStatus(detectionItemId, "0", "", "", "", "", "0", "", "", ""); deviceService.updateStatus(devIdStability, "1", ""); HomeCtrlForm.homeCtrlForm.LoadChannelStatus(); return; } } catch (Exception ex) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "检测错误2:" + ex.ToString()); } try { if (!fre.Equals("") && resultStability1.Count < 101) { if (resultStability1.Count == 101) timerStability1.Dispose(); if (!isUpdate && count1s < 101) { resultStability1.Add(DateTime.Now, fre); count1s++; LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "获取到频率值,1s稳定度,devId=" + devIdStability + ";detectionItemId=" + detectionItemId); } } } catch (Exception ex) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "检测错误3:" + ex.ToString()); } if (!isUpdate) { if (resultStability1.Count == 101) { List<string> resultList = new List<string>(); foreach (DictionaryEntry de in resultStability1) { resultList.Add(de.Value.ToString()); detectionService.add(devIdStability,de.Value.ToString(), "1-1",detectionItemId, Convert.ToDateTime(de.Key)); } resultStability1.Clear(); result = FreMath.Stable(resultList) + ""; LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "1s稳定度测量结果:" + result + ", devId =" + devIdStability + ";detectionItemId=" + detectionItemId); // 更新检测结果 detectionItemService.updateDetecStatus(detectionItemId, "", "", "", "", "", result, "", "", ""); DetectionItem detectionItem = detectionItemService.searchById(detectionItemId); if (detectionItem != null) { //更新稳定度检测状态 if (!detectionItem.Stability1.Equals("-1") && !detectionItem.Stability10.Equals("-1") && !detectionItem.Stability20.Equals("-1") && !detectionItem.Stability100.Equals("-1")) { detectionItemService.updateDetecStatus(detectionItemId, "0", "", "", "", "", "", "", "", ""); } detectionItem = detectionItemService.searchById(detectionItemId); //更新整个仪器检测状态 if (!detectionItem.Stability.Equals("-1") && !detectionItem.Accuracy.Equals("-1") && !detectionItem.AgeRate.Equals("-1") && !detectionItem.BootFeature.Equals("-1")) { deviceService.updateStatus(devIdStability, "3", ""); } HomeCtrlForm.homeCtrlForm.LoadChannelStatus(); } } } else { if (resultStability1.Count == 101) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "重新检测稳定度1s得到结果,detectionItemId="+ detectionItemId); timerStability1.Dispose(); List<string> resultList = new List<string>(); foreach (DictionaryEntry de in resultStability1) { resultList.Add(de.Value.ToString()); } resultStability1.Clear(); result = FreMath.Stable(resultList) + ""; string result1 = FreMath.Stable(resultList) + ""; detectionItemService.updateDetecStatus(detectionItemId, "", "", "", "", "", result1, "", "", ""); updateView(resultList); stability.label_result.Text = result1; DetailDlg.detailDlg.resultStaStr1 = result1; resultStability1.Clear(); } } } } } catch (Exception ex) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "稳定度检测错误:" + ex.Message + ex.ToString()); } } private void exeStability10(Object State) { try { lock (obj) { while (true) { if (detectionItemId != -1) { //if (item == null || (item != null && item.IsDetecting.Equals("0"))) if (HomeCtrlForm.stoppedItemIdTable.ContainsValue(detectionItemId)) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "已停止检测,稳定度10s,devId=" + devIdStability + ";detectionItemId=" + detectionItemId); timerStability10.Dispose(); return; } if (!isStarted) { isStarted = true; DetectionItem detectionItem0 = detectionItemService.searchById(detectionItemId); if (detectionItem0.Stability1.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "-1", "", "", ""); detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "-1", "", ""); if (detectionItem0.Stability20.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "", "-1", ""); if (detectionItem0.Stability100.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "", "", "-1"); if (detectionItem0.Accuracy.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "", "-1", "", "", "", "", "", "", ""); if (detectionItem0.BootFeature.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "", "", "-1", "", "", "", "", "", ""); if (detectionItem0.AgeRate.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "", "", "", "-1", "", "", "", "", ""); HomeCtrlForm.homeCtrlForm.LoadChannelStatus(); } break; } } string result = ""; string fre = getFrequencyData(portStability, false); if (fre.Equals("close")) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "端口异常关闭,稳定度10s,devId=" + devIdStability + ";detectionItemId=" + detectionItemId); timerStability10.Dispose(); DetectionItem detectionItem0 = detectionItemService.searchById(detectionItemId); if (detectionItem0.Stability.Equals("-1")) detectionItemService.updateDetecStatus(detectionItemId, "0", "", "", "", "", "", "", "", ""); if (detectionItem0.Stability10.Equals("-1")) detectionItemService.updateDetecStatus(detectionItemId, "0", "", "", "", "", "", "0", "", ""); deviceService.updateStatus(devIdStability, "1", ""); HomeCtrlForm.homeCtrlForm.LoadChannelStatus(); return; } if (!fre.Equals("") && resultStability10.Count < 101) { resultStability10.Add(DateTime.Now, fre); if (resultStability10.Count == 101) timerStability10.Dispose(); if (!isUpdate && count10s < 101) { count10s++; LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "获取到频率值,10s稳定度,devId=" + devIdStability + ";detectionItemId=" + detectionItemId); } } if (!isUpdate) { if (resultStability10.Count == 101) { timerStability10.Dispose(); List<string> resultList = new List<string>(); foreach (DictionaryEntry de in resultStability10) { resultList.Add(de.Value.ToString()); detectionService.add(devIdStability, de.Value.ToString(), "1-10", detectionItemId, Convert.ToDateTime(de.Key)); } resultStability10.Clear(); result = FreMath.Stable(resultList) + ""; LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "10s稳定度检测结果:" + result + ", devId =" + devIdStability + ";detectionItemId=" + detectionItemId); detectionItemService.updateDetecStatus(detectionItemId, "", "", "", "", "", "", result, "", ""); DetectionItem detectionItem = detectionItemService.searchById(detectionItemId); if (detectionItem != null) { //更新稳定度检测状态 if (!detectionItem.Stability1.Equals("-1") && !detectionItem.Stability10.Equals("-1") && !detectionItem.Stability20.Equals("-1") && !detectionItem.Stability100.Equals("-1")) { detectionItemService.updateDetecStatus(detectionItemId, "0", "", "", "", "", "", "", "", ""); } detectionItem = detectionItemService.searchById(detectionItemId); //更新整个仪器检测状态 if (!detectionItem.Stability.Equals("-1") && !detectionItem.Accuracy.Equals("-1") && !detectionItem.AgeRate.Equals("-1") && !detectionItem.BootFeature.Equals("-1")) { deviceService.updateStatus(devIdStability, "3", ""); } HomeCtrlForm.homeCtrlForm.LoadChannelStatus(); } } } else { if (resultStability10.Count == 101) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "重新检测稳定度10s得到结果,detectionItemId=" + detectionItemId); timerStability10.Dispose(); List<string> resultList = new List<string>(); foreach (DictionaryEntry de in resultStability10) { resultList.Add(de.Value.ToString()); } resultStability10.Clear(); string result1 = FreMath.Stable(resultList) + ""; detectionItemService.updateDetecStatus(detectionItemId, "", "", "", "", "", "", result1, "", ""); updateView(resultList); stability.label_result.Text = result1; DetailDlg.detailDlg.resultStaStr10 = result1; } } } } catch (Exception ex) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "exeStability10 error: " + ex.Message + ex.ToString()); } } private void exeStability20(Object State) { try { lock (obj) { while (true) { if (detectionItemId != -1) { if (HomeCtrlForm.stoppedItemIdTable.ContainsValue(detectionItemId)) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "已停止检测,稳定度20s, devId = " + devIdStability + "; detectionItemId = " + detectionItemId); timerStability20.Dispose(); return; } if (!isStarted) { isStarted = true; DetectionItem item = detectionItemService.getById(detectionItemId); DetectionItem detectionItem0 = detectionItemService.searchById(detectionItemId); if (detectionItem0.Stability1.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "-1", "", "", ""); if (detectionItem0.Stability10.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "-1", "", ""); detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "", "-1", ""); if (detectionItem0.Stability100.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "", "", "-1"); if (detectionItem0.Accuracy.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "", "-1", "", "", "", "", "", "", ""); if (detectionItem0.BootFeature.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "", "", "-1", "", "", "", "", "", ""); if (detectionItem0.AgeRate.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "", "", "", "-1", "", "", "", "", ""); HomeCtrlForm.homeCtrlForm.LoadChannelStatus(); } break; } } string result = ""; string fre = getFrequencyData(portStability, false); if (fre.Equals("close")) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "端口异常关闭,稳定度20s,devId=" + devIdStability + ";detectionItemId=" + detectionItemId); timerStability20.Dispose(); DetectionItem detectionItem0 = detectionItemService.searchById(detectionItemId); if (detectionItem0.Stability.Equals("-1")) detectionItemService.updateDetecStatus(detectionItemId, "0", "", "", "", "", "", "", "", ""); if (detectionItem0.Stability20.Equals("-1")) detectionItemService.updateDetecStatus(detectionItemId, "0", "", "", "", "", "", "", "0", ""); deviceService.updateStatus(devIdStability, "1", ""); HomeCtrlForm.homeCtrlForm.LoadChannelStatus(); return; } if (!fre.Equals("") && resultStability20.Count < 101) { resultStability20.Add(DateTime.Now, fre); if (!isUpdate && count20s < 101) { count20s++; LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "获取到频率值,20s稳定度,devId=" + devIdStability + ";detectionItemId=" + detectionItemId); } } if (!isUpdate) { if (resultStability20.Count == 101) { timerStability20.Dispose(); List<string> resultList = new List<string>(); foreach (DictionaryEntry de in resultStability20) { resultList.Add(de.Value.ToString()); detectionService.add(devIdStability, de.Value.ToString(), "1-20", detectionItemId, Convert.ToDateTime(de.Key)); } resultStability20.Clear(); result = FreMath.Stable(resultList) + ""; LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "20s稳定度检测结果:" + result + ", devId =" + devIdStability + ";detectionItemId=" + detectionItemId); detectionItemService.updateDetecStatus(detectionItemId, "", "", "", "", "", "", "", result, ""); DetectionItem detectionItem = detectionItemService.searchById(detectionItemId); if (detectionItem != null) { //更新稳定度检测状态 if (!detectionItem.Stability1.Equals("-1") && !detectionItem.Stability10.Equals("-1") && !detectionItem.Stability20.Equals("-1") && !detectionItem.Stability100.Equals("-1")) { detectionItemService.updateDetecStatus(detectionItemId, "0", "", "", "", "", "", "", "", ""); } detectionItem = detectionItemService.searchById(detectionItemId); //更新整个仪器检测状态 if (!detectionItem.Stability.Equals("-1") && !detectionItem.Accuracy.Equals("-1") && !detectionItem.AgeRate.Equals("-1") && !detectionItem.BootFeature.Equals("-1")) { deviceService.updateStatus(devIdStability, "3", ""); } HomeCtrlForm.homeCtrlForm.LoadChannelStatus(); } } } else { if (resultStability20.Count == 101) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "重新检测稳定度20s得到结果,detectionItemId=" + detectionItemId); timerStability20.Dispose(); List<string> resultList = new List<string>(); foreach (DictionaryEntry de in resultStability20) { resultList.Add(de.Value.ToString()); } resultStability20.Clear(); string result1 = FreMath.Stable(resultList) + ""; detectionItemService.updateDetecStatus(detectionItemId, "", "", "", "", "", "", "", result1, ""); updateView(resultList); stability.label_result.Text = result1; DetailDlg.detailDlg.resultStaStr20 = result1; } } } } catch (Exception ex) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "exeStability20 error: " + ex.Message + ex.ToString()); } } private void exeStability100(Object State) { try { lock (obj) { if (!isStarted) { while (true) { if (HomeCtrlForm.stoppedItemIdTable.ContainsValue(detectionItemId)) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "已停止检测,稳定度100s, devId = " + devIdStability + "; detectionItemId = " + detectionItemId); timerStability100.Dispose(); return; } if (detectionItemId != -1) { isStarted = true; DetectionItem item = detectionItemService.getById(detectionItemId); DetectionItem detectionItem0 = detectionItemService.searchById(detectionItemId); if (detectionItem0.Stability1.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "-1", "", "", ""); if (detectionItem0.Stability10.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "-1", "", ""); if (detectionItem0.Stability20.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "", "-1", ""); detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "", "", "-1"); if (detectionItem0.Accuracy.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "", "-1", "", "", "", "", "", "", ""); if (detectionItem0.BootFeature.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "", "", "-1", "", "", "", "", "", ""); if (detectionItem0.AgeRate.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "", "", "", "-1", "", "", "", "", ""); HomeCtrlForm.homeCtrlForm.LoadChannelStatus(); } break; } } string result = ""; string fre = getFrequencyData(portStability, false); if (fre.Equals("close")) { timerStability100.Dispose(); LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "端口异常关闭,稳定度100s,devId=" + devIdStability + ";detectionItemId=" + detectionItemId); DetectionItem detectionItem0 = detectionItemService.searchById(detectionItemId); if (detectionItem0.Stability.Equals("-1")) detectionItemService.updateDetecStatus(detectionItemId, "0", "", "", "", "", "", "", "", ""); if (detectionItem0.Stability100.Equals("-1")) detectionItemService.updateDetecStatus(detectionItemId, "0", "", "", "", "", "", "", "", "0"); deviceService.updateStatus(devIdStability, "1", ""); HomeCtrlForm.homeCtrlForm.LoadChannelStatus(); return; } if (!fre.Equals("") && resultStability100.Count < 101) { resultStability100.Add(DateTime.Now, fre); if (!isUpdate) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "获取到频率值,100s稳定度,devId=" + devIdStability + ";detectionItemId=" + detectionItemId); } } if (!isUpdate) { if (resultStability100.Count == 101) { timerStability100.Dispose(); List<string> resultList = new List<string>(); foreach (DictionaryEntry de in resultStability100) { resultList.Add(de.Value.ToString()); detectionService.add(devIdStability, de.Value.ToString(), "1-100", detectionItemId, Convert.ToDateTime(de.Key)); } resultStability100.Clear(); result = FreMath.Stable(resultList) + ""; LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "100s稳定度检测结果:" + result + ", devId =" + devIdStability + ";detectionItemId=" + detectionItemId); detectionItemService.updateDetecStatus(detectionItemId, "", "", "", "", "", "", "", "", result); DetectionItem detectionItem = detectionItemService.searchById(detectionItemId); if (detectionItem != null) { //更新稳定度检测状态 if (!detectionItem.Stability1.Equals("-1") && !detectionItem.Stability10.Equals("-1") && !detectionItem.Stability20.Equals("-1") && !detectionItem.Stability100.Equals("-1")) { detectionItemService.updateDetecStatus(detectionItemId, "0", "", "", "", "", "", "", "", ""); } detectionItem = detectionItemService.searchById(detectionItemId); //更新整个仪器检测状态 if (!detectionItem.Stability.Equals("-1") && !detectionItem.Accuracy.Equals("-1") && !detectionItem.AgeRate.Equals("-1") && !detectionItem.BootFeature.Equals("-1")) { deviceService.updateStatus(devIdStability, "3", ""); } HomeCtrlForm.homeCtrlForm.LoadChannelStatus(); } } } else { if (resultStability100.Count == 101) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "重新检测稳定度100s得到结果,detectionItemId=" + detectionItemId); timerStability100.Dispose(); List<string> resultList = new List<string>(); foreach (DictionaryEntry de in resultStability100) { resultList.Add(de.Value.ToString()); } resultStability100.Clear(); string result1 = FreMath.Stable(resultList) + ""; detectionItemService.updateDetecStatus(detectionItemId, "", "", "", "", "", "", "", "", result1); updateView(resultList); stability.label_result.Text = result1; DetailDlg.detailDlg.resultStaStr100 = result1; resultStability100.Clear(); } } } } catch (Exception ex) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "exeStability100 error: " + ex.Message + ex.ToString()); } } #endregion #region 准确度 public void detecAccuracy(long deviceId, SerialPort port, string endTime, bool isStartNow, bool isUpdates) { try { portAccuracy = port; devIdAccuracy = deviceId; if (isUpdates) { isUpdate = true; LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "重新检测准确度"); } int delay = 0; if (Convert.ToDateTime(endTime) > DateTime.Now) { isStarted = false; TimeSpan secondSpan = new TimeSpan(Convert.ToDateTime(endTime).Ticks - DateTime.Now.Ticks); delay = (int)secondSpan.TotalMilliseconds - 20 * 1000; } timerAccuracy = new System.Threading.Timer(exeAccuracy, null, delay + 200, 5 * 60 * 1000); } catch (Exception ex) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "detecAccuracy error: " + ex.Message + ex.ToString()); } } private void exeAccuracy(Object State) { try { lock (obj) { while (true) { if (detectionItemId != -1) { if (HomeCtrlForm.stoppedItemIdTable.ContainsValue(detectionItemId)) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "已停止检测,准确度, devId=" + devIdAccuracy + ";detectionItemId=" + detectionItemId); timerAccuracy.Dispose(); return; } if (!isStarted) { DetectionItem item = detectionItemService.getById(detectionItemId); isStarted = true; DetectionItem detectionItem0 = detectionItemService.searchById(detectionItemId); if (detectionItem0.Stability.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "", "", ""); if (detectionItem0.Stability1.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "-1", "", "", ""); if (detectionItem0.Stability10.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "-1", "", ""); if (detectionItem0.Stability20.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "", "-1", ""); if (detectionItem0.Stability100.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "", "", "-1"); if (detectionItem0.Accuracy.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "", "-1", "", "", "", "", "", "", ""); if (detectionItem0.BootFeature.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "", "", "-1", "", "", "", "", "", ""); if (detectionItem0.AgeRate.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "", "", "", "-1", "", "", "", "", ""); HomeCtrlForm.homeCtrlForm.LoadChannelStatus(); } break; } } string result = ""; double sum = 0.0; List<string> resultList = new List<string>(); for (int i = 0; i < 200; i++) { string fre = getFrequencyData(portAccuracy, false); if (fre.Equals("close")) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "端口异常关闭,准确度,devId=" + devIdStability + ";detectionItemId=" + detectionItemId); timerAccuracy.Dispose(); DetectionItem detectionItem0 = detectionItemService.searchById(detectionItemId); if (detectionItem0.Accuracy.Equals("-1")) detectionItemService.updateDetecStatus(detectionItemId, "", "0", "", "", "", "", "", "", ""); deviceService.updateStatus(devIdStability, "1", ""); HomeCtrlForm.homeCtrlForm.LoadChannelStatus(); return; } if (fre.Equals("")) continue; resultList.Add(fre); if (!isUpdate) { detectionService.add(devIdAccuracy, fre, "2", detectionItemId, DateTime.Now); LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "获取到频率值,准确度, devId=" + devIdAccuracy + ";detectionItemId=" + detectionItemId); } if (resultList.Count == 3) { sum = sum + Convert.ToDouble(fre); break; } } result = Math.Abs(sum / 3) + ""; timerAccuracy.Dispose(); while (true) { if (detectionItemId != -1) { detectionItemService.updateDetecStatus(detectionItemId, "", result, "", "", "", "", "", "", ""); break; } } if (!isUpdate) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "准确度检测结果result="+result+",detectionItemId=" + detectionItemId); DetectionItem detectionItem = detectionItemService.searchById(detectionItemId); if (detectionItem != null) { if (!detectionItem.Stability.Equals("-1") && !detectionItem.Accuracy.Equals("-1") && !detectionItem.AgeRate.Equals("-1") && !detectionItem.BootFeature.Equals("-1")) { deviceService.updateStatus(devIdAccuracy, "3", ""); } } HomeCtrlForm.homeCtrlForm.LoadChannelStatus(); } else { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "重新检测准确度得到结果,detectionItemId=" + detectionItemId); accuracy.label_result.Text = result; DetailDlg.detailDlg.resultAccStr = result; updateView(resultList); } } } catch (Exception ex) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "计算准确度出错:"+ ex.Message); } } #endregion #region 开机特性 public void detecBootFeature(long deviceId, string startTime, SerialPort port, bool isStartNow) { try { resultBootFeature = new List<string>(); portBootFeature = port; devIdBootFeature = deviceId; int delay = 0; if (Convert.ToDateTime(startTime) > DateTime.Now) { isStarted = false; TimeSpan secondSpan = new TimeSpan(Convert.ToDateTime(startTime).Ticks - DateTime.Now.Ticks); delay = (int)secondSpan.TotalMilliseconds; } timerBootFeature = new System.Threading.Timer(exeBootFeature, null, delay + 100, 60 * 60 * 1000); } catch (Exception ex) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "detecBootFeature error: " + ex.Message + ex.ToString()); } } private void exeBootFeature(Object State) { try { lock (obj) { if (HomeCtrlForm.stoppedItemIdTable.ContainsValue(detectionItemId)) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "已停止检测,开机特性, devId=" + devIdAccuracy + ";detectionItemId=" + detectionItemId); timerBootFeature.Dispose(); return; } if (!isStarted) { while (true) { if (detectionItemId != -1) { isStarted = true; DetectionItem detectionItem0 = detectionItemService.searchById(detectionItemId); if (detectionItem0.Stability.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "", "", ""); if (detectionItem0.Stability1.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "-1", "", "", ""); if (detectionItem0.Stability10.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "-1", "", ""); if (detectionItem0.Stability20.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "", "-1", ""); if (detectionItem0.Stability100.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "", "", "-1"); if (detectionItem0.Accuracy.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "", "-1", "", "", "", "", "", "", ""); if (detectionItem0.BootFeature.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "", "", "-1", "", "", "", "", "", ""); if (detectionItem0.AgeRate.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "", "", "", "-1", "", "", "", "", ""); HomeCtrlForm.homeCtrlForm.LoadChannelStatus(); break; } } } string result = ""; double sum = 0.0; int count = 0; for (int i = 0; i < 50; i++) { string fre = getFrequencyData(portBootFeature, false); if (fre.Equals("close")) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "端口异常关闭,开机特性,devId=" + devIdStability + ";detectionItemId=" + detectionItemId); timerBootFeature.Dispose(); DetectionItem detectionItem0 = detectionItemService.searchById(detectionItemId); if (detectionItem0.BootFeature.Equals("-1")) detectionItemService.updateDetecStatus(detectionItemId, "", "", "0", "", "", "", "", "", ""); deviceService.updateStatus(devIdStability, "1", ""); HomeCtrlForm.homeCtrlForm.LoadChannelStatus(); return; } if (!fre.Equals("")) { count++; sum = sum + Convert.ToDouble(fre); if (count == 3) break; } } detectionService.add(devIdBootFeature, sum / 3 + "", "3", detectionItemId,DateTime.Now); LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "获取到频率值,开机特性, devId=" + devIdAccuracy + ";detectionItemId=" + detectionItemId); resultBootFeature.Add(sum / 3 + ""); if (resultBootFeature.Count == 8) { timerBootFeature.Dispose(); string max = "0.0"; string min = "0.0"; foreach (string fre in resultBootFeature) { if (Convert.ToDouble(fre) > Convert.ToDouble(max)) max = fre; if (Convert.ToDouble(fre) < Convert.ToDouble(min) || min.Equals("0.0")) min = fre; } result = (Convert.ToDouble(max) - Convert.ToDouble(min)) + ""; LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "开机特性检测结果result=" + result + ",detectionItemId=" + detectionItemId); detectionItemService.updateDetecStatus(detectionItemId, "", "", result, "", "", "", "", "", ""); DetectionItem detectionItem = detectionItemService.searchById(detectionItemId); if (detectionItem != null) { if (!detectionItem.Stability.Equals("-1") && !detectionItem.Accuracy.Equals("-1") && !detectionItem.AgeRate.Equals("-1") && !detectionItem.BootFeature.Equals("-1")) { deviceService.updateStatus(devIdBootFeature, "3", ""); } } HomeCtrlForm.homeCtrlForm.LoadChannelStatus(); resultBootFeature.Clear(); } } } catch (Exception ex) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "exeBootFeature error: " + ex.Message + ex.ToString()); } } #endregion #region 日老化率 public void detecAgeRate(long deviceId, string startTime, SerialPort port, bool isStartNow) { try { resultAgeRate = new List<string>(); portAgeRate = port; devIdAgeRate = deviceId; int delay = 0; if (Convert.ToDateTime(startTime) > DateTime.Now) { isStarted = false; TimeSpan secondSpan = new TimeSpan(Convert.ToDateTime(startTime).Ticks - DateTime.Now.Ticks); delay = (int)secondSpan.TotalMilliseconds; } timerAgeRate = new System.Threading.Timer(exeAgeRate, null, delay + 100, 12 * 60 * 60 * 1000); } catch (Exception ex) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "detecAgeRate error: " + ex.Message + ex.ToString()); } } private void exeAgeRate(Object State) { try { lock (obj) { while (true) { if (detectionItemId != -1) { if (HomeCtrlForm.stoppedItemIdTable.ContainsValue(detectionItemId)) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "已停止检测,日老化率, devId=" + devIdAccuracy + ";detectionItemId=" + detectionItemId); timerAgeRate.Dispose(); return; } if (!isStarted) { isStarted = true; DetectionItem detectionItem0 = detectionItemService.searchById(detectionItemId); if (detectionItem0.Stability.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "", "", ""); if (detectionItem0.Stability1.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "-1", "", "", ""); if (detectionItem0.Stability10.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "-1", "", ""); if (detectionItem0.Stability20.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "", "-1", ""); if (detectionItem0.Stability100.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "-1", "", "", "", "", "", "", "", "-1"); if (detectionItem0.Accuracy.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "", "-1", "", "", "", "", "", "", ""); if (detectionItem0.BootFeature.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "", "", "-1", "", "", "", "", "", ""); if (detectionItem0.AgeRate.Equals("-2")) detectionItemService.updateDetecStatus(detectionItemId, "", "", "", "-1", "", "", "", "", ""); HomeCtrlForm.homeCtrlForm.LoadChannelStatus(); } break; } } LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "开始检测日老化率"); string result = ""; double sum = 0.0; int count = 0; for (int i = 0; i < 50; i++) { string fre = getFrequencyData(portAgeRate, false); if (fre.Equals("close")) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "端口异常关闭,日老化率,devId=" + devIdStability + ";detectionItemId=" + detectionItemId); timerAgeRate.Dispose(); DetectionItem detectionItem0 = detectionItemService.searchById(detectionItemId); if (detectionItem0.AgeRate.Equals("-1")) detectionItemService.updateDetecStatus(detectionItemId, "", "", "", "0", "", "", "", "", ""); deviceService.updateStatus(devIdStability, "1", ""); HomeCtrlForm.homeCtrlForm.LoadChannelStatus(); return; } if (!fre.Equals("")) { count++; sum = sum + Convert.ToDouble(fre); if (count == 3) break; } } detectionService.add(devIdAgeRate, sum / 3 + "", "4", detectionItemId,DateTime.Now); LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "获取到频率值,日老化率, devId=" + devIdAccuracy + ";detectionItemId=" + detectionItemId); resultAgeRate.Add(sum / 3 + ""); if (resultAgeRate.Count == 15) { timerAgeRate.Dispose(); double r = 0.0; double k = FreMath.DriftRate(resultAgeRate, out r); result = k + "," + r.ToString().Substring(0, 5); LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "日老化率检测结果result=" + result + ",detectionItemId=" + detectionItemId); detectionItemService.updateDetecStatus(detectionItemId, "", "", "", result, "", "", "", "", ""); DetectionItem detectionItem = detectionItemService.searchById(detectionItemId); if (detectionItem != null) { if (!detectionItem.Stability.Equals("-1") && !detectionItem.Accuracy.Equals("-1") && !detectionItem.AgeRate.Equals("-1") && !detectionItem.BootFeature.Equals("-1")) { deviceService.updateStatus(devIdAgeRate, "3", ""); } } HomeCtrlForm.homeCtrlForm.LoadChannelStatus(); resultAgeRate.Clear(); } } } catch (Exception ex) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "exeAgeRate error: " + ex.Message + ex.ToString()); } } #endregion // 获取检测数据 public string getFrequencyData(SerialPort port, bool isTest) { string received = ""; try { while (true) { if (!isUsing) { isUsing = true; if (!port.IsOpen) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, port.PortName + " closed!!!!!!"); string name = ConfigHelper.getKeyByValue(port.PortName + " 115200").Replace("channel", "通道"); MessageBox.Show(name+"的端口异常关闭,该通道上的检测将终止!"); return "close"; } if (ConfigHelper.GetAppConfig("deviceType").ToString().Equals("1")) { int count = 0; while (count < 1000) { int readLen = port.BytesToRead; if (readLen > 0) { byte[] buffer = new byte[readLen]; port.Read(buffer, 0, readLen);// 接收数据到buffer里面 string data = Encoding.ASCII.GetString(buffer); if (data.StartsWith("$")) { string[] dataArray = data.Split('$')[1].Split(' '); if (dataArray.Length < 2) continue; string s1 = dataArray[0].Replace("$", ""); string s2 = (Convert.ToDouble(dataArray[1]) / 1000000).ToString();// "0." + dataArray[1].Replace(".", "").Replace("-", "").TrimEnd('0'); if (dataArray[1].Contains("-")) { received = (Convert.ToDouble(s1) - Convert.ToDouble(s2)) + ""; } else received = (Convert.ToDouble(s1) + Convert.ToDouble(s2)) + ""; received = ((Convert.ToDouble(received) - 10000000) / 10000000) + ""; break; } } count++; Thread.Sleep(10); } } else { int count = 0; while (count < 1000) { int readLen = port.BytesToRead; if (readLen > 0) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, port.PortName + "2 readLen="+ readLen); byte[] buffer = new byte[readLen]; port.Read(buffer, 0, readLen);// 接收数据到buffer里面 string data = Encoding.ASCII.GetString(buffer); string[] dataArray = data.Split(' '); if (dataArray.Length >= 3) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, port.PortName + "2 data =" + data); foreach (string sss in dataArray) { if (sss.Contains("E")) { received = sss; break; } } if (!received.Equals("")) break; } } count++; Thread.Sleep(10); } } if (received.Equals("")) { string name = ConfigHelper.getKeyByValue(port.PortName + " 115200").Replace("channel", "通道"); LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, name + "获取数据失败!!!!!!!!!!!!!!" + DateTime.Now.ToLongTimeString()); if (!isTest) { MessageBox.Show("从[" + name + "]获取数据失败,该通道上的检测将终止!"); return "close"; } return received; } break; } } } catch (Exception ex) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "getFrequencyData错误:" + ex.Message); return ""; } finally { isUsing = false; } return received; } //重新检测功能,更新详情的原始数据列表 private void updateView(List<string> result) { try { isUpdate = false; //new Thread(() => //{ int index = 0; foreach (DataGridViewRow row in DetailDlg.dataGridView.Rows) { if (index < result.Count) { row.Cells[2].Value = result[index].ToString(); int re = detectionService.updateFrequency(Convert.ToInt64(row.Cells[3].Value), result[index].ToString()); LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "updateFrequency re=" + re + ";id=" + row.Cells[3].Value + "; fre=" + result[index].ToString()); } index++; } DetailDlg.detailDlg.updateChannelNoRedetec(); DetailDlg.label_redetecting.Visible = false; } catch (Exception ex) { LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "updateView error: " + ex.Message + ex.ToString()); } //}).Start(); } } }