Newer
Older
RbFreqStand / RbFreqStandMeasure / tools / DetectionHelper.cs
yxw on 10 Jun 2021 66 KB 合并倩倩程序
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();

        }


       
    }
}