diff --git a/Analysis/BaseUnit/Base.cs b/Analysis/BaseUnit/Base.cs index 2204fd9..f2cf3a2 100644 --- a/Analysis/BaseUnit/Base.cs +++ b/Analysis/BaseUnit/Base.cs @@ -246,10 +246,10 @@ namespace BaseFunction { try { - if (rleMessage != null) - { - rleMessage.Text = str; - } + //if (rleMessage != null) + //{ + // rleMessage.Text = str; + //} if (str.Contains("警告") || str.ToUpper().Contains("WARN")) { diff --git a/Analysis/BaseUnit/PlcSignalDfn.cs b/Analysis/BaseUnit/PlcSignalDfn.cs index cecce79..8023ea3 100644 --- a/Analysis/BaseUnit/PlcSignalDfn.cs +++ b/Analysis/BaseUnit/PlcSignalDfn.cs @@ -66,5 +66,7 @@ namespace NSAnalysis public const string Speed2 = "Speed2"; public const string R01_Pules = "R01_Pules"; public const string R02_Pules = "R02_Pules"; + + public const string NoCarTypeFlag = "NoCarTypeFlag"; } } \ No newline at end of file diff --git a/Analysis/CarDataDisplayForm/FEH3LeftCarData.cs b/Analysis/CarDataDisplayForm/FEH3LeftCarData.cs index ab3ef40..1290a1b 100644 --- a/Analysis/CarDataDisplayForm/FEH3LeftCarData.cs +++ b/Analysis/CarDataDisplayForm/FEH3LeftCarData.cs @@ -24,6 +24,7 @@ namespace NSAnalysis private TMeasureMSSQLDAL tmdal = new TMeasureMSSQLDAL(); private DataTable dtVINData = new DataTable(); private string strLastVIN = ""; + private BackgroundWorker m_bgwRefreshCar = new BackgroundWorker(); CenterControl gCC = null; #endregion 全局变量 @@ -64,14 +65,14 @@ namespace NSAnalysis for (int i = 1; i <= 30; i++) { strNSName = "";//L0" + i.ToString(); - if(i<=9) + if (i <= 9) strNSName = "L0" + i.ToString(); else { strNSName = "L" + i.ToString(); } ucns = ((UCVWNextSense)MyBase.GetChildControl(this, strNSName)); - if(ucns != null) + if (ucns != null) { ucns.tlpBackColor = Color.White; ucns.tlpFBackColor = Color.White; @@ -92,10 +93,92 @@ namespace NSAnalysis InitNextSenseControl(); labVIN.Text = ""; tmrRefreshData.Interval = 1000; - tmrRefreshData.Start(); + //tmrRefreshData.Start(); + m_bgwRefreshCar.DoWork += new DoWorkEventHandler(m_bgwRefreshCar_DoWork); + m_bgwRefreshCar.RunWorkerAsync(); SpecifyScreenDisplay1(); } + private void m_bgwRefreshCar_DoWork(object sender, DoWorkEventArgs e) + { + while (true) + { + try + { + string strVIN = tmdal.SelectMaintenanceStation7VIN(); + if (strLastVIN != strVIN) + { + if (strVIN.ToLower().Contains("empty")) + { + labVIN.Text = "VIN码为空"; + //InitNextSenseOneItemControl(); + InitNextSenseControl(); + } + else + { + if (strVIN.Length == 17) + { + string strSubVIN = strVIN; + dtVINData.Clear(); + Invoke((MethodInvoker)(() => + { + labVIN.Text = strSubVIN; + })); + string strCarType = tmdal.SelectCarTypeByVIN(strSubVIN); + if (strCarType.ToUpper().Contains("EH3")) + { + MyBase.TraceWriteLine("Left EH3 UI Refresh m_bgwRefreshCar_DoWork (strVIN.Length==17):strLastVIN:" + strLastVIN + " ;VIN: " + strSubVIN); + SpecifyScreenDisplay1(); + dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "L"); + if (dtVINData.Rows.Count > 0) + { + refreshCarUIData(dtVINData); + analysisTitleColor(); + } + else + { + InitNextSenseControl(); + } + gCC.ShowCarMeasureDataByCarType(1); + } + } + if (strVIN.Length == 21) + { + string strSubVIN = strVIN.Substring(0, 17); + dtVINData.Clear(); + Invoke((MethodInvoker)(() => + { + labVIN.Text = strSubVIN; + })); + string strCarType = strVIN.Substring(18, 3); + + if (strCarType.ToUpper().Contains("EH3")) + { + MyBase.TraceWriteLine("Left EH3 UI Refresh m_bgwRefreshCar_DoWork (strVIN.Length==21):strLastVIN:" + strLastVIN + " ;VIN: " + strSubVIN); + SpecifyScreenDisplay1(); + dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "L"); + if (dtVINData.Rows.Count > 0) + { + refreshCarUIData(dtVINData); + analysisTitleColor(); + } + else + { + InitNextSenseControl(); + } + gCC.ShowCarMeasureDataByCarType(1); + } + } + } + } + strLastVIN = strVIN; + } + catch (Exception ex) + { + MyBase.TraceWriteLine("Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:" + ex.Message); + } + } + } private void btnRefresh_Click(object sender, EventArgs e) { SpecifyScreenDisplay1(); @@ -107,7 +190,7 @@ namespace NSAnalysis } else { - if (strVIN.Length==17) + if (strVIN.Length == 17) { string strSubVIN = strVIN;// strVIN.Substring(0, strVIN.Length - 2); dtVINData.Clear(); @@ -155,80 +238,77 @@ namespace NSAnalysis private void tmrRefreshData_Tick(object sender, EventArgs e) { try - { - tmrRefreshData.Stop(); - string strVIN = tmdal.SelectMaintenanceStation7VIN(); - if (strLastVIN != strVIN) { - if (strVIN.ToLower().Contains("empty")) + tmrRefreshData.Stop(); + string strVIN = tmdal.SelectMaintenanceStation7VIN(); + if (strLastVIN != strVIN) { - labVIN.Text = "VIN码为空"; - //InitNextSenseOneItemControl(); - InitNextSenseControl(); - } - else - { - if (strVIN.Length==17) + if (strVIN.ToLower().Contains("empty")) { - string strSubVIN = strVIN; - dtVINData.Clear(); - labVIN.Text = strSubVIN; - string strCarType = tmdal.SelectCarTypeByVIN(strSubVIN); - MyBase.TraceWriteLine("Left EH3 UI Refresh tmrRefreshData (strVIN.Length==17):CarType:" + strCarType + " ;VIN: " + strSubVIN); - if (strCarType.ToUpper().Contains("EH3")) - { - SpecifyScreenDisplay1(); - dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "L"); - if (dtVINData.Rows.Count>0) - { - refreshCarUIData(dtVINData); - analysisTitleColor(); - } - else - { - InitNextSenseControl(); - } - gCC.ShowCarMeasureDataByCarType(1); - } + labVIN.Text = "VIN码为空"; + //InitNextSenseOneItemControl(); + InitNextSenseControl(); } - if (strVIN.Length == 21) + else { - string strSubVIN = strVIN.Substring(0,17); - dtVINData.Clear(); - labVIN.Text = strSubVIN; - string strCarType = strVIN.Substring(18, 3); - MyBase.TraceWriteLine("Left EH3 UI Refresh tmrRefreshData (strVIN.Length==21):CarType:" + strCarType + " ;VIN: " + strSubVIN); - if (strCarType.ToUpper().Contains("EH3")) + if (strVIN.Length == 17) { - SpecifyScreenDisplay1(); - dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "L"); - if (dtVINData.Rows.Count > 0) - { - refreshCarUIData(dtVINData); - analysisTitleColor(); - } - else - { - InitNextSenseControl(); - } - gCC.ShowCarMeasureDataByCarType(1); - } - } - } - } - strLastVIN = strVIN; - tmrRefreshData.Start(); - } - catch (Exception ex) - { - MyBase.TraceWriteLine("Left EHY UI Refresh tmrRefreshData Error:" + ex.Message); - } + string strSubVIN = strVIN; + dtVINData.Clear(); + labVIN.Text = strSubVIN; + string strCarType = tmdal.SelectCarTypeByVIN(strSubVIN); - finally - { - tmrRefreshData.Start(); - } - } + if (strCarType.ToUpper().Contains("EH3")) + { + MyBase.TraceWriteLine("Left EH3 UI Refresh tmrRefreshData (strVIN.Length==17):strLastVIN:" + strLastVIN + " ;VIN: " + strSubVIN); + SpecifyScreenDisplay1(); + dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "L"); + if (dtVINData.Rows.Count > 0) + { + refreshCarUIData(dtVINData); + analysisTitleColor(); + } + else + { + InitNextSenseControl(); + } + gCC.ShowCarMeasureDataByCarType(1); + } + } + if (strVIN.Length == 21) + { + string strSubVIN = strVIN.Substring(0, 17); + dtVINData.Clear(); + labVIN.Text = strSubVIN; + string strCarType = strVIN.Substring(18, 3); + + if (strCarType.ToUpper().Contains("EH3")) + { + MyBase.TraceWriteLine("Left EH3 UI Refresh tmrRefreshData (strVIN.Length==21):strLastVIN:" + strLastVIN + " ;VIN: " + strSubVIN); + SpecifyScreenDisplay1(); + dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "L"); + if (dtVINData.Rows.Count > 0) + { + refreshCarUIData(dtVINData); + analysisTitleColor(); + } + else + { + InitNextSenseControl(); + } + gCC.ShowCarMeasureDataByCarType(1); + } + } + } + } + strLastVIN = strVIN; + tmrRefreshData.Start(); + } + catch (Exception ex) + { + MyBase.TraceWriteLine("Left EHY UI Refresh tmrRefreshData Error:" + ex.Message); + } + } private Color analysisColorbyStatus(string strStatus) { @@ -272,25 +352,29 @@ namespace NSAnalysis strNSName = "L" + i.ToString(); } ucns = ((UCVWNextSense)MyBase.GetChildControl(this, strNSName)); - if (ucns != null) + Invoke((MethodInvoker)(() => { - if (ucns.tlpFBackColor == Color.Red || ucns.tlpGBackColor == Color.Red) + if (ucns != null) { - ucns.tlpBackColor = Color.Red; + if (ucns.tlpFBackColor == Color.Red || ucns.tlpGBackColor == Color.Red) + { + ucns.tlpBackColor = Color.Red; + } + else if (ucns.tlpFBackColor == Color.LightGray && ucns.tlpGBackColor == Color.LightGray) + { + ucns.tlpBackColor = Color.LightGray; + } + else if (ucns.tlpFBackColor == Color.Yellow && ucns.tlpGBackColor == Color.Yellow) + { + ucns.tlpBackColor = Color.Yellow; + } + else + { + ucns.tlpBackColor = Color.Lime; + } } - else if (ucns.tlpFBackColor == Color.LightGray && ucns.tlpGBackColor == Color.LightGray) - { - ucns.tlpBackColor = Color.LightGray; - } - else if (ucns.tlpFBackColor == Color.Yellow && ucns.tlpGBackColor == Color.Yellow) - { - ucns.tlpBackColor = Color.Yellow; - } - else - { - ucns.tlpBackColor = Color.Lime; - } - } + })); + } } @@ -304,21 +388,25 @@ namespace NSAnalysis strNSName = dtData.Rows[i]["MeasPointName"].ToString().Replace("-", ""); strFGName = dtData.Rows[i]["DimensionName"].ToString(); ucns = ((UCVWNextSense)MyBase.GetChildControl(this, strNSName)); - if (ucns != null) + Invoke((MethodInvoker)(() => { - if (strFGName == "F") + if (ucns != null) { - ucns.labFVal = dtData.Rows[i]["MeasureValue"].ToString() ; - ucns.labFLowerUpper = dtData.Rows[i]["LowerTolVal"].ToString() + "/" + dtData.Rows[i]["UpperTolVal"].ToString(); - ucns.tlpFBackColor = analysisColorbyStatus(dtData.Rows[i]["MeasureItemResult"].ToString()); + if (strFGName == "F") + { + ucns.labFVal = dtData.Rows[i]["MeasureValue"].ToString(); + ucns.labFLowerUpper = dtData.Rows[i]["LowerTolVal"].ToString() + "/" + dtData.Rows[i]["UpperTolVal"].ToString(); + ucns.tlpFBackColor = analysisColorbyStatus(dtData.Rows[i]["MeasureItemResult"].ToString()); + } + else + { + ucns.labGVal = dtData.Rows[i]["MeasureValue"].ToString(); + ucns.labGLowerUpper = dtData.Rows[i]["LowerTolVal"].ToString() + "/" + dtData.Rows[i]["UpperTolVal"].ToString(); + ucns.tlpGBackColor = analysisColorbyStatus(dtData.Rows[i]["MeasureItemResult"].ToString()); + } } - else - { - ucns.labGVal = dtData.Rows[i]["MeasureValue"].ToString(); - ucns.labGLowerUpper = dtData.Rows[i]["LowerTolVal"].ToString() + "/" + dtData.Rows[i]["UpperTolVal"].ToString(); - ucns.tlpGBackColor = analysisColorbyStatus(dtData.Rows[i]["MeasureItemResult"].ToString()); - } - } + })); + } } diff --git a/Analysis/CarDataDisplayForm/FEH3RightCarData.cs b/Analysis/CarDataDisplayForm/FEH3RightCarData.cs index be0c79d..ab191c9 100644 --- a/Analysis/CarDataDisplayForm/FEH3RightCarData.cs +++ b/Analysis/CarDataDisplayForm/FEH3RightCarData.cs @@ -25,6 +25,7 @@ namespace NSAnalysis private DataTable dtVINData = new DataTable(); private string strLastVIN = ""; CenterControl gCC = null; + private BackgroundWorker m_bgwRefreshCar = new BackgroundWorker(); #endregion 全局变量 #region 初始化控件 @@ -96,10 +97,95 @@ namespace NSAnalysis InitNextSenseControl(); labVIN.Text = ""; tmrRefreshData.Interval = 1100; - tmrRefreshData.Start(); + //tmrRefreshData.Start(); + m_bgwRefreshCar.DoWork += new DoWorkEventHandler(m_bgwRefreshCar_DoWork); + m_bgwRefreshCar.RunWorkerAsync(); SpecifyScreenDisplay1(); } + private void m_bgwRefreshCar_DoWork(object sender, DoWorkEventArgs e) + { + while (true) + { + try + { + string strVIN = tmdal.SelectMaintenanceStation7VIN(); + if (strLastVIN != strVIN) + { + if (strVIN.ToLower().Contains("empty")) + { + labVIN.Text = "VIN码为空"; + Invoke((MethodInvoker)(() => + { + labVIN.Text = "VIN码为空"; + })); + InitNextSenseControl(); + } + else + { + if (strVIN.Length == 17) + { + string strSubVIN = strVIN;//.Substring(0, strVIN.Length - 2); + dtVINData.Clear(); + Invoke((MethodInvoker)(() => + { + labVIN.Text = strSubVIN; + })); + string strCarType = tmdal.SelectCarTypeByVIN(strSubVIN); + if (strCarType.ToUpper().Contains("EH3")) + { + MyBase.TraceWriteLine("Right EH3 UI Refresh m_bgwRefreshCar_DoWork (strVIN.Length==17):strLastVIN:" + strLastVIN + " ;VIN: " + strSubVIN); + SpecifyScreenDisplay1(); + dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "R"); + if (dtVINData.Rows.Count > 0) + { + refreshCarUIData(dtVINData); + analysisTitleColor(); + } + else + { + InitNextSenseControl(); + } + gCC.ShowCarMeasureDataByCarType(1); + } + } + if (strVIN.Length == 21) + { + string strSubVIN = strVIN.Substring(0, 17); + dtVINData.Clear(); + Invoke((MethodInvoker)(() => + { + labVIN.Text = strSubVIN; + })); + string strCarType = strVIN.Substring(18, 3); + + if (strCarType.ToUpper().Contains("EH3")) + { + MyBase.TraceWriteLine("Right EH3 UI Refresh m_bgwRefreshCar_DoWork (strVIN.Length==21):strLastVIN:" + strLastVIN + " ;VIN: " + strSubVIN); + SpecifyScreenDisplay1(); + dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "R"); + if (dtVINData.Rows.Count > 0) + { + refreshCarUIData(dtVINData); + analysisTitleColor(); + } + else + { + InitNextSenseControl(); + } + gCC.ShowCarMeasureDataByCarType(1); + } + } + } + } + strLastVIN = strVIN; + } + catch (Exception ex) + { + MyBase.TraceWriteLine("Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:" + ex.Message); + } + } + } private void btnRefresh_Click(object sender, EventArgs e) { SpecifyScreenDisplay1(); @@ -117,9 +203,10 @@ namespace NSAnalysis dtVINData.Clear(); labVIN.Text = strSubVIN; string strCarType = tmdal.SelectCarTypeByVIN(strSubVIN); - MyBase.TraceWriteLine("Right EH3 UI Refresh Button (strVIN.Length==17):CarType:" + strCarType + " ;VIN: " + strSubVIN); + if (strCarType.ToUpper().Contains("EH3")) { + MyBase.TraceWriteLine("Right EH3 UI Refresh Button (strVIN.Length==17):CarType:" + strCarType + " ;VIN: " + strSubVIN); dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "R"); if (dtVINData.Rows.Count > 0) { @@ -138,9 +225,10 @@ namespace NSAnalysis dtVINData.Clear(); labVIN.Text = strSubVIN; string strCarType = strVIN.Substring(strVIN.Length - 3, 3); - MyBase.TraceWriteLine("Right EH3 UI Refresh Button (strVIN.Length==21):CarType:" + strCarType + " ;VIN: " + strSubVIN); + if (strCarType.ToUpper().Contains("EH3")) { + MyBase.TraceWriteLine("Right EH3 UI Refresh Button (strVIN.Length==21):CarType:" + strCarType + " ;VIN: " + strSubVIN); dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "R"); if (dtVINData.Rows.Count > 0) { @@ -179,9 +267,10 @@ namespace NSAnalysis dtVINData.Clear(); labVIN.Text = strSubVIN; string strCarType = tmdal.SelectCarTypeByVIN(strSubVIN); - MyBase.TraceWriteLine("Right EH3 UI Refresh tmrRefreshData (strVIN.Length==17):CarType:" + strCarType + " ;VIN: " + strSubVIN); + if (strCarType.ToUpper().Contains("EH3")) { + MyBase.TraceWriteLine("Right EH3 UI Refresh tmrRefreshData (strVIN.Length==17):strLastVIN:" + strLastVIN + " ;VIN: " + strSubVIN); SpecifyScreenDisplay1(); dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "R"); if (dtVINData.Rows.Count > 0) @@ -202,9 +291,10 @@ namespace NSAnalysis dtVINData.Clear(); labVIN.Text = strSubVIN; string strCarType = strVIN.Substring(18, 3); - MyBase.TraceWriteLine("Right EH3 UI Refresh tmrRefreshData (strVIN.Length==21):CarType:" + strCarType + " ;VIN: " + strSubVIN); + if (strCarType.ToUpper().Contains("EH3")) { + MyBase.TraceWriteLine("Right EH3 UI Refresh tmrRefreshData (strVIN.Length==21):strLastVIN:" + strLastVIN + " ;VIN: " + strSubVIN); SpecifyScreenDisplay1(); dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "R"); if (dtVINData.Rows.Count > 0) @@ -228,11 +318,6 @@ namespace NSAnalysis { MyBase.TraceWriteLine("Left EHY UI Refresh tmrRefreshData Error:" + ex.Message); } - - finally - { - tmrRefreshData.Start(); - } } private Color analysisColorbyStatus(string strStatus) @@ -276,25 +361,28 @@ namespace NSAnalysis strNSName = "R" + i.ToString(); } ucns = ((UCVWNextSense)MyBase.GetChildControl(this, strNSName)); - if (ucns != null) + Invoke((MethodInvoker)(() => { - if (ucns.tlpFBackColor == Color.Red || ucns.tlpGBackColor == Color.Red) + if (ucns != null) { - ucns.tlpBackColor = Color.Red; + if (ucns.tlpFBackColor == Color.Red || ucns.tlpGBackColor == Color.Red) + { + ucns.tlpBackColor = Color.Red; + } + else if (ucns.tlpFBackColor == Color.LightGray && ucns.tlpGBackColor == Color.LightGray) + { + ucns.tlpBackColor = Color.LightGray; + } + else if (ucns.tlpFBackColor == Color.Yellow && ucns.tlpGBackColor == Color.Yellow) + { + ucns.tlpBackColor = Color.Yellow; + } + else + { + ucns.tlpBackColor = Color.Lime; + } } - else if (ucns.tlpFBackColor == Color.LightGray && ucns.tlpGBackColor == Color.LightGray) - { - ucns.tlpBackColor = Color.LightGray; - } - else if (ucns.tlpFBackColor == Color.Yellow && ucns.tlpGBackColor == Color.Yellow) - { - ucns.tlpBackColor = Color.Yellow; - } - else - { - ucns.tlpBackColor = Color.Lime; - } - } + })); } } @@ -308,21 +396,25 @@ namespace NSAnalysis strNSName = dtData.Rows[i]["MeasPointName"].ToString().Replace("-", ""); strFGName = dtData.Rows[i]["DimensionName"].ToString(); ucns = ((UCVWNextSense)MyBase.GetChildControl(this, strNSName)); - if (ucns != null) + Invoke((MethodInvoker)(() => { - if (strFGName == "F") + if (ucns != null) { - ucns.labFVal = dtData.Rows[i]["MeasureValue"].ToString(); - ucns.labFLowerUpper = dtData.Rows[i]["LowerTolVal"].ToString() + "/" + dtData.Rows[i]["UpperTolVal"].ToString(); - ucns.tlpFBackColor = analysisColorbyStatus(dtData.Rows[i]["MeasureItemResult"].ToString()); + if (strFGName == "F") + { + ucns.labFVal = dtData.Rows[i]["MeasureValue"].ToString(); + ucns.labFLowerUpper = dtData.Rows[i]["LowerTolVal"].ToString() + "/" + dtData.Rows[i]["UpperTolVal"].ToString(); + ucns.tlpFBackColor = analysisColorbyStatus(dtData.Rows[i]["MeasureItemResult"].ToString()); + } + else + { + ucns.labGVal = dtData.Rows[i]["MeasureValue"].ToString(); + ucns.labGLowerUpper = dtData.Rows[i]["LowerTolVal"].ToString() + "/" + dtData.Rows[i]["UpperTolVal"].ToString(); + ucns.tlpGBackColor = analysisColorbyStatus(dtData.Rows[i]["MeasureItemResult"].ToString()); + } } - else - { - ucns.labGVal = dtData.Rows[i]["MeasureValue"].ToString(); - ucns.labGLowerUpper = dtData.Rows[i]["LowerTolVal"].ToString() + "/" + dtData.Rows[i]["UpperTolVal"].ToString(); - ucns.tlpGBackColor = analysisColorbyStatus(dtData.Rows[i]["MeasureItemResult"].ToString()); - } - } + })); + } } diff --git a/Analysis/CarDataDisplayForm/FEHYLeftCarData.cs b/Analysis/CarDataDisplayForm/FEHYLeftCarData.cs index 4dc67c8..bd164db 100644 --- a/Analysis/CarDataDisplayForm/FEHYLeftCarData.cs +++ b/Analysis/CarDataDisplayForm/FEHYLeftCarData.cs @@ -25,6 +25,7 @@ namespace NSAnalysis private DataTable dtVINData = new DataTable(); private string strLastVIN = ""; CenterControl gCC = null; + private BackgroundWorker m_bgwRefreshCar = new BackgroundWorker(); #endregion 全局变量 public FEHYLeftCarData(CenterControl cc) @@ -92,7 +93,9 @@ namespace NSAnalysis InitNextSenseControl(); labVIN.Text = ""; tmrRefreshData.Interval = 1000; - tmrRefreshData.Start(); + //tmrRefreshData.Start(); + m_bgwRefreshCar.DoWork += new DoWorkEventHandler(m_bgwRefreshCar_DoWork); + m_bgwRefreshCar.RunWorkerAsync(); SpecifyScreenDisplay1(); } @@ -151,7 +154,83 @@ namespace NSAnalysis } } } + private void m_bgwRefreshCar_DoWork(object sender, DoWorkEventArgs e) + { + while (true) + { + try + { + string strVIN = tmdal.SelectMaintenanceStation7VIN(); + if (strLastVIN != strVIN) + { + if (strVIN.ToLower().Contains("empty")) + { + Invoke((MethodInvoker)(() => + { + labVIN.Text = "VIN码为空"; + })); + InitNextSenseControl(); + } + else + { + if (strVIN.Length == 17) + { + string strSubVIN = strVIN;//.Substring(0, strVIN.Length - 2); + dtVINData.Clear(); + Invoke((MethodInvoker)(() => { labVIN.Text = strSubVIN; })); + string strCarType = tmdal.SelectCarTypeByVIN(strSubVIN); + if (strCarType.ToUpper().Contains("EHY")) + { + MyBase.TraceWriteLine("Left EHY UI Refresh m_bgwRefreshCar_DoWork (strVIN.Length==17):strLastVIN:" + strLastVIN + " ;VIN: " + strSubVIN); + SpecifyScreenDisplay1(); + dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "L"); + if (dtVINData.Rows.Count > 0) + { + refreshCarUIData(dtVINData); + analysisTitleColor(); + } + else + { + InitNextSenseControl(); + } + gCC.ShowCarMeasureDataByCarType(2); + } + } + if (strVIN.Length == 21) + { + string strSubVIN = strVIN.Substring(0, 17); + dtVINData.Clear(); + Invoke((MethodInvoker)(() => { labVIN.Text = strSubVIN; })); + string strCarType = strVIN.Substring(18, 3); + + if (strCarType.ToUpper().Contains("EHY")) + { + MyBase.TraceWriteLine("Left EHY UI Refresh m_bgwRefreshCar_DoWork (strVIN.Length==21):strLastVIN:" + strLastVIN + " ;VIN: " + strSubVIN); + SpecifyScreenDisplay1(); + dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "L"); + if (dtVINData.Rows.Count > 0) + { + refreshCarUIData(dtVINData); + analysisTitleColor(); + } + else + { + InitNextSenseControl(); + } + gCC.ShowCarMeasureDataByCarType(2); + } + } + } + } + strLastVIN = strVIN; + } + catch (Exception ex) + { + MyBase.TraceWriteLine("Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:" + ex.Message); + } + } + } private void tmrRefreshData_Tick(object sender, EventArgs e) { tmrRefreshData.Stop(); @@ -174,9 +253,10 @@ namespace NSAnalysis dtVINData.Clear(); labVIN.Text = strSubVIN; string strCarType = tmdal.SelectCarTypeByVIN(strSubVIN); - MyBase.TraceWriteLine("Left EHY UI Refresh tmrRefreshData (strVIN.Length==17):CarType:" + strCarType + " ;VIN: " + strSubVIN); + if (strCarType.ToUpper().Contains("EHY")) { + MyBase.TraceWriteLine("Left EHY UI Refresh tmrRefreshData (strVIN.Length==17):strLastVIN:" + strLastVIN + " ;VIN: " + strSubVIN); SpecifyScreenDisplay1(); dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "L"); if (dtVINData.Rows.Count > 0) @@ -197,9 +277,10 @@ namespace NSAnalysis dtVINData.Clear(); labVIN.Text = strSubVIN; string strCarType = strVIN.Substring(18, 3); - MyBase.TraceWriteLine("Left EHY UI Refresh tmrRefreshData (strVIN.Length==21):CarType:" + strCarType + " ;VIN: " + strSubVIN); + if (strCarType.ToUpper().Contains("EHY")) { + MyBase.TraceWriteLine("Left EHY UI Refresh tmrRefreshData (strVIN.Length==21):strLastVIN:" + strLastVIN + " ;VIN: " + strSubVIN); SpecifyScreenDisplay1(); dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "L"); if (dtVINData.Rows.Count > 0) @@ -224,10 +305,10 @@ namespace NSAnalysis MyBase.TraceWriteLine("Left EHY UI Refresh tmrRefreshData Error:" + ex.Message); } - finally - { - tmrRefreshData.Start(); - } + // finally + //{ + // tmrRefreshData.Start(); + //} } @@ -272,25 +353,28 @@ namespace NSAnalysis strNSName = "L" + i.ToString(); } ucns = ((UCVWNextSense)MyBase.GetChildControl(this, strNSName)); - if (ucns != null) + Invoke((MethodInvoker)(() => { - if (ucns.tlpFBackColor == Color.Red || ucns.tlpGBackColor == Color.Red) + if (ucns != null) { - ucns.tlpBackColor = Color.Red; + if (ucns.tlpFBackColor == Color.Red || ucns.tlpGBackColor == Color.Red) + { + ucns.tlpBackColor = Color.Red; + } + else if (ucns.tlpFBackColor == Color.LightGray && ucns.tlpGBackColor == Color.LightGray) + { + ucns.tlpBackColor = Color.LightGray; + } + else if (ucns.tlpFBackColor == Color.Yellow && ucns.tlpGBackColor == Color.Yellow) + { + ucns.tlpBackColor = Color.Yellow; + } + else + { + ucns.tlpBackColor = Color.Lime; + } } - else if (ucns.tlpFBackColor == Color.LightGray && ucns.tlpGBackColor == Color.LightGray) - { - ucns.tlpBackColor = Color.LightGray; - } - else if (ucns.tlpFBackColor == Color.Yellow && ucns.tlpGBackColor == Color.Yellow) - { - ucns.tlpBackColor = Color.Yellow; - } - else - { - ucns.tlpBackColor = Color.Lime; - } - } + })); } } @@ -304,21 +388,25 @@ namespace NSAnalysis strNSName = dtData.Rows[i]["MeasPointName"].ToString().Replace("-", ""); strFGName = dtData.Rows[i]["DimensionName"].ToString(); ucns = ((UCVWNextSense)MyBase.GetChildControl(this, strNSName)); - if (ucns != null) + Invoke((MethodInvoker)(() => { - if (strFGName == "F") + if (ucns != null) { - ucns.labFVal = dtData.Rows[i]["MeasureValue"].ToString(); - ucns.labFLowerUpper = dtData.Rows[i]["LowerTolVal"].ToString() + "/" + dtData.Rows[i]["UpperTolVal"].ToString(); - ucns.tlpFBackColor = analysisColorbyStatus(dtData.Rows[i]["MeasureItemResult"].ToString()); + if (strFGName == "F") + { + ucns.labFVal = dtData.Rows[i]["MeasureValue"].ToString(); + ucns.labFLowerUpper = dtData.Rows[i]["LowerTolVal"].ToString() + "/" + dtData.Rows[i]["UpperTolVal"].ToString(); + ucns.tlpFBackColor = analysisColorbyStatus(dtData.Rows[i]["MeasureItemResult"].ToString()); + } + else + { + ucns.labGVal = dtData.Rows[i]["MeasureValue"].ToString(); + ucns.labGLowerUpper = dtData.Rows[i]["LowerTolVal"].ToString() + "/" + dtData.Rows[i]["UpperTolVal"].ToString(); + ucns.tlpGBackColor = analysisColorbyStatus(dtData.Rows[i]["MeasureItemResult"].ToString()); + } } - else - { - ucns.labGVal = dtData.Rows[i]["MeasureValue"].ToString(); - ucns.labGLowerUpper = dtData.Rows[i]["LowerTolVal"].ToString() + "/" + dtData.Rows[i]["UpperTolVal"].ToString(); - ucns.tlpGBackColor = analysisColorbyStatus(dtData.Rows[i]["MeasureItemResult"].ToString()); - } - } + })); + } } diff --git a/Analysis/CarDataDisplayForm/FEHYRightCarData.cs b/Analysis/CarDataDisplayForm/FEHYRightCarData.cs index 91a301e..8c9e4f8 100644 --- a/Analysis/CarDataDisplayForm/FEHYRightCarData.cs +++ b/Analysis/CarDataDisplayForm/FEHYRightCarData.cs @@ -25,6 +25,7 @@ namespace NSAnalysis private DataTable dtVINData = new DataTable(); private string strLastVIN = ""; CenterControl gCC = null; + private BackgroundWorker m_bgwRefreshCar = new BackgroundWorker(); #endregion 全局变量 #region 初始化控件 @@ -96,7 +97,9 @@ namespace NSAnalysis InitNextSenseControl(); labVIN.Text = ""; tmrRefreshData.Interval = 1100; - tmrRefreshData.Start(); + //tmrRefreshData.Start(); + m_bgwRefreshCar.DoWork += new DoWorkEventHandler(m_bgwRefreshCar_DoWork); + m_bgwRefreshCar.RunWorkerAsync(); SpecifyScreenDisplay1(); } @@ -155,6 +158,83 @@ namespace NSAnalysis } } } + private void m_bgwRefreshCar_DoWork(object sender, DoWorkEventArgs e) + { + while (true) + { + try + { + string strVIN = tmdal.SelectMaintenanceStation7VIN(); + if (strLastVIN != strVIN) + { + if (strVIN.ToLower().Contains("empty")) + { + Invoke((MethodInvoker)(() => + { + labVIN.Text = "VIN码为空"; + })); + InitNextSenseControl(); + } + else + { + if (strVIN.Length == 17) + { + string strSubVIN = strVIN;//.Substring(0, strVIN.Length - 2); + dtVINData.Clear(); + Invoke((MethodInvoker)(() => { labVIN.Text = strSubVIN; })) ; + string strCarType = tmdal.SelectCarTypeByVIN(strSubVIN); + + if (strCarType.ToUpper().Contains("EHY")) + { + MyBase.TraceWriteLine("Right EHY UI Refresh m_bgwRefreshCar_DoWork (strVIN.Length==17):strLastVIN:" + strLastVIN + " ;VIN: " + strSubVIN); + SpecifyScreenDisplay1(); + dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "R"); + if (dtVINData.Rows.Count > 0) + { + refreshCarUIData(dtVINData); + analysisTitleColor(); + } + else + { + InitNextSenseControl(); + } + gCC.ShowCarMeasureDataByCarType(2); + } + } + if (strVIN.Length == 21) + { + string strSubVIN = strVIN.Substring(0, 17); + dtVINData.Clear(); + Invoke((MethodInvoker)(() => { labVIN.Text = strSubVIN; })); + string strCarType = strVIN.Substring(18, 3); + + if (strCarType.ToUpper().Contains("EHY")) + { + MyBase.TraceWriteLine("Right EHY UI Refresh m_bgwRefreshCar_DoWork (strVIN.Length==21):strLastVIN:" + strLastVIN + " ;VIN: " + strSubVIN); + SpecifyScreenDisplay1(); + dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "R"); + if (dtVINData.Rows.Count > 0) + { + refreshCarUIData(dtVINData); + analysisTitleColor(); + } + else + { + InitNextSenseControl(); + } + gCC.ShowCarMeasureDataByCarType(2); + } + } + } + } + strLastVIN = strVIN; + } + catch (Exception ex) + { + MyBase.TraceWriteLine("Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:" + ex.Message); + } + } + } private void tmrRefreshData_Tick(object sender, EventArgs e) { @@ -179,9 +259,10 @@ namespace NSAnalysis dtVINData.Clear(); labVIN.Text = strSubVIN; string strCarType = tmdal.SelectCarTypeByVIN(strSubVIN); - MyBase.TraceWriteLine("Right EHY UI Refresh tmrRefreshData (strVIN.Length==17):CarType:" + strCarType + " ;VIN: " + strSubVIN); + if (strCarType.ToUpper().Contains("EHY")) { + MyBase.TraceWriteLine("Right EHY UI Refresh tmrRefreshData (strVIN.Length==17):strLastVIN:" + strLastVIN + " ;VIN: " + strSubVIN); SpecifyScreenDisplay1(); dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "R"); if (dtVINData.Rows.Count > 0) @@ -202,9 +283,10 @@ namespace NSAnalysis dtVINData.Clear(); labVIN.Text = strSubVIN; string strCarType = strVIN.Substring(18, 3); - MyBase.TraceWriteLine("Right EHY UI Refresh tmrRefreshData (strVIN.Length==21):CarType:" + strCarType + " ;VIN: " + strSubVIN); + if (strCarType.ToUpper().Contains("EHY")) { + MyBase.TraceWriteLine("Right EHY UI Refresh tmrRefreshData (strVIN.Length==21):strLastVIN:" + strLastVIN + " ;VIN: " + strSubVIN); SpecifyScreenDisplay1(); dtVINData = tmdal.SelectTMeasureDataByCarIDAndMPN(strSubVIN, "R"); if (dtVINData.Rows.Count > 0) @@ -229,10 +311,10 @@ namespace NSAnalysis MyBase.TraceWriteLine("Left EHY UI Refresh tmrRefreshData Error:" + ex.Message); } - finally - { - tmrRefreshData.Start(); - } + //finally + //{ + // tmrRefreshData.Start(); + //} } private Color analysisColorbyStatus(string strStatus) @@ -276,25 +358,28 @@ namespace NSAnalysis strNSName = "R" + i.ToString(); } ucns = ((UCVWNextSense)MyBase.GetChildControl(this, strNSName)); - if (ucns != null) + Invoke((MethodInvoker)(() => { - if (ucns.tlpFBackColor == Color.Red || ucns.tlpGBackColor == Color.Red) + if (ucns != null) { - ucns.tlpBackColor = Color.Red; + if (ucns.tlpFBackColor == Color.Red || ucns.tlpGBackColor == Color.Red) + { + ucns.tlpBackColor = Color.Red; + } + else if (ucns.tlpFBackColor == Color.LightGray && ucns.tlpGBackColor == Color.LightGray) + { + ucns.tlpBackColor = Color.LightGray; + } + else if (ucns.tlpFBackColor == Color.Yellow && ucns.tlpGBackColor == Color.Yellow) + { + ucns.tlpBackColor = Color.Yellow; + } + else + { + ucns.tlpBackColor = Color.Lime; + } } - else if (ucns.tlpFBackColor == Color.LightGray && ucns.tlpGBackColor == Color.LightGray) - { - ucns.tlpBackColor = Color.LightGray; - } - else if (ucns.tlpFBackColor == Color.Yellow && ucns.tlpGBackColor == Color.Yellow) - { - ucns.tlpBackColor = Color.Yellow; - } - else - { - ucns.tlpBackColor = Color.Lime; - } - } + })); } } @@ -308,21 +393,25 @@ namespace NSAnalysis strNSName = dtData.Rows[i]["MeasPointName"].ToString().Replace("-", ""); strFGName = dtData.Rows[i]["DimensionName"].ToString(); ucns = ((UCVWNextSense)MyBase.GetChildControl(this, strNSName)); - if (ucns != null) + Invoke((MethodInvoker)(() => { - if (strFGName == "F") + if (ucns != null) { - ucns.labFVal = dtData.Rows[i]["MeasureValue"].ToString(); - ucns.labFLowerUpper = dtData.Rows[i]["LowerTolVal"].ToString() + "/" + dtData.Rows[i]["UpperTolVal"].ToString(); - ucns.tlpFBackColor = analysisColorbyStatus(dtData.Rows[i]["MeasureItemResult"].ToString()); + if (strFGName == "F") + { + ucns.labFVal = dtData.Rows[i]["MeasureValue"].ToString(); + ucns.labFLowerUpper = dtData.Rows[i]["LowerTolVal"].ToString() + "/" + dtData.Rows[i]["UpperTolVal"].ToString(); + ucns.tlpFBackColor = analysisColorbyStatus(dtData.Rows[i]["MeasureItemResult"].ToString()); + } + else + { + ucns.labGVal = dtData.Rows[i]["MeasureValue"].ToString(); + ucns.labGLowerUpper = dtData.Rows[i]["LowerTolVal"].ToString() + "/" + dtData.Rows[i]["UpperTolVal"].ToString(); + ucns.tlpGBackColor = analysisColorbyStatus(dtData.Rows[i]["MeasureItemResult"].ToString()); + } } - else - { - ucns.labGVal = dtData.Rows[i]["MeasureValue"].ToString(); - ucns.labGLowerUpper = dtData.Rows[i]["LowerTolVal"].ToString() + "/" + dtData.Rows[i]["UpperTolVal"].ToString(); - ucns.tlpGBackColor = analysisColorbyStatus(dtData.Rows[i]["MeasureItemResult"].ToString()); - } - } + })); + } } diff --git a/Analysis/CenterControl.cs b/Analysis/CenterControl.cs index f829518..f51c9dc 100644 --- a/Analysis/CenterControl.cs +++ b/Analysis/CenterControl.cs @@ -7,6 +7,7 @@ using NSAnalysis.Properties; using PLCModule; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; @@ -23,3437 +24,3242 @@ using UserControlClass; namespace NSAnalysis { - /// - /// 2025.08.29 -------------------------------------------------------------- 1、增加对 生成报告数据的备份 - /// 、上传情况的记录√ 2、增加对IOT json报文 上传情况的记录√ 3、增加对 PLC 传输过点信号的 记录 (抵达,测量,离开) √ 4、PLC通讯阻塞问题 √ - /// - /// - /// - /// - /// 2025.8.31 -------------------------------------------------------------- 1、增加对IOT 上传失败的重传功能 √ - /// - - public partial class CenterControl : Telerik.WinControls.UI.ShapedForm - { - #region 全局变量 - - private int[] yValues = new int[3]; - private string[] xValues = new string[3]; - private DataTable dtCSVContent = new DataTable(); - private DataTable dtRangeData = new DataTable(); - private TMeasureMSSQLDAL tmdal = new TMeasureMSSQLDAL(); - private string strSaveReprotPath = ""; - private bool bReadCSVFlag = false; - private List ListPostIOTData = new List(); - private FEHYLeftCarData fLEHY = null; - private FEHYRightCarData fREHY = null; - - private FEH3LeftCarData fLEH3 = null; - private FEH3RightCarData fREH3 = null; - - private int iCurrentMeasureItemsFailedCount = 0; - #region PLC相关变量 - - private bool bStopPlcNormal = false; - private static int HeartBeatCount = 0; - private bool bPlcLiveTickLast = false; - - private Thread m_ThreadReconnectPLC = null; - private int m_ReConnectNum = 0; - private bool bTickt = true; - private int iLastNSStartMeasure = 0; - private int iLastCarPassFlag = 0; - private int iLastStation1To2 = 0; - private int iLastStation2To3 = 0; - private int iLastReadVINFinishFlag = 0; - - private SerialPort serialTestPort = null; - - private SerialPort serialPort = null; - private int iLastMesureCount = 0; - - #endregion PLC相关变量 - - #region 分页全局变量 - - private DataTable PageTable = new DataTable(); - - /// - /// 每页记录数 - /// - public int pageSize = 20; - - /// - /// 总记录数 - /// - public int recordCount = 0; - - /// - /// 总页数 - /// - public int pageCount = 0; - - /// - /// 当前页 - /// - public int currentPage = 0; - - #endregion 分页全局变量 - - #endregion 全局变量 - - #region 主窗口事件 - - public CenterControl() - { - InitializeComponent(); - SQLHelper.connStr = DatabaseDfn.SqlConnectStr(); - - #region 加载皮肤 - - ThemeResolutionService.LoadPackageFile(ConfigDfn.strTheme); - this.ThemeName = ConfigDfn.strSkinName.Substring(0, ConfigDfn.strSkinName.Length - 5); - RPV.ThemeName = ConfigDfn.strSkinName.Substring(0, ConfigDfn.strSkinName.Length - 5); - - #endregion 加载皮肤 - } - - private void CenterControl_Load(object sender, EventArgs e) - { - #region 初始化全局变量 - fLEHY = new FEHYLeftCarData(this); - fREHY = new FEHYRightCarData(this); - fLEH3 = new FEH3LeftCarData(this); - fREH3 = new FEH3RightCarData(this); - MyBase.rleMessage = rleMessage; - rdtpStartTime.Text = DateTime.Now.ToString("yyyy-MM-dd"); - rdtpEndTime.Text = DateTime.Now.ToString("yyyy-MM-dd"); - - #endregion 初始化全局变量 - //需要显示车身数据 不分析csv文件 - if (ConfigDfn.iShowCarDataFlag == 1) - { - MyBase.TraceWriteLine(" 进入显示车身模式!显示车身界面。"); - lpcShowCarData_Click(null, null); - //serialPort = new SerialPort(ConfigDfn.strCOMPort, 115200, Parity.None, 8, StopBits.One); // 设置串口参数 - //serialPort.DataReceived += new SerialDataReceivedEventHandler(DataAutoReceivedHandler); // 注册数据接收事件处理方法 - //serialPort.Open(); // 打开串口 - //if (serialPort.IsOpen) - //{ - // MyBase.TraceWriteLine(ConfigDfn.strCOMPort + "打开成功O(∩_∩)O"); - //} - //else - //{ - // MyBase.TraceWriteLine(ConfigDfn.strCOMPort + "打开失败!"); - // MessageBox.Show(ConfigDfn.strCOMPort + "打开失败!请检查扫抢串口设置是否正确。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); - //} - } - else - { - MyBase.TraceWriteLine(" 进入不显示车身模式!"); - } - if (ConfigDfn.iAnalysisCSVFlag == 1) - { - btnConnectPlc_Click(null, null); - MyBase.TraceWriteLine(" 进入解析CSV文件模式,开始解析扫码CSV文件!"); - tmReadNextsenseCSV.Interval = 500; - tmReadNextsenseCSV.Start(); - //tmdal.updateMaintenceInfoEmpty(); - } - else - { - MyBase.TraceWriteLine(" 进入不解析CSV文件模式!"); - tmReadNextsenseCSV.Stop(); - } - - if (Directory.Exists(ConfigDfn.strNextSenseCSVEH3Path)) - { - MyBase.TraceWriteLine("软件首次启动, Nextsense EH3 CSV读取路径存在;不清空,读取NextSense生成 CSV报告路径下的所有文件,路径为:" + ConfigDfn.strNextSenseCSVEH3Path); - } - else - { - string strTip = "错误:软件首次启动,读取NextSense生成EH3 CSV报告的路径:" + ConfigDfn.strNextSenseCSVEH3Path + " 不存在!请检查并进行修改!点击是按钮,软件将自动创建该路径!"; - MyBase.TraceWriteLine(strTip); - Directory.CreateDirectory(ConfigDfn.strNextSenseCSVEH3Path); - //DialogResult dResult = MessageBox.Show(strTip, "错误", MessageBoxButtons.YesNo, MessageBoxIcon.Error); - //if (dResult == DialogResult.Yes) - //{ - // Directory.CreateDirectory(ConfigDfn.strNextSenseCSVEH3Path); - // MyBase.TraceWriteLine(strTip + " ; 点击了是按钮,软件自动创建读取目录:" + ConfigDfn.strNextSenseCSVEH3Path); - //} - //else - //{ - // MyBase.TraceWriteLine(strTip + " ;点击了否按钮,不创建目录!"); - //} - } - if (Directory.Exists(ConfigDfn.strNextSenseCSVEHYPath)) - { - MyBase.TraceWriteLine("软件首次启动, Nextsense EHY CSV读取路径存在;不清空,读取NextSense生成 CSV报告路径下的所有文件,路径为:" + ConfigDfn.strNextSenseCSVEHYPath); - } - else - { - string strTip = "错误:软件首次启动,读取NextSense生成EHY CSV报告的路径:" + ConfigDfn.strNextSenseCSVEHYPath + " 不存在!请检查并进行修改!点击是按钮,软件将自动创建该路径!"; - MyBase.TraceWriteLine(strTip); - Directory.CreateDirectory(ConfigDfn.strNextSenseCSVEHYPath); - //DialogResult dResult = MessageBox.Show(strTip, "错误", MessageBoxButtons.YesNo, MessageBoxIcon.Error); - //if (dResult == DialogResult.Yes) - //{ - // Directory.CreateDirectory(ConfigDfn.strNextSenseCSVEHYPath); - // MyBase.TraceWriteLine(strTip + " ; 点击了是按钮,软件自动创建读取目录:" + ConfigDfn.strNextSenseCSVEHYPath); - //} - //else - //{ - // MyBase.TraceWriteLine(strTip + " ;点击了否按钮,不创建目录!"); - //} - } - initLPCControl(); - - //tmdal.updateMaintenceInfoEmpty(); - //iLastMesureCount = tmdal.SelectTMeasureResultCount(); - - #region 清空信息 - - labVIN.Text = ""; - labOKCount.Text = ""; - labNGCount.Text = ""; - labRejectCount.Text = ""; - labSumMeasureCount.Text = ""; - labMeaTime.Text = ""; - labResultPercent.Text = ""; - labResult.Text = ""; - labCarType.Text = ""; - - #endregion 清空信息 - - InitTableColumns(); - strSaveReprotPath = ConfigDfn.strReportPath + @"\"; - - //testIotUpload(); - } - - private void InitTableColumns() - { - #region 测量数据表始化表 - - //创建虚拟表 - DataColumn column2 = new DataColumn("CarID", Type.GetType("System.String")); - DataColumn dcCarType = new DataColumn("CarType", Type.GetType("System.String")); - DataColumn column3 = new DataColumn("MeasPointName", Type.GetType("System.String")); - DataColumn column4 = new DataColumn("DimensionName", Type.GetType("System.String")); - DataColumn column5 = new DataColumn("NormalValue", Type.GetType("System.String")); - DataColumn column6 = new DataColumn("LowerTolVal", Type.GetType("System.String")); - DataColumn column7 = new DataColumn("UpperTolVal", Type.GetType("System.String")); - DataColumn column8 = new DataColumn("MeasureValue", Type.GetType("System.String")); - DataColumn column10 = new DataColumn("MeasureItemResult", Type.GetType("System.String")); - DataColumn column9 = new DataColumn("MeasureDate", Type.GetType("System.DateTime")); - DataColumn column1 = new DataColumn("Remark", Type.GetType("System.String")); - //将列添加到table表中 - - dtCSVContent.Columns.Add(column2); - dtCSVContent.Columns.Add(dcCarType); - dtCSVContent.Columns.Add(column3); - dtCSVContent.Columns.Add(column4); - dtCSVContent.Columns.Add(column5); - dtCSVContent.Columns.Add(column6); - dtCSVContent.Columns.Add(column7); - dtCSVContent.Columns.Add(column8); - dtCSVContent.Columns.Add(column10); - dtCSVContent.Columns.Add(column9); - dtCSVContent.Columns.Add(column1); - - #endregion 测量数据表始化表 - - #region 极差数据Table初始化 - - //创建虚拟表 - DataColumn dcCarID = new DataColumn("CarID", Type.GetType("System.String")); - DataColumn dcRangeName = new DataColumn("RangeName", Type.GetType("System.String")); - DataColumn dcRangeValue = new DataColumn("RangeValue", Type.GetType("System.String")); - DataColumn dcRangeLowUpp = new DataColumn("RangeLowUpp", Type.GetType("System.String")); - DataColumn dcResult = new DataColumn("Result", Type.GetType("System.String")); - DataColumn dcCreateTime = new DataColumn("CreateTime", Type.GetType("System.DateTime")); - DataColumn dcRemark = new DataColumn("Remark", Type.GetType("System.String")); - //将列添加到table表中 - - dtRangeData.Columns.Add(dcCarID); - dtRangeData.Columns.Add(dcRangeName); - dtRangeData.Columns.Add(dcRangeValue); - dtRangeData.Columns.Add(dcRangeLowUpp); - dtRangeData.Columns.Add(dcResult); - dtRangeData.Columns.Add(dcCreateTime); - dtRangeData.Columns.Add(dcRemark); - - #endregion 极差数据Table初始化 - - #region 分页相关 - - //创建分页虚拟表 - DataColumn column11 = new DataColumn("CarID", Type.GetType("System.String")); - DataColumn column12 = new DataColumn("MeasPointName", Type.GetType("System.String")); - DataColumn column13 = new DataColumn("DimensionName", Type.GetType("System.String")); - DataColumn column14 = new DataColumn("NormalValue", Type.GetType("System.String")); - DataColumn column15 = new DataColumn("LowerTolVal", Type.GetType("System.String")); - DataColumn column16 = new DataColumn("UpperTolVal", Type.GetType("System.String")); - DataColumn column17 = new DataColumn("MeasureValue", Type.GetType("System.String")); - DataColumn column18 = new DataColumn("MeasureDate", Type.GetType("System.String")); - DataColumn column19 = new DataColumn("MeasureItemResult", Type.GetType("System.String")); - - //将列添加到table表中 - PageTable.Columns.Add(column11); - PageTable.Columns.Add(column12); - PageTable.Columns.Add(column13); - PageTable.Columns.Add(column14); - PageTable.Columns.Add(column15); - PageTable.Columns.Add(column16); - PageTable.Columns.Add(column17); - PageTable.Columns.Add(column18); - PageTable.Columns.Add(column19); - - labCurrentPage.Text = "当前页:" + currentPage.ToString(); //当前页 - labSumPages.Text = "共 " + pageCount.ToString() + " 页";//总页数 - labSumRecorders.Text = "总共 " + recordCount.ToString() + " 条记录";//总记录数 - rddlPageRecorderCount.SelectedIndex = 0; - - #endregion 分页相关 - } - - private void DataAutoReceivedHandler(object sender, SerialDataReceivedEventArgs e) - { - SerialPort sp = (SerialPort)sender; - string strScanVIN = sp.ReadExisting(); - MyBase.TraceWriteLine("扫抢获取的VIN码为:" + strScanVIN); - if (strScanVIN.Length > 0) - { - tmdal.updateMaintenceInfo(strScanVIN, 3); - MyBase.TraceWriteLine("更新数据库中存储的VIN码:" + strScanVIN); - } - } - - private void initLPCControl() - { - lpcSoftwareSetup.labPicture.Click += new EventHandler(lpcSoftwareSetup_Click); - lpcSoftwareSetup.labText.Click += new EventHandler(lpcSoftwareSetup_Click); - - lpcToleranceSetup.labPicture.Click += new EventHandler(lpcToleranceSetup_Click); - lpcToleranceSetup.labText.Click += new EventHandler(lpcToleranceSetup_Click); - - lpcRange.labPicture.Click += new EventHandler(lpcRange_Click); - lpcRange.labText.Click += new EventHandler(lpcRange_Click); - - lpcPLCAddress.labPicture.Click += new EventHandler(lpcPLCAddress_Click); - lpcPLCAddress.labText.Click += new EventHandler(lpcPLCAddress_Click); - - lpcPLCTest.labPicture.Click += new EventHandler(lpcPLCTest_Click); - lpcPLCTest.labText.Click += new EventHandler(lpcPLCTest_Click); - - lpcAboutSoftware.labPicture.Click += new EventHandler(lpcAboutSoftware_Click); - lpcAboutSoftware.labText.Click += new EventHandler(lpcAboutSoftware_Click); - - lpcUploadIOTTest.labPicture.Click += new EventHandler(lpcUploadIOTTest_Click); - lpcUploadIOTTest.labText.Click += new EventHandler(lpcUploadIOTTest_Click); - - lpcTestGetCarTye.labPicture.Click += new EventHandler(lpcTestGetCarTye_Click); - lpcTestGetCarTye.labText.Click += new EventHandler(lpcTestGetCarTye_Click); - - lpcShowCarData.labPicture.Click += new EventHandler(lpcShowCarData_Click); - lpcShowCarData.labText.Click += new EventHandler(lpcShowCarData_Click); - - lpcShowLog.labPicture.Click += new EventHandler(lpcShowLog_Click); - lpcShowLog.labText.Click += new EventHandler(lpcShowLog_Click); - } - - private void CenterControl_FormClosed(object sender, FormClosedEventArgs e) - { - MyBase.TraceWriteLine("-------------海克斯康面隙分析软件程序关闭---------------------"); - LogDebugDfn.strEndTime = DateTime.Now.ToString("yyyy.MM.dd HH-mm-ss"); - string CopyFileName = ConfigDfn.strFileFolder + "\\DebugFiles\\" + "Debug(" + LogDebugDfn.strStartTime + " To " + LogDebugDfn.strEndTime + ")" + ".txt"; - if (File.Exists(LogDebugDfn.strDebugFile)) - File.Copy(LogDebugDfn.strDebugFile, CopyFileName); - System.Environment.Exit(0); - } - - private void tmSystem_Tick(object sender, EventArgs e) - { - rleTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); - if (ConfigDfn.iAnalysisCSVFlag == 1) - rleReadCSVStatus.ForeColor = bReadCSVFlag ? Color.Green : Color.White; - bReadCSVFlag = !bReadCSVFlag; - } - - #endregion 主窗口事件 - - private void tmReadNextsenseCSV_Tick(object sender, EventArgs e) - { - tmReadNextsenseCSV.Stop(); - AnalysisNextSenseSelfMeasureCSV(); - AnalysisNextSenseEH3CSV(); - AnalysisNextSenseEHYCSV(); - tmReadNextsenseCSV.Start(); - } - - #region⭐⭐⭐⭐⭐ 解析Nextsense CSV文件功能 核心算法 ⭐⭐⭐⭐⭐ - - private double CalculateStrictLowerTolerance(double dLower, double dUpper) - { - double dStrictLower = 0; - double dNormalValue = (dLower + dUpper) / 2; - dStrictLower = dNormalValue + (dLower - dNormalValue) * ConfigDfn.dTolerancePer; - return dStrictLower; - } - - private double CalculateStrictUpperTolerance(double dLower, double dUpper) - { - double dStrictUpper = 0; - double dNormalValue = (dLower + dUpper) / 2; - dStrictUpper = dNormalValue + (dUpper - dNormalValue) * ConfigDfn.dTolerancePer; - return dStrictUpper; - } - - private double CalculateExceptionLowerTolerance(double dLower, double dUpper) - { - double dStrictLower = 0; - double dNormalValue = (dLower + dUpper) / 2; - dStrictLower = dNormalValue + (dLower - dNormalValue) * ConfigDfn.dExceptionTolerancePer; - return dStrictLower; - } - - private double CalculateExceptionUpperTolerance(double dLower, double dUpper) - { - double dStrictUpper = 0; - double dNormalValue = (dLower + dUpper) / 2; - dStrictUpper = dNormalValue + (dUpper - dNormalValue) * ConfigDfn.dExceptionTolerancePer; - return dStrictUpper; - } - - /// - /// 解析EH3 CSV文件函数;后续如果Nextsense的csv报告模板变了,修改该函数的行号即可LineNum wsp - /// - private void AnalysisNextSenseEH3CSV() // 解析EH3 车型 - { - try - { - lbCSVFiles.Items.Clear(); - FileInfo[] fileInfos = null; - if (Directory.Exists(ConfigDfn.strNextSenseCSVEH3Path)) - { - DirectoryInfo di = new DirectoryInfo(ConfigDfn.strNextSenseCSVEH3Path); - fileInfos = di.GetFiles("*.CSV"); - if (fileInfos.Count() >= 1) - { - MyBase.TraceWriteLine("存在EH3 CSV文件,开始解析:"); - List listCSVTitleInfo = new List(); - string strCarID = ""; - foreach (FileInfo fi in fileInfos) - { - listCSVTitleInfo.Clear(); - ListPostIOTData.Clear(); - dtCSVContent.Clear(); - dgvMeasureContent.Rows.Clear(); - string strCSVName = fi.FullName; - File.Copy(fi.FullName, ConfigDfn.strFileFolder + "\\NextSenseCSVBackup\\" + fi.Name, true); - MyBase.TraceWriteLine("Copy " + fi.FullName + " TO " + ConfigDfn.strFileFolder + "\\NextSenseCSVBackup\\" + fi.Name + " Done. 备份完成"); - lbCSVFiles.Items.Add(fi.Name); - - #region 解析EH3 CSV报告 - - MyBase.TraceWriteLine("开始解析NextSense EH3 CSV 报告:" + strCSVName); - Encoding encoding = GetType(strCSVName); - FileStream fs = new FileStream(strCSVName, FileMode.Open, FileAccess.Read); - StreamReader sr = new StreamReader(fs, encoding); - //记录每次读取的一行记录 - string strLine = ""; - //记录每行记录中的各字段内容 - string[] aryLineContent = null; - - //逐行读取CSV中的数据 - int LineNum = 0; - //表格行数 - int dtRowCount = 0; - //超差个数 - double OutCount = 0; - //Ok个数 - double OKCount = 0; - //异常个数 - double RejectedCount = 0; - //合格率 - double FPYPercent = 0; - double dStrictTLower = 0; - double dStrictTUpper = 0; - double dLowerValue = 0; - double dUpperValue = 0; - double dExcepitonTLower = 0; - double dExceptionTUpper = 0; - double dMeasureValue = 0.0; - DataTable dt = null; - while ((strLine = sr.ReadLine()) != null) - { - LineNum++; - if (LineNum >= 3 & LineNum <= 16) - { - listCSVTitleInfo.Add(strLine); - } - if (LineNum == 10) - { - aryLineContent = strLine.Split(','); - MyBase.TraceWriteLine("解析出NextSense CSV中的VIN为:" + aryLineContent[1]); - strCarID = tmdal.SelectVINByCSVVIN(aryLineContent[1]); - MyBase.TraceWriteLine("通过CSV VIN从数据库中获取的完整VIN为:" + strCarID); - if (strCarID.ToLower().Contains("nofind")) - { - MyBase.TraceWriteLine("数据库中没有查找到VIN码,NoFind, +L 使用CSV码"); - labVIN.Text = "L" + aryLineContent[1]; - strCarID = "L" + aryLineContent[1]; - } - else - { - labVIN.Text = strCarID; - tmdal.DeleteOneTTempVIN(strCarID); - MyBase.TraceWriteLine("在数据库表TTempSaveVIN中删除该VIN:" + strCarID); - } - } - if (LineNum >= 19) - { - aryLineContent = strLine.Split(','); - //ConfigDfn.strMeasureTime = aryLineContent[6].Substring(0, 4) + "-" + aryLineContent[6].Substring(4, 2) + "-" + aryLineContent[6].Substring(6, 2) + " " + aryLineContent[7].Substring(0, 2) + ":" + aryLineContent[7].Substring(2, 2) + ":" + aryLineContent[7].Substring(4, 2); - ConfigDfn.strMeasureTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); - double dNormalValue = 0.0d; - - dt = tmdal.SelectOneToleranceByCondition("EH3", aryLineContent[0], aryLineContent[1]); - if (dt.Rows.Count == 1) - { - dLowerValue = double.Parse(dt.Rows[0]["TolLower"].ToString()); - dUpperValue = double.Parse(dt.Rows[0]["TolUpper"].ToString()); - dNormalValue = (dLowerValue + dUpperValue) / 2; - dStrictTLower = CalculateStrictLowerTolerance(dLowerValue, dUpperValue); - dStrictTUpper = CalculateStrictUpperTolerance(dLowerValue, dUpperValue); - dExcepitonTLower = CalculateExceptionLowerTolerance(dLowerValue, dUpperValue); - dExceptionTUpper = CalculateExceptionUpperTolerance(dLowerValue, dUpperValue); - } - else - { - dStrictTLower = 0; - dStrictTUpper = 0; - dLowerValue = 0; - dUpperValue = 0; - MyBase.TraceWriteLine("EH3 " + aryLineContent[0] + " " + aryLineContent[1] + " 查询数据获取公差带失败!数据库中数量不唯一,请检查公差带配置!"); - } - - if (aryLineContent[2].ToLower().Contains("inv")) - { - aryLineContent[2] = ""; - aryLineContent[4] = "ng2"; - } - else - { - dMeasureValue = double.Parse(aryLineContent[2]); - if (dMeasureValue >= dLowerValue && dMeasureValue <= dUpperValue) - { - aryLineContent[4] = "good"; - } - else if (dMeasureValue >= dStrictTLower && dMeasureValue <= dStrictTUpper) - { - aryLineContent[4] = "ng1"; - } - else if (dMeasureValue >= dExceptionTUpper || dMeasureValue <= dExcepitonTLower) - { - aryLineContent[4] = "ng3"; - aryLineContent[2] = ""; - } - else - { - aryLineContent[4] = "ng2"; - } - } - - //测量数据存储到table里 - dtCSVContent.Rows.Add(strCarID, "EH3", aryLineContent[0], aryLineContent[1], dNormalValue.ToString("F1"), dLowerValue.ToString("F1"), dUpperValue.ToString("F1"), aryLineContent[2], aryLineContent[4], DateTime.Now, ""); - string strMeasureResult = aryLineContent[4].ToLower(); - if (strMeasureResult.Contains("good") || strMeasureResult.Contains("best") || strMeasureResult.Contains("ng1")) - { - OKCount++; - aryLineContent[4] = "OK"; - } - else if (strMeasureResult.Contains("ng2")) - { - OutCount++; - aryLineContent[4] = "NG"; - } - else - { - RejectedCount++; - aryLineContent[4] = ""; - aryLineContent[2] = ""; - } - - dgvMeasureContent.Rows.Add(aryLineContent[0], aryLineContent[1], dNormalValue.ToString("F1"), dLowerValue.ToString("F1"), dUpperValue.ToString("F1"), aryLineContent[2], ConfigDfn.strMeasureTime, aryLineContent[4]); - - CheryIOTData cIOTData = new CheryIOTData(); - cIOTData.vin = strCarID; - cIOTData.gfNo = aryLineContent[1]; - cIOTData.pointNumber = aryLineContent[0]; - cIOTData.actualValue = aryLineContent[2]; - cIOTData.controlLine = dLowerValue.ToString("F1") + @"/" + dUpperValue.ToString("F1"); - if (strMeasureResult.Contains("good") || strMeasureResult.Contains("best") || strMeasureResult.Contains("ng1")) - { - cIOTData.measurementResult = "OK"; - } - else - { - cIOTData.measurementResult = "NG"; - } - ListPostIOTData.Add(cIOTData); - dtRowCount++; - dgvMeasureContent.Rows[dtRowCount - 1].HeaderCell.Value = dtRowCount.ToString(); - } - }//End While - sr.Close(); - fs.Close(); - tmdal.InsertTMeasureDatabyDataTable(dtCSVContent); - MyBase.TraceWriteLine("解析EH3数据完成,并将所有测量数据插入到数据库完毕。"); - MyBase.TraceWriteLine("解析NextSense EH3 CSV 报告完毕!检测项数=" + dtRowCount.ToString()); - if (dtRowCount <= ConfigDfn.iMeasureItemsCount) - { - iCurrentMeasureItemsFailedCount++; - } - else - { - iCurrentMeasureItemsFailedCount = 0; - } - - // 连续多个车异常 - if (iCurrentMeasureItemsFailedCount >= ConfigDfn.iFailedCarCount) - { - MyBase.TraceWriteLine("iCurrentMeasureItemsFailedCount=" + iCurrentMeasureItemsFailedCount.ToString() + "超过报警数量" + ConfigDfn.iFailedCarCount.ToString() + " ;给PLC发送报警10。"); - PlcObject.InsertWriteQueue(PlcSignalDfn.MeasureError, (byte)10); - } - - // 单个报告内 invalued 项超过某个值 - - // 机器人忙碌状态 且 多个小时无测量报告 - - #endregion 解析EH3 CSV报告 - - #region 计算极差 - CalculateRange(strCarID, "EH3"); - Thread.Sleep(20); - DataTable dtAllRangeDate = tmdal.SelectRangeDatabyCarID(strCarID); - if (dtAllRangeDate.Rows.Count > 0) - { - foreach (DataRow row in dtAllRangeDate.Rows) - { - if (ConfigDfn.iIncludeRangeFlag == 1) - { - if (row.ItemArray[5].ToString().Contains("OK")) - { - OKCount++; - } - else - { - OutCount++; - } - } - - dgvMeasureContent.Rows.Add(row.ItemArray[2].ToString(), "G", "0", row.ItemArray[4].ToString().Substring(0, 3), row.ItemArray[4].ToString().Substring(4, 3), row.ItemArray[3].ToString(), ConfigDfn.strMeasureTime, row.ItemArray[5].ToString()); - } - } - - if (ConfigDfn.iIncludeRangeFlag == 1) - { - dtRowCount = dtRowCount + dtAllRangeDate.Rows.Count; - for (int i = 1; i <= dtRowCount; i++) - { - dgvMeasureContent.Rows[i - 1].HeaderCell.Value = i.ToString(); - } - - MyBase.TraceWriteLine("计算合格率的时:包含极差计算项!"); - } - #endregion 计算极差 - - #region 界面显示功能 - - labCarType.Text = "EH3"; - TMeasureResultModel tmrm = new TMeasureResultModel(); - labNGCount.Text = OutCount.ToString(); - labOKCount.Text = OKCount.ToString(); - labRejectCount.Text = RejectedCount.ToString(); - labMeaTime.Text = ConfigDfn.strMeasureTime; - labSumMeasureCount.Text = dtRowCount.ToString(); - FPYPercent = OKCount / (OKCount + OutCount); - if (FPYPercent >= ConfigDfn.dFPY) - { - labResultPercent.Text = Math.Round(FPYPercent * 100.00d, 2).ToString("F2") + "%"; - labResult.Text = "合格"; - labResultPercent.ForeColor = Color.LimeGreen; - labResult.ForeColor = Color.LimeGreen; - pbResult.Image = Resources.OK; - tmrm.Result = 1; - PlcObject.InsertWriteQueue(PlcSignalDfn.CMMResult, (byte)10); - } - else if (FPYPercent >= ConfigDfn.dFPY2 && FPYPercent < ConfigDfn.dFPY) - { - labResultPercent.Text = Math.Round(FPYPercent * 100.00d, 2).ToString("F2") + "%"; - labResult.Text = "合格"; - labResultPercent.ForeColor = Color.Yellow; - labResult.ForeColor = Color.Yellow; - pbResult.Image = Resources.OK; - tmrm.Result = 1; - PlcObject.InsertWriteQueue(PlcSignalDfn.CMMResult, (byte)20); - } - else - { - labResultPercent.Text = Math.Round(FPYPercent * 100.00d, 2).ToString("F2") + "%"; - labResult.Text = "不合格"; - labResultPercent.ForeColor = Color.Red; - labResult.ForeColor = Color.Red; - pbResult.Image = Resources.NG; - tmrm.Result = 2; - PlcObject.InsertWriteQueue(PlcSignalDfn.CMMResult, (byte)30); - } - xValues[0] = "合格 : " + OKCount.ToString(); - xValues[1] = "不合格 : " + OutCount.ToString(); - xValues[2] = "异常 : " + RejectedCount.ToString(); - yValues[0] = (int)OKCount; - yValues[1] = (int)OutCount; - yValues[2] = (int)RejectedCount; - chartResultPie.Series[0].Points.DataBindXY(xValues, yValues); - - string strTargetRate = Math.Round(ConfigDfn.dFPY2 * 100.00d, 2).ToString("F2") + "%"; - - tmrm.CarID = strCarID; - tmrm.CarType = "EH3"; - tmrm.SumMeasureItems = dtRowCount; - tmrm.GoodMeasureItems = (int)OKCount; - tmrm.NoGoodMeasureItems = (int)OutCount; - tmrm.RejectMeasureItems = (int)RejectedCount; - tmrm.FPY = FPYPercent.ToString("F4"); - tmrm.Remark = ""; - tmrm.MeasureDate = ConfigDfn.strMeasureTime; - tmdal.InsertTMeasureResult(tmrm); - MyBase.TraceWriteLine("将EH3总结果插入数据库完毕。"); - MyBase.TraceWriteLine("全部插入解析完毕,删除文件:" + fi.Name); - fi.Delete(); - dgvMeasureContent.Rows.Add(); - dgvMeasureContent.Rows[dgvMeasureContent.Rows.Count - 1].Cells["MResult"].Value = (dtRowCount - OutCount - RejectedCount).ToString() + "/" + dtRowCount.ToString(); - this.dgvMeasureContent.Rows[dgvMeasureContent.Rows.Count - 1].DefaultCellStyle.ForeColor = Color.White; - if (dgvMeasureContent.Rows.Count > 0) - { - SetdgvRowBgColor(dgvMeasureContent); - for (int i = 0; i < dgvMeasureContent.Rows.Count; i++) - { - //if (dgvMeasureContent.Rows[i].Cells["MResult"].Value.ToString().ToLower().Contains("ok")) - //{ - // dgvMeasureContent.Rows[i].DefaultCellStyle.BackColor = Color.Orange; - //} - if (dgvMeasureContent.Rows[i].Cells["MResult"].Value.ToString().ToLower().Contains("ng")) - { - dgvMeasureContent.Rows[i].DefaultCellStyle.BackColor = Color.Orange; - } - else if (string.IsNullOrEmpty(dgvMeasureContent.Rows[i].Cells["MResult"].Value.ToString())) - { - dgvMeasureContent.Rows[i].DefaultCellStyle.BackColor = Color.Red; - } - else - { - } - } - } - - #endregion 界面显示功能 - - //生成客户的 CSV文件 - if (ConfigDfn.iCreateReportFlag == 1) - { - GenUserReportCSV(strCarID, listCSVTitleInfo, dtAllRangeDate, FPYPercent); - } - else - { - MyBase.TraceWriteLine("EH3数据生成报告功能未启用!"); - } - - #region Update Data To IOT - - if (ConfigDfn.iStartIOTFlag == 1) - { - bool bVINMeasuedFlag = tmdal.CheckVINExistInDB(strCarID); - if (bVINMeasuedFlag) - { - MyBase.TraceWriteLine("VIN:" + strCarID + " 该VIN码已经在数据库中存在了,说明已经测量过了,不再进行IOT数据上传操作。"); - } - else - { - #region IOT上传功能 - if (dtAllRangeDate.Rows.Count > 0) - { - foreach (DataRow row in dtAllRangeDate.Rows) - { - CheryIOTData cIOTData = new CheryIOTData(); - cIOTData.vin = strCarID; - cIOTData.gfNo = "G"; - cIOTData.pointNumber = row.ItemArray[2].ToString(); - cIOTData.actualValue = row.ItemArray[3].ToString(); - cIOTData.controlLine = row.ItemArray[4].ToString(); - cIOTData.measurementResult = row.ItemArray[5].ToString(); - if (cIOTData.measurementResult.ToUpper().Contains("NG")) - { - if (!string.IsNullOrEmpty(cIOTData.actualValue) && !cIOTData.actualValue.ToLower().Contains("inv")) //避免为空的情况 - { - dLowerValue = double.Parse(row.ItemArray[4].ToString().Substring(0, 3)); - dUpperValue = double.Parse(row.ItemArray[4].ToString().Substring(4, 3)); - dStrictTLower = CalculateStrictLowerTolerance(dLowerValue, dUpperValue); - dStrictTUpper = CalculateStrictUpperTolerance(dLowerValue, dUpperValue); - double dValue = double.Parse(row.ItemArray[3].ToString()); - if (dValue > dStrictTLower && dValue < dStrictTUpper) - { - cIOTData.measurementResult = "OK"; - } - } - } - ListPostIOTData.Add(cIOTData); - } - } - string strGapList = JsonHelper.ObjectToJson(ListPostIOTData); - string strCaliResult = "OK"; - if (labResult.Text == "合格") - { - strCaliResult = "OK"; - } - else - { - strCaliResult = "NG"; - } - string strPostData = "{\"serno\":\"" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "\",\"requestData\":[{\"vin\":\"" + strCarID + "\",\"model\":\"EH3\",\"equipmentNo\":\"" + ConfigDfn.strEquipNo + "\",\"equipmentName\":\"" + ConfigDfn.strEquipName + "\",\"calibrationResult\":\"" + strCaliResult + "\",\"detectionTime\":\"" + ConfigDfn.strMeasureTime + "\",\"targetRate\":\"" + strTargetRate + "\",\"rate\":\"" + labResultPercent.Text + "\",\"GapList\":" + strGapList + "}]}"; - - MyBase.TraceWriteLine("Update To IOT Data Content: " + strPostData); - string strPostResult = PostJsonToIOT(ConfigDfn.strIOTAddress, strPostData, 10000); - MyBase.TraceWriteLine("EH3数据上传IOT完成,结果返回为:" + strPostResult); - if (strPostResult.Contains("成功")) - { - MyBase.TraceWriteLine("EH3数据上传IOT成功 ^_^"); - tmdal.InsertIOTUploadLog(strCarID, strPostData, true, labResultPercent.Text); - } - else - { - MyBase.TraceWriteLine("EH3数据上传IOT失败!"); - tmdal.InsertIOTUploadLog(strCarID, strPostData, false, labResultPercent.Text); - } - - #endregion IOT上传功能 - } - } - else - { - MyBase.TraceWriteLine("数据上传IOT功能未启用!"); - } - - #endregion Update Data To IOT - } - } - } - //else - //{ - // MyBase.TraceWriteLine("错误:AnalysisNextSenseEH3CSV函数中,检测EH3 CSV 路径不存在:" + ConfigDfn.strNextSenseCSVPath); - //} - } - catch (Exception ex) - { - MyBase.TraceWriteLine("AnalysisNextSenseCSV 函数分析异常:" + ex.ToString()); - } - } - - private void AnalysisNextSenseEHYCSV() //解析EHY 车型 - { - try - { - lbCSVFiles.Items.Clear(); - FileInfo[] fileInfos = null; - if (Directory.Exists(ConfigDfn.strNextSenseCSVEHYPath)) - { - DirectoryInfo di = new DirectoryInfo(ConfigDfn.strNextSenseCSVEHYPath); - fileInfos = di.GetFiles("*.CSV"); - if (fileInfos.Count() >= 1) - { - MyBase.TraceWriteLine("存在EHY CSV文件,开始解析:"); - List listCSVTitleInfo = new List(); - string strCarID = ""; - foreach (FileInfo fi in fileInfos) - { - listCSVTitleInfo.Clear(); - ListPostIOTData.Clear(); - dtCSVContent.Clear(); - dgvMeasureContent.Rows.Clear(); - string strCSVName = fi.FullName; - File.Copy(fi.FullName, ConfigDfn.strFileFolder + "\\NextSenseCSVBackup\\" + fi.Name, true); - MyBase.TraceWriteLine("Copy " + fi.FullName + " TO " + ConfigDfn.strFileFolder + "\\NextSenseCSVBackup\\" + fi.Name + " Done. 备份完成"); - lbCSVFiles.Items.Add(fi.Name); - - #region 解析EHY CSV报告 - - MyBase.TraceWriteLine("开始解析NextSense EHY CSV 报告:" + strCSVName); - Encoding encoding = GetType(strCSVName); - FileStream fs = new FileStream(strCSVName, FileMode.Open, FileAccess.Read); - StreamReader sr = new StreamReader(fs, encoding); - //记录每次读取的一行记录 - string strLine = ""; - //记录每行记录中的各字段内容 - string[] aryLineContent = null; - - //逐行读取CSV中的数据 - int LineNum = 0; - //表格行数 - int dtRowCount = 0; - //超差个数 - double OutCount = 0; - //Ok个数 - double OKCount = 0; - //异常个数 - double RejectedCount = 0; - //合格率 - double FPYPercent = 0; - double dStrictTLower = 0; - double dStrictTUpper = 0; - double dLowerValue = 0; - double dUpperValue = 0; - double dExcepitonTLower = 0; - double dExceptionTUpper = 0; - double dMeasureValue = 0.0; - DataTable dt = null; - while ((strLine = sr.ReadLine()) != null) - { - LineNum++; - if (LineNum >= 3 & LineNum <= 16) - { - listCSVTitleInfo.Add(strLine); - } - if (LineNum == 10) - { - aryLineContent = strLine.Split(','); - MyBase.TraceWriteLine("解析出NextSense CSV中的VIN为:" + aryLineContent[1]); - strCarID = tmdal.SelectVINByCSVVIN(aryLineContent[1]); - MyBase.TraceWriteLine("通过CSV VIN从数据库中获取的完整VIN为:" + strCarID); - if (strCarID.ToLower().Contains("nofind")) - { - MyBase.TraceWriteLine("数据库中没有查找到VIN码,NoFind, +L 使用CSV码"); - labVIN.Text = "L" + aryLineContent[1]; - strCarID = "L" + aryLineContent[1]; - } - else - { - labVIN.Text = strCarID; - tmdal.DeleteOneTTempVIN(strCarID); - MyBase.TraceWriteLine("在数据库表TTempSaveVIN中删除该VIN:" + strCarID); - } - } - if (LineNum >= 19) - { - aryLineContent = strLine.Split(','); - ConfigDfn.strMeasureTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); - double dNormalValue = 0.0d; - - dt = tmdal.SelectOneToleranceByCondition("EHY", aryLineContent[0], aryLineContent[1]); - if (dt.Rows.Count == 1) - { - dLowerValue = double.Parse(dt.Rows[0]["TolLower"].ToString()); - dUpperValue = double.Parse(dt.Rows[0]["TolUpper"].ToString()); - dNormalValue = (dLowerValue + dUpperValue) / 2; - dStrictTLower = CalculateStrictLowerTolerance(dLowerValue, dUpperValue); - dStrictTUpper = CalculateStrictUpperTolerance(dLowerValue, dUpperValue); - dExcepitonTLower = CalculateExceptionLowerTolerance(dLowerValue, dUpperValue); - dExceptionTUpper = CalculateExceptionUpperTolerance(dLowerValue, dUpperValue); - } - else - { - dStrictTLower = 0; - dStrictTUpper = 0; - dLowerValue = 0; - dUpperValue = 0; - MyBase.TraceWriteLine("EHY " + aryLineContent[0] + " " + aryLineContent[1] + " 查询数据获取公差带失败!数据库中数量不唯一或不存在,请检查公差带配置!"); - } - - if (aryLineContent[2].ToLower().Contains("inv")) - { - aryLineContent[2] = ""; - aryLineContent[4] = "ng2"; - } - else - { - dMeasureValue = double.Parse(aryLineContent[2]); - if (dMeasureValue >= dLowerValue && dMeasureValue <= dUpperValue) - { - aryLineContent[4] = "good"; - } - else if (dMeasureValue >= dStrictTLower && dMeasureValue <= dStrictTUpper) - { - aryLineContent[4] = "ng1"; - } - else if (dMeasureValue >= dExceptionTUpper || dMeasureValue <= dExcepitonTLower) - { - aryLineContent[4] = "ng3"; - aryLineContent[2] = ""; - } - else - { - aryLineContent[4] = "ng2"; - } - } - - //测量数据存储到table里 - dtCSVContent.Rows.Add(strCarID, "EHY", aryLineContent[0], aryLineContent[1], dNormalValue.ToString("F1"), dLowerValue.ToString("F1"), dUpperValue.ToString("F1"), aryLineContent[2], aryLineContent[4], DateTime.Now, ""); - string strMeasureResult = aryLineContent[4].ToLower(); - if (strMeasureResult.Contains("good") || strMeasureResult.Contains("best") || strMeasureResult.Contains("ng1")) - { - OKCount++; - aryLineContent[4] = "OK"; - } - else if (strMeasureResult.Contains("ng2")) - { - OutCount++; - aryLineContent[4] = "NG"; - } - else - { - RejectedCount++; - aryLineContent[4] = ""; - aryLineContent[2] = ""; - } - - dgvMeasureContent.Rows.Add(aryLineContent[0], aryLineContent[1], dNormalValue.ToString("F1"), dLowerValue.ToString("F1"), dUpperValue.ToString("F1"), aryLineContent[2], ConfigDfn.strMeasureTime, aryLineContent[4]); - - CheryIOTData cIOTData = new CheryIOTData(); - cIOTData.vin = strCarID; - cIOTData.gfNo = aryLineContent[1]; - cIOTData.pointNumber = aryLineContent[0]; - cIOTData.actualValue = aryLineContent[2]; - cIOTData.controlLine = dLowerValue.ToString("F1") + @"/" + dUpperValue.ToString("F1"); - if (strMeasureResult.Contains("good") || strMeasureResult.Contains("best") || strMeasureResult.Contains("ng1")) - { - cIOTData.measurementResult = "OK"; - } - else - { - cIOTData.measurementResult = "NG"; - } - ListPostIOTData.Add(cIOTData); - dtRowCount++; - dgvMeasureContent.Rows[dtRowCount - 1].HeaderCell.Value = dtRowCount.ToString(); - } - }//End While - sr.Close(); - fs.Close(); - tmdal.InsertTMeasureDatabyDataTable(dtCSVContent); - MyBase.TraceWriteLine("解析EHY数据完成,并将所有测量数据插入到数据库完毕。"); - MyBase.TraceWriteLine("解析NextSense EHY CSV 报告完毕!检查数量=" + dtRowCount.ToString()); - if (dtRowCount <= ConfigDfn.iMeasureItemsCount) - { - iCurrentMeasureItemsFailedCount++; - } - else - { - iCurrentMeasureItemsFailedCount = 0; - } - - if (iCurrentMeasureItemsFailedCount >= ConfigDfn.iFailedCarCount) - { - MyBase.TraceWriteLine("iCurrentMeasureItemsFailedCount=" + iCurrentMeasureItemsFailedCount.ToString() + "超过报警数量" + ConfigDfn.iFailedCarCount.ToString() + " ;给PLC发送报警10。"); - PlcObject.InsertWriteQueue(PlcSignalDfn.MeasureError, (byte)10); - } - #endregion 解析EHY CSV报告 - - #region 计算极差 - CalculateRange(strCarID, "EHY"); - Thread.Sleep(20); - DataTable dtAllRangeDate = tmdal.SelectRangeDatabyCarID(strCarID); - if (dtAllRangeDate.Rows.Count > 0) - { - foreach (DataRow row in dtAllRangeDate.Rows) - { - if (ConfigDfn.iIncludeRangeFlag == 1) - { - if (row.ItemArray[5].ToString().Contains("OK")) - { - OKCount++; - } - else - { - OutCount++; - } - } - - dgvMeasureContent.Rows.Add(row.ItemArray[2].ToString(), "G", "0", row.ItemArray[4].ToString().Substring(0, 3), row.ItemArray[4].ToString().Substring(4, 3), row.ItemArray[3].ToString(), ConfigDfn.strMeasureTime, row.ItemArray[5].ToString()); - } - } - - if (ConfigDfn.iIncludeRangeFlag == 1) - { - dtRowCount = dtRowCount + dtAllRangeDate.Rows.Count; - for (int i = 1; i <= dtRowCount; i++) - { - dgvMeasureContent.Rows[i - 1].HeaderCell.Value = i.ToString(); - } - MyBase.TraceWriteLine("计算合格率的时:包含极差计算项!"); - } - - #endregion 计算极差 - - #region 界面显示功能 - - labCarType.Text = "EHY"; - TMeasureResultModel tmrm = new TMeasureResultModel(); - labNGCount.Text = OutCount.ToString(); - labOKCount.Text = OKCount.ToString(); - labRejectCount.Text = RejectedCount.ToString(); - labMeaTime.Text = ConfigDfn.strMeasureTime; - labSumMeasureCount.Text = dtRowCount.ToString(); - FPYPercent = OKCount / (OKCount + OutCount); - if (FPYPercent >= ConfigDfn.dFPY) - { - labResultPercent.Text = Math.Round(FPYPercent * 100.00d, 2).ToString("F2") + "%"; - labResult.Text = "合格"; - labResultPercent.ForeColor = Color.LimeGreen; - labResult.ForeColor = Color.LimeGreen; - pbResult.Image = Resources.OK; - tmrm.Result = 1; - PlcObject.InsertWriteQueue(PlcSignalDfn.CMMResult, (byte)10); - } - else if (FPYPercent >= ConfigDfn.dFPY2 && FPYPercent < ConfigDfn.dFPY) - { - labResultPercent.Text = Math.Round(FPYPercent * 100.00d, 2).ToString("F2") + "%"; - labResult.Text = "合格"; - labResultPercent.ForeColor = Color.Yellow; - labResult.ForeColor = Color.Yellow; - pbResult.Image = Resources.OK; - tmrm.Result = 1; - PlcObject.InsertWriteQueue(PlcSignalDfn.CMMResult, (byte)20); - } - else - { - labResultPercent.Text = Math.Round(FPYPercent * 100.00d, 2).ToString("F2") + "%"; - labResult.Text = "不合格"; - labResultPercent.ForeColor = Color.Red; - labResult.ForeColor = Color.Red; - pbResult.Image = Resources.NG; - tmrm.Result = 2; - PlcObject.InsertWriteQueue(PlcSignalDfn.CMMResult, (byte)30); - } - xValues[0] = "合格 : " + OKCount.ToString(); - xValues[1] = "不合格 : " + OutCount.ToString(); - xValues[2] = "异常 : " + RejectedCount.ToString(); - yValues[0] = (int)OKCount; - yValues[1] = (int)OutCount; - yValues[2] = (int)RejectedCount; - chartResultPie.Series[0].Points.DataBindXY(xValues, yValues); - - string strTargetRate = Math.Round(ConfigDfn.dFPY2 * 100.00d, 2).ToString("F2") + "%"; - - tmrm.CarID = strCarID; - tmrm.CarType = "EHY"; - tmrm.SumMeasureItems = dtRowCount; - tmrm.GoodMeasureItems = (int)OKCount; - tmrm.NoGoodMeasureItems = (int)OutCount; - tmrm.RejectMeasureItems = (int)RejectedCount; - tmrm.FPY = FPYPercent.ToString("F4"); - tmrm.Remark = ""; - tmrm.MeasureDate = ConfigDfn.strMeasureTime; - tmdal.InsertTMeasureResult(tmrm); - MyBase.TraceWriteLine("将总结果插入数据库完毕。"); - MyBase.TraceWriteLine("全部插入解析完毕,删除文件:" + fi.Name); - fi.Delete(); - - dgvMeasureContent.Rows.Add(); - dgvMeasureContent.Rows[dgvMeasureContent.Rows.Count - 1].Cells["MResult"].Value = (dtRowCount - OutCount - RejectedCount).ToString() + "/" + dtRowCount.ToString(); - this.dgvMeasureContent.Rows[dgvMeasureContent.Rows.Count - 1].DefaultCellStyle.ForeColor = Color.White; - if (dgvMeasureContent.Rows.Count > 0) - { - SetdgvRowBgColor(dgvMeasureContent); - for (int i = 0; i < dgvMeasureContent.Rows.Count; i++) - { - //if (dgvMeasureContent.Rows[i].Cells["MResult"].Value.ToString().ToLower().Contains("ok")) - //{ - // dgvMeasureContent.Rows[i].DefaultCellStyle.BackColor = Color.Orange; - //} - if (dgvMeasureContent.Rows[i].Cells["MResult"].Value.ToString().ToLower().Contains("ng")) - { - dgvMeasureContent.Rows[i].DefaultCellStyle.BackColor = Color.Orange; - } - else if (string.IsNullOrEmpty(dgvMeasureContent.Rows[i].Cells["MResult"].Value.ToString())) - { - dgvMeasureContent.Rows[i].DefaultCellStyle.BackColor = Color.Red; - } - else - { - } - } - } - - #endregion 界面显示功能 - - if (ConfigDfn.iCreateReportFlag == 1) - { - GenUserReportCSV(strCarID, listCSVTitleInfo, dtAllRangeDate, FPYPercent); - } - else - { - MyBase.TraceWriteLine("iCreateReportFlag=0 : EHY数据生成报告功能未启用!"); - } - - #region Update Data To IOT - - if (ConfigDfn.iStartIOTFlag == 1) - { - bool bVINMeasuedFlag = tmdal.CheckVINExistInDB(strCarID); - if (bVINMeasuedFlag) - { - MyBase.TraceWriteLine("VIN:" + strCarID + " 该VIN码已经在数据库中存在了,说明已经测量过了,不再进行IOT数据上传操作。"); - } - else - { - // 上传 IOT功能 - if (dtAllRangeDate.Rows.Count > 0) - { - foreach (DataRow row in dtAllRangeDate.Rows) - { - CheryIOTData cIOTData = new CheryIOTData(); - cIOTData.vin = strCarID; - cIOTData.gfNo = "G"; - cIOTData.pointNumber = row.ItemArray[2].ToString(); - cIOTData.actualValue = row.ItemArray[3].ToString(); - cIOTData.controlLine = row.ItemArray[4].ToString(); - cIOTData.measurementResult = row.ItemArray[5].ToString(); - if (cIOTData.measurementResult.ToUpper().Contains("NG")) - { - if (!string.IsNullOrEmpty(cIOTData.actualValue) && !cIOTData.actualValue.ToLower().Contains("inv")) //避免为空的情况 - { - dLowerValue = double.Parse(row.ItemArray[4].ToString().Substring(0, 3)); - dUpperValue = double.Parse(row.ItemArray[4].ToString().Substring(4, 3)); - dStrictTLower = CalculateStrictLowerTolerance(dLowerValue, dUpperValue); - dStrictTUpper = CalculateStrictUpperTolerance(dLowerValue, dUpperValue); - double dValue = double.Parse(row.ItemArray[3].ToString()); - if (dValue > dStrictTLower && dValue < dStrictTUpper) - { - cIOTData.measurementResult = "OK"; - } - } - } - ListPostIOTData.Add(cIOTData); - } - } - string strGapList = JsonHelper.ObjectToJson(ListPostIOTData); - string strCaliResult = "OK"; - if (labResult.Text == "合格") - { - strCaliResult = "OK"; - } - else - { - strCaliResult = "NG"; - } - string strPostData = "{\"serno\":\"" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "\",\"requestData\":[{\"vin\":\"" + strCarID + "\",\"model\":\"EHY\",\"equipmentNo\":\"" + ConfigDfn.strEquipNo + "\",\"equipmentName\":\"" + ConfigDfn.strEquipName + "\",\"calibrationResult\":\"" + strCaliResult + "\",\"detectionTime\":\"" + ConfigDfn.strMeasureTime + "\",\"targetRate\":\"" + strTargetRate + "\",\"rate\":\"" + labResultPercent.Text + "\",\"GapList\":" + strGapList + "}]}"; - - MyBase.TraceWriteLine("Update To IOT Data Content: " + strPostData); - string strPostResult = PostJsonToIOT(ConfigDfn.strIOTAddress, strPostData, 10000); - MyBase.TraceWriteLine("EHY数据上传IOT完成,结果返回为:" + strPostResult); - if (strPostResult.Contains("成功")) - { - MyBase.TraceWriteLine("EHY数据上传IOT成功 ^_^"); - - tmdal.InsertIOTUploadLog(strCarID, strPostData, true, labResultPercent.Text); - } - else - { - MyBase.TraceWriteLine("EHY数据上传IOT失败!"); - - tmdal.InsertIOTUploadLog(strCarID, strPostData, false, labResultPercent.Text); - } - } - } - else - { - MyBase.TraceWriteLine("EHY数据上传IOT功能未启用!"); - } - - #endregion Update Data To IOT - } - } - } - //else - //{ - // MyBase.TraceWriteLine("错误:AnalysisNextSenseEHYCSV 函数中,检测EHY CSV 路径不存在:" + ConfigDfn.strNextSenseCSVEHYPath); - //} - } - catch (Exception ex) - { - MyBase.TraceWriteLine("AnalysisNextSenseEHYCSV 函数分析异常:" + ex.ToString()); - } - } - - private void AnalysisNextSenseSelfMeasureCSV() - { - try - { - lbCSVFiles.Items.Clear(); - FileInfo[] fileInfos = null; - if (Directory.Exists(ConfigDfn.strNextSenseSelfMeasurePath)) - { - DirectoryInfo di = new DirectoryInfo(ConfigDfn.strNextSenseSelfMeasurePath); - fileInfos = di.GetFiles("*.CSV"); - if (fileInfos.Count() >= 1) - { - MyBase.TraceWriteLine("存在EHY CSV文件,开始解析:"); - List listCSVTitleInfo = new List(); - string strCarID = "SelfMeasure" + DateTime.Now.ToString("yyyyMMddHHmmss"); - foreach (FileInfo fi in fileInfos) - { - listCSVTitleInfo.Clear(); - ListPostIOTData.Clear(); - dtCSVContent.Clear(); - dgvMeasureContent.Rows.Clear(); - string strCSVName = fi.FullName; - File.Copy(fi.FullName, ConfigDfn.strFileFolder + "\\NextSenseCSVBackup\\" + fi.Name, true); - MyBase.TraceWriteLine("Copy " + fi.FullName + " TO " + ConfigDfn.strFileFolder + "\\NextSenseCSVBackup\\" + fi.Name + " Done. 备份完成"); - lbCSVFiles.Items.Add(fi.Name); - - #region 解析NextSense自检CSV报告 - - MyBase.TraceWriteLine("开始解析NextSense EHY CSV 报告:" + strCSVName); - Encoding encoding = GetType(strCSVName); - FileStream fs = new FileStream(strCSVName, FileMode.Open, FileAccess.Read); - StreamReader sr = new StreamReader(fs, encoding); - //记录每次读取的一行记录 - string strLine = ""; - //记录每行记录中的各字段内容 - string[] aryLineContent = null; - - //逐行读取CSV中的数据 - int LineNum = 0; - //表格行数 - int dtRowCount = 0; - - while ((strLine = sr.ReadLine()) != null) - { - LineNum++; - if (LineNum >= 1 & LineNum <= 17) - { - listCSVTitleInfo.Add(strLine); - } - if (LineNum >= 19) - { - aryLineContent = strLine.Split(','); - ConfigDfn.strMeasureTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); - - if (aryLineContent[2].ToLower().Contains("inv")) - { - aryLineContent[2] = ""; //当为inv ,内容为空 - aryLineContent[10] = "NG"; - } - string strMeasPointName = ""; - if (aryLineContent[0].ToUpper().Contains("L")) - { - strMeasPointName = "L-ZJ1"; - } - else - { - strMeasPointName = "R-ZJ1"; - } - //测量数据存储到table里 - dtCSVContent.Rows.Add(strCarID, "SelfMeasure", strMeasPointName, aryLineContent[1], aryLineContent[4], aryLineContent[8], aryLineContent[9], aryLineContent[2], aryLineContent[10], DateTime.Now, ""); - - dgvMeasureContent.Rows.Add(strMeasPointName, aryLineContent[1], aryLineContent[4], aryLineContent[8], aryLineContent[9], aryLineContent[2], ConfigDfn.strMeasureTime, aryLineContent[10]); - - dtRowCount++; - dgvMeasureContent.Rows[dtRowCount - 1].HeaderCell.Value = dtRowCount.ToString(); - } - }//End While - sr.Close(); - fs.Close(); - - MyBase.TraceWriteLine("解析NextSense 自检报告完毕!检查数量=" + dtRowCount.ToString()); - labCarType.Text = "自检报告"; - - fi.Delete(); - #endregion 解析NextSense自检CSV报告 - - if (ConfigDfn.iCreateReportFlag == 1) - { - #region 解析完报告后,重新生成客户模板报告 - - MyBase.TraceWriteLine("开始生成客户所需要的CSV格式文件:"); - string targetFilePath = strSaveReprotPath + DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + strCarID + ".csv"; //wsp 后期还要再改 - - // 创建临时路径,为应用程序目录\ReportBackup 路径下 - - string backupDirectoryPath = Application.StartupPath + "\\ReportBackup"; - - if (!Directory.Exists(backupDirectoryPath)) - { - Directory.CreateDirectory(backupDirectoryPath); - //日志 - MyBase.TraceWriteLine("创建ReportBackup文件夹完毕,路径为:" + backupDirectoryPath); - } - - // 构造备份文件路径,\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + - // strCarID + ".csv" - string backupFilePath = backupDirectoryPath + "\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + strCarID + ".csv"; - - // 记录备份文件路径 - MyBase.TraceWriteLine("客户自检报告备份路径为:" + backupFilePath); - - StringBuilder sb = new StringBuilder(); - //添加表头 - sb.Append("Measurement Info Name"); - sb.Append(","); - sb.Append("Measurement Info"); - sb.AppendLine(); - sb.Append("Date_Time"); - sb.Append(","); - sb.Append(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); - sb.AppendLine(); - for (int i = 2; i < listCSVTitleInfo.Count - 1; i++) - { - if (listCSVTitleInfo[i].Contains("prodnum")) - { - listCSVTitleInfo[i] = listCSVTitleInfo[i].Replace("prodnum,", "Part_ident," + DateTime.Now.ToString("yyyyMMdd")); - } - - sb.Append(listCSVTitleInfo[i]); - sb.AppendLine(); - } - sb.AppendLine(); - sb.AppendLine(); - sb.AppendLine(); - sb.AppendLine(); - sb.AppendLine(); - //添加测量数据 - sb.Append("Characteristic"); - sb.Append(","); - sb.Append("Extension"); - sb.Append(","); - sb.Append("Measured_Value"); - sb.AppendLine(); - foreach (DataRow row in dtCSVContent.Rows) - { - sb.Append(row.ItemArray[2]); - sb.Append(","); - sb.Append(row.ItemArray[3]); - sb.Append(","); - sb.Append(row.ItemArray[7]); - sb.AppendLine(); - } - sb.AppendLine(); - // 将数据写入CSV文件 - File.WriteAllText(backupFilePath, sb.ToString()); - MyBase.TraceWriteLine("客户自检报告生成完毕,备份路径为:" + targetFilePath); - - // 尝试进行复制到 目标路径 往目标路径copy该文件,并记录是否成功 - try - { - File.Copy(backupFilePath, targetFilePath, true); - - // 记录上传情况 - bool isUploaded = true; - // 记录输入情况 strCarID、目标路径、备份路径、是否上传成功 - MyBase.TraceWriteLine($"车号: {strCarID} | 目标路径: {targetFilePath} | 备份路径: {backupDirectoryPath} | 上传成功: {isUploaded}"); - tmdal.InsertCsvReportUploadLog(strCarID, targetFilePath, backupDirectoryPath, isUploaded); - } - catch (Exception ex) - { - MyBase.TraceWriteLine("客户自检报告复制异常:" + ex.Message); - - // 记录上传情况 - bool isUploaded = false; - MyBase.TraceWriteLine($"车号: {strCarID} | 目标路径: {targetFilePath} | 备份路径: {backupDirectoryPath} | 上传成功: {isUploaded}"); - tmdal.InsertCsvReportUploadLog(strCarID, targetFilePath, backupDirectoryPath, isUploaded); - } - - #endregion 解析完报告后,重新生成客户模板报告 - } - else - { - MyBase.TraceWriteLine("iCreateReportFlag=0 : 数据生成报告功能未启用!"); - } - } - } - } - } - catch (Exception ex) - { - MyBase.TraceWriteLine("AnalysisNextSenseSelfMeasureCSV 函数分析异常:" + ex.ToString()); - } - } - - public void GenUserReportCSV(string strCarID, List listCSVTitleInfo, DataTable dtAllRangeDate, double FPYPercent) - { - #region 解析完报告后,重新生成客户模板报告 - - // 目的路径 - string targetFilePath = strSaveReprotPath + DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + strCarID + ".csv"; //wsp 后期还要再改 - - // 新建一个备份路径,应用程序根目录\ReportBackup - string backupFolderPath = Application.StartupPath + "\\ReportBackup"; - if (!Directory.Exists(backupFolderPath)) - { - Directory.CreateDirectory(backupFolderPath); - //日志 - MyBase.TraceWriteLine("创建ReportBackup文件夹完毕,路径为:" + backupFolderPath); - } - - // 构造备份文件路径,\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + strCarID + ".csv" - string backupFilePath = backupFolderPath + "\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + strCarID + ".csv"; - - // 记录备份文件路径 - MyBase.TraceWriteLine("客户自检报告备份路径为:" + backupFilePath); - - string strWithoutLCarVin = strCarID.Substring(1); - StringBuilder sb = new StringBuilder(); - //添加表头 - sb.Append("Measurement Info Name"); - sb.Append(","); - sb.Append("Measurement Info"); - sb.AppendLine(); - sb.Append("Date_Time"); - sb.Append(","); - sb.Append(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); - sb.AppendLine(); - for (int i = 0; i < listCSVTitleInfo.Count; i++) - { - if (listCSVTitleInfo[i].Contains("prodnum")) - { - listCSVTitleInfo[i] = listCSVTitleInfo[i].Replace("prodnum", "Part_ident"); - } - if (listCSVTitleInfo[i].Contains(strWithoutLCarVin)) - { - listCSVTitleInfo[i] = listCSVTitleInfo[i].Replace(strWithoutLCarVin, strCarID); - } - sb.Append(listCSVTitleInfo[i]); - sb.AppendLine(); - } - sb.AppendLine(); - sb.AppendLine(); - sb.AppendLine(); - sb.AppendLine(); - sb.AppendLine(); - //添加测量数据 - sb.Append("Characteristic"); - sb.Append(","); - sb.Append("Extension"); - sb.Append(","); - sb.Append("Measured_Value"); - sb.AppendLine(); - foreach (DataRow row in dtCSVContent.Rows) - { - sb.Append(row.ItemArray[2]); - sb.Append(","); - sb.Append(row.ItemArray[3]); - sb.Append(","); - sb.Append(row.ItemArray[7]); - sb.AppendLine(); - } - if (dtAllRangeDate.Rows.Count > 0) - { - foreach (DataRow row in dtAllRangeDate.Rows) - { - sb.Append(row.ItemArray[2]); - sb.Append(","); - sb.Append("G"); - sb.Append(","); - sb.Append(row.ItemArray[3]); - sb.AppendLine(); - } - } - sb.Append("POP"); - sb.Append(","); - sb.Append("P"); - sb.Append(","); - sb.Append(Math.Round(FPYPercent * 100.00d, 2).ToString("F2")); - sb.AppendLine(); - // 将数据写入CSV文件 - File.WriteAllText(backupFilePath, sb.ToString()); - // 记录日志,说明备份成功 - MyBase.TraceWriteLine("客户 csv报告备份完毕,路径为:" + backupFilePath); - - // 往目标路径copy该文件,并记录是否成功 - try - { - File.Copy(backupFilePath, targetFilePath, true); - - // 记录上传情况 - bool isUploaded = true; - - // 记录输入情况 strCarID、目标路径、备份路径、是否上传成功 - MyBase.TraceWriteLine($"车号: {strCarID} | 目标路径: {targetFilePath} | 备份路径: {backupFilePath} | 上传成功: {isUploaded}"); - - tmdal.InsertCsvReportUploadLog(strCarID, targetFilePath, backupFolderPath, isUploaded); - } - catch (Exception ex) - { - MyBase.TraceWriteLine("客户csv报告复制异常:" + ex.Message); - - // 记录上传情况 - bool isUploaded = false; - MyBase.TraceWriteLine($"车号: {strCarID} | 目标路径: {targetFilePath} | 备份路径: {backupFilePath} | 上传成功: {isUploaded}"); - tmdal.InsertCsvReportUploadLog(strCarID, targetFilePath, backupFolderPath, isUploaded); - } - - #endregion 解析完报告后,重新生成客户模板报告 - } - - private void UploadIOTData(string strCarID, DataTable dtAllRangeDate, string strTargetRate) - { - double dStrictTLower = 0; - double dStrictTUpper = 0; - double dLowerValue = 0; - double dUpperValue = 0; - bool bVINMeasuedFlag = tmdal.CheckVINExistInDB(strCarID); - if (bVINMeasuedFlag) - { - MyBase.TraceWriteLine("VIN:" + strCarID + " 该VIN码已经在数据库中存在了,说明已经测量过了,不再进行IOT数据上传操作。"); - } - else - { - // 上传 IOT功能 - if (dtAllRangeDate.Rows.Count > 0) - { - foreach (DataRow row in dtAllRangeDate.Rows) - { - CheryIOTData cIOTData = new CheryIOTData(); - cIOTData.vin = strCarID; - cIOTData.gfNo = "G"; - cIOTData.pointNumber = row.ItemArray[2].ToString(); - cIOTData.actualValue = row.ItemArray[3].ToString(); - cIOTData.controlLine = row.ItemArray[4].ToString(); - cIOTData.measurementResult = row.ItemArray[5].ToString(); - if (cIOTData.measurementResult.ToUpper().Contains("NG")) - { - if (!string.IsNullOrEmpty(cIOTData.actualValue) && !cIOTData.actualValue.ToLower().Contains("inv")) // 2025.08.27 修复NG数据实际值为空时,上传IOT报错问题 - { - dLowerValue = double.Parse(row.ItemArray[4].ToString().Substring(0, 3)); - dUpperValue = double.Parse(row.ItemArray[4].ToString().Substring(4, 3)); - dStrictTLower = CalculateStrictLowerTolerance(dLowerValue, dUpperValue); - dStrictTUpper = CalculateStrictUpperTolerance(dLowerValue, dUpperValue); - double dValue = double.Parse(row.ItemArray[3].ToString()); - if (dValue > dStrictTLower && dValue < dStrictTUpper) - { - cIOTData.measurementResult = "OK"; - } - } - } - ListPostIOTData.Add(cIOTData); - } - } - string strGapList = JsonHelper.ObjectToJson(ListPostIOTData); - string strCaliResult = "OK"; - if (labResult.Text == "合格") - { - strCaliResult = "OK"; - } - else - { - strCaliResult = "NG"; - } - string strPostData = "{\"serno\":\"" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "\",\"requestData\":[{\"vin\":\"" + strCarID + "\",\"model\":\"EHY\",\"equipmentNo\":\"" + ConfigDfn.strEquipNo + "\",\"equipmentName\":\"" + ConfigDfn.strEquipName + "\",\"calibrationResult\":\"" + strCaliResult + "\",\"detectionTime\":\"" + ConfigDfn.strMeasureTime + "\",\"targetRate\":\"" + strTargetRate + "\",\"rate\":\"" + labResultPercent.Text + "\",\"GapList\":" + strGapList + "}]}"; - MyBase.TraceWriteLine("Update To IOT Data Content: " + strPostData); - string strPostResult = PostJsonToIOT(ConfigDfn.strIOTAddress, strPostData, 10000); - MyBase.TraceWriteLine("EHY数据上传IOT完成,结果返回为:" + strPostResult); - if (strPostResult.Contains("成功")) - { - MyBase.TraceWriteLine("EHY数据上传IOT成功 ^_^"); - } - else - { - MyBase.TraceWriteLine("EHY数据上传IOT失败!"); - } - } - } - - private void CalculateRange(string strVIN, string strCarType) - { - MyBase.TraceWriteLine(strVIN + " " + strCarType + "开始计算极差:============"); - tmdal.DeleteRangeData(strVIN); - dtRangeData.Clear(); - DataTable dtRange = tmdal.SelectRangeByCarType(strCarType); - if (dtRange != null && dtRange.Rows.Count > 0) - { - string strRangeValue = ""; - string strRangeLowUpp = ""; - string strRangeResult = ""; - DateTime dtTime = DateTime.Now; - string strRemark = ""; - for (int i = 0; i < dtRange.Rows.Count; i++) - { - string[] strArrRangePoint = dtRange.Rows[i]["RangePoint"].ToString().Split(','); - double[] dMeasureData = new double[strArrRangePoint.Length]; - int iCalcCount = 0; - for (int j = 0; j < strArrRangePoint.Length; j++) - { - string strMeasureValue = tmdal.SelectOneMeasureValueByCondition(strVIN, strArrRangePoint[j].Substring(0, 4)); - - if (string.IsNullOrEmpty(strMeasureValue) || strMeasureValue.ToLower().Contains("inv")) - { - strRangeValue = ""; - strRangeResult = "NG"; - MyBase.TraceWriteLine(strArrRangePoint[j] + " G 查询的测量值为inv"); - break; - } - else if (strMeasureValue.ToLower().Contains("nofind")) - { - strRangeValue = ""; - strRangeResult = "NG"; - MyBase.TraceWriteLine(strArrRangePoint[j] + " G 查询的测量值为no find"); - break; - } - else - { - dMeasureData[j] = Convert.ToDouble(strMeasureValue); - iCalcCount++; - } - } - - //iCalcCount 的作用就是确保只有全部测点都有效时才计算极差,否则提前退出。 - if (iCalcCount == strArrRangePoint.Length) - { - double dMax = dMeasureData.Max(); - double dMin = dMeasureData.Min(); - double dRangeData = dMax - dMin; - strRangeValue = dRangeData.ToString("F1"); - if (dRangeData >= Convert.ToDouble(dtRange.Rows[i]["RangeLower"]) && dRangeData <= Convert.ToDouble(dtRange.Rows[i]["RangeUpper"])) - { - strRangeResult = "OK"; - } - else - { - strRangeResult = "NG"; - } - } - strRangeLowUpp = dtRange.Rows[i]["RangeLower"].ToString() + @"/" + dtRange.Rows[i]["RangeUpper"].ToString(); - dtRangeData.Rows.Add(strVIN, dtRange.Rows[i]["RangeName"].ToString(), strRangeValue, strRangeLowUpp, strRangeResult, dtTime, strRemark); - } - tmdal.InsertTRangeDatabyDataTable(dtRangeData); - MyBase.TraceWriteLine(strVIN + " " + strCarType + "计算极差完成,并插入数据库:============"); - } - } - - public string PostJsonToIOT(string url, string jsonData, int? timeout = null) - { - try - { - HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url); - - if (null != timeout && 0 != timeout) - { - req.Timeout = timeout.Value; - } - Encoding encoding = Encoding.UTF8; - byte[] bs = Encoding.UTF8.GetBytes(jsonData); - string responseData; - req.Method = "POST"; - req.ContentType = "application/json"; - req.ContentLength = bs.Length; - using (Stream reqStream = req.GetRequestStream()) - { - reqStream.Write(bs, 0, bs.Length); - reqStream.Close(); - } - using (HttpWebResponse response = (HttpWebResponse)req.GetResponse()) - { - using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding)) - { - responseData = reader.ReadToEnd(); - } - } - return responseData; - } - catch (Exception ex) - { - return "Error: " + ex.ToString(); - } - } - - /// 通过给定的文件流,判断文件的编码类型 - /// 文件流 - /// 文件的编码类型 - public static Encoding GetType(FileStream fs) - { - byte[] Unicode = new byte[] { 0xFF, 0xFE, 0x41 }; - byte[] UnicodeBIG = new byte[] { 0xFE, 0xFF, 0x00 }; - byte[] UTF8 = new byte[] { 0xEF, 0xBB, 0xBF }; //带BOM - System.Text.Encoding reVal = System.Text.Encoding.Default; - - System.IO.BinaryReader r = new System.IO.BinaryReader(fs, System.Text.Encoding.Default); - int i; - int.TryParse(fs.Length.ToString(), out i); - byte[] ss = r.ReadBytes(i); - if (IsUTF8Bytes(ss) || (ss[0] == 0xEF && ss[1] == 0xBB && ss[2] == 0xBF)) - { - reVal = System.Text.Encoding.UTF8; - } - else if (ss[0] == 0xFE && ss[1] == 0xFF && ss[2] == 0x00) - { - reVal = System.Text.Encoding.BigEndianUnicode; - } - else if (ss[0] == 0xFF && ss[1] == 0xFE && ss[2] == 0x41) - { - reVal = System.Text.Encoding.Unicode; - } - r.Close(); - return reVal; - } - - /// 判断是否是不带 BOM 的 UTF8 格式 - /// - /// - private static bool IsUTF8Bytes(byte[] data) - { - int charByteCounter = 1; //计算当前正分析的字符应还有的字节数 - byte curByte; //当前分析的字节. - for (int i = 0; i < data.Length; i++) - { - curByte = data[i]; - if (charByteCounter == 1) - { - if (curByte >= 0x80) - { - //判断当前 - while (((curByte <<= 1) & 0x80) != 0) - { - charByteCounter++; - } - //标记位首位若为非0 则至少以2个1开始 如:110XXXXX...........1111110X  - if (charByteCounter == 1 || charByteCounter > 6) - { - return false; - } - } - } - else - { - //若是UTF-8 此时第一位必须为1 - if ((curByte & 0xC0) != 0x80) - { - return false; - } - charByteCounter--; - } - } - if (charByteCounter > 1) - { - throw new Exception("非预期的byte格式"); - } - return true; - } - - public Encoding GetType(string FileName) - { - FileStream fs = new FileStream(FileName, FileMode.Open, FileAccess.Read); - Encoding er = GetType(fs); - fs.Close(); - return er; - } - - private void testIotUpload() - { - // 修复极差 计算问题 - //LNNBBDEC7SDF49695 - //string strVIN = "LNNBBDEC5SDF49694"; - // string strCarType = "EHY"; - //CalculateRange(strVIN, strCarType); - - //修复IOt上传问题 - string strCarID = "LNNBDDEF4SDF49707"; - DataTable dtAllRangeDate = tmdal.SelectRangeDatabyCarID(strCarID); - string strTargetRate = "97.00%"; - UploadIOTData(strCarID, dtAllRangeDate, strTargetRate); - } - - #endregion 解析Nextsense CSV文件功能 - - #region Home Page - - /// - /// 设置DataGridView各行变色 - /// - /// DataGridView - public void SetdgvRowBgColor(DataGridView dgv) - { - if (dgv.Rows.Count > 0) - { - foreach (DataGridViewRow item in dgv.Rows) - { - if (item.Index % 2 == 0) - { - item.DefaultCellStyle.BackColor = Color.FromArgb(19, 46, 53); - } - else - { - item.DefaultCellStyle.BackColor = Color.FromArgb(27, 60, 68); - } - } - } - } - - //TODO: - - #endregion Home Page - - #region Search Data - - #region datagridview分页功能 - - /// - /// LoadPage方法 - /// - private void LoadPage() - { - if (currentPage < 1) currentPage = 1; - if (currentPage > pageCount) currentPage = pageCount; - - int beginRecord; //开始指针 - int endRecord; //结束指针 - DataTable dtTemp; - dtTemp = PageTable.Clone();//Clone方法只会复制DataTable的结构(列定义),而不会复制数据行的引用。 - - beginRecord = pageSize * (currentPage - 1); - if (currentPage == 1) beginRecord = 0; - endRecord = pageSize * currentPage; - - if (currentPage == pageCount) endRecord = recordCount; - for (int i = beginRecord; i < endRecord; i++) - { - // 使用ImportRow方法将源PageTable的行导入到目标dtTemp - dtTemp.ImportRow(PageTable.Rows[i]); - } - - dgvSelectMeasureData.Rows.Clear(); - - for (int i = 0; i < dtTemp.Rows.Count; i++) - { - dgvSelectMeasureData.Rows.Add(new object[] { dtTemp.Rows[i][0], dtTemp.Rows[i][1], dtTemp.Rows[i][2], dtTemp.Rows[i][3], dtTemp.Rows[i][4], dtTemp.Rows[i][5], dtTemp.Rows[i][6], dtTemp.Rows[i][7], dtTemp.Rows[i][8] }); - } - SetdgvRowBgColor(dgvSelectMeasureData); - for (int i = 0; i < dgvSelectMeasureData.Rows.Count; i++) - { - string strResult = dgvSelectMeasureData.Rows[i].Cells["MeasureItemResult"].Value.ToString(); - if (strResult.ToLower().Contains("ng")) - { - //dgvSelectMeasureData.Rows[i].Cells["MeasureItemResult"].Style.ForeColor = Color.Orange; - dgvSelectMeasureData.Rows[i].DefaultCellStyle.BackColor = Color.Orange; - } - if (strResult.ToLower().Contains("rej")) - { - dgvSelectMeasureData.Rows[i].Cells["MeasureItemResult"].Style.ForeColor = Color.Red; - } - } - labCurrentPage.Text = "当前页:" + currentPage.ToString(); //当前页 - labSumPages.Text = "共 " + pageCount.ToString() + " 页";//总页数 - labSumRecorders.Text = "总共 " + recordCount.ToString() + " 条记录";//总记录数 - } - - private void rbtnFirtstPage_Click(object sender, EventArgs e) - { - if (currentPage == 1) - { return; } - currentPage = 1; - LoadPage(); - } - - private void rbtnPrevPage_Click(object sender, EventArgs e) - { - if (currentPage == 1) - { return; } - currentPage--; - LoadPage(); - } - - private void rbtnNextPage_Click(object sender, EventArgs e) - { - if (currentPage == pageCount) - { return; } - currentPage++; - LoadPage(); - } - - private void rbtnLastPage_Click(object sender, EventArgs e) - { - if (currentPage == pageCount) - { return; } - currentPage = pageCount; - LoadPage(); - } - - private void rddlPageRecorderCount_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e) - { - pageSize = int.Parse(rddlPageRecorderCount.Text.Trim()); - //PageSorter(); - } - - #endregion datagridview分页功能 - - private void rbtnSearchMeaserData_Click(object sender, EventArgs e) - { - dgvFPYResult.Visible = false; - chartFPYLine.Visible = false; - rbtnExportCSVReport.Visible = false; - string strStartTime = rdtpStartTime.Value.ToString("yyyy-MM-dd") + " 00:00:00"; - string strEndTime = rdtpEndTime.Value.ToString("yyyy-MM-dd") + " 23:59:59"; - string strCarID = rtbPartID.Text.Trim(); - PageTable.Clear(); - PageTable = tmdal.SelectTMeasureDataByCarIDAndTime(strCarID, strStartTime, strEndTime); - if (PageTable.Rows.Count > 0) - { - recordCount = PageTable.Rows.Count; //记录总行数 - pageCount = (recordCount / pageSize); - if ((recordCount % pageSize) > 0) - { - pageCount++; - } - - //默认第一页 - currentPage = 1; - - LoadPage();//调用加载数据的方法 - dgvSelectMeasureData.Visible = true; - rbtnExportCSVReport.Visible = true; - pnlPage.Visible = true; - labSearchResult.Visible = false; - pnlPage.Visible = true; - } - else - { - dgvSelectMeasureData.Visible = false; - labSearchResult.Visible = true; - rbtnExportCSVReport.Visible = false; - pnlPage.Visible = false; - } - } - - private void rbtSelectFPY_Click(object sender, EventArgs e) - { - dgvSelectMeasureData.Visible = false; - rbtnExportCSVReport.Visible = false; - pnlPage.Visible = false; - string strStartTime = rdtpStartTime.Value.ToString("yyyy-MM-dd") + " 00:00:00"; - string strEndTime = rdtpEndTime.Value.ToString("yyyy-MM-dd") + " 23:59:59"; - string strCarID = rtbPartID.Text.Trim(); - DataTable dtFPY = new DataTable(); - dtFPY = tmdal.SelectTMeasureResultByTime(strCarID, strStartTime, strEndTime); - if (dtFPY.Rows.Count > 0) - { - dgvFPYResult.Visible = true; - labSearchResult.Visible = false; - rbtnExportCSVReport.Visible = true; - chartFPYLine.Visible = true; - dgvFPYResult.DataSource = dtFPY; - SetdgvRowBgColor(dgvFPYResult); - for (int i = 0; i < dgvFPYResult.Rows.Count; i++) - { - if (dgvFPYResult.Rows[i].Cells["SMResult"].Value.ToString().ToLower().Contains("不合格")) - { - dgvFPYResult.Rows[i].Cells["SMResult"].Style.ForeColor = Color.Red; - } - } - - #region 合格率折线图 - - //合格率折线图 - string[] strXDate = new string[dtFPY.Rows.Count]; - double[] dFPYResult = new double[dtFPY.Rows.Count]; - for (int i = 0; i < dtFPY.Rows.Count; i++) - { - strXDate[i] = dtFPY.Rows[i]["CarID"].ToString(); - } - for (int i = 0; i < dtFPY.Rows.Count; i++) - { - double dResult = double.Parse(dtFPY.Rows[i]["FPY"].ToString()); - dFPYResult[i] = dResult * 100.00; - } - chartFPYLine.ChartAreas[0].AxisX.LabelStyle.Angle = -50; //X轴标签倾斜角度设置 - chartFPYLine.ChartAreas[0].AxisY.LabelStyle.Format = "{0:F2}" + "%"; //设置Y轴值的格式化 带% - chartFPYLine.Series[0].Label = "#VAL%"; //设置显示Y的值 - chartFPYLine.Series[0].LabelForeColor = Color.White; - chartFPYLine.Series[0].ToolTip = "车身编号 : #VALX \r\n合格率 : #VAL%"; //鼠标移动到对应点显示数值 - chartFPYLine.Series[0].Points.DataBindXY(strXDate, dFPYResult); - - #endregion 合格率折线图 - } - else - { - dgvFPYResult.Visible = false; - labSearchResult.Visible = true; - rbtnExportCSVReport.Visible = false; - chartFPYLine.Visible = false; - } - } - - public static void ExportdgvDataToCsv(DataGridView dataGridView, string filePath) - { - StringBuilder sb = new StringBuilder(); - - // 添加列标题 - foreach (DataGridViewColumn column in dataGridView.Columns) - { - sb.Append(column.HeaderText); - sb.Append(","); - } - sb.Remove(sb.Length - 1, 1); - sb.AppendLine(); - - // 添加行数据 - foreach (DataGridViewRow row in dataGridView.Rows) - { - foreach (DataGridViewCell cell in row.Cells) - { - sb.Append(cell.Value); - sb.Append(","); - } - sb.Remove(sb.Length - 1, 1); - sb.AppendLine(); - } - - // 将数据写入CSV文件 - File.WriteAllText(filePath, sb.ToString()); - } - - public static void ExportDataTableDataToCsv(DataTable dt, string filePath) - { - StringBuilder sb = new StringBuilder(); - - // 添加列标题 - foreach (DataColumn column in dt.Columns) - { - sb.Append(column.ColumnName); - sb.Append(","); - } - sb.Remove(sb.Length - 1, 1); - sb.AppendLine(); - - // 添加行数据 - foreach (DataRow row in dt.Rows) - { - foreach (object item in row.ItemArray) - { - sb.Append(item); - sb.Append(","); - } - sb.Remove(sb.Length - 1, 1); - sb.AppendLine(); - } - - // 将数据写入CSV文件 - File.WriteAllText(filePath, sb.ToString()); - } - - private void rbtnExportCSVReport_Click(object sender, EventArgs e) - { - string strCSVExportPath = ""; - string strExportTime = DateTime.Now.ToString("yyyyMMddHHmmssfff"); - FolderBrowserDialog m_Folder = new FolderBrowserDialog(); - m_Folder.Description = "请选择要导出的CSV文件的路径"; - m_Folder.RootFolder = Environment.SpecialFolder.Desktop; - if (dgvFPYResult.Visible == true && dgvFPYResult.Rows.Count > 0) - { - m_Folder.ShowDialog(); - if (Directory.Exists(m_Folder.SelectedPath)) - { - strCSVExportPath = m_Folder.SelectedPath + "\\合格率" + strExportTime + ".CSV"; - ExportdgvDataToCsv(dgvFPYResult, strCSVExportPath); - } - } - if (dgvSelectMeasureData.Visible == true && dgvSelectMeasureData.Rows.Count > 0) - { - m_Folder.ShowDialog(); - if (Directory.Exists(m_Folder.SelectedPath)) - { - strCSVExportPath = m_Folder.SelectedPath + "\\车身尺寸数据" + strExportTime + ".CSV"; - ExportDataTableDataToCsv(PageTable, strCSVExportPath); - } - } - } - - private void dgvFPYResult_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e) - { - e.Row.HeaderCell.Value = string.Format("{0}", e.Row.Index + 1); - } - - private void dgvSelectMeasureData_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e) - { - e.Row.HeaderCell.Value = string.Format("{0}", e.Row.Index + 1); - } - - #endregion Search Data - - #region IOT数据的重传 - - private void ReSendIotData() - { - DataTable dtUnuploaded = tmdal.SelectUnuploadedIOTLogs(); - foreach (DataRow row in dtUnuploaded.Rows) - { - string carId = row["CarID"].ToString(); - string content = row["Content"].ToString(); - string fpy = row["FPY"]?.ToString(); - int id = Convert.ToInt32(row["Id"]); - - // 调用上传接口 - string result = PostJsonToIOT(ConfigDfn.strIOTAddress, content, 10000); - bool isSuccess = result.Contains("成功"); - - // 更新上传状态 - if (isSuccess) - { - tmdal.UpdateIOTUploadStatus(id, true); - } - } - } - - #endregion - - #region CP CPK - - private void rbtnSearchCPCPK_Click(object sender, EventArgs e) - { - DataTable dtCPCPK = new DataTable(); - string strMeasureName = rddlMeasurePoint.Text; - string strSizeName = rddlSizeName.Text.Trim().Substring(0, 1); - int iLimitCount = (int)nudMeasureCount.Value; - dtCPCPK = tmdal.SelectMeasureValuebyMeasureNameAndSize(strMeasureName, strSizeName, iLimitCount); - int iSelectRows = dtCPCPK.Rows.Count; - if (iSelectRows < 5) - { - chartCPCPK.Visible = false; - labSearchCPCPKResult.Visible = true; - pnlCPCPK.Visible = false; - } - else - { - double dNormalValue = double.Parse(dtCPCPK.Rows[0]["NormalValue"].ToString()); - double dLowerTolValue = double.Parse(dtCPCPK.Rows[0]["LowerTolVal"].ToString()); - double dUpperTolValue = double.Parse(dtCPCPK.Rows[0]["UpperTolVal"].ToString()); - double dLSL = dNormalValue + dLowerTolValue; - double dUSL = dNormalValue + dUpperTolValue; - - List listMDoubleData = new List(); - List listMStrData = new List(); - listMStrData.Clear(); - listMDoubleData.Clear(); - for (int i = 0; i < iSelectRows; i++) - { - listMDoubleData.Add(double.Parse(dtCPCPK.Rows[i]["MeasureValue"].ToString())); - listMStrData.Add(dtCPCPK.Rows[i]["MeasureValue"].ToString()); - } - - #region 数据赋值 - - labLSL.Text = dLSL.ToString("F2"); - labUSL.Text = dUSL.ToString("F2"); - labTarget.Text = dNormalValue.ToString("F2"); - labSampleSize.Text = iSelectRows.ToString(); - labAverage.Text = CpCpkHelper.GetAverage(listMStrData).ToString("F4"); - labStdDev.Text = CpCpkHelper.GetSigma(listMStrData).ToString("F4"); - List listCpCpk = CpCpkHelper.GetCpList(listMStrData, dUSL, dLSL); - labCp.Text = listCpCpk[0].ToString("F4"); - labCpl.Text = listCpCpk[1].ToString("F4"); - labCpu.Text = listCpCpk[2].ToString("F4"); - labCpk.Text = listCpCpk[3].ToString("F4"); - List listPpPpk = CpCpkHelper.GetPpList(listMStrData, dUSL, dLSL); - labPp.Text = listPpPpk[0].ToString("F4"); - labPpl.Text = listPpPpk[1].ToString("F4"); - labPpu.Text = listPpPpk[2].ToString("F4"); - labPpk.Text = listPpPpk[3].ToString("F4"); - - #endregion 数据赋值 - - #region 画柱状图 - - Dictionary histogramDataDic = new Dictionary(); - histogramDataDic = CpCpkHelper.GetHistogramData(listMDoubleData); - string[] strXValue = new string[histogramDataDic.Count]; - int[] dYValue = new int[histogramDataDic.Count]; - for (int i = 0; i <= histogramDataDic.Count - 1; i++) - { - strXValue[i] = (histogramDataDic.ElementAt(i).Key); - dYValue[i] = int.Parse(histogramDataDic.ElementAt(i).Value); - } - chartCPCPK.Series[0].Label = "#VAL"; //设置显示Y的值 - chartCPCPK.Series[0].LabelForeColor = Color.White; - chartCPCPK.Series[0].ToolTip = "区间范围 : #VALX \r\n数量 : #VAL"; //鼠标移动到对应点显示数值 - chartCPCPK.Series[0].Points.DataBindXY(strXValue, dYValue); - - #endregion 画柱状图 - - chartCPCPK.Visible = true; - labSearchCPCPKResult.Visible = false; - pnlCPCPK.Visible = true; - } - } - - #endregion CP CPK - - #region 软件设置 - - private void lpcSoftwareSetup_Click(object sender, EventArgs e) - { - string strInputPwd = MyBase.InputBox("密码", "请输入密码 : ", "", "确定", "取消"); - if (strInputPwd.Contains("-999.999")) - { - return; - } - else if (strInputPwd == ConfigDfn.strPwd) - { - FSoftwareSetup fss = new FSoftwareSetup(); - fss.ShowDialog(this); - } - else - { - MessageBox.Show("密码错误! ", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - } - - private void lpcToleranceSetup_Click(object sender, EventArgs e) - { - string strInputPwd = MyBase.InputBox("密码", "请输入密码 : ", "", "确定", "取消"); - if (strInputPwd.Contains("-999.999")) - { - return; - } - else if (strInputPwd == ConfigDfn.strPwd) - { - FToleranceSetup fts = new FToleranceSetup(); - fts.ShowDialog(this); - } - else - { - MessageBox.Show("密码错误! ", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - } - - private void lpcRange_Click(object sender, EventArgs e) - { - string strInputPwd = MyBase.InputBox("密码", "请输入密码 : ", "", "确定", "取消"); - if (strInputPwd.Contains("-999.999")) - { - return; - } - else if (strInputPwd == ConfigDfn.strPwd) - { - FRangeSetup frs = new FRangeSetup(); - frs.ShowDialog(this); - } - else - { - MessageBox.Show("密码错误! ", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - } - - private void lpcPLCAddress_Click(object sender, EventArgs e) - { - string strInputPwd = MyBase.InputBox("密码", "请输入密码 : ", "", "确定", "取消"); - if (strInputPwd.Contains("-999.999")) - { - return; - } - else if (strInputPwd == ConfigDfn.strPwd) - { - PlcAddrSetup PLCAS = new PlcAddrSetup(3, ConfigDfn.strConfigFile); - PLCAS.Show(); - } - else - { - MessageBox.Show("密码错误! ", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - } - - private void lpcPLCTest_Click(object sender, EventArgs e) - { - FormDebugSiemensS7 FDS7 = new FormDebugSiemensS7(SiemensPLCS.S1200); - FDS7.Show(); - } - - private void lpcAboutSoftware_Click(object sender, EventArgs e) - { - AboutSoftwareInfo asi = new AboutSoftwareInfo(); - asi.ShowDialog(); - } - - private void lpcShowLog_Click(object sender, EventArgs e) - { - System.Diagnostics.Process.Start("notepad.exe", LogDebugDfn.strDebugFile); - } - - #endregion 软件设置 - - #region RadButton鼠标事件 - - private void btn_MouseHover(object sender, EventArgs e) - { - RadButton btn = sender as RadButton; - btn.BackColor = Color.FromArgb(0, 151, 186); - } - - private void btn_MouseLeave(object sender, EventArgs e) - { - RadButton btn = sender as RadButton; - btn.BackColor = Color.FromArgb(19, 46, 53); - } - - #endregion RadButton鼠标事件 - - #region PLC相关函数 - - #region PLC重连操作 - - private void tmrReadPLCData_Tick(object sender, EventArgs e) - { - tmrReadPLCData.Stop(); - // 使用 Task.Run 在后台线程处理PLC数据 - Task.Run(() => - { - try - { - // 这里是原有的PLC数据读取和处理逻辑 - ReadAndProcessPlcData(); - } - catch (Exception ex) - { - MyBase.TraceWriteLine("tmrReadPLCData_Tick exception: " + ex.ToString()); - } - finally - { - // 回到UI线程,安全启动定时器 - this.BeginInvoke((Action)(() => tmrReadPLCData.Start())); - } - }); - } - - private void ReadAndProcessPlcData() - { - #region 判断PLC是否正常运行 - - if (ConfigPlc.PlcType == 3 && ConfigPlc.bReConnect && !HslSiemensS7Obj.bConnected) - { - MyBase.TraceWriteLine("PLC断开,重连!"); - tmrHeartBeatConnect.Stop(); - ReConnectPLC(); - return; - } - - byte[] m_Datas = null; - if (!HslSiemensS7Obj.ReadDatas(PlcAddrSetup.S7ReadStartAddr, (ushort)PlcAddrSetup.S7ReadByteCount, ref m_Datas)) - { - tmrReadPLCData.Start(); - return; - } - if (m_Datas == null) - { - tmrReadPLCData.Start(); - MyBase.TraceWriteLine("PLC读取数据对象为空,退出!"); - return; - } - - #endregion 判断PLC是否正常运行 - - try - { - #region 循环读取PLC数据块中的信息 - - if (m_Datas.Length >= PlcAddrSetup.S7ReadByteCount) - { - PLCDfn.bPlcLiveTick = PlcObject.GetS7ByteData(PlcSignalDfn.PlcLive) == 1; - PLCDfn.ReadVINFinishFlag = PlcObject.GetS7ByteData(PlcSignalDfn.ReadVINFinishFlag); - PLCDfn.NSStartMeasure = PlcObject.GetS7ByteData(PlcSignalDfn.NSStartMeasure); - PLCDfn.CarPassFlag = PlcObject.GetS7ByteData(PlcSignalDfn.CarPassFlag); - - //从PLC获取VIN码后,通过访问IOT接口 获取汽车类型,再反馈给PLC - if (iLastReadVINFinishFlag == 0 && PLCDfn.ReadVINFinishFlag == 10) //到达信号 - { - string strCarID = PlcObject.GetS7StringData(PlcSignalDfn.PartID); - //PLCDfn.CarType = PlcObject.GetS7ByteData(PlcSignalDfn.CarType); - MyBase.TraceWriteLine("PLC读码完成信号:0->10;Read PLC VIN is: " + strCarID); - if (strCarID.Length > 10) - { - string strCarColor = ""; - string strCarType = GetCarTypeByIOTAPI(strCarID, out strCarColor); - if (!strCarType.ToUpper().Contains("ERR")) - { - if (strCarType.ToUpper().Contains("EH3")) - { - PlcObject.InsertWriteQueue(PlcSignalDfn.WCarType, (byte)1); - } - else - { - PlcObject.InsertWriteQueue(PlcSignalDfn.WCarType, (byte)2); - } - PlcObject.InsertWriteQueue(PlcSignalDfn.WCarColor, strCarColor); - MyBase.TraceWriteLine("往PLC写入车型: " + strCarType + " ;车身颜色:" + strCarColor); - tmdal.InsertVIN(strCarID); - MyBase.TraceWriteLine(strCarID + " 插入到数据库表TTempSaveVIN中完成。"); - - #region 记录PLC过点信息 - try - { - DateTime arriveTime = DateTime.Now; - if (tmdal.ExistsArriveLog(strCarID) == 0) - { - tmdal.InsertArriveLog(strCarID, arriveTime); - } - else - { - MyBase.TraceWriteLine($"车辆 {strCarID} 当天已存在抵达记录,未重复插入。"); - } - } - catch (Exception ex) - { - MyBase.TraceWriteLine("记录PLC过点信息异常,异常信息: " + ex.ToString()); - } - - #endregion - } - else - { - MyBase.TraceWriteLine("报错:根据VIN从IOT上获取车型信息失败,不发送给PLC车型信息和颜色信息。 "); - } - } - } - - if (iLastNSStartMeasure == 0 && PLCDfn.NSStartMeasure == 10) //启动测量信号 - { - string strCarID = PlcObject.GetS7StringData(PlcSignalDfn.PartID); - if (strCarID.Length > 10) - { - // 记录日志,此时该车开始测量 - MyBase.TraceWriteLine($" {strCarID} 机器人安全判断合格,启动NXS测量"); - - #region 记录PLC过点信息 - // 记录启动测量时间 - try - { - DateTime measureStartTime = DateTime.Now; - tmdal.UpdateStartMeasureTime(strCarID, measureStartTime); - } - catch (Exception ex) - { - MyBase.TraceWriteLine("记录测量开始时间异常,异常信息: " + ex.ToString()); - } - #endregion - } - else - { - //记录日志,获取到启动测量信号,但没有获取 车号 - MyBase.TraceWriteLine("报错:获取到启动NXS测量信号,但没有获取 车号 "); - } - } - - if (iLastCarPassFlag == 0 && PLCDfn.CarPassFlag == 10) //离开信号 - { - string strCarID = PlcObject.GetS7StringData(PlcSignalDfn.PartID); - MyBase.TraceWriteLine("读取PLC CarPassFlag 完成信号:0->10;Read PLC VIN is: " + strCarID); - string strSecondPosCarID = tmdal.SelectMaintenanceStationVINbyStationNo(2); - if (strSecondPosCarID.Length == 21) - { - string strTempCarID = strSecondPosCarID.Substring(0, 17); - string strTempCarType = strSecondPosCarID.Substring(18, 3); - if (tmdal.CheckMRVINExistOrNotByVIN(strTempCarID) == 0) - { - string strTargetRate = Math.Round(ConfigDfn.dFPY2 * 100.00d, 2).ToString("F2") + "%"; - - MyBase.TraceWriteLine(strSecondPosCarID + " ;该VIN码只扫码没有测量,没有测量结果,上传IOT NG消息。"); - string strPostData = "{\"serno\":\"" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "\",\"requestData\":[{\"vin\":\"" + strTempCarID + "\",\"model\":\"" + strTempCarType + "\",\"equipmentNo\":\"" + ConfigDfn.strEquipNo + "\",\"equipmentName\":\"" + ConfigDfn.strEquipName + "\",\"calibrationResult\":\"NG\",\"detectionTime\":\"" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\",\"targetRate\":\"" + strTargetRate + "\",\"rate\":\"0.00%\",\"GapList\":[]}]}"; - MyBase.TraceWriteLine("Update NG To IOT Data Content: " + strPostData); - string strPostResult = PostJsonToIOT(ConfigDfn.strIOTAddress, strPostData, 10000); - MyBase.TraceWriteLine("NG数据上传IOT完成,结果返回为:" + strPostResult); - - if (strPostResult.Contains("成功")) - { - MyBase.TraceWriteLine("NG数据上传IOT成功 ^_^"); - - tmdal.InsertIOTUploadLog(strCarID, strPostData, true, "0.00"); - } - else - { - MyBase.TraceWriteLine("NG数据上传IOT失败!"); - - tmdal.InsertIOTUploadLog(strCarID, strPostData, false, "0.00"); - } - } - - #region 记录PLC过点信息 - - try - { - DateTime leaveTime = DateTime.Now; - tmdal.UpdateLeaveTime(strTempCarID, leaveTime); - } - catch (Exception ex) - { - MyBase.TraceWriteLine("记录PLC过点信息异常,异常信息: " + ex.ToString()); - } - - #endregion - } - - if (!string.IsNullOrEmpty(strCarID) && strCarID.Length > 10) - { - tmdal.updateMaintenceInfo(tmdal.SelectMaintenanceStationVINbyStationNo(6), 7); - Thread.Sleep(20); - tmdal.updateMaintenceInfo(tmdal.SelectMaintenanceStationVINbyStationNo(5), 6); - Thread.Sleep(20); - tmdal.updateMaintenceInfo(tmdal.SelectMaintenanceStationVINbyStationNo(4), 5); - Thread.Sleep(20); - tmdal.updateMaintenceInfo(tmdal.SelectMaintenanceStationVINbyStationNo(3), 4); - Thread.Sleep(20); - tmdal.updateMaintenceInfo(tmdal.SelectMaintenanceStationVINbyStationNo(2), 3); - Thread.Sleep(20); - tmdal.updateMaintenceInfo(tmdal.SelectMaintenanceStationVINbyStationNo(1), 2); - Thread.Sleep(20); - string strCarColor = ""; - string strCarType = GetCarTypeByIOTAPI(strCarID, out strCarColor); - if (!strCarType.ToUpper().Contains("ERR")) - { - if (strCarType.ToUpper().Contains("EH3")) - { - strCarID = strCarID + "_EH3"; - } - else - { - strCarID = strCarID + "_EHY"; - } - } - tmdal.updateMaintenceInfo(strCarID, 1); - MyBase.TraceWriteLine("CarPassFlag 0->10 更新到MaintenceInfo数据库位置1中的VIN为: " + strCarID); - } - else - { - tmdal.updateMaintenceInfo(tmdal.SelectMaintenanceStationVINbyStationNo(6), 7); - Thread.Sleep(20); - tmdal.updateMaintenceInfo(tmdal.SelectMaintenanceStationVINbyStationNo(5), 6); - Thread.Sleep(20); - tmdal.updateMaintenceInfo(tmdal.SelectMaintenanceStationVINbyStationNo(4), 5); - Thread.Sleep(20); - tmdal.updateMaintenceInfo(tmdal.SelectMaintenanceStationVINbyStationNo(3), 4); - Thread.Sleep(20); - tmdal.updateMaintenceInfo(tmdal.SelectMaintenanceStationVINbyStationNo(2), 3); - Thread.Sleep(20); - tmdal.updateMaintenceInfo(tmdal.SelectMaintenanceStationVINbyStationNo(1), 2); - Thread.Sleep(20); - tmdal.updateMaintenceInfo("empty", 1); - MyBase.TraceWriteLine("CarPassFlag 0->10 更新到MaintenceInfo数据库位置1中的VIN为:empty "); - } - } - - //记录编码器速度等值 - if (ConfigDfn.iRecordEncoderFlag == 1) - { - double dSpeed1 = PlcObject.GetS7Double(PlcSignalDfn.Speed1); - double dSpeed2 = PlcObject.GetS7Double(PlcSignalDfn.Speed2); - double dR01 = PlcObject.GetS7Double(PlcSignalDfn.R01_Pules); - double dR02 = PlcObject.GetS7Double(PlcSignalDfn.R02_Pules); - NLogger.Fatal(dSpeed1 + "," + dSpeed2 + "," + dR01 + "," + dR02); - } - } - iLastCarPassFlag = PLCDfn.CarPassFlag; - iLastReadVINFinishFlag = PLCDfn.ReadVINFinishFlag; - iLastNSStartMeasure = PLCDfn.NSStartMeasure; - #endregion 循环读取PLC数据块中的信息 - } - catch (Exception ex) - { - MyBase.TraceWriteLine("tmrReadPLCData_Tick exception: " + ex.ToString()); - } - } - - private void tmrRefreshPLCStatus_Tick(object sender, EventArgs e) - { - if (labelTimeStatus_Tip.Text == "─") { labelTimeStatus_Tip.Text = "╲"; } - else if (labelTimeStatus_Tip.Text == "╲") { labelTimeStatus_Tip.Text = "│"; } - else if (labelTimeStatus_Tip.Text == "│") { labelTimeStatus_Tip.Text = "╱"; } - else if (labelTimeStatus_Tip.Text == "╱") { labelTimeStatus_Tip.Text = "─"; } - - lampPLCHeart.State = PLCDfn.bPlcLiveTick ? LampColor.Green : LampColor.Silver; - rlePLCHeart.ForeColor = PLCDfn.bPlcLiveTick ? Color.Lime : Color.White; - } - - private void tmrHeartBeatConnect_Tick(object sender, EventArgs e) - { - if (bPlcLiveTickLast != PLCDfn.bPlcLiveTick) - { - HeartBeatCount = 0; - } - else - { - HeartBeatCount++; - } - - if (HeartBeatCount >= 600) - { - HeartBeatCount = 0; - if (!bStopPlcNormal) - { - MyBase.TraceWriteLine("PLC心跳检测10分钟内未变化,断开PLC,进行PLC重连!"); - PlcObject.ClosePlc(); - } - } - bPlcLiveTickLast = PLCDfn.bPlcLiveTick; - } - - private void tmrWritePLCLive_Tick(object sender, EventArgs e) - { - // 停止定时器,防止重入 - tmrWritePLCLive.Stop(); - - // 在后台线程写入PLC心跳信号 - Task.Run(() => - { - try - { - bTickt = !bTickt; - PlcObject.InsertWriteQueue(PlcSignalDfn.SoftLive, Convert.ToByte(bTickt ? 1 : 0)); - } - catch (Exception ex) - { - MyBase.TraceWriteLine("tmrWritePLCLive_Tick exception: " + ex.ToString()); - } - finally - { - // 回到UI线程,安全启动定时器 - this.BeginInvoke((Action)(() => tmrWritePLCLive.Start())); - } - }); - } - - private void ReConnectPLC() - { - m_ThreadReconnectPLC = null; - m_ThreadReconnectPLC = new Thread(new ThreadStart(ReConnectPlcProcess)); - if (!m_ThreadReconnectPLC.IsAlive) - { - m_ThreadReconnectPLC.Start(); - } - } - - private void ReConnectPlcProcess() - { - while (!PlcObject.IsPlcConnected()) - { - bool bConnectResult = PlcObject.ConnectPlc(); - if (!bConnectResult) - { - m_ReConnectNum++; - MyBase.TraceWriteLine("重连PLC,第" + m_ReConnectNum + "次!"); - } - Thread.Sleep(1000); - } - MyBase.TraceWriteLine("重新连接PLC成功!"); - lampConnectPLCStatus.State = LampColor.Green; - rlePLCStatus.ForeColor = Color.Lime; - this.BeginInvoke((EventHandler)delegate - { - tmrHeartBeatConnect.Start(); - }); - bStopPlcNormal = false; - m_ReConnectNum = 0; - this.Invoke((EventHandler)(delegate - { - tmrReadPLCData.Start(); - tmrWritePLCLive.Start();//启动给PLC写入心跳 1s写一次 0 1 - tmrRefreshPLCStatus.Start();//刷新PLC等的状态 - })); - m_ThreadReconnectPLC.Abort(); - } - - #endregion PLC重连操作 - - private void ConnectThread() - { - MyBase.TraceWriteLine("连接PLC...."); - - bool bConnectResult = PlcObject.ConnectPlc(); - this.Invoke((EventHandler)(delegate - { - if (bConnectResult) - { - lampConnectPLCStatus.State = LampColor.Green; - rlePLCStatus.ForeColor = Color.Lime; - MyBase.TraceWriteLine("连接PLC成功"); - } - else - { - lampConnectPLCStatus.State = LampColor.Red; - rlePLCStatus.ForeColor = Color.Red; - tmrReadPLCData.Stop(); - MyBase.TraceWriteLine("连接PLC失败"); - return; - } - - tmrReadPLCData.Start(); //读取PLC数据信息 - tmrWritePLCLive.Start();//启动给PLC写入心跳 1s写一次 0 1 - tmrRefreshPLCStatus.Start();//刷新PLC等的状态 - if (ConfigPlc.bReConnect) - tmrHeartBeatConnect.Start(); //监测来自plc的心跳5分钟内没有变化,重新连接PLC - })); - } - - private void btnConnectPlc_Click(object sender, EventArgs e) - { - try - { - PlcObject.InitWritePlcThread(); - bStopPlcNormal = false; - Thread m_Thread = new Thread(ConnectThread); - m_Thread.Start(); - return; - } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); - } - } - - private void btnClosePlc_Click(object sender, EventArgs e) - { - try - { - MyBase.TraceWriteLine("点击了断开PLC按钮,断开PLC!"); - tmrReadPLCData.Stop(); - tmrHeartBeatConnect.Stop(); - tmrWritePLCLive.Stop(); - tmrRefreshPLCStatus.Stop(); - lampConnectPLCStatus.State = LampColor.White; - rlePLCStatus.ForeColor = Color.White; - rlePLCHeart.ForeColor = Color.White; - lampPLCHeart.State = LampColor.White; - bStopPlcNormal = true; - PlcObject.ClosePlc(); - } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); - } - } - - #endregion PLC相关函数 - - private void lpcUploadIOTTest_Click(object sender, EventArgs e) - { - string strPostData = "{\"serno\":\"" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "\",\"requestData\":[{\"vin\":\"test001\",\"model\":\"EHY\",\"equipmentNo\":\"" + ConfigDfn.strEquipNo + "\",\"equipmentName\":\"" + ConfigDfn.strEquipName + "\",\"calibrationResult\":\"OK\",\"detectionTime\":\"" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\",\"GapList\":[{\"vin\":\"test001\",\"gfNo\":\"F\",\"pointNumber\":\"L-01\",\"actualValue\":\"-0.30\",\"controlLine\":\"-1.00/1.00\",\"measurementResult\":\"OK\"}]}]}"; - MyBase.TraceWriteLine("Test Post Data: " + strPostData); - - //插入记录测试 - tmdal.InsertIOTUploadLog("test001", strPostData, true, labResultPercent.Text); - - string strPostResult = PostJsonToIOT(ConfigDfn.strIOTAddress, strPostData, 10000); - MessageBox.Show("测试上传数据完成,获取到的返回值为: " + strPostResult, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); - MyBase.TraceWriteLine("测试上传数据完成,获取到的返回值为: " + strPostResult); - } - - private void lpcTestGetCarTye_Click(object sender, EventArgs e) - { - string strPostData = "{\"serno\":\"312314141\",\"vin\":\"LNNAJDDU9RDA00213\"}"; - MyBase.TraceWriteLine("Test Post Data: " + strPostData); - string strPostResult = PostJsonToIOT(ConfigDfn.strIOTCarTypeAddress, strPostData, 10000); - MessageBox.Show("测试从IOT获取车型信息完成,获取到的返回值为: " + strPostResult, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); - MyBase.TraceWriteLine("测试从IOT获取车型信息完成,获取到的原返回值为: " + strPostResult); - string strNewResult = strPostResult.Substring(1, strPostResult.Length - 2).Replace("]", ""); - MessageBox.Show("测试从IOT获取车型信息完成,处理后 获取到的返回值为: " + strNewResult, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); - MyBase.TraceWriteLine("测试从IOT获取车型信息完成,处理后 获取到的返回值为: " + strNewResult); - CheryCarTypeInfo ccti = new CheryCarTypeInfo(); - ccti = JsonConvert.DeserializeObject(strNewResult); - MessageBox.Show("测试从IOT获取车型信息完成,获取到的返回值为: " + strNewResult + "; 解析出的车型:" + ccti.data.model + " ;解析出的物料号为" + ccti.data.material + " ;解析出颜色编号:" + ccti.data.material.Substring(7, 2), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - - private string GetCarTypeByIOTAPI(string strVIN, out string strMaterialNo) - { - string strPostData = "{\"serno\":\"" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "\",\"vin\":\"" + strVIN + "\"}"; - MyBase.TraceWriteLine(" Post VIN Data: " + strPostData); - string strPostResult = PostJsonToIOT(ConfigDfn.strIOTCarTypeAddress, strPostData, 5000); - MyBase.TraceWriteLine("GetCarTypeByIOTAPI IOT Return CarType Infomation : " + strPostResult); - string strNewResult = strPostResult.Substring(1, strPostResult.Length - 2).Replace("]", ""); - MyBase.TraceWriteLine("GetCarTypeByIOTAPI IOT Return New CarType Infomation : " + strNewResult); - CheryCarTypeInfo ccti = new CheryCarTypeInfo(); - ccti = JsonConvert.DeserializeObject(strNewResult); - if (ccti.message.Contains("成功")) - { - if (ccti.data.material != null && ccti.data.material.Length > 9) - { - strMaterialNo = ccti.data.material.Substring(7, 2); - MyBase.TraceWriteLine(" IOT Return CarType Infomation : " + strNewResult + "; 解析出的车型:" + ccti.data.model + "解析出车颜色编号:" + strMaterialNo); - } - else - { - strMaterialNo = "TE"; - MyBase.TraceWriteLine(" IOT Return CarType Infomation : " + strNewResult + "; 解析出的车型:" + ccti.data.model + ";未解析出车颜色编号"); - } - return ccti.data.model; - } - else - { - MyBase.TraceWriteLine(" IOT Return CarType Infomation ERROR : " + strPostResult); - strMaterialNo = "ER"; - return "ERR"; - } - } - - private void lpcShowCarData_Click(object sender, EventArgs e) - { - if (ConfigDfn.strShowCarLR == "L") - { - if (ConfigDfn.strCarModel.ToUpper().Contains("EH3")) - { - fLEH3.Show(); - fLEHY.Show(); - fLEHY.Hide(); - } - else - { - fLEH3.Show(); - fLEH3.Hide(); - fLEHY.Show(); - } - } - else - { - if (ConfigDfn.strCarModel.ToUpper().Contains("EH3")) - { - fREH3.Show(); - fREHY.Show(); - fREHY.Hide(); - } - else - { - fREH3.Show(); - fREH3.Hide(); - fREHY.Show(); - } - } - } - - public void ShowCarMeasureDataByCarType(int iCarType) - { - if (ConfigDfn.strShowCarLR == "L") - { - if (iCarType == 1) - { - fLEH3.Show(); - fLEHY.Show(); - fLEHY.Hide(); - MyBase.TraceWriteLine("显示左侧EH3车身数据界面。"); - } - else - { - fLEH3.Show(); - fLEH3.Hide(); - fLEHY.Show(); - MyBase.TraceWriteLine("显示左侧EHY车身数据界面。"); - } - } - else - { - if (iCarType == 1) - { - fREH3.Show(); - fREHY.Show(); - fREHY.Hide(); - MyBase.TraceWriteLine("显示右侧EH3车身数据界面。"); - } - else - { - fREH3.Show(); - fREH3.Hide(); - fREHY.Show(); - MyBase.TraceWriteLine("显示右侧EHY车身数据界面。"); - } - } - } - - private void rbtnTestCOM_Click(object sender, EventArgs e) - { - if (rbtnTestCOM.Text == "打开串口") - { - serialTestPort = new SerialPort(rtbPort.Text.Trim(), 115200, Parity.None, 8, StopBits.One); // 设置串口参数 - serialTestPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); // 注册数据接收事件处理方法 - serialTestPort.Open(); // 打开串口 - if (serialTestPort.IsOpen) - { - rbtnTestCOM.Text = "关闭串口"; - } - } - else - { - serialTestPort.DataReceived -= new SerialDataReceivedEventHandler(DataReceivedHandler); - serialTestPort.Close(); - serialTestPort.Dispose(); - rbtnTestCOM.Text = "打开串口"; - } - } - - private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) - { - SerialPort sp = (SerialPort)sender; - string indata = sp.ReadExisting(); - MyBase.TraceWriteLine(indata); - rtbCOMContent.Text = indata; - } - - private void tmrMonitorDBToCreateReport_Tick(object sender, EventArgs e) - { - tmrMonitorDBToCreateReport.Stop(); - int iCurrentMeasureCount = tmdal.SelectTMeasureResultCount(); - if (iCurrentMeasureCount > iLastMesureCount && (iCurrentMeasureCount == (iLastMesureCount + 1))) - { - MyBase.TraceWriteLine("监控数据库,开始生成ipn文件:"); - DataTable dtMeaResult = tmdal.SelectNewestTMeasureResult(); - string strVIN = dtMeaResult.Rows[0]["CarID"].ToString(); - DateTime dateMeaDate = Convert.ToDateTime(dtMeaResult.Rows[0]["Remark"].ToString()); - DataTable dtMeaContent = tmdal.SelectTMeasureDataByVIN(strVIN); - string strCarType = dtMeaContent.Rows[0][2].ToString(); - int iMeaCount = dtMeaContent.Rows.Count; - - #region 解析完报告后,重新生成客户模板报告 - - string filePath = ""; - if (strCarType.ToLower().Contains("tava")) - { - filePath = ConfigDfn.strReportPath + "\\" + strCarType + "_" + strVIN + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".ipn"; - } - else - { - filePath = ConfigDfn.strReportPath2 + "\\" + strCarType + "_" + strVIN + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".ipn"; - } - - StringBuilder sb = new StringBuilder(); - - #region 添加表头 - - sb.Append("GAUGE ID"); - sb.Append("\t"); - sb.Append("JSN"); - sb.Append("\t"); - sb.Append("MO"); - sb.Append("\t"); - sb.Append("DAY"); - sb.Append("\t"); - sb.Append("YR"); - sb.Append("\t"); - sb.Append("HR"); - sb.Append("\t"); - sb.Append("MIN"); - sb.Append("\t"); - sb.Append("SEC"); - sb.Append("\t"); - sb.Append("MODEL"); - sb.Append("\t"); - sb.Append("AuxID1"); - sb.Append("\t"); - sb.Append("AuxID2"); - sb.Append("\t"); - sb.Append("QUAL"); - sb.Append("\t"); - sb.Append("SHIFT"); - sb.Append("\t"); - sb.Append("DATA TYPE"); - sb.Append("\t"); - sb.Append("FIXTURE"); - sb.Append("\t"); - for (int i = 0; i < iMeaCount / 2; i++) - { - string strMeaPointName = dtMeaContent.Rows[i * 2]["MeasPointName"].ToString(); - string strMPF = strMeaPointName + " Flush"; - string strMPG = strMeaPointName + " Gap"; - sb.Append("D " + strMPF); - sb.Append("\t"); - sb.Append("D " + strMPG); - sb.Append("\t"); - - sb.Append("B " + strMPF); - sb.Append("\t"); - sb.Append("B " + strMPG); - sb.Append("\t"); - - sb.Append("A " + strMPF); - sb.Append("\t"); - sb.Append("A " + strMPG); - sb.Append("\t"); - - sb.Append("US " + strMPF); - sb.Append("\t"); - sb.Append("LS " + strMPF); - sb.Append("\t"); - sb.Append("US " + strMPG); - sb.Append("\t"); - sb.Append("LS " + strMPG); - sb.Append("\t"); - - sb.Append("UR " + strMPF); - sb.Append("\t"); - sb.Append("LR " + strMPF); - sb.Append("\t"); - sb.Append("UR " + strMPG); - sb.Append("\t"); - sb.Append("LR " + strMPG); - sb.Append("\t"); - - sb.Append("UT " + strMPF); - sb.Append("\t"); - sb.Append("LT " + strMPF); - sb.Append("\t"); - sb.Append("UT " + strMPG); - sb.Append("\t"); - sb.Append("LT " + strMPG); - sb.Append("\t"); - } - - #endregion 添加表头 - - sb.AppendLine(); - - #region 添加内容 - - sb.Append(ConfigDfn.strStationName); - sb.Append("\t"); - sb.Append(strVIN); - sb.Append("\t"); - sb.Append(dateMeaDate.Month.ToString()); - sb.Append("\t"); - sb.Append(dateMeaDate.Day.ToString()); - sb.Append("\t"); - sb.Append(dateMeaDate.Year.ToString().Substring(2)); - sb.Append("\t"); - sb.Append(dateMeaDate.Hour.ToString()); - sb.Append("\t"); - sb.Append(dateMeaDate.Minute.ToString()); - sb.Append("\t"); - sb.Append(dateMeaDate.Second.ToString()); - sb.Append("\t"); - if (strCarType.ToLower().Contains("tava")) - sb.Append(ConfigDfn.strUploadPath); - else - { - sb.Append(ConfigDfn.strUploadPath2); - } - sb.Append("\t"); - sb.Append("Unknow"); - sb.Append("\t"); - sb.Append("Unknow"); - sb.Append("\t"); - sb.Append("2"); - sb.Append("\t"); - sb.Append(""); - sb.Append("\t"); - sb.Append("AUTO"); - sb.Append("\t"); - sb.Append("NONE"); - sb.Append("\t"); - - double dDevFVal = 0; - double dDevGVal = 0; - - double dMeaFVal = 0; - double dMeaGVal = 0; - - double dNorFVal = 0; - double dNorGVal = 0; - - double dFUpper = 0; - double dFLower = 0; - double dGUpper = 0; - double dGLower = 0; - - double dFUpper2 = 0; - double dFLower2 = 0; - double dGUpper2 = 0; - double dGLower2 = 0; - - double dFUpper3 = 0; - double dFLower3 = 0; - double dGUpper3 = 0; - double dGLower3 = 0; - for (int i = 0; i < iMeaCount / 2; i++) - { - string strMeasureFValue = dtMeaContent.Rows[i * 2]["MeasureValue"].ToString(); - string strMeasureGValue = dtMeaContent.Rows[i * 2 + 1]["MeasureValue"].ToString(); - string strNormalFValue = dtMeaContent.Rows[i * 2]["NormalValue"].ToString(); - string strNormalGValue = dtMeaContent.Rows[i * 2 + 1]["NormalValue"].ToString(); - - dNorFVal = double.Parse(strNormalFValue); - dNorGVal = double.Parse(strNormalGValue); - dFUpper = double.Parse(dtMeaContent.Rows[i * 2]["UpperTolVal"].ToString()); - dFLower = double.Parse(dtMeaContent.Rows[i * 2]["LowerTolVal"].ToString()); - dGUpper = double.Parse(dtMeaContent.Rows[i * 2 + 1]["UpperTolVal"].ToString()); - dGLower = double.Parse(dtMeaContent.Rows[i * 2 + 1]["LowerTolVal"].ToString()); - - dFUpper2 = dFUpper * ConfigDfn.dLevel2; - dFLower2 = dFLower * ConfigDfn.dLevel2; - dGUpper2 = dGUpper * ConfigDfn.dLevel2; - dGLower2 = dGLower * ConfigDfn.dLevel2; - - dFUpper3 = dFUpper * ConfigDfn.dLevel3; - dFLower3 = dFLower * ConfigDfn.dLevel3; - dGUpper3 = dGUpper * ConfigDfn.dLevel3; - dGLower3 = dGLower * ConfigDfn.dLevel3; - - if (strMeasureFValue.Contains("inv")) - { - sb.Append("inv"); - sb.Append("\t"); - } - else - { - dMeaFVal = double.Parse(strMeasureFValue); - dDevFVal = dMeaFVal - dNorFVal; - sb.Append(dDevFVal.ToString("F3")); - sb.Append("\t"); - } - if (strMeasureGValue.Contains("inv")) - { - sb.Append("inv"); - sb.Append("\t"); - } - else - { - dMeaGVal = double.Parse(strMeasureGValue); - dDevGVal = dMeaGVal - dNorGVal; - sb.Append(dDevGVal.ToString("F3")); - sb.Append("\t"); - } - - sb.Append(strNormalFValue); - sb.Append("\t"); - sb.Append(strNormalGValue); - sb.Append("\t"); - - sb.Append(strMeasureFValue); - sb.Append("\t"); - sb.Append(strMeasureGValue); - sb.Append("\t"); - - sb.Append(dFUpper.ToString("F3")); - sb.Append("\t"); - sb.Append(dFLower.ToString("F3")); - sb.Append("\t"); - sb.Append(dGUpper.ToString("F3")); - sb.Append("\t"); - sb.Append(dGLower.ToString("F3")); - sb.Append("\t"); - - sb.Append(dFUpper2.ToString("F3")); - sb.Append("\t"); - sb.Append(dFLower2.ToString("F3")); - sb.Append("\t"); - sb.Append(dGUpper2.ToString("F3")); - sb.Append("\t"); - sb.Append(dGLower2.ToString("F3")); - sb.Append("\t"); - - sb.Append(dFUpper3.ToString("F3")); - sb.Append("\t"); - sb.Append(dFLower3.ToString("F3")); - sb.Append("\t"); - sb.Append(dGUpper3.ToString("F3")); - sb.Append("\t"); - sb.Append(dGLower3.ToString("F3")); - sb.Append("\t"); - } - - #endregion 添加内容 - - // 将数据写入CSV文件 - File.WriteAllText(filePath, sb.ToString()); - MyBase.TraceWriteLine("客户定制ipn报告生成完毕,路径为:" + filePath); - - #endregion 解析完报告后,重新生成客户模板报告 - } - iLastMesureCount = iCurrentMeasureCount; - tmrMonitorDBToCreateReport.Start(); - } - - private void CenterControl_Shown(object sender, EventArgs e) - { - rddlSizeName.SelectedIndex = 0; - DataTable dtMPName = tmdal.SelectAllMeasPointName(); - if (dtMPName.Rows.Count > 0) - { - for (int i = 0; i < dtMPName.Rows.Count; i++) - { - rddlMeasurePoint.Items.Add(dtMPName.Rows[i][0].ToString()); - } - rddlMeasurePoint.SelectedIndex = 0; - } - } - } - - public class CheryIOTData - { - /// - /// VIN号 - /// - public string vin { get; set; } - - /// - /// FG - /// - public string gfNo { get; set; } - - /// - /// 测点编号 - /// - public string pointNumber { get; set; } - - /// - /// 实测值 - /// - public string actualValue { get; set; } - - /// - /// 控制线 - /// - public string controlLine { get; set; } - - /// - /// 测量结果 - /// - public string measurementResult { get; set; } - } - - public class CarInfoData - { - public string material { get; set; } - public string model { get; set; } - } - - public class CheryCarTypeInfo - { - /// - /// data - /// - public CarInfoData data { get; set; } - - /// - /// message - /// - public string message { get; set; } - - /// - /// serno - /// - public string serno { get; set; } - - /// - /// success - /// - public string success { get; set; } - } - - public static class JsonHelper - { - /// - /// 对象转成JSON 格式字符串 - /// - /// 对象 - /// JSON格式的字符串 - public static string ObjectToJson(object obj) - { - return JsonConvert.SerializeObject(obj); - } - - /// - /// 解析JSON字符串生成对象实体 - /// - /// 对象类型 - /// json字符串 - /// 对象实体 - public static T DeserializeJsonToObject(string json) where T : class - { - Newtonsoft.Json.JsonSerializer serializer = new Newtonsoft.Json.JsonSerializer(); - StringReader sr = new StringReader(json); - object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T)); - T t = o as T; - return t; - } - - /// - /// 解析JSON数组生成对象实体集合 - /// - /// 对象类型 - /// json数组字符串(eg.[{"ID":"112","Name":"石子儿"}]) - /// 对象实体集合 - public static List DeserializeJsonToList(string json) where T : class - { - Newtonsoft.Json.JsonSerializer serializer = new JsonSerializer(); - StringReader sr = new StringReader(json); - object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List)); - List list = o as List; - return list; - } - - /// - /// 数据表转键值对集合 把DataTable转成 List集合, 存每一行 集合中放的是键值对字典,存每一列 - /// - /// 数据表 - /// 哈希表数组 - public static List> DataTableToList(DataTable dt) - { - List> list = new List>(); - - foreach (DataRow dr in dt.Rows) - { - Dictionary dic = new Dictionary(); - foreach (DataColumn dc in dt.Columns) - { - dic.Add(dc.ColumnName, dr[dc.ColumnName]); - } - list.Add(dic); - } - return list; - } - - /// - /// 数据集转键值对数组字典 - /// - /// 键值对数组字典 - public static Dictionary>> DataSetToDic(DataSet ds) - { - Dictionary>> result = new Dictionary>>(); - - foreach (DataTable dt in ds.Tables) - result.Add(dt.TableName, DataTableToList(dt)); - - return result; - } - - /// - /// 数据表转JSON - /// - /// 数据表 - /// JSON字符串 - public static string DataTableToJson(DataTable dt) - { - return ObjectToJson(DataTableToList(dt)); - } - - /// - /// JSON文本转对象,泛型方法 常用 - /// - /// 类型 - /// JSON文本 - /// 指定类型的对象 - public static T JsonToObject(string jsonText) - { - return JsonConvert.DeserializeObject(jsonText); - } - - /// - /// 将JSON文本转换为数据表数据 - /// - /// JSON文本 - /// 数据表字典 - public static Dictionary>> TablesDataFromJson(string jsonText) - { - return JsonToObject>>>(jsonText); - } - - /// - /// 将JSON文本转换成数据行 - /// - /// JSON文本 - /// 数据行的字典 - public static Dictionary DataRowFromJson(string jsonText) - { - return JsonToObject>(jsonText); - } - } + /// + /// + /// 2025.08.29 + /// -------------------------------------------------------------- + /// 1、增加对 生成报告数据的备份、上传情况的记录√ + /// 2、增加对IOT json报文 上传情况的记录√ + /// 3、增加对 PLC 传输过点信号的 记录 (抵达,测量,离开) √ + /// 4、PLC通讯阻塞问题 √ + /// + /// + /// + /// + /// 2025.8.31 + /// -------------------------------------------------------------- + /// + /// 1、增加对IOT 上传失败的重传功能 √ + /// + /// + /// + /// + /// + + public partial class CenterControl : Telerik.WinControls.UI.ShapedForm + { + #region 全局变量 + + private int[] yValues = new int[3]; + private string[] xValues = new string[3]; + private DataTable dtCSVContent = new DataTable(); + private DataTable dtRangeData = new DataTable(); + private TMeasureMSSQLDAL tmdal = new TMeasureMSSQLDAL(); + private string strSaveReprotPath = ""; + private bool bReadCSVFlag = false; + private List ListPostIOTData = new List(); + private FEHYLeftCarData fLEHY = null; + private FEHYRightCarData fREHY = null; + + private FEH3LeftCarData fLEH3 = null; + private FEH3RightCarData fREH3 = null; + + private int iCurrentMeasureItemsFailedCount = 0; + private BackgroundWorker m_bgwAnalysisCSVReport = new BackgroundWorker(); + #region PLC相关变量 + + private bool bStopPlcNormal = false; + private static int HeartBeatCount = 0; + private bool bPlcLiveTickLast = false; + + private Thread m_ThreadReconnectPLC = null; + private int m_ReConnectNum = 0; + private bool bTickt = true; + private int iLastNSStartMeasure = 0; + private int iLastCarPassFlag = 0; + private int iLastStation1To2 = 0; + private int iLastStation2To3 = 0; + private int iLastReadVINFinishFlag = 0; + private int iLastNoCarTypeFlag = 0; + private SerialPort serialTestPort = null; + + private SerialPort serialPort = null; + private int iLastMesureCount = 0; + private System.Timers.Timer ttmrReadPLCData = new System.Timers.Timer(); + private System.Timers.Timer ttmrWritePLCLive = new System.Timers.Timer(); + private System.Timers.Timer ttmrReadNSCSV = new System.Timers.Timer(); + #endregion PLC相关变量 + + #region 分页全局变量 + + private DataTable PageTable = new DataTable(); + + /// + /// 每页记录数 + /// + public int pageSize = 20; + + /// + /// 总记录数 + /// + public int recordCount = 0; + + /// + /// 总页数 + /// + public int pageCount = 0; + + /// + /// 当前页 + /// + public int currentPage = 0; + + #endregion 分页全局变量 + + #endregion 全局变量 + + #region 主窗口事件 + + public CenterControl() + { + InitializeComponent(); + SQLHelper.connStr = DatabaseDfn.SqlConnectStr(); + + #region 加载皮肤 + + ThemeResolutionService.LoadPackageFile(ConfigDfn.strTheme); + this.ThemeName = ConfigDfn.strSkinName.Substring(0, ConfigDfn.strSkinName.Length - 5); + RPV.ThemeName = ConfigDfn.strSkinName.Substring(0, ConfigDfn.strSkinName.Length - 5); + + #endregion 加载皮肤 + } + + private void CenterControl_Load(object sender, EventArgs e) + { + ttmrReadPLCData.Interval = 300; + ttmrReadPLCData.SynchronizingObject = this; + ttmrReadPLCData.Elapsed += ttmrReadPLCData_Elapsed; + + ttmrWritePLCLive.Interval = 1000; + ttmrWritePLCLive.SynchronizingObject = this; + ttmrWritePLCLive.Elapsed += ttmrWritePLCLive_Elapsed; + + ttmrReadNSCSV.Interval = 500; + ttmrReadNSCSV.SynchronizingObject = this; + ttmrReadNSCSV.Elapsed += ttmrReadNSCSV_Elapsed; + + #region 初始化全局变量 + fLEHY = new FEHYLeftCarData(this); + fREHY = new FEHYRightCarData(this); + fLEH3 = new FEH3LeftCarData(this); + fREH3 = new FEH3RightCarData(this); + MyBase.rleMessage = rleMessage; + rdtpStartTime.Text = DateTime.Now.ToString("yyyy-MM-dd"); + rdtpEndTime.Text = DateTime.Now.ToString("yyyy-MM-dd"); + + #endregion 初始化全局变量 + //需要显示车身数据 不分析csv文件 + if (ConfigDfn.iShowCarDataFlag == 1) + { + MyBase.TraceWriteLine(" 进入显示车身模式!显示车身界面。"); + lpcShowCarData_Click(null, null); + //serialPort = new SerialPort(ConfigDfn.strCOMPort, 115200, Parity.None, 8, StopBits.One); // 设置串口参数 + //serialPort.DataReceived += new SerialDataReceivedEventHandler(DataAutoReceivedHandler); // 注册数据接收事件处理方法 + //serialPort.Open(); // 打开串口 + //if (serialPort.IsOpen) + //{ + // MyBase.TraceWriteLine(ConfigDfn.strCOMPort + "打开成功O(∩_∩)O"); + //} + //else + //{ + // MyBase.TraceWriteLine(ConfigDfn.strCOMPort + "打开失败!"); + // MessageBox.Show(ConfigDfn.strCOMPort + "打开失败!请检查扫抢串口设置是否正确。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + //} + } + else + { + MyBase.TraceWriteLine(" 进入不显示车身模式!"); + } + if (ConfigDfn.iAnalysisCSVFlag == 1) + { + btnConnectPlc_Click(null, null); + MyBase.TraceWriteLine(" 进入解析CSV文件模式,开始解析扫码CSV文件!"); + //ttmrReadNSCSV.Start(); + //tmdal.updateMaintenceInfoEmpty(); + m_bgwAnalysisCSVReport.DoWork += new DoWorkEventHandler(m_bgwAnalysisCSVReport_DoWork); + m_bgwAnalysisCSVReport.RunWorkerAsync(); + } + else + { + MyBase.TraceWriteLine(" 进入不解析CSV文件模式!"); + ttmrReadNSCSV.Stop(); + } + + if (Directory.Exists(ConfigDfn.strNextSenseCSVEH3Path)) + { + MyBase.TraceWriteLine("软件首次启动, Nextsense EH3 CSV读取路径存在;不清空,读取NextSense生成 CSV报告路径下的所有文件,路径为:" + ConfigDfn.strNextSenseCSVEH3Path); + } + else + { + string strTip = "错误:软件首次启动,读取NextSense生成EH3 CSV报告的路径:" + ConfigDfn.strNextSenseCSVEH3Path + " 不存在!请检查并进行修改!点击是按钮,软件将自动创建该路径!"; + MyBase.TraceWriteLine(strTip); + Directory.CreateDirectory(ConfigDfn.strNextSenseCSVEH3Path); + //DialogResult dResult = MessageBox.Show(strTip, "错误", MessageBoxButtons.YesNo, MessageBoxIcon.Error); + //if (dResult == DialogResult.Yes) + //{ + // Directory.CreateDirectory(ConfigDfn.strNextSenseCSVEH3Path); + // MyBase.TraceWriteLine(strTip + " ; 点击了是按钮,软件自动创建读取目录:" + ConfigDfn.strNextSenseCSVEH3Path); + //} + //else + //{ + // MyBase.TraceWriteLine(strTip + " ;点击了否按钮,不创建目录!"); + //} + } + if (Directory.Exists(ConfigDfn.strNextSenseCSVEHYPath)) + { + MyBase.TraceWriteLine("软件首次启动, Nextsense EHY CSV读取路径存在;不清空,读取NextSense生成 CSV报告路径下的所有文件,路径为:" + ConfigDfn.strNextSenseCSVEHYPath); + } + else + { + string strTip = "错误:软件首次启动,读取NextSense生成EHY CSV报告的路径:" + ConfigDfn.strNextSenseCSVEHYPath + " 不存在!请检查并进行修改!点击是按钮,软件将自动创建该路径!"; + MyBase.TraceWriteLine(strTip); + Directory.CreateDirectory(ConfigDfn.strNextSenseCSVEHYPath); + //DialogResult dResult = MessageBox.Show(strTip, "错误", MessageBoxButtons.YesNo, MessageBoxIcon.Error); + //if (dResult == DialogResult.Yes) + //{ + // Directory.CreateDirectory(ConfigDfn.strNextSenseCSVEHYPath); + // MyBase.TraceWriteLine(strTip + " ; 点击了是按钮,软件自动创建读取目录:" + ConfigDfn.strNextSenseCSVEHYPath); + //} + //else + //{ + // MyBase.TraceWriteLine(strTip + " ;点击了否按钮,不创建目录!"); + //} + } + initLPCControl(); + + //tmdal.updateMaintenceInfoEmpty(); + //iLastMesureCount = tmdal.SelectTMeasureResultCount(); + + #region 清空信息 + + labVIN.Text = ""; + labOKCount.Text = ""; + labNGCount.Text = ""; + labRejectCount.Text = ""; + labSumMeasureCount.Text = ""; + labMeaTime.Text = ""; + labResultPercent.Text = ""; + labResult.Text = ""; + labCarType.Text = ""; + + #endregion 清空信息 + + InitTableColumns(); + strSaveReprotPath = ConfigDfn.strReportPath + @"\"; + + //testIotUpload(); + } + + private void InitTableColumns() + { + #region 测量数据表始化表 + + //创建虚拟表 + DataColumn column2 = new DataColumn("CarID", Type.GetType("System.String")); + DataColumn dcCarType = new DataColumn("CarType", Type.GetType("System.String")); + DataColumn column3 = new DataColumn("MeasPointName", Type.GetType("System.String")); + DataColumn column4 = new DataColumn("DimensionName", Type.GetType("System.String")); + DataColumn column5 = new DataColumn("NormalValue", Type.GetType("System.String")); + DataColumn column6 = new DataColumn("LowerTolVal", Type.GetType("System.String")); + DataColumn column7 = new DataColumn("UpperTolVal", Type.GetType("System.String")); + DataColumn column8 = new DataColumn("MeasureValue", Type.GetType("System.String")); + DataColumn column10 = new DataColumn("MeasureItemResult", Type.GetType("System.String")); + DataColumn column9 = new DataColumn("MeasureDate", Type.GetType("System.DateTime")); + DataColumn column1 = new DataColumn("Remark", Type.GetType("System.String")); + //将列添加到table表中 + + dtCSVContent.Columns.Add(column2); + dtCSVContent.Columns.Add(dcCarType); + dtCSVContent.Columns.Add(column3); + dtCSVContent.Columns.Add(column4); + dtCSVContent.Columns.Add(column5); + dtCSVContent.Columns.Add(column6); + dtCSVContent.Columns.Add(column7); + dtCSVContent.Columns.Add(column8); + dtCSVContent.Columns.Add(column10); + dtCSVContent.Columns.Add(column9); + dtCSVContent.Columns.Add(column1); + + #endregion 测量数据表始化表 + + #region 极差数据Table初始化 + + //创建虚拟表 + DataColumn dcCarID = new DataColumn("CarID", Type.GetType("System.String")); + DataColumn dcRangeName = new DataColumn("RangeName", Type.GetType("System.String")); + DataColumn dcRangeValue = new DataColumn("RangeValue", Type.GetType("System.String")); + DataColumn dcRangeLowUpp = new DataColumn("RangeLowUpp", Type.GetType("System.String")); + DataColumn dcResult = new DataColumn("Result", Type.GetType("System.String")); + DataColumn dcCreateTime = new DataColumn("CreateTime", Type.GetType("System.DateTime")); + DataColumn dcRemark = new DataColumn("Remark", Type.GetType("System.String")); + //将列添加到table表中 + + dtRangeData.Columns.Add(dcCarID); + dtRangeData.Columns.Add(dcRangeName); + dtRangeData.Columns.Add(dcRangeValue); + dtRangeData.Columns.Add(dcRangeLowUpp); + dtRangeData.Columns.Add(dcResult); + dtRangeData.Columns.Add(dcCreateTime); + dtRangeData.Columns.Add(dcRemark); + + #endregion 极差数据Table初始化 + + #region 分页相关 + + //创建分页虚拟表 + DataColumn column11 = new DataColumn("CarID", Type.GetType("System.String")); + DataColumn column12 = new DataColumn("MeasPointName", Type.GetType("System.String")); + DataColumn column13 = new DataColumn("DimensionName", Type.GetType("System.String")); + DataColumn column14 = new DataColumn("NormalValue", Type.GetType("System.String")); + DataColumn column15 = new DataColumn("LowerTolVal", Type.GetType("System.String")); + DataColumn column16 = new DataColumn("UpperTolVal", Type.GetType("System.String")); + DataColumn column17 = new DataColumn("MeasureValue", Type.GetType("System.String")); + DataColumn column18 = new DataColumn("MeasureDate", Type.GetType("System.String")); + DataColumn column19 = new DataColumn("MeasureItemResult", Type.GetType("System.String")); + + //将列添加到table表中 + PageTable.Columns.Add(column11); + PageTable.Columns.Add(column12); + PageTable.Columns.Add(column13); + PageTable.Columns.Add(column14); + PageTable.Columns.Add(column15); + PageTable.Columns.Add(column16); + PageTable.Columns.Add(column17); + PageTable.Columns.Add(column18); + PageTable.Columns.Add(column19); + + labCurrentPage.Text = "当前页:" + currentPage.ToString(); //当前页 + labSumPages.Text = "共 " + pageCount.ToString() + " 页";//总页数 + labSumRecorders.Text = "总共 " + recordCount.ToString() + " 条记录";//总记录数 + rddlPageRecorderCount.SelectedIndex = 0; + + #endregion 分页相关 + } + + private void DataAutoReceivedHandler(object sender, SerialDataReceivedEventArgs e) + { + SerialPort sp = (SerialPort)sender; + string strScanVIN = sp.ReadExisting(); + MyBase.TraceWriteLine("扫抢获取的VIN码为:" + strScanVIN); + if (strScanVIN.Length > 0) + { + tmdal.updateMaintenceInfo(strScanVIN, 3); + MyBase.TraceWriteLine("更新数据库中存储的VIN码:" + strScanVIN); + } + } + + private void initLPCControl() + { + lpcSoftwareSetup.labPicture.Click += new EventHandler(lpcSoftwareSetup_Click); + lpcSoftwareSetup.labText.Click += new EventHandler(lpcSoftwareSetup_Click); + + lpcToleranceSetup.labPicture.Click += new EventHandler(lpcToleranceSetup_Click); + lpcToleranceSetup.labText.Click += new EventHandler(lpcToleranceSetup_Click); + + lpcRange.labPicture.Click += new EventHandler(lpcRange_Click); + lpcRange.labText.Click += new EventHandler(lpcRange_Click); + + lpcPLCAddress.labPicture.Click += new EventHandler(lpcPLCAddress_Click); + lpcPLCAddress.labText.Click += new EventHandler(lpcPLCAddress_Click); + + lpcPLCTest.labPicture.Click += new EventHandler(lpcPLCTest_Click); + lpcPLCTest.labText.Click += new EventHandler(lpcPLCTest_Click); + + lpcAboutSoftware.labPicture.Click += new EventHandler(lpcAboutSoftware_Click); + lpcAboutSoftware.labText.Click += new EventHandler(lpcAboutSoftware_Click); + + lpcUploadIOTTest.labPicture.Click += new EventHandler(lpcUploadIOTTest_Click); + lpcUploadIOTTest.labText.Click += new EventHandler(lpcUploadIOTTest_Click); + + lpcTestGetCarTye.labPicture.Click += new EventHandler(lpcTestGetCarTye_Click); + lpcTestGetCarTye.labText.Click += new EventHandler(lpcTestGetCarTye_Click); + + lpcShowCarData.labPicture.Click += new EventHandler(lpcShowCarData_Click); + lpcShowCarData.labText.Click += new EventHandler(lpcShowCarData_Click); + + lpcShowLog.labPicture.Click += new EventHandler(lpcShowLog_Click); + lpcShowLog.labText.Click += new EventHandler(lpcShowLog_Click); + } + + private void CenterControl_FormClosed(object sender, FormClosedEventArgs e) + { + MyBase.TraceWriteLine("-------------海克斯康面隙分析软件程序关闭---------------------"); + LogDebugDfn.strEndTime = DateTime.Now.ToString("yyyy.MM.dd HH-mm-ss"); + string CopyFileName = ConfigDfn.strFileFolder + "\\DebugFiles\\" + "Debug(" + LogDebugDfn.strStartTime + " To " + LogDebugDfn.strEndTime + ")" + ".txt"; + if (File.Exists(LogDebugDfn.strDebugFile)) + File.Copy(LogDebugDfn.strDebugFile, CopyFileName); + System.Environment.Exit(0); + } + + private void tmSystem_Tick(object sender, EventArgs e) + { + rleTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + if (ConfigDfn.iAnalysisCSVFlag == 1) + rleReadCSVStatus.ForeColor = bReadCSVFlag ? Color.Green : Color.White; + bReadCSVFlag = !bReadCSVFlag; + } + + #endregion 主窗口事件 + + + #region⭐⭐⭐⭐⭐ 解析Nextsense CSV文件功能 核心算法 ⭐⭐⭐⭐⭐ + + private double CalculateStrictLowerTolerance(double dLower, double dUpper) + { + double dStrictLower = 0; + double dNormalValue = (dLower + dUpper) / 2; + dStrictLower = dNormalValue + (dLower - dNormalValue) * ConfigDfn.dTolerancePer; + return dStrictLower; + } + + private double CalculateStrictUpperTolerance(double dLower, double dUpper) + { + double dStrictUpper = 0; + double dNormalValue = (dLower + dUpper) / 2; + dStrictUpper = dNormalValue + (dUpper - dNormalValue) * ConfigDfn.dTolerancePer; + return dStrictUpper; + } + + private double CalculateExceptionLowerTolerance(double dLower, double dUpper) + { + double dStrictLower = 0; + double dNormalValue = (dLower + dUpper) / 2; + dStrictLower = dNormalValue + (dLower - dNormalValue) * ConfigDfn.dExceptionTolerancePer; + return dStrictLower; + } + + private double CalculateExceptionUpperTolerance(double dLower, double dUpper) + { + double dStrictUpper = 0; + double dNormalValue = (dLower + dUpper) / 2; + dStrictUpper = dNormalValue + (dUpper - dNormalValue) * ConfigDfn.dExceptionTolerancePer; + return dStrictUpper; + } + + /// + /// 解析EH3 CSV文件函数;后续如果Nextsense的csv报告模板变了,修改该函数的行号即可LineNum wsp + /// + private void AnalysisNextSenseEH3CSV() // 解析EH3 车型 + { + try + { + Invoke((MethodInvoker)(() => { lbCSVFiles.Items.Clear(); })); + FileInfo[] fileInfos = null; + if (Directory.Exists(ConfigDfn.strNextSenseCSVEH3Path)) + { + DirectoryInfo di = new DirectoryInfo(ConfigDfn.strNextSenseCSVEH3Path); + fileInfos = di.GetFiles("*.CSV"); + if (fileInfos.Count() >= 1) + { + MyBase.TraceWriteLine("存在EH3 CSV文件,开始解析:"); + List listCSVTitleInfo = new List(); + string strCarID = ""; + foreach (FileInfo fi in fileInfos) + { + listCSVTitleInfo.Clear(); + ListPostIOTData.Clear(); + dtCSVContent.Clear(); + + string strCSVName = fi.FullName; + File.Copy(fi.FullName, ConfigDfn.strFileFolder + "\\NextSenseCSVBackup\\" + fi.Name, true); + MyBase.TraceWriteLine("Copy " + fi.FullName + " TO " + ConfigDfn.strFileFolder + "\\NextSenseCSVBackup\\" + fi.Name + " Done. 备份完成"); + Invoke((MethodInvoker)(() => + { + dgvMeasureContent.Rows.Clear(); + lbCSVFiles.Items.Add(fi.Name); + + })); + + #region 解析EH3 CSV报告 + + MyBase.TraceWriteLine("开始解析NextSense EH3 CSV 报告:" + strCSVName); + Encoding encoding = GetType(strCSVName); + FileStream fs = new FileStream(strCSVName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + StreamReader sr = new StreamReader(fs, encoding); + //记录每次读取的一行记录 + string strLine = ""; + //记录每行记录中的各字段内容 + string[] aryLineContent = null; + + //逐行读取CSV中的数据 + int LineNum = 0; + //表格行数 + int dtRowCount = 0; + //超差个数 + double OutCount = 0; + //Ok个数 + double OKCount = 0; + //异常个数 + double RejectedCount = 0; + //合格率 + double FPYPercent = 0; + double dStrictTLower = 0; + double dStrictTUpper = 0; + double dLowerValue = 0; + double dUpperValue = 0; + double dExcepitonTLower = 0; + double dExceptionTUpper = 0; + double dMeasureValue = 0.0; + DataTable dt = null; + while ((strLine = sr.ReadLine()) != null) + { + LineNum++; + if (LineNum >= 3 & LineNum <= 16) + { + listCSVTitleInfo.Add(strLine); + } + if (LineNum == 10) + { + aryLineContent = strLine.Split(','); + MyBase.TraceWriteLine("解析出NextSense CSV中的VIN为:" + aryLineContent[1]); + strCarID = tmdal.SelectVINByCSVVIN(aryLineContent[1]); + MyBase.TraceWriteLine("通过CSV VIN从数据库中获取的完整VIN为:" + strCarID); + if (strCarID.ToLower().Contains("nofind")) + { + MyBase.TraceWriteLine("数据库中没有查找到VIN码,NoFind, +L 使用CSV码"); + labVIN.Text = "L" + aryLineContent[1]; + strCarID = "L" + aryLineContent[1]; + } + else + { + labVIN.Text = strCarID; + tmdal.DeleteOneTTempVIN(strCarID); + MyBase.TraceWriteLine("在数据库表TTempSaveVIN中删除该VIN:" + strCarID); + } + } + if (LineNum >= 19) + { + aryLineContent = strLine.Split(','); + //ConfigDfn.strMeasureTime = aryLineContent[6].Substring(0, 4) + "-" + aryLineContent[6].Substring(4, 2) + "-" + aryLineContent[6].Substring(6, 2) + " " + aryLineContent[7].Substring(0, 2) + ":" + aryLineContent[7].Substring(2, 2) + ":" + aryLineContent[7].Substring(4, 2); + ConfigDfn.strMeasureTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + double dNormalValue = 0.0d; + + dt = tmdal.SelectOneToleranceByCondition("EH3", aryLineContent[0], aryLineContent[1]); + if (dt.Rows.Count == 1) + { + dLowerValue = double.Parse(dt.Rows[0]["TolLower"].ToString()); + dUpperValue = double.Parse(dt.Rows[0]["TolUpper"].ToString()); + dNormalValue = (dLowerValue + dUpperValue) / 2; + dStrictTLower = CalculateStrictLowerTolerance(dLowerValue, dUpperValue); + dStrictTUpper = CalculateStrictUpperTolerance(dLowerValue, dUpperValue); + dExcepitonTLower = CalculateExceptionLowerTolerance(dLowerValue, dUpperValue); + dExceptionTUpper = CalculateExceptionUpperTolerance(dLowerValue, dUpperValue); + } + else + { + dStrictTLower = 0; + dStrictTUpper = 0; + dLowerValue = 0; + dUpperValue = 0; + MyBase.TraceWriteLine("EH3 " + aryLineContent[0] + " " + aryLineContent[1] + " 查询数据获取公差带失败!数据库中数量不唯一,请检查公差带配置!"); + } + + if (aryLineContent[2].ToLower().Contains("inv")) + { + aryLineContent[2] = ""; + aryLineContent[4] = "ng2"; + } + else + { + dMeasureValue = double.Parse(aryLineContent[2]); + if (dMeasureValue >= dLowerValue && dMeasureValue <= dUpperValue) + { + aryLineContent[4] = "good"; + } + else if (dMeasureValue >= dStrictTLower && dMeasureValue <= dStrictTUpper) + { + aryLineContent[4] = "ng1"; + } + else if (dMeasureValue >= dExceptionTUpper || dMeasureValue <= dExcepitonTLower) + { + aryLineContent[4] = "ng3"; + aryLineContent[2] = ""; + } + else + { + aryLineContent[4] = "ng2"; + } + } + + //测量数据存储到table里 + dtCSVContent.Rows.Add(strCarID, "EH3", aryLineContent[0], aryLineContent[1], dNormalValue.ToString("F1"), dLowerValue.ToString("F1"), dUpperValue.ToString("F1"), aryLineContent[2], aryLineContent[4], DateTime.Now, ""); + string strMeasureResult = aryLineContent[4].ToLower(); + if (strMeasureResult.Contains("good") || strMeasureResult.Contains("best") || strMeasureResult.Contains("ng1")) + { + OKCount++; + aryLineContent[4] = "OK"; + } + else if (strMeasureResult.Contains("ng2")) + { + OutCount++; + aryLineContent[4] = "NG"; + } + else + { + RejectedCount++; + aryLineContent[4] = ""; + aryLineContent[2] = ""; + } + Invoke((MethodInvoker)(() => + { + dgvMeasureContent.Rows.Add(aryLineContent[0], aryLineContent[1], dNormalValue.ToString("F1"), dLowerValue.ToString("F1"), dUpperValue.ToString("F1"), aryLineContent[2], ConfigDfn.strMeasureTime, aryLineContent[4]); + })); + CheryIOTData cIOTData = new CheryIOTData(); + cIOTData.vin = strCarID; + cIOTData.gfNo = aryLineContent[1]; + cIOTData.pointNumber = aryLineContent[0]; + cIOTData.actualValue = aryLineContent[2]; + cIOTData.controlLine = dLowerValue.ToString("F1") + @"/" + dUpperValue.ToString("F1"); + if (strMeasureResult.Contains("good") || strMeasureResult.Contains("best") || strMeasureResult.Contains("ng1")) + { + cIOTData.measurementResult = "OK"; + } + else + { + cIOTData.measurementResult = "NG"; + } + ListPostIOTData.Add(cIOTData); + dtRowCount++; + Invoke((MethodInvoker)(() => + { + dgvMeasureContent.Rows[dtRowCount - 1].HeaderCell.Value = dtRowCount.ToString(); + })); + + } + }//End While + sr.Close(); + fs.Close(); + tmdal.InsertTMeasureDatabyDataTable(dtCSVContent); + MyBase.TraceWriteLine("解析EH3数据完成,并将所有测量数据插入到数据库完毕。"); + MyBase.TraceWriteLine("解析NextSense EH3 CSV 报告完毕!检测项数=" + dtRowCount.ToString()); + if (dtRowCount <= ConfigDfn.iMeasureItemsCount) + { + iCurrentMeasureItemsFailedCount++; + } + else + { + iCurrentMeasureItemsFailedCount = 0; + } + + // 连续多个车异常 + if (iCurrentMeasureItemsFailedCount >= ConfigDfn.iFailedCarCount) + { + MyBase.TraceWriteLine("iCurrentMeasureItemsFailedCount=" + iCurrentMeasureItemsFailedCount.ToString() + "超过报警数量" + ConfigDfn.iFailedCarCount.ToString() + " ;给PLC发送报警10。"); + PlcObject.InsertWriteQueue(PlcSignalDfn.MeasureError, (byte)10); + } + + // 单个报告内 invalued 项超过某个值 + + // 机器人忙碌状态 且 多个小时无测量报告 + + #endregion 解析EH3 CSV报告 + + #region 计算极差 + CalculateRange(strCarID, "EH3"); + Thread.Sleep(20); + DataTable dtAllRangeDate = tmdal.SelectRangeDatabyCarID(strCarID); + if (dtAllRangeDate.Rows.Count > 0) + { + foreach (DataRow row in dtAllRangeDate.Rows) + { + if (ConfigDfn.iIncludeRangeFlag == 1) + { + if (row.ItemArray[5].ToString().Contains("OK")) + { + OKCount++; + } + else + { + OutCount++; + } + } + + Invoke((MethodInvoker)(() => { dgvMeasureContent.Rows.Add(row.ItemArray[2].ToString(), "G", "0", row.ItemArray[4].ToString().Substring(0, 3), row.ItemArray[4].ToString().Substring(4, 3), row.ItemArray[3].ToString(), ConfigDfn.strMeasureTime, row.ItemArray[5].ToString()); })); + } + } + + if (ConfigDfn.iIncludeRangeFlag == 1) + { + dtRowCount = dtRowCount + dtAllRangeDate.Rows.Count; + for (int i = 1; i <= dtRowCount; i++) + { + Invoke((MethodInvoker)(() => { dgvMeasureContent.Rows[i - 1].HeaderCell.Value = i.ToString(); })); + } + + MyBase.TraceWriteLine("计算合格率的时:包含极差计算项!"); + } + #endregion 计算极差 + string strTargetRate = ""; + Invoke((MethodInvoker)(() => + { + #region 界面显示功能 + + labCarType.Text = "EH3"; + TMeasureResultModel tmrm = new TMeasureResultModel(); + labNGCount.Text = OutCount.ToString(); + labOKCount.Text = OKCount.ToString(); + labRejectCount.Text = RejectedCount.ToString(); + labMeaTime.Text = ConfigDfn.strMeasureTime; + labSumMeasureCount.Text = dtRowCount.ToString(); + FPYPercent = OKCount / (OKCount + OutCount); + if (FPYPercent >= ConfigDfn.dFPY) + { + labResultPercent.Text = Math.Round(FPYPercent * 100.00d, 2).ToString("F2") + "%"; + labResult.Text = "合格"; + labResultPercent.ForeColor = Color.LimeGreen; + labResult.ForeColor = Color.LimeGreen; + pbResult.Image = Resources.OK; + tmrm.Result = 1; + PlcObject.InsertWriteQueue(PlcSignalDfn.CMMResult, (byte)10); + } + else if (FPYPercent >= ConfigDfn.dFPY2 && FPYPercent < ConfigDfn.dFPY) + { + labResultPercent.Text = Math.Round(FPYPercent * 100.00d, 2).ToString("F2") + "%"; + labResult.Text = "合格"; + labResultPercent.ForeColor = Color.Yellow; + labResult.ForeColor = Color.Yellow; + pbResult.Image = Resources.OK; + tmrm.Result = 1; + PlcObject.InsertWriteQueue(PlcSignalDfn.CMMResult, (byte)20); + } + else + { + labResultPercent.Text = Math.Round(FPYPercent * 100.00d, 2).ToString("F2") + "%"; + labResult.Text = "不合格"; + labResultPercent.ForeColor = Color.Red; + labResult.ForeColor = Color.Red; + pbResult.Image = Resources.NG; + tmrm.Result = 2; + PlcObject.InsertWriteQueue(PlcSignalDfn.CMMResult, (byte)30); + } + xValues[0] = "合格 : " + OKCount.ToString(); + xValues[1] = "不合格 : " + OutCount.ToString(); + xValues[2] = "异常 : " + RejectedCount.ToString(); + yValues[0] = (int)OKCount; + yValues[1] = (int)OutCount; + yValues[2] = (int)RejectedCount; + chartResultPie.Series[0].Points.DataBindXY(xValues, yValues); + + strTargetRate = Math.Round(ConfigDfn.dFPY2 * 100.00d, 2).ToString("F2") + "%"; + + tmrm.CarID = strCarID; + tmrm.CarType = "EH3"; + tmrm.SumMeasureItems = dtRowCount; + tmrm.GoodMeasureItems = (int)OKCount; + tmrm.NoGoodMeasureItems = (int)OutCount; + tmrm.RejectMeasureItems = (int)RejectedCount; + tmrm.FPY = FPYPercent.ToString("F4"); + tmrm.Remark = ""; + tmrm.MeasureDate = ConfigDfn.strMeasureTime; + tmdal.InsertTMeasureResult(tmrm); + MyBase.TraceWriteLine("将EH3总结果插入数据库完毕。"); + MyBase.TraceWriteLine("全部插入解析完毕,删除文件:" + fi.Name); + fi.Delete(); + dgvMeasureContent.Rows.Add(); + dgvMeasureContent.Rows[dgvMeasureContent.Rows.Count - 1].Cells["MResult"].Value = (dtRowCount - OutCount - RejectedCount).ToString() + "/" + dtRowCount.ToString(); + this.dgvMeasureContent.Rows[dgvMeasureContent.Rows.Count - 1].DefaultCellStyle.ForeColor = Color.White; + if (dgvMeasureContent.Rows.Count > 0) + { + SetdgvRowBgColor(dgvMeasureContent); + for (int i = 0; i < dgvMeasureContent.Rows.Count; i++) + { + //if (dgvMeasureContent.Rows[i].Cells["MResult"].Value.ToString().ToLower().Contains("ok")) + //{ + // dgvMeasureContent.Rows[i].DefaultCellStyle.BackColor = Color.Orange; + //} + if (dgvMeasureContent.Rows[i].Cells["MResult"].Value.ToString().ToLower().Contains("ng")) + { + dgvMeasureContent.Rows[i].DefaultCellStyle.BackColor = Color.Orange; + } + else if (string.IsNullOrEmpty(dgvMeasureContent.Rows[i].Cells["MResult"].Value.ToString())) + { + dgvMeasureContent.Rows[i].DefaultCellStyle.BackColor = Color.Red; + } + else + { + } + } + } + + #endregion 界面显示功能 + })); + + //生成客户的 CSV文件 + if (ConfigDfn.iCreateReportFlag == 1) + { + GenUserReportCSV(strCarID, listCSVTitleInfo, dtAllRangeDate, FPYPercent); + } + else + { + MyBase.TraceWriteLine("EH3数据生成报告功能未启用!"); + } + + #region Update Data To IOT + + if (ConfigDfn.iStartIOTFlag == 1) + { + bool bVINMeasuedFlag = tmdal.CheckVINExistInDB(strCarID); + if (bVINMeasuedFlag) + { + MyBase.TraceWriteLine("VIN:" + strCarID + " 该VIN码已经在数据库中存在了,说明已经测量过了,不再进行IOT数据上传操作。"); + } + else + { + #region IOT上传功能 + if (dtAllRangeDate.Rows.Count > 0) + { + foreach (DataRow row in dtAllRangeDate.Rows) + { + CheryIOTData cIOTData = new CheryIOTData(); + cIOTData.vin = strCarID; + cIOTData.gfNo = "G"; + cIOTData.pointNumber = row.ItemArray[2].ToString(); + cIOTData.actualValue = row.ItemArray[3].ToString(); + cIOTData.controlLine = row.ItemArray[4].ToString(); + cIOTData.measurementResult = row.ItemArray[5].ToString(); + if (cIOTData.measurementResult.ToUpper().Contains("NG")) + { + if (!string.IsNullOrEmpty(cIOTData.actualValue) && !cIOTData.actualValue.ToLower().Contains("inv")) //避免为空的情况 + { + dLowerValue = double.Parse(row.ItemArray[4].ToString().Substring(0, 3)); + dUpperValue = double.Parse(row.ItemArray[4].ToString().Substring(4, 3)); + dStrictTLower = CalculateStrictLowerTolerance(dLowerValue, dUpperValue); + dStrictTUpper = CalculateStrictUpperTolerance(dLowerValue, dUpperValue); + double dValue = double.Parse(row.ItemArray[3].ToString()); + if (dValue > dStrictTLower && dValue < dStrictTUpper) + { + cIOTData.measurementResult = "OK"; + } + } + } + ListPostIOTData.Add(cIOTData); + } + } + string strGapList = JsonHelper.ObjectToJson(ListPostIOTData); + string strCaliResult = "OK"; + if (labResult.Text == "合格") + { + strCaliResult = "OK"; + } + else + { + strCaliResult = "NG"; + } + string strPostData = "{\"serno\":\"" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "\",\"requestData\":[{\"vin\":\"" + strCarID + "\",\"model\":\"EH3\",\"equipmentNo\":\"" + ConfigDfn.strEquipNo + "\",\"equipmentName\":\"" + ConfigDfn.strEquipName + "\",\"calibrationResult\":\"" + strCaliResult + "\",\"detectionTime\":\"" + ConfigDfn.strMeasureTime + "\",\"targetRate\":\"" + strTargetRate + "\",\"rate\":\"" + labResultPercent.Text + "\",\"GapList\":" + strGapList + "}]}"; + + MyBase.TraceWriteLine("Update To IOT Data Content: " + strPostData); + string strPostResult = PostJsonToIOT(ConfigDfn.strIOTAddress, strPostData, 10000); + MyBase.TraceWriteLine("EH3数据上传IOT完成,结果返回为:" + strPostResult); + if (strPostResult.Contains("成功")) + { + MyBase.TraceWriteLine("EH3数据上传IOT成功 ^_^"); + tmdal.InsertIOTUploadLog(strCarID, strPostData, true, labResultPercent.Text); + } + else + { + MyBase.TraceWriteLine("EH3数据上传IOT失败!"); + tmdal.InsertIOTUploadLog(strCarID, strPostData, false, labResultPercent.Text); + } + + #endregion IOT上传功能 + } + } + else + { + MyBase.TraceWriteLine("数据上传IOT功能未启用!"); + } + + #endregion Update Data To IOT + } + } + } + //else + //{ + // MyBase.TraceWriteLine("错误:AnalysisNextSenseEH3CSV函数中,检测EH3 CSV 路径不存在:" + ConfigDfn.strNextSenseCSVPath); + //} + } + catch (Exception ex) + { + MyBase.TraceWriteLine("AnalysisNextSenseCSV 函数分析异常:" + ex.ToString()); + } + } + + private void AnalysisNextSenseEHYCSV() //解析EHY 车型 + { + try + { + Invoke((MethodInvoker)(() => { lbCSVFiles.Items.Clear(); })); + FileInfo[] fileInfos = null; + if (Directory.Exists(ConfigDfn.strNextSenseCSVEHYPath)) + { + DirectoryInfo di = new DirectoryInfo(ConfigDfn.strNextSenseCSVEHYPath); + fileInfos = di.GetFiles("*.CSV"); + if (fileInfos.Count() >= 1) + { + MyBase.TraceWriteLine("存在EHY CSV文件,开始解析:"); + List listCSVTitleInfo = new List(); + string strCarID = ""; + foreach (FileInfo fi in fileInfos) + { + listCSVTitleInfo.Clear(); + ListPostIOTData.Clear(); + dtCSVContent.Clear(); + + string strCSVName = fi.FullName; + File.Copy(fi.FullName, ConfigDfn.strFileFolder + "\\NextSenseCSVBackup\\" + fi.Name, true); + MyBase.TraceWriteLine("Copy " + fi.FullName + " TO " + ConfigDfn.strFileFolder + "\\NextSenseCSVBackup\\" + fi.Name + " Done. 备份完成"); + Invoke((MethodInvoker)(() => + { + dgvMeasureContent.Rows.Clear(); + lbCSVFiles.Items.Add(fi.Name); + })); + + #region 解析EHY CSV报告 + + MyBase.TraceWriteLine("开始解析NextSense EHY CSV 报告:" + strCSVName); + Encoding encoding = GetType(strCSVName); + FileStream fs = new FileStream(strCSVName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + StreamReader sr = new StreamReader(fs, encoding); + //记录每次读取的一行记录 + string strLine = ""; + //记录每行记录中的各字段内容 + string[] aryLineContent = null; + + //逐行读取CSV中的数据 + int LineNum = 0; + //表格行数 + int dtRowCount = 0; + //超差个数 + double OutCount = 0; + //Ok个数 + double OKCount = 0; + //异常个数 + double RejectedCount = 0; + //合格率 + double FPYPercent = 0; + double dStrictTLower = 0; + double dStrictTUpper = 0; + double dLowerValue = 0; + double dUpperValue = 0; + double dExcepitonTLower = 0; + double dExceptionTUpper = 0; + double dMeasureValue = 0.0; + DataTable dt = null; + while ((strLine = sr.ReadLine()) != null) + { + LineNum++; + if (LineNum >= 3 & LineNum <= 16) + { + listCSVTitleInfo.Add(strLine); + } + if (LineNum == 10) + { + aryLineContent = strLine.Split(','); + MyBase.TraceWriteLine("解析出NextSense CSV中的VIN为:" + aryLineContent[1]); + strCarID = tmdal.SelectVINByCSVVIN(aryLineContent[1]); + MyBase.TraceWriteLine("通过CSV VIN从数据库中获取的完整VIN为:" + strCarID); + if (strCarID.ToLower().Contains("nofind")) + { + MyBase.TraceWriteLine("数据库中没有查找到VIN码,NoFind, +L 使用CSV码"); + labVIN.Text = "L" + aryLineContent[1]; + strCarID = "L" + aryLineContent[1]; + } + else + { + labVIN.Text = strCarID; + tmdal.DeleteOneTTempVIN(strCarID); + MyBase.TraceWriteLine("在数据库表TTempSaveVIN中删除该VIN:" + strCarID); + } + } + if (LineNum >= 19) + { + aryLineContent = strLine.Split(','); + ConfigDfn.strMeasureTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + double dNormalValue = 0.0d; + + dt = tmdal.SelectOneToleranceByCondition("EHY", aryLineContent[0], aryLineContent[1]); + if (dt.Rows.Count == 1) + { + dLowerValue = double.Parse(dt.Rows[0]["TolLower"].ToString()); + dUpperValue = double.Parse(dt.Rows[0]["TolUpper"].ToString()); + dNormalValue = (dLowerValue + dUpperValue) / 2; + dStrictTLower = CalculateStrictLowerTolerance(dLowerValue, dUpperValue); + dStrictTUpper = CalculateStrictUpperTolerance(dLowerValue, dUpperValue); + dExcepitonTLower = CalculateExceptionLowerTolerance(dLowerValue, dUpperValue); + dExceptionTUpper = CalculateExceptionUpperTolerance(dLowerValue, dUpperValue); + } + else + { + dStrictTLower = 0; + dStrictTUpper = 0; + dLowerValue = 0; + dUpperValue = 0; + MyBase.TraceWriteLine("EHY " + aryLineContent[0] + " " + aryLineContent[1] + " 查询数据获取公差带失败!数据库中数量不唯一或不存在,请检查公差带配置!"); + } + + if (aryLineContent[2].ToLower().Contains("inv")) + { + aryLineContent[2] = ""; + aryLineContent[4] = "ng2"; + } + else + { + dMeasureValue = double.Parse(aryLineContent[2]); + if (dMeasureValue >= dLowerValue && dMeasureValue <= dUpperValue) + { + aryLineContent[4] = "good"; + } + else if (dMeasureValue >= dStrictTLower && dMeasureValue <= dStrictTUpper) + { + aryLineContent[4] = "ng1"; + } + else if (dMeasureValue >= dExceptionTUpper || dMeasureValue <= dExcepitonTLower) + { + aryLineContent[4] = "ng3"; + aryLineContent[2] = ""; + } + else + { + aryLineContent[4] = "ng2"; + } + } + + //测量数据存储到table里 + dtCSVContent.Rows.Add(strCarID, "EHY", aryLineContent[0], aryLineContent[1], dNormalValue.ToString("F1"), dLowerValue.ToString("F1"), dUpperValue.ToString("F1"), aryLineContent[2], aryLineContent[4], DateTime.Now, ""); + string strMeasureResult = aryLineContent[4].ToLower(); + if (strMeasureResult.Contains("good") || strMeasureResult.Contains("best") || strMeasureResult.Contains("ng1")) + { + OKCount++; + aryLineContent[4] = "OK"; + } + else if (strMeasureResult.Contains("ng2")) + { + OutCount++; + aryLineContent[4] = "NG"; + } + else + { + RejectedCount++; + aryLineContent[4] = ""; + aryLineContent[2] = ""; + } + Invoke((MethodInvoker)(() => + { + dgvMeasureContent.Rows.Add(aryLineContent[0], aryLineContent[1], dNormalValue.ToString("F1"), dLowerValue.ToString("F1"), dUpperValue.ToString("F1"), aryLineContent[2], ConfigDfn.strMeasureTime, aryLineContent[4]); + })); + + + CheryIOTData cIOTData = new CheryIOTData(); + cIOTData.vin = strCarID; + cIOTData.gfNo = aryLineContent[1]; + cIOTData.pointNumber = aryLineContent[0]; + cIOTData.actualValue = aryLineContent[2]; + cIOTData.controlLine = dLowerValue.ToString("F1") + @"/" + dUpperValue.ToString("F1"); + if (strMeasureResult.Contains("good") || strMeasureResult.Contains("best") || strMeasureResult.Contains("ng1")) + { + cIOTData.measurementResult = "OK"; + } + else + { + cIOTData.measurementResult = "NG"; + } + ListPostIOTData.Add(cIOTData); + dtRowCount++; + Invoke((MethodInvoker)(() => + { + dgvMeasureContent.Rows[dtRowCount - 1].HeaderCell.Value = dtRowCount.ToString(); + })); + } + }//End While + sr.Close(); + fs.Close(); + tmdal.InsertTMeasureDatabyDataTable(dtCSVContent); + MyBase.TraceWriteLine("解析EHY数据完成,并将所有测量数据插入到数据库完毕。"); + MyBase.TraceWriteLine("解析NextSense EHY CSV 报告完毕!检查数量=" + dtRowCount.ToString()); + if (dtRowCount <= ConfigDfn.iMeasureItemsCount) + { + iCurrentMeasureItemsFailedCount++; + } + else + { + iCurrentMeasureItemsFailedCount = 0; + } + + if (iCurrentMeasureItemsFailedCount >= ConfigDfn.iFailedCarCount) + { + MyBase.TraceWriteLine("iCurrentMeasureItemsFailedCount=" + iCurrentMeasureItemsFailedCount.ToString() + "超过报警数量" + ConfigDfn.iFailedCarCount.ToString() + " ;给PLC发送报警10。"); + PlcObject.InsertWriteQueue(PlcSignalDfn.MeasureError, (byte)10); + } + #endregion 解析EHY CSV报告 + + #region 计算极差 + CalculateRange(strCarID, "EHY"); + Thread.Sleep(20); + DataTable dtAllRangeDate = tmdal.SelectRangeDatabyCarID(strCarID); + if (dtAllRangeDate.Rows.Count > 0) + { + foreach (DataRow row in dtAllRangeDate.Rows) + { + if (ConfigDfn.iIncludeRangeFlag == 1) + { + if (row.ItemArray[5].ToString().Contains("OK")) + { + OKCount++; + } + else + { + OutCount++; + } + } + Invoke((MethodInvoker)(() => + { + dgvMeasureContent.Rows.Add(row.ItemArray[2].ToString(), "G", "0", row.ItemArray[4].ToString().Substring(0, 3), row.ItemArray[4].ToString().Substring(4, 3), row.ItemArray[3].ToString(), ConfigDfn.strMeasureTime, row.ItemArray[5].ToString()); + })); + + } + } + + if (ConfigDfn.iIncludeRangeFlag == 1) + { + dtRowCount = dtRowCount + dtAllRangeDate.Rows.Count; + for (int i = 1; i <= dtRowCount; i++) + { + Invoke((MethodInvoker)(() => + { + dgvMeasureContent.Rows[i - 1].HeaderCell.Value = i.ToString(); + })); + } + MyBase.TraceWriteLine("计算合格率的时:包含极差计算项!"); + } + + #endregion 计算极差 + string strTargetRate = ""; + Invoke((MethodInvoker)(() => + { + #region 界面显示功能 + + labCarType.Text = "EHY"; + TMeasureResultModel tmrm = new TMeasureResultModel(); + labNGCount.Text = OutCount.ToString(); + labOKCount.Text = OKCount.ToString(); + labRejectCount.Text = RejectedCount.ToString(); + labMeaTime.Text = ConfigDfn.strMeasureTime; + labSumMeasureCount.Text = dtRowCount.ToString(); + FPYPercent = OKCount / (OKCount + OutCount); + if (FPYPercent >= ConfigDfn.dFPY) + { + labResultPercent.Text = Math.Round(FPYPercent * 100.00d, 2).ToString("F2") + "%"; + labResult.Text = "合格"; + labResultPercent.ForeColor = Color.LimeGreen; + labResult.ForeColor = Color.LimeGreen; + pbResult.Image = Resources.OK; + tmrm.Result = 1; + PlcObject.InsertWriteQueue(PlcSignalDfn.CMMResult, (byte)10); + } + else if (FPYPercent >= ConfigDfn.dFPY2 && FPYPercent < ConfigDfn.dFPY) + { + labResultPercent.Text = Math.Round(FPYPercent * 100.00d, 2).ToString("F2") + "%"; + labResult.Text = "合格"; + labResultPercent.ForeColor = Color.Yellow; + labResult.ForeColor = Color.Yellow; + pbResult.Image = Resources.OK; + tmrm.Result = 1; + PlcObject.InsertWriteQueue(PlcSignalDfn.CMMResult, (byte)20); + } + else + { + labResultPercent.Text = Math.Round(FPYPercent * 100.00d, 2).ToString("F2") + "%"; + labResult.Text = "不合格"; + labResultPercent.ForeColor = Color.Red; + labResult.ForeColor = Color.Red; + pbResult.Image = Resources.NG; + tmrm.Result = 2; + PlcObject.InsertWriteQueue(PlcSignalDfn.CMMResult, (byte)30); + } + xValues[0] = "合格 : " + OKCount.ToString(); + xValues[1] = "不合格 : " + OutCount.ToString(); + xValues[2] = "异常 : " + RejectedCount.ToString(); + yValues[0] = (int)OKCount; + yValues[1] = (int)OutCount; + yValues[2] = (int)RejectedCount; + chartResultPie.Series[0].Points.DataBindXY(xValues, yValues); + + strTargetRate = Math.Round(ConfigDfn.dFPY2 * 100.00d, 2).ToString("F2") + "%"; + + tmrm.CarID = strCarID; + tmrm.CarType = "EHY"; + tmrm.SumMeasureItems = dtRowCount; + tmrm.GoodMeasureItems = (int)OKCount; + tmrm.NoGoodMeasureItems = (int)OutCount; + tmrm.RejectMeasureItems = (int)RejectedCount; + tmrm.FPY = FPYPercent.ToString("F4"); + tmrm.Remark = ""; + tmrm.MeasureDate = ConfigDfn.strMeasureTime; + tmdal.InsertTMeasureResult(tmrm); + MyBase.TraceWriteLine("将总结果插入数据库完毕。"); + MyBase.TraceWriteLine("全部插入解析完毕,删除文件:" + fi.Name); + fi.Delete(); + + dgvMeasureContent.Rows.Add(); + dgvMeasureContent.Rows[dgvMeasureContent.Rows.Count - 1].Cells["MResult"].Value = (dtRowCount - OutCount - RejectedCount).ToString() + "/" + dtRowCount.ToString(); + this.dgvMeasureContent.Rows[dgvMeasureContent.Rows.Count - 1].DefaultCellStyle.ForeColor = Color.White; + if (dgvMeasureContent.Rows.Count > 0) + { + SetdgvRowBgColor(dgvMeasureContent); + for (int i = 0; i < dgvMeasureContent.Rows.Count; i++) + { + //if (dgvMeasureContent.Rows[i].Cells["MResult"].Value.ToString().ToLower().Contains("ok")) + //{ + // dgvMeasureContent.Rows[i].DefaultCellStyle.BackColor = Color.Orange; + //} + if (dgvMeasureContent.Rows[i].Cells["MResult"].Value.ToString().ToLower().Contains("ng")) + { + dgvMeasureContent.Rows[i].DefaultCellStyle.BackColor = Color.Orange; + } + else if (string.IsNullOrEmpty(dgvMeasureContent.Rows[i].Cells["MResult"].Value.ToString())) + { + dgvMeasureContent.Rows[i].DefaultCellStyle.BackColor = Color.Red; + } + else + { + } + } + } + + #endregion 界面显示功能 + })); + + + if (ConfigDfn.iCreateReportFlag == 1) + { + GenUserReportCSV(strCarID, listCSVTitleInfo, dtAllRangeDate, FPYPercent); + } + else + { + MyBase.TraceWriteLine("iCreateReportFlag=0 : EHY数据生成报告功能未启用!"); + } + + #region Update Data To IOT + + if (ConfigDfn.iStartIOTFlag == 1) + { + bool bVINMeasuedFlag = tmdal.CheckVINExistInDB(strCarID); + if (bVINMeasuedFlag) + { + MyBase.TraceWriteLine("VIN:" + strCarID + " 该VIN码已经在数据库中存在了,说明已经测量过了,不再进行IOT数据上传操作。"); + } + else + { + // 上传 IOT功能 + if (dtAllRangeDate.Rows.Count > 0) + { + foreach (DataRow row in dtAllRangeDate.Rows) + { + CheryIOTData cIOTData = new CheryIOTData(); + cIOTData.vin = strCarID; + cIOTData.gfNo = "G"; + cIOTData.pointNumber = row.ItemArray[2].ToString(); + cIOTData.actualValue = row.ItemArray[3].ToString(); + cIOTData.controlLine = row.ItemArray[4].ToString(); + cIOTData.measurementResult = row.ItemArray[5].ToString(); + if (cIOTData.measurementResult.ToUpper().Contains("NG")) + { + if (!string.IsNullOrEmpty(cIOTData.actualValue) && !cIOTData.actualValue.ToLower().Contains("inv")) //避免为空的情况 + { + dLowerValue = double.Parse(row.ItemArray[4].ToString().Substring(0, 3)); + dUpperValue = double.Parse(row.ItemArray[4].ToString().Substring(4, 3)); + dStrictTLower = CalculateStrictLowerTolerance(dLowerValue, dUpperValue); + dStrictTUpper = CalculateStrictUpperTolerance(dLowerValue, dUpperValue); + double dValue = double.Parse(row.ItemArray[3].ToString()); + if (dValue > dStrictTLower && dValue < dStrictTUpper) + { + cIOTData.measurementResult = "OK"; + } + } + } + ListPostIOTData.Add(cIOTData); + } + } + string strGapList = JsonHelper.ObjectToJson(ListPostIOTData); + string strCaliResult = "OK"; + if (labResult.Text == "合格") + { + strCaliResult = "OK"; + } + else + { + strCaliResult = "NG"; + } + string strPostData = "{\"serno\":\"" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "\",\"requestData\":[{\"vin\":\"" + strCarID + "\",\"model\":\"EHY\",\"equipmentNo\":\"" + ConfigDfn.strEquipNo + "\",\"equipmentName\":\"" + ConfigDfn.strEquipName + "\",\"calibrationResult\":\"" + strCaliResult + "\",\"detectionTime\":\"" + ConfigDfn.strMeasureTime + "\",\"targetRate\":\"" + strTargetRate + "\",\"rate\":\"" + labResultPercent.Text + "\",\"GapList\":" + strGapList + "}]}"; + + MyBase.TraceWriteLine("Update To IOT Data Content: " + strPostData); + string strPostResult = PostJsonToIOT(ConfigDfn.strIOTAddress, strPostData, 10000); + MyBase.TraceWriteLine("EHY数据上传IOT完成,结果返回为:" + strPostResult); + if (strPostResult.Contains("成功")) + { + MyBase.TraceWriteLine("EHY数据上传IOT成功 ^_^"); + + tmdal.InsertIOTUploadLog(strCarID, strPostData, true, labResultPercent.Text); + } + else + { + MyBase.TraceWriteLine("EHY数据上传IOT失败!"); + + tmdal.InsertIOTUploadLog(strCarID, strPostData, false, labResultPercent.Text); + } + } + } + else + { + MyBase.TraceWriteLine("EHY数据上传IOT功能未启用!"); + } + + #endregion Update Data To IOT + } + } + } + //else + //{ + // MyBase.TraceWriteLine("错误:AnalysisNextSenseEHYCSV 函数中,检测EHY CSV 路径不存在:" + ConfigDfn.strNextSenseCSVEHYPath); + //} + } + catch (Exception ex) + { + MyBase.TraceWriteLine("AnalysisNextSenseEHYCSV 函数分析异常:" + ex.ToString()); + } + } + + private void AnalysisNextSenseSelfMeasureCSV() + { + try + { + Invoke((MethodInvoker)(() => + { + lbCSVFiles.Items.Clear(); + })); + + FileInfo[] fileInfos = null; + if (Directory.Exists(ConfigDfn.strNextSenseSelfMeasurePath)) + { + DirectoryInfo di = new DirectoryInfo(ConfigDfn.strNextSenseSelfMeasurePath); + fileInfos = di.GetFiles("*.CSV"); + if (fileInfos.Count() >= 1) + { + MyBase.TraceWriteLine("存在NS 自检报告 CSV文件,开始解析:"); + List listCSVTitleInfo = new List(); + string strCarID = "SelfMeasure" + DateTime.Now.ToString("yyyyMMddHHmmss"); + foreach (FileInfo fi in fileInfos) + { + listCSVTitleInfo.Clear(); + ListPostIOTData.Clear(); + dtCSVContent.Clear(); + + string strCSVName = fi.FullName; + File.Copy(fi.FullName, ConfigDfn.strFileFolder + "\\NextSenseCSVBackup\\" + fi.Name, true); + MyBase.TraceWriteLine("Copy " + fi.FullName + " TO " + ConfigDfn.strFileFolder + "\\NextSenseCSVBackup\\" + fi.Name + " Done. 备份完成"); + + Invoke((MethodInvoker)(() => + { + dgvMeasureContent.Rows.Clear(); + lbCSVFiles.Items.Add(fi.Name); + })); + #region 解析NextSense自检CSV报告 + + MyBase.TraceWriteLine("开始解析NextSense 自检报告 CSV 报告:" + strCSVName); + Encoding encoding = GetType(strCSVName); + FileStream fs = new FileStream(strCSVName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + StreamReader sr = new StreamReader(fs, encoding); + //记录每次读取的一行记录 + string strLine = ""; + //记录每行记录中的各字段内容 + string[] aryLineContent = null; + + //逐行读取CSV中的数据 + int LineNum = 0; + //表格行数 + int dtRowCount = 0; + + while ((strLine = sr.ReadLine()) != null) + { + LineNum++; + if (LineNum >= 1 & LineNum <= 17) + { + listCSVTitleInfo.Add(strLine); + } + if (LineNum >= 19) + { + aryLineContent = strLine.Split(','); + ConfigDfn.strMeasureTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + + if (aryLineContent[2].ToLower().Contains("inv")) + { + aryLineContent[2] = ""; //当为inv ,内容为空 + aryLineContent[10] = "NG"; + } + string strMeasPointName = ""; + if (aryLineContent[0].ToUpper().Contains("L")) + { + strMeasPointName = "L-ZJ1"; + } + else + { + strMeasPointName = "R-ZJ1"; + } + //测量数据存储到table里 + dtCSVContent.Rows.Add(strCarID, "SelfMeasure", strMeasPointName, aryLineContent[1], aryLineContent[4], aryLineContent[8], aryLineContent[9], aryLineContent[2], aryLineContent[10], DateTime.Now, ""); + + Invoke((MethodInvoker)(() => + { + dgvMeasureContent.Rows.Add(strMeasPointName, aryLineContent[1], aryLineContent[4], aryLineContent[8], aryLineContent[9], aryLineContent[2], ConfigDfn.strMeasureTime, aryLineContent[10]); + + dtRowCount++; + dgvMeasureContent.Rows[dtRowCount - 1].HeaderCell.Value = dtRowCount.ToString(); + })); + } + }//End While + sr.Close(); + fs.Close(); + + MyBase.TraceWriteLine("解析NextSense 自检报告完毕!检查数量=" + dtRowCount.ToString()); + + Invoke((MethodInvoker)(() => + { + labCarType.Text = "自检报告"; + })); + fi.Delete(); + #endregion 解析NextSense自检CSV报告 + + if (ConfigDfn.iCreateReportFlag == 1) + { + #region 解析完报告后,重新生成客户模板报告 + + MyBase.TraceWriteLine("开始生成客户所需要的CSV格式文件:"); + string targetFilePath = strSaveReprotPath + DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + strCarID + ".csv"; //wsp 后期还要再改 + + // 创建临时路径,为应用程序目录\ReportBackup 路径下 + + string backupDirectoryPath = Application.StartupPath + "\\ReportBackup"; + + if (!Directory.Exists(backupDirectoryPath)) + { + Directory.CreateDirectory(backupDirectoryPath); + //日志 + MyBase.TraceWriteLine("创建ReportBackup文件夹完毕,路径为:" + backupDirectoryPath); + } + + // 构造备份文件路径,\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + + // strCarID + ".csv" + string backupFilePath = backupDirectoryPath + "\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + strCarID + ".csv"; + + // 记录备份文件路径 + MyBase.TraceWriteLine("客户自检报告备份路径为:" + backupFilePath); + + StringBuilder sb = new StringBuilder(); + //添加表头 + sb.Append("Measurement Info Name"); + sb.Append(","); + sb.Append("Measurement Info"); + sb.AppendLine(); + sb.Append("Date_Time"); + sb.Append(","); + sb.Append(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); + sb.AppendLine(); + for (int i = 2; i < listCSVTitleInfo.Count - 1; i++) + { + if (listCSVTitleInfo[i].Contains("prodnum")) + { + listCSVTitleInfo[i] = listCSVTitleInfo[i].Replace("prodnum,", "Part_ident," + DateTime.Now.ToString("yyyyMMdd")); + } + + sb.Append(listCSVTitleInfo[i]); + sb.AppendLine(); + } + sb.AppendLine(); + sb.AppendLine(); + sb.AppendLine(); + sb.AppendLine(); + sb.AppendLine(); + //添加测量数据 + sb.Append("Characteristic"); + sb.Append(","); + sb.Append("Extension"); + sb.Append(","); + sb.Append("Measured_Value"); + sb.AppendLine(); + foreach (DataRow row in dtCSVContent.Rows) + { + sb.Append(row.ItemArray[2]); + sb.Append(","); + sb.Append(row.ItemArray[3]); + sb.Append(","); + sb.Append(row.ItemArray[7]); + sb.AppendLine(); + } + sb.AppendLine(); + // 将数据写入CSV文件 + File.WriteAllText(backupFilePath, sb.ToString()); + MyBase.TraceWriteLine("客户自检报告生成完毕,备份路径为:" + targetFilePath); + + // 尝试进行复制到 目标路径 往目标路径copy该文件,并记录是否成功 + try + { + File.Copy(backupFilePath, targetFilePath, true); + + // 记录上传情况 + bool isUploaded = true; + // 记录输入情况 strCarID、目标路径、备份路径、是否上传成功 + MyBase.TraceWriteLine($"车号: {strCarID} | 目标路径: {targetFilePath} | 备份路径: {backupDirectoryPath} | 上传成功: {isUploaded}"); + tmdal.InsertCsvReportUploadLog(strCarID, targetFilePath, backupDirectoryPath, isUploaded); + } + catch (Exception ex) + { + MyBase.TraceWriteLine("客户自检报告复制异常:" + ex.Message); + + // 记录上传情况 + bool isUploaded = false; + MyBase.TraceWriteLine($"车号: {strCarID} | 目标路径: {targetFilePath} | 备份路径: {backupDirectoryPath} | 上传成功: {isUploaded}"); + tmdal.InsertCsvReportUploadLog(strCarID, targetFilePath, backupDirectoryPath, isUploaded); + } + + #endregion 解析完报告后,重新生成客户模板报告 + } + else + { + MyBase.TraceWriteLine("iCreateReportFlag=0 : 数据生成报告功能未启用!"); + } + } + } + } + } + catch (Exception ex) + { + MyBase.TraceWriteLine("AnalysisNextSenseSelfMeasureCSV 函数分析异常:" + ex.ToString()); + } + } + + public void GenUserReportCSV(string strCarID, List listCSVTitleInfo, DataTable dtAllRangeDate, double FPYPercent) + { + #region 解析完报告后,重新生成客户模板报告 + + // 目的路径 + string targetFilePath = strSaveReprotPath + DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + strCarID + ".csv"; //wsp 后期还要再改 + + // 新建一个备份路径,应用程序根目录\ReportBackup + string backupFolderPath = Application.StartupPath + "\\ReportBackup"; + if (!Directory.Exists(backupFolderPath)) + { + Directory.CreateDirectory(backupFolderPath); + //日志 + MyBase.TraceWriteLine("创建ReportBackup文件夹完毕,路径为:" + backupFolderPath); + } + + // 构造备份文件路径,\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + strCarID + ".csv" + string backupFilePath = backupFolderPath + "\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + strCarID + ".csv"; + + // 记录备份文件路径 + MyBase.TraceWriteLine("客户自检报告备份路径为:" + backupFilePath); + + string strWithoutLCarVin = strCarID.Substring(1); + StringBuilder sb = new StringBuilder(); + //添加表头 + sb.Append("Measurement Info Name"); + sb.Append(","); + sb.Append("Measurement Info"); + sb.AppendLine(); + sb.Append("Date_Time"); + sb.Append(","); + sb.Append(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); + sb.AppendLine(); + for (int i = 0; i < listCSVTitleInfo.Count; i++) + { + if (listCSVTitleInfo[i].Contains("prodnum")) + { + listCSVTitleInfo[i] = listCSVTitleInfo[i].Replace("prodnum", "Part_ident"); + } + if (listCSVTitleInfo[i].Contains(strWithoutLCarVin)) + { + listCSVTitleInfo[i] = listCSVTitleInfo[i].Replace(strWithoutLCarVin, strCarID); + } + sb.Append(listCSVTitleInfo[i]); + sb.AppendLine(); + } + sb.AppendLine(); + sb.AppendLine(); + sb.AppendLine(); + sb.AppendLine(); + sb.AppendLine(); + //添加测量数据 + sb.Append("Characteristic"); + sb.Append(","); + sb.Append("Extension"); + sb.Append(","); + sb.Append("Measured_Value"); + sb.AppendLine(); + foreach (DataRow row in dtCSVContent.Rows) + { + sb.Append(row.ItemArray[2]); + sb.Append(","); + sb.Append(row.ItemArray[3]); + sb.Append(","); + sb.Append(row.ItemArray[7]); + sb.AppendLine(); + } + if (dtAllRangeDate.Rows.Count > 0) + { + foreach (DataRow row in dtAllRangeDate.Rows) + { + sb.Append(row.ItemArray[2]); + sb.Append(","); + sb.Append("G"); + sb.Append(","); + sb.Append(row.ItemArray[3]); + sb.AppendLine(); + } + } + sb.Append("POP"); + sb.Append(","); + sb.Append("P"); + sb.Append(","); + sb.Append(Math.Round(FPYPercent * 100.00d, 2).ToString("F2")); + sb.AppendLine(); + // 将数据写入CSV文件 + File.WriteAllText(backupFilePath, sb.ToString()); + // 记录日志,说明备份成功 + MyBase.TraceWriteLine("客户 csv报告备份完毕,路径为:" + backupFilePath); + + // 往目标路径copy该文件,并记录是否成功 + try + { + File.Copy(backupFilePath, targetFilePath, true); + + // 记录上传情况 + bool isUploaded = true; + + // 记录输入情况 strCarID、目标路径、备份路径、是否上传成功 + MyBase.TraceWriteLine($"车号: {strCarID} | 目标路径: {targetFilePath} | 备份路径: {backupFilePath} | 上传成功: {isUploaded}"); + + tmdal.InsertCsvReportUploadLog(strCarID, targetFilePath, backupFolderPath, isUploaded); + } + catch (Exception ex) + { + MyBase.TraceWriteLine("客户csv报告复制异常:" + ex.Message); + + // 记录上传情况 + bool isUploaded = false; + MyBase.TraceWriteLine($"车号: {strCarID} | 目标路径: {targetFilePath} | 备份路径: {backupFilePath} | 上传成功: {isUploaded}"); + tmdal.InsertCsvReportUploadLog(strCarID, targetFilePath, backupFolderPath, isUploaded); + } + + #endregion 解析完报告后,重新生成客户模板报告 + } + + private void UploadIOTData(string strCarID, DataTable dtAllRangeDate, string strTargetRate) + { + double dStrictTLower = 0; + double dStrictTUpper = 0; + double dLowerValue = 0; + double dUpperValue = 0; + bool bVINMeasuedFlag = tmdal.CheckVINExistInDB(strCarID); + if (bVINMeasuedFlag) + { + MyBase.TraceWriteLine("VIN:" + strCarID + " 该VIN码已经在数据库中存在了,说明已经测量过了,不再进行IOT数据上传操作。"); + } + else + { + // 上传 IOT功能 + if (dtAllRangeDate.Rows.Count > 0) + { + foreach (DataRow row in dtAllRangeDate.Rows) + { + CheryIOTData cIOTData = new CheryIOTData(); + cIOTData.vin = strCarID; + cIOTData.gfNo = "G"; + cIOTData.pointNumber = row.ItemArray[2].ToString(); + cIOTData.actualValue = row.ItemArray[3].ToString(); + cIOTData.controlLine = row.ItemArray[4].ToString(); + cIOTData.measurementResult = row.ItemArray[5].ToString(); + if (cIOTData.measurementResult.ToUpper().Contains("NG")) + { + if (!string.IsNullOrEmpty(cIOTData.actualValue) && !cIOTData.actualValue.ToLower().Contains("inv")) // 2025.08.27 修复NG数据实际值为空时,上传IOT报错问题 + { + dLowerValue = double.Parse(row.ItemArray[4].ToString().Substring(0, 3)); + dUpperValue = double.Parse(row.ItemArray[4].ToString().Substring(4, 3)); + dStrictTLower = CalculateStrictLowerTolerance(dLowerValue, dUpperValue); + dStrictTUpper = CalculateStrictUpperTolerance(dLowerValue, dUpperValue); + double dValue = double.Parse(row.ItemArray[3].ToString()); + if (dValue > dStrictTLower && dValue < dStrictTUpper) + { + cIOTData.measurementResult = "OK"; + } + } + } + ListPostIOTData.Add(cIOTData); + } + } + string strGapList = JsonHelper.ObjectToJson(ListPostIOTData); + string strCaliResult = "OK"; + if (labResult.Text == "合格") + { + strCaliResult = "OK"; + } + else + { + strCaliResult = "NG"; + } + string strPostData = "{\"serno\":\"" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "\",\"requestData\":[{\"vin\":\"" + strCarID + "\",\"model\":\"EHY\",\"equipmentNo\":\"" + ConfigDfn.strEquipNo + "\",\"equipmentName\":\"" + ConfigDfn.strEquipName + "\",\"calibrationResult\":\"" + strCaliResult + "\",\"detectionTime\":\"" + ConfigDfn.strMeasureTime + "\",\"targetRate\":\"" + strTargetRate + "\",\"rate\":\"" + labResultPercent.Text + "\",\"GapList\":" + strGapList + "}]}"; + MyBase.TraceWriteLine("Update To IOT Data Content: " + strPostData); + string strPostResult = PostJsonToIOT(ConfigDfn.strIOTAddress, strPostData, 10000); + MyBase.TraceWriteLine("EHY数据上传IOT完成,结果返回为:" + strPostResult); + if (strPostResult.Contains("成功")) + { + MyBase.TraceWriteLine("EHY数据上传IOT成功 ^_^"); + } + else + { + MyBase.TraceWriteLine("EHY数据上传IOT失败!"); + } + } + } + + private void CalculateRange(string strVIN, string strCarType) + { + MyBase.TraceWriteLine(strVIN + " " + strCarType + "开始计算极差:============"); + tmdal.DeleteRangeData(strVIN); + dtRangeData.Clear(); + DataTable dtRange = tmdal.SelectRangeByCarType(strCarType); + if (dtRange != null && dtRange.Rows.Count > 0) + { + string strRangeValue = ""; + string strRangeLowUpp = ""; + string strRangeResult = ""; + DateTime dtTime = DateTime.Now; + string strRemark = ""; + for (int i = 0; i < dtRange.Rows.Count; i++) + { + string[] strArrRangePoint = dtRange.Rows[i]["RangePoint"].ToString().Split(','); + double[] dMeasureData = new double[strArrRangePoint.Length]; + int iCalcCount = 0; + for (int j = 0; j < strArrRangePoint.Length; j++) + { + string strMeasureValue = tmdal.SelectOneMeasureValueByCondition(strVIN, strArrRangePoint[j].Substring(0, 4)); + + if (string.IsNullOrEmpty(strMeasureValue) || strMeasureValue.ToLower().Contains("inv")) + { + strRangeValue = ""; + strRangeResult = "NG"; + MyBase.TraceWriteLine(strArrRangePoint[j] + " G 查询的测量值为inv"); + break; + } + else if (strMeasureValue.ToLower().Contains("nofind")) + { + strRangeValue = ""; + strRangeResult = "NG"; + MyBase.TraceWriteLine(strArrRangePoint[j] + " G 查询的测量值为no find"); + break; + } + else + { + dMeasureData[j] = Convert.ToDouble(strMeasureValue); + iCalcCount++; + } + } + + //iCalcCount 的作用就是确保只有全部测点都有效时才计算极差,否则提前退出。 + if (iCalcCount == strArrRangePoint.Length) + { + double dMax = dMeasureData.Max(); + double dMin = dMeasureData.Min(); + double dRangeData = dMax - dMin; + strRangeValue = dRangeData.ToString("F1"); + if (dRangeData >= Convert.ToDouble(dtRange.Rows[i]["RangeLower"]) && dRangeData <= Convert.ToDouble(dtRange.Rows[i]["RangeUpper"])) + { + strRangeResult = "OK"; + } + else + { + strRangeResult = "NG"; + } + } + strRangeLowUpp = dtRange.Rows[i]["RangeLower"].ToString() + @"/" + dtRange.Rows[i]["RangeUpper"].ToString(); + dtRangeData.Rows.Add(strVIN, dtRange.Rows[i]["RangeName"].ToString(), strRangeValue, strRangeLowUpp, strRangeResult, dtTime, strRemark); + } + tmdal.InsertTRangeDatabyDataTable(dtRangeData); + MyBase.TraceWriteLine(strVIN + " " + strCarType + "计算极差完成,并插入数据库:============"); + } + } + + public string PostJsonToIOT(string url, string jsonData, int? timeout = null) + { + try + { + HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url); + + if (null != timeout && 0 != timeout) + { + req.Timeout = timeout.Value; + } + Encoding encoding = Encoding.UTF8; + byte[] bs = Encoding.UTF8.GetBytes(jsonData); + string responseData; + req.Method = "POST"; + req.ContentType = "application/json"; + req.ContentLength = bs.Length; + using (Stream reqStream = req.GetRequestStream()) + { + reqStream.Write(bs, 0, bs.Length); + reqStream.Close(); + } + using (HttpWebResponse response = (HttpWebResponse)req.GetResponse()) + { + using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding)) + { + responseData = reader.ReadToEnd(); + } + } + return responseData; + } + catch (Exception ex) + { + return "Error: " + ex.ToString(); + } + } + + /// 通过给定的文件流,判断文件的编码类型 + /// 文件流 + /// 文件的编码类型 + public static Encoding GetType(FileStream fs) + { + byte[] Unicode = new byte[] { 0xFF, 0xFE, 0x41 }; + byte[] UnicodeBIG = new byte[] { 0xFE, 0xFF, 0x00 }; + byte[] UTF8 = new byte[] { 0xEF, 0xBB, 0xBF }; //带BOM + System.Text.Encoding reVal = System.Text.Encoding.Default; + + System.IO.BinaryReader r = new System.IO.BinaryReader(fs, System.Text.Encoding.Default); + int i; + int.TryParse(fs.Length.ToString(), out i); + byte[] ss = r.ReadBytes(i); + if (IsUTF8Bytes(ss) || (ss[0] == 0xEF && ss[1] == 0xBB && ss[2] == 0xBF)) + { + reVal = System.Text.Encoding.UTF8; + } + else if (ss[0] == 0xFE && ss[1] == 0xFF && ss[2] == 0x00) + { + reVal = System.Text.Encoding.BigEndianUnicode; + } + else if (ss[0] == 0xFF && ss[1] == 0xFE && ss[2] == 0x41) + { + reVal = System.Text.Encoding.Unicode; + } + r.Close(); + return reVal; + } + + /// 判断是否是不带 BOM 的 UTF8 格式 + /// + /// + private static bool IsUTF8Bytes(byte[] data) + { + int charByteCounter = 1; //计算当前正分析的字符应还有的字节数 + byte curByte; //当前分析的字节. + for (int i = 0; i < data.Length; i++) + { + curByte = data[i]; + if (charByteCounter == 1) + { + if (curByte >= 0x80) + { + //判断当前 + while (((curByte <<= 1) & 0x80) != 0) + { + charByteCounter++; + } + //标记位首位若为非0 则至少以2个1开始 如:110XXXXX...........1111110X  + if (charByteCounter == 1 || charByteCounter > 6) + { + return false; + } + } + } + else + { + //若是UTF-8 此时第一位必须为1 + if ((curByte & 0xC0) != 0x80) + { + return false; + } + charByteCounter--; + } + } + if (charByteCounter > 1) + { + throw new Exception("非预期的byte格式"); + } + return true; + } + + public Encoding GetType(string FileName) + { + FileStream fs = new FileStream(FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + Encoding er = GetType(fs); + fs.Close(); + return er; + } + + private void testIotUpload() + { + // 修复极差 计算问题 + //LNNBBDEC7SDF49695 + //string strVIN = "LNNBBDEC5SDF49694"; + // string strCarType = "EHY"; + //CalculateRange(strVIN, strCarType); + + //修复IOt上传问题 + string strCarID = "LNNBDDEF4SDF49707"; + DataTable dtAllRangeDate = tmdal.SelectRangeDatabyCarID(strCarID); + string strTargetRate = "97.00%"; + UploadIOTData(strCarID, dtAllRangeDate, strTargetRate); + } + + #endregion 解析Nextsense CSV文件功能 + + #region Home Page + + /// + /// 设置DataGridView各行变色 + /// + /// DataGridView + public void SetdgvRowBgColor(DataGridView dgv) + { + if (dgv.Rows.Count > 0) + { + foreach (DataGridViewRow item in dgv.Rows) + { + if (item.Index % 2 == 0) + { + item.DefaultCellStyle.BackColor = Color.FromArgb(19, 46, 53); + } + else + { + item.DefaultCellStyle.BackColor = Color.FromArgb(27, 60, 68); + } + } + } + } + + //TODO: + + #endregion Home Page + + #region Search Data + + #region datagridview分页功能 + + /// + /// LoadPage方法 + /// + private void LoadPage() + { + if (currentPage < 1) currentPage = 1; + if (currentPage > pageCount) currentPage = pageCount; + + int beginRecord; //开始指针 + int endRecord; //结束指针 + DataTable dtTemp; + dtTemp = PageTable.Clone();//Clone方法只会复制DataTable的结构(列定义),而不会复制数据行的引用。 + + beginRecord = pageSize * (currentPage - 1); + if (currentPage == 1) beginRecord = 0; + endRecord = pageSize * currentPage; + + if (currentPage == pageCount) endRecord = recordCount; + for (int i = beginRecord; i < endRecord; i++) + { + // 使用ImportRow方法将源PageTable的行导入到目标dtTemp + dtTemp.ImportRow(PageTable.Rows[i]); + } + + dgvSelectMeasureData.Rows.Clear(); + + for (int i = 0; i < dtTemp.Rows.Count; i++) + { + dgvSelectMeasureData.Rows.Add(new object[] { dtTemp.Rows[i][0], dtTemp.Rows[i][1], dtTemp.Rows[i][2], dtTemp.Rows[i][3], dtTemp.Rows[i][4], dtTemp.Rows[i][5], dtTemp.Rows[i][6], dtTemp.Rows[i][7], dtTemp.Rows[i][8] }); + } + SetdgvRowBgColor(dgvSelectMeasureData); + for (int i = 0; i < dgvSelectMeasureData.Rows.Count; i++) + { + string strResult = dgvSelectMeasureData.Rows[i].Cells["MeasureItemResult"].Value.ToString(); + if (strResult.ToLower().Contains("ng")) + { + //dgvSelectMeasureData.Rows[i].Cells["MeasureItemResult"].Style.ForeColor = Color.Orange; + dgvSelectMeasureData.Rows[i].DefaultCellStyle.BackColor = Color.Orange; + } + if (strResult.ToLower().Contains("rej")) + { + dgvSelectMeasureData.Rows[i].Cells["MeasureItemResult"].Style.ForeColor = Color.Red; + } + } + labCurrentPage.Text = "当前页:" + currentPage.ToString(); //当前页 + labSumPages.Text = "共 " + pageCount.ToString() + " 页";//总页数 + labSumRecorders.Text = "总共 " + recordCount.ToString() + " 条记录";//总记录数 + } + + private void rbtnFirtstPage_Click(object sender, EventArgs e) + { + if (currentPage == 1) + { return; } + currentPage = 1; + LoadPage(); + } + + private void rbtnPrevPage_Click(object sender, EventArgs e) + { + if (currentPage == 1) + { return; } + currentPage--; + LoadPage(); + } + + private void rbtnNextPage_Click(object sender, EventArgs e) + { + if (currentPage == pageCount) + { return; } + currentPage++; + LoadPage(); + } + + private void rbtnLastPage_Click(object sender, EventArgs e) + { + if (currentPage == pageCount) + { return; } + currentPage = pageCount; + LoadPage(); + } + + private void rddlPageRecorderCount_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e) + { + pageSize = int.Parse(rddlPageRecorderCount.Text.Trim()); + //PageSorter(); + } + + #endregion datagridview分页功能 + + private void rbtnSearchMeaserData_Click(object sender, EventArgs e) + { + dgvFPYResult.Visible = false; + chartFPYLine.Visible = false; + rbtnExportCSVReport.Visible = false; + string strStartTime = rdtpStartTime.Value.ToString("yyyy-MM-dd") + " 00:00:00"; + string strEndTime = rdtpEndTime.Value.ToString("yyyy-MM-dd") + " 23:59:59"; + string strCarID = rtbPartID.Text.Trim(); + PageTable.Clear(); + PageTable = tmdal.SelectTMeasureDataByCarIDAndTime(strCarID, strStartTime, strEndTime); + if (PageTable.Rows.Count > 0) + { + recordCount = PageTable.Rows.Count; //记录总行数 + pageCount = (recordCount / pageSize); + if ((recordCount % pageSize) > 0) + { + pageCount++; + } + + //默认第一页 + currentPage = 1; + + LoadPage();//调用加载数据的方法 + dgvSelectMeasureData.Visible = true; + rbtnExportCSVReport.Visible = true; + pnlPage.Visible = true; + labSearchResult.Visible = false; + pnlPage.Visible = true; + } + else + { + dgvSelectMeasureData.Visible = false; + labSearchResult.Visible = true; + rbtnExportCSVReport.Visible = false; + pnlPage.Visible = false; + } + } + + private void rbtSelectFPY_Click(object sender, EventArgs e) + { + dgvSelectMeasureData.Visible = false; + rbtnExportCSVReport.Visible = false; + pnlPage.Visible = false; + string strStartTime = rdtpStartTime.Value.ToString("yyyy-MM-dd") + " 00:00:00"; + string strEndTime = rdtpEndTime.Value.ToString("yyyy-MM-dd") + " 23:59:59"; + string strCarID = rtbPartID.Text.Trim(); + DataTable dtFPY = new DataTable(); + dtFPY = tmdal.SelectTMeasureResultByTime(strCarID, strStartTime, strEndTime); + if (dtFPY.Rows.Count > 0) + { + dgvFPYResult.Visible = true; + labSearchResult.Visible = false; + rbtnExportCSVReport.Visible = true; + chartFPYLine.Visible = true; + dgvFPYResult.DataSource = dtFPY; + SetdgvRowBgColor(dgvFPYResult); + for (int i = 0; i < dgvFPYResult.Rows.Count; i++) + { + if (dgvFPYResult.Rows[i].Cells["SMResult"].Value.ToString().ToLower().Contains("不合格")) + { + dgvFPYResult.Rows[i].Cells["SMResult"].Style.ForeColor = Color.Red; + } + } + + #region 合格率折线图 + + //合格率折线图 + string[] strXDate = new string[dtFPY.Rows.Count]; + double[] dFPYResult = new double[dtFPY.Rows.Count]; + for (int i = 0; i < dtFPY.Rows.Count; i++) + { + strXDate[i] = dtFPY.Rows[i]["CarID"].ToString(); + } + for (int i = 0; i < dtFPY.Rows.Count; i++) + { + double dResult = double.Parse(dtFPY.Rows[i]["FPY"].ToString()); + dFPYResult[i] = dResult * 100.00; + } + chartFPYLine.ChartAreas[0].AxisX.LabelStyle.Angle = -50; //X轴标签倾斜角度设置 + chartFPYLine.ChartAreas[0].AxisY.LabelStyle.Format = "{0:F2}" + "%"; //设置Y轴值的格式化 带% + chartFPYLine.Series[0].Label = "#VAL%"; //设置显示Y的值 + chartFPYLine.Series[0].LabelForeColor = Color.White; + chartFPYLine.Series[0].ToolTip = "车身编号 : #VALX \r\n合格率 : #VAL%"; //鼠标移动到对应点显示数值 + chartFPYLine.Series[0].Points.DataBindXY(strXDate, dFPYResult); + + #endregion 合格率折线图 + } + else + { + dgvFPYResult.Visible = false; + labSearchResult.Visible = true; + rbtnExportCSVReport.Visible = false; + chartFPYLine.Visible = false; + } + } + + public static void ExportdgvDataToCsv(DataGridView dataGridView, string filePath) + { + StringBuilder sb = new StringBuilder(); + + // 添加列标题 + foreach (DataGridViewColumn column in dataGridView.Columns) + { + sb.Append(column.HeaderText); + sb.Append(","); + } + sb.Remove(sb.Length - 1, 1); + sb.AppendLine(); + + // 添加行数据 + foreach (DataGridViewRow row in dataGridView.Rows) + { + foreach (DataGridViewCell cell in row.Cells) + { + sb.Append(cell.Value); + sb.Append(","); + } + sb.Remove(sb.Length - 1, 1); + sb.AppendLine(); + } + + // 将数据写入CSV文件 + File.WriteAllText(filePath, sb.ToString()); + } + + public static void ExportDataTableDataToCsv(DataTable dt, string filePath) + { + StringBuilder sb = new StringBuilder(); + + // 添加列标题 + foreach (DataColumn column in dt.Columns) + { + sb.Append(column.ColumnName); + sb.Append(","); + } + sb.Remove(sb.Length - 1, 1); + sb.AppendLine(); + + // 添加行数据 + foreach (DataRow row in dt.Rows) + { + foreach (object item in row.ItemArray) + { + sb.Append(item); + sb.Append(","); + } + sb.Remove(sb.Length - 1, 1); + sb.AppendLine(); + } + + // 将数据写入CSV文件 + File.WriteAllText(filePath, sb.ToString()); + } + + private void rbtnExportCSVReport_Click(object sender, EventArgs e) + { + string strCSVExportPath = ""; + string strExportTime = DateTime.Now.ToString("yyyyMMddHHmmssfff"); + FolderBrowserDialog m_Folder = new FolderBrowserDialog(); + m_Folder.Description = "请选择要导出的CSV文件的路径"; + m_Folder.RootFolder = Environment.SpecialFolder.Desktop; + if (dgvFPYResult.Visible == true && dgvFPYResult.Rows.Count > 0) + { + m_Folder.ShowDialog(); + if (Directory.Exists(m_Folder.SelectedPath)) + { + strCSVExportPath = m_Folder.SelectedPath + "\\合格率" + strExportTime + ".CSV"; + ExportdgvDataToCsv(dgvFPYResult, strCSVExportPath); + } + } + if (dgvSelectMeasureData.Visible == true && dgvSelectMeasureData.Rows.Count > 0) + { + m_Folder.ShowDialog(); + if (Directory.Exists(m_Folder.SelectedPath)) + { + strCSVExportPath = m_Folder.SelectedPath + "\\车身尺寸数据" + strExportTime + ".CSV"; + ExportDataTableDataToCsv(PageTable, strCSVExportPath); + } + } + } + + private void dgvFPYResult_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e) + { + e.Row.HeaderCell.Value = string.Format("{0}", e.Row.Index + 1); + } + + private void dgvSelectMeasureData_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e) + { + e.Row.HeaderCell.Value = string.Format("{0}", e.Row.Index + 1); + } + + #endregion Search Data + + #region IOT数据的重传 + + private void ReSendIotData() + { + DataTable dtUnuploaded = tmdal.SelectUnuploadedIOTLogs(); + foreach (DataRow row in dtUnuploaded.Rows) + { + string carId = row["CarID"].ToString(); + string content = row["Content"].ToString(); + string fpy = row["FPY"]?.ToString(); + int id = Convert.ToInt32(row["Id"]); + + // 调用上传接口 + string result = PostJsonToIOT(ConfigDfn.strIOTAddress, content, 10000); + bool isSuccess = result.Contains("成功"); + + // 更新上传状态 + if (isSuccess) + { + tmdal.UpdateIOTUploadStatus(id, true); + } + } + } + + #endregion + + #region CP CPK + + private void rbtnSearchCPCPK_Click(object sender, EventArgs e) + { + DataTable dtCPCPK = new DataTable(); + string strMeasureName = rddlMeasurePoint.Text; + string strSizeName = rddlSizeName.Text.Trim().Substring(0, 1); + int iLimitCount = (int)nudMeasureCount.Value; + dtCPCPK = tmdal.SelectMeasureValuebyMeasureNameAndSize(strMeasureName, strSizeName, iLimitCount); + int iSelectRows = dtCPCPK.Rows.Count; + if (iSelectRows < 5) + { + chartCPCPK.Visible = false; + labSearchCPCPKResult.Visible = true; + pnlCPCPK.Visible = false; + } + else + { + double dNormalValue = double.Parse(dtCPCPK.Rows[0]["NormalValue"].ToString()); + double dLowerTolValue = double.Parse(dtCPCPK.Rows[0]["LowerTolVal"].ToString()); + double dUpperTolValue = double.Parse(dtCPCPK.Rows[0]["UpperTolVal"].ToString()); + double dLSL = dNormalValue + dLowerTolValue; + double dUSL = dNormalValue + dUpperTolValue; + + List listMDoubleData = new List(); + List listMStrData = new List(); + listMStrData.Clear(); + listMDoubleData.Clear(); + for (int i = 0; i < iSelectRows; i++) + { + listMDoubleData.Add(double.Parse(dtCPCPK.Rows[i]["MeasureValue"].ToString())); + listMStrData.Add(dtCPCPK.Rows[i]["MeasureValue"].ToString()); + } + + #region 数据赋值 + + labLSL.Text = dLSL.ToString("F2"); + labUSL.Text = dUSL.ToString("F2"); + labTarget.Text = dNormalValue.ToString("F2"); + labSampleSize.Text = iSelectRows.ToString(); + labAverage.Text = CpCpkHelper.GetAverage(listMStrData).ToString("F4"); + labStdDev.Text = CpCpkHelper.GetSigma(listMStrData).ToString("F4"); + List listCpCpk = CpCpkHelper.GetCpList(listMStrData, dUSL, dLSL); + labCp.Text = listCpCpk[0].ToString("F4"); + labCpl.Text = listCpCpk[1].ToString("F4"); + labCpu.Text = listCpCpk[2].ToString("F4"); + labCpk.Text = listCpCpk[3].ToString("F4"); + List listPpPpk = CpCpkHelper.GetPpList(listMStrData, dUSL, dLSL); + labPp.Text = listPpPpk[0].ToString("F4"); + labPpl.Text = listPpPpk[1].ToString("F4"); + labPpu.Text = listPpPpk[2].ToString("F4"); + labPpk.Text = listPpPpk[3].ToString("F4"); + + #endregion 数据赋值 + + #region 画柱状图 + + Dictionary histogramDataDic = new Dictionary(); + histogramDataDic = CpCpkHelper.GetHistogramData(listMDoubleData); + string[] strXValue = new string[histogramDataDic.Count]; + int[] dYValue = new int[histogramDataDic.Count]; + for (int i = 0; i <= histogramDataDic.Count - 1; i++) + { + strXValue[i] = (histogramDataDic.ElementAt(i).Key); + dYValue[i] = int.Parse(histogramDataDic.ElementAt(i).Value); + } + chartCPCPK.Series[0].Label = "#VAL"; //设置显示Y的值 + chartCPCPK.Series[0].LabelForeColor = Color.White; + chartCPCPK.Series[0].ToolTip = "区间范围 : #VALX \r\n数量 : #VAL"; //鼠标移动到对应点显示数值 + chartCPCPK.Series[0].Points.DataBindXY(strXValue, dYValue); + + #endregion 画柱状图 + + chartCPCPK.Visible = true; + labSearchCPCPKResult.Visible = false; + pnlCPCPK.Visible = true; + } + } + + #endregion CP CPK + + #region 软件设置 + + private void lpcSoftwareSetup_Click(object sender, EventArgs e) + { + string strInputPwd = MyBase.InputBox("密码", "请输入密码 : ", "", "确定", "取消"); + if (strInputPwd.Contains("-999.999")) + { + return; + } + else if (strInputPwd == ConfigDfn.strPwd) + { + FSoftwareSetup fss = new FSoftwareSetup(); + fss.ShowDialog(this); + } + else + { + MessageBox.Show("密码错误! ", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + + private void lpcToleranceSetup_Click(object sender, EventArgs e) + { + string strInputPwd = MyBase.InputBox("密码", "请输入密码 : ", "", "确定", "取消"); + if (strInputPwd.Contains("-999.999")) + { + return; + } + else if (strInputPwd == ConfigDfn.strPwd) + { + FToleranceSetup fts = new FToleranceSetup(); + fts.ShowDialog(this); + } + else + { + MessageBox.Show("密码错误! ", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + + private void lpcRange_Click(object sender, EventArgs e) + { + string strInputPwd = MyBase.InputBox("密码", "请输入密码 : ", "", "确定", "取消"); + if (strInputPwd.Contains("-999.999")) + { + return; + } + else if (strInputPwd == ConfigDfn.strPwd) + { + FRangeSetup frs = new FRangeSetup(); + frs.ShowDialog(this); + } + else + { + MessageBox.Show("密码错误! ", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + + private void lpcPLCAddress_Click(object sender, EventArgs e) + { + string strInputPwd = MyBase.InputBox("密码", "请输入密码 : ", "", "确定", "取消"); + if (strInputPwd.Contains("-999.999")) + { + return; + } + else if (strInputPwd == ConfigDfn.strPwd) + { + PlcAddrSetup PLCAS = new PlcAddrSetup(3, ConfigDfn.strConfigFile); + PLCAS.Show(); + } + else + { + MessageBox.Show("密码错误! ", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + + private void lpcPLCTest_Click(object sender, EventArgs e) + { + FormDebugSiemensS7 FDS7 = new FormDebugSiemensS7(SiemensPLCS.S1200); + FDS7.Show(); + } + + private void lpcAboutSoftware_Click(object sender, EventArgs e) + { + AboutSoftwareInfo asi = new AboutSoftwareInfo(); + asi.ShowDialog(); + } + + private void lpcShowLog_Click(object sender, EventArgs e) + { + System.Diagnostics.Process.Start("notepad.exe", LogDebugDfn.strDebugFile); + } + + #endregion 软件设置 + + #region RadButton鼠标事件 + + private void btn_MouseHover(object sender, EventArgs e) + { + RadButton btn = sender as RadButton; + btn.BackColor = Color.FromArgb(0, 151, 186); + } + + private void btn_MouseLeave(object sender, EventArgs e) + { + RadButton btn = sender as RadButton; + btn.BackColor = Color.FromArgb(19, 46, 53); + } + + #endregion RadButton鼠标事件 + + #region PLC相关函数 + + #region PLC重连操作 + + + private void ttmrReadPLCData_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + { + ttmrReadPLCData.Stop(); + ReadAndProcessPlcData(); + ttmrReadPLCData.Start(); + } + + private void ttmrWritePLCLive_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + { + ttmrWritePLCLive.Stop(); + bTickt = !bTickt; + PlcObject.InsertWriteQueue(PlcSignalDfn.SoftLive, Convert.ToByte(bTickt ? 1 : 0)); + ttmrWritePLCLive.Start(); + + } + private void m_bgwAnalysisCSVReport_DoWork(object sender, DoWorkEventArgs e) + { + while (true) + { + AnalysisNextSenseSelfMeasureCSV(); + AnalysisNextSenseEH3CSV(); + AnalysisNextSenseEHYCSV(); + } + } + + private void ttmrReadNSCSV_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + { + ttmrReadNSCSV.Stop(); + //AnalysisNextSenseSelfMeasureCSV(); + //AnalysisNextSenseEH3CSV(); + //AnalysisNextSenseEHYCSV(); + ttmrReadNSCSV.Start(); + } + private void ReadAndProcessPlcData() + { + #region 判断PLC是否正常运行 + + if (ConfigPlc.PlcType == 3 && ConfigPlc.bReConnect && !HslSiemensS7Obj.bConnected) + { + MyBase.TraceWriteLine("PLC断开,重连!"); + tmrHeartBeatConnect.Stop(); + ReConnectPLC(); + return; + } + + byte[] m_Datas = null; + if (!HslSiemensS7Obj.ReadDatas(PlcAddrSetup.S7ReadStartAddr, (ushort)PlcAddrSetup.S7ReadByteCount, ref m_Datas)) + { + //tmrReadPLCData.Start(); + ttmrReadPLCData.Start(); + ttmrReadPLCData.Start(); + return; + } + if (m_Datas == null) + { + //tmrReadPLCData.Start(); + ttmrReadPLCData.Start(); + ttmrReadPLCData.Start(); + MyBase.TraceWriteLine("PLC读取数据对象为空,退出!"); + return; + } + + #endregion 判断PLC是否正常运行 + + try + { + #region 循环读取PLC数据块中的信息 + + if (m_Datas.Length >= PlcAddrSetup.S7ReadByteCount) + { + PLCDfn.bPlcLiveTick = PlcObject.GetS7ByteData(PlcSignalDfn.PlcLive) == 1; + PLCDfn.ReadVINFinishFlag = PlcObject.GetS7ByteData(PlcSignalDfn.ReadVINFinishFlag); + PLCDfn.NSStartMeasure = PlcObject.GetS7ByteData(PlcSignalDfn.NSStartMeasure); + PLCDfn.CarPassFlag = PlcObject.GetS7ByteData(PlcSignalDfn.CarPassFlag); + PLCDfn.NoCarTypeFlag = PlcObject.GetS7ByteData(PlcSignalDfn.NoCarTypeFlag); + //从PLC获取VIN码后,通过访问IOT接口 获取汽车类型,再反馈给PLC + if (iLastReadVINFinishFlag == 0 && PLCDfn.ReadVINFinishFlag == 10) //到达信号 + { + string strCarID = PlcObject.GetS7StringData(PlcSignalDfn.PartID); + //PLCDfn.CarType = PlcObject.GetS7ByteData(PlcSignalDfn.CarType); + MyBase.TraceWriteLine("PLC读码完成信号:0->10;Read PLC VIN is: " + strCarID); + if (strCarID.Length > 10) + { + string strCarColor = ""; + string strCarType = GetCarTypeByIOTAPI(strCarID, out strCarColor); + if (!strCarType.ToUpper().Contains("ERR")) + { + if (strCarType.ToUpper().Contains("EH3")) + { + PlcObject.InsertWriteQueue(PlcSignalDfn.WCarType, (byte)1); + } + else + { + PlcObject.InsertWriteQueue(PlcSignalDfn.WCarType, (byte)2); + } + PlcObject.InsertWriteQueue(PlcSignalDfn.WCarColor, strCarColor); + MyBase.TraceWriteLine("往PLC写入车型: " + strCarType + " ;车身颜色:" + strCarColor); + tmdal.InsertVIN(strCarID); + MyBase.TraceWriteLine(strCarID + " 插入到数据库表TTempSaveVIN中完成。"); + + #region 记录PLC过点信息 + try + { + DateTime arriveTime = DateTime.Now; + if (tmdal.ExistsArriveLog(strCarID) == 0) + { + tmdal.InsertArriveLog(strCarID, arriveTime); + } + else + { + MyBase.TraceWriteLine($"车辆 {strCarID} 当天已存在抵达记录,未重复插入。"); + } + } + catch (Exception ex) + { + MyBase.TraceWriteLine("记录PLC过点信息异常,异常信息: " + ex.ToString()); + } + + #endregion + } + else + { + MyBase.TraceWriteLine("报错:根据VIN从IOT上获取车型信息失败,不发送给PLC车型信息和颜色信息。 "); + } + } + } + + if (iLastNoCarTypeFlag == 0 && PLCDfn.NoCarTypeFlag == 10) + { + string strCarID = PlcObject.GetS7StringData(PlcSignalDfn.PartID); + MyBase.TraceWriteLine("NoCarTypeFlag:0->10; PLC 反馈未收到软件发送的车类型码信息; VIN="+ strCarID); + } + + if (iLastNSStartMeasure == 0 && PLCDfn.NSStartMeasure == 10) //启动测量信号 + { + string strCarID = PlcObject.GetS7StringData(PlcSignalDfn.PartID); + if (strCarID.Length > 10) + { + // 记录日志,此时该车开始测量 + MyBase.TraceWriteLine($"检测开始测量0->10: {strCarID} 机器人安全判断合格,启动NXS测量"); + + #region 记录PLC过点信息 + // 记录启动测量时间 + try + { + DateTime measureStartTime = DateTime.Now; + tmdal.UpdateStartMeasureTime(strCarID, measureStartTime); + } + catch (Exception ex) + { + MyBase.TraceWriteLine("记录测量开始时间异常,异常信息: " + ex.ToString()); + } + #endregion + } + else + { + //记录日志,获取到启动测量信号,但没有获取 车号 + MyBase.TraceWriteLine("报错:获取到启动NXS测量信号,但没有获取 车号 "); + } + } + + if (iLastCarPassFlag == 0 && PLCDfn.CarPassFlag == 10) //离开信号 + { + string strCarID = PlcObject.GetS7StringData(PlcSignalDfn.PartID); + MyBase.TraceWriteLine("读取PLC CarPassFlag 完成信号:0->10;Read PLC VIN is: " + strCarID); + string strSecondPosCarID = tmdal.SelectMaintenanceStationVINbyStationNo(2); + if (strSecondPosCarID.Length == 21) + { + string strTempCarID = strSecondPosCarID.Substring(0, 17); + string strTempCarType = strSecondPosCarID.Substring(18, 3); + if (tmdal.CheckMRVINExistOrNotByVIN(strTempCarID) == 0) + { + string strTargetRate = Math.Round(ConfigDfn.dFPY2 * 100.00d, 2).ToString("F2") + "%"; + + MyBase.TraceWriteLine(strSecondPosCarID + " ;该VIN码只扫码没有测量,没有测量结果,上传IOT NG消息。"); + string strPostData = "{\"serno\":\"" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "\",\"requestData\":[{\"vin\":\"" + strTempCarID + "\",\"model\":\"" + strTempCarType + "\",\"equipmentNo\":\"" + ConfigDfn.strEquipNo + "\",\"equipmentName\":\"" + ConfigDfn.strEquipName + "\",\"calibrationResult\":\"NG\",\"detectionTime\":\"" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\",\"targetRate\":\"" + strTargetRate + "\",\"rate\":\"0.00%\",\"GapList\":[]}]}"; + MyBase.TraceWriteLine("Update NG To IOT Data Content: " + strPostData); + string strPostResult = PostJsonToIOT(ConfigDfn.strIOTAddress, strPostData, 10000); + MyBase.TraceWriteLine("NG数据上传IOT完成,结果返回为:" + strPostResult); + + if (strPostResult.Contains("成功")) + { + MyBase.TraceWriteLine("NG数据上传IOT成功 ^_^"); + + tmdal.InsertIOTUploadLog(strCarID, strPostData, true, "0.00"); + } + else + { + MyBase.TraceWriteLine("NG数据上传IOT失败!"); + + tmdal.InsertIOTUploadLog(strCarID, strPostData, false, "0.00"); + } + } + + #region 记录PLC过点信息 + + try + { + DateTime leaveTime = DateTime.Now; + tmdal.UpdateLeaveTime(strTempCarID, leaveTime); + } + catch (Exception ex) + { + MyBase.TraceWriteLine("记录PLC过点信息异常,异常信息: " + ex.ToString()); + } + + #endregion + } + + if (!string.IsNullOrEmpty(strCarID) && strCarID.Length > 10) + { + MyBase.TraceWriteLine("CarPassFlag 0->10 开始更新MaintenceInfo数据库位置7-2中的VIN码 "); + string strTempCarID = tmdal.SelectMaintenanceStationVINbyStationNo(6); + Thread.Sleep(10); + tmdal.updateMaintenceInfo(strTempCarID, 7); + MyBase.TraceWriteLine($"CarPassFlag 0->10 更新VIN={strTempCarID} 到MaintenceInfo数据库位置7完成。"); + Thread.Sleep(15); + tmdal.updateMaintenceInfo(tmdal.SelectMaintenanceStationVINbyStationNo(5), 6); + Thread.Sleep(20); + tmdal.updateMaintenceInfo(tmdal.SelectMaintenanceStationVINbyStationNo(4), 5); + Thread.Sleep(20); + tmdal.updateMaintenceInfo(tmdal.SelectMaintenanceStationVINbyStationNo(3), 4); + Thread.Sleep(20); + tmdal.updateMaintenceInfo(tmdal.SelectMaintenanceStationVINbyStationNo(2), 3); + Thread.Sleep(20); + tmdal.updateMaintenceInfo(tmdal.SelectMaintenanceStationVINbyStationNo(1), 2); + Thread.Sleep(20); + string strCarColor = ""; + string strCarType = GetCarTypeByIOTAPI(strCarID, out strCarColor); + if (!strCarType.ToUpper().Contains("ERR")) + { + if (strCarType.ToUpper().Contains("EH3")) + { + strCarID = strCarID + "_EH3"; + } + else + { + strCarID = strCarID + "_EHY"; + } + } + tmdal.updateMaintenceInfo(strCarID, 1); + MyBase.TraceWriteLine("CarPassFlag 0->10 更新到MaintenceInfo数据库位置1中的VIN为: " + strCarID); + } + else + { + MyBase.TraceWriteLine("CarPassFlag 0->10 strCarID Error = " + strCarID); + string strTempCarID = tmdal.SelectMaintenanceStationVINbyStationNo(6); + Thread.Sleep(10); + tmdal.updateMaintenceInfo(strTempCarID, 7); + MyBase.TraceWriteLine($"CarPassFlag 0->10 更新VIN={strTempCarID} 到MaintenceInfo数据库位置7完成。"); + Thread.Sleep(15); + tmdal.updateMaintenceInfo(tmdal.SelectMaintenanceStationVINbyStationNo(5), 6); + Thread.Sleep(20); + tmdal.updateMaintenceInfo(tmdal.SelectMaintenanceStationVINbyStationNo(4), 5); + Thread.Sleep(20); + tmdal.updateMaintenceInfo(tmdal.SelectMaintenanceStationVINbyStationNo(3), 4); + Thread.Sleep(20); + tmdal.updateMaintenceInfo(tmdal.SelectMaintenanceStationVINbyStationNo(2), 3); + Thread.Sleep(20); + tmdal.updateMaintenceInfo(tmdal.SelectMaintenanceStationVINbyStationNo(1), 2); + Thread.Sleep(20); + tmdal.updateMaintenceInfo("empty", 1); + MyBase.TraceWriteLine("CarPassFlag 0->10 更新到MaintenceInfo数据库位置1中的VIN为:empty "); + } + } + + //记录编码器速度等值 + if (ConfigDfn.iRecordEncoderFlag == 1) + { + double dSpeed1 = PlcObject.GetS7Double(PlcSignalDfn.Speed1); + double dSpeed2 = PlcObject.GetS7Double(PlcSignalDfn.Speed2); + double dR01 = PlcObject.GetS7Double(PlcSignalDfn.R01_Pules); + double dR02 = PlcObject.GetS7Double(PlcSignalDfn.R02_Pules); + NLogger.Fatal(dSpeed1 + "," + dSpeed2 + "," + dR01 + "," + dR02); + } + } + iLastCarPassFlag = PLCDfn.CarPassFlag; + iLastReadVINFinishFlag = PLCDfn.ReadVINFinishFlag; + iLastNSStartMeasure = PLCDfn.NSStartMeasure; + iLastNoCarTypeFlag = PLCDfn.NoCarTypeFlag; + #endregion 循环读取PLC数据块中的信息 + } + catch (Exception ex) + { + MyBase.TraceWriteLine("tmrReadPLCData_Tick exception: " + ex.ToString()); + } + } + + private void tmrRefreshPLCStatus_Tick(object sender, EventArgs e) + { + if (labelTimeStatus_Tip.Text == "─") { labelTimeStatus_Tip.Text = "╲"; } + else if (labelTimeStatus_Tip.Text == "╲") { labelTimeStatus_Tip.Text = "│"; } + else if (labelTimeStatus_Tip.Text == "│") { labelTimeStatus_Tip.Text = "╱"; } + else if (labelTimeStatus_Tip.Text == "╱") { labelTimeStatus_Tip.Text = "─"; } + + lampPLCHeart.State = PLCDfn.bPlcLiveTick ? LampColor.Green : LampColor.Silver; + rlePLCHeart.ForeColor = PLCDfn.bPlcLiveTick ? Color.Lime : Color.White; + } + + private void tmrHeartBeatConnect_Tick(object sender, EventArgs e) + { + if (bPlcLiveTickLast != PLCDfn.bPlcLiveTick) + { + HeartBeatCount = 0; + } + else + { + HeartBeatCount++; + } + + if (HeartBeatCount >= 600) + { + HeartBeatCount = 0; + if (!bStopPlcNormal) + { + MyBase.TraceWriteLine("PLC心跳检测10分钟内未变化,断开PLC,进行PLC重连!"); + PlcObject.ClosePlc(); + } + } + bPlcLiveTickLast = PLCDfn.bPlcLiveTick; + } + + private void ReConnectPLC() + { + m_ThreadReconnectPLC = null; + m_ThreadReconnectPLC = new Thread(new ThreadStart(ReConnectPlcProcess)); + if (!m_ThreadReconnectPLC.IsAlive) + { + m_ThreadReconnectPLC.Start(); + } + } + + private void ReConnectPlcProcess() + { + while (!PlcObject.IsPlcConnected()) + { + bool bConnectResult = PlcObject.ConnectPlc(); + if (!bConnectResult) + { + m_ReConnectNum++; + MyBase.TraceWriteLine("重连PLC,第" + m_ReConnectNum + "次!"); + } + Thread.Sleep(1000); + } + MyBase.TraceWriteLine("重新连接PLC成功!"); + lampConnectPLCStatus.State = LampColor.Green; + rlePLCStatus.ForeColor = Color.Lime; + this.BeginInvoke((EventHandler)delegate + { + tmrHeartBeatConnect.Start(); + }); + bStopPlcNormal = false; + m_ReConnectNum = 0; + this.Invoke((EventHandler)(delegate + { + //tmrReadPLCData.Start(); + ttmrWritePLCLive.Start();//启动给PLC写入心跳 1s写一次 0 1 + tmrRefreshPLCStatus.Start();//刷新PLC等的状态 + })); + m_ThreadReconnectPLC.Abort(); + } + + #endregion PLC重连操作 + + private void ConnectThread() + { + MyBase.TraceWriteLine("连接PLC...."); + + bool bConnectResult = PlcObject.ConnectPlc(); + this.Invoke((EventHandler)(delegate + { + if (bConnectResult) + { + lampConnectPLCStatus.State = LampColor.Green; + rlePLCStatus.ForeColor = Color.Lime; + MyBase.TraceWriteLine("连接PLC成功"); + } + else + { + lampConnectPLCStatus.State = LampColor.Red; + rlePLCStatus.ForeColor = Color.Red; + ttmrReadPLCData.Stop(); + MyBase.TraceWriteLine("连接PLC失败"); + return; + } + + //tmrReadPLCData.Start(); //读取PLC数据信息 + ttmrReadPLCData.Start(); + ttmrWritePLCLive.Start();//启动给PLC写入心跳 1s写一次 0 1 + tmrRefreshPLCStatus.Start();//刷新PLC等的状态 + if (ConfigPlc.bReConnect) + tmrHeartBeatConnect.Start(); //监测来自plc的心跳5分钟内没有变化,重新连接PLC + })); + } + + private void btnConnectPlc_Click(object sender, EventArgs e) + { + try + { + PlcObject.InitWritePlcThread(); + bStopPlcNormal = false; + Thread m_Thread = new Thread(ConnectThread); + m_Thread.Start(); + return; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + } + + private void btnClosePlc_Click(object sender, EventArgs e) + { + try + { + MyBase.TraceWriteLine("点击了断开PLC按钮,断开PLC!"); + ttmrReadPLCData.Stop(); + tmrHeartBeatConnect.Stop(); + ttmrWritePLCLive.Stop(); + tmrRefreshPLCStatus.Stop(); + lampConnectPLCStatus.State = LampColor.White; + rlePLCStatus.ForeColor = Color.White; + rlePLCHeart.ForeColor = Color.White; + lampPLCHeart.State = LampColor.White; + bStopPlcNormal = true; + PlcObject.ClosePlc(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + } + + #endregion PLC相关函数 + + private void lpcUploadIOTTest_Click(object sender, EventArgs e) + { + string strPostData = "{\"serno\":\"" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "\",\"requestData\":[{\"vin\":\"test001\",\"model\":\"EHY\",\"equipmentNo\":\"" + ConfigDfn.strEquipNo + "\",\"equipmentName\":\"" + ConfigDfn.strEquipName + "\",\"calibrationResult\":\"OK\",\"detectionTime\":\"" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\",\"GapList\":[{\"vin\":\"test001\",\"gfNo\":\"F\",\"pointNumber\":\"L-01\",\"actualValue\":\"-0.30\",\"controlLine\":\"-1.00/1.00\",\"measurementResult\":\"OK\"}]}]}"; + MyBase.TraceWriteLine("Test Post Data: " + strPostData); + + //插入记录测试 + tmdal.InsertIOTUploadLog("test001", strPostData, true, labResultPercent.Text); + + string strPostResult = PostJsonToIOT(ConfigDfn.strIOTAddress, strPostData, 10000); + MessageBox.Show("测试上传数据完成,获取到的返回值为: " + strPostResult, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + MyBase.TraceWriteLine("测试上传数据完成,获取到的返回值为: " + strPostResult); + } + + private void lpcTestGetCarTye_Click(object sender, EventArgs e) + { + string strPostData = "{\"serno\":\"312314141\",\"vin\":\"LNNAJDDU9RDA00213\"}"; + MyBase.TraceWriteLine("Test Post Data: " + strPostData); + string strPostResult = PostJsonToIOT(ConfigDfn.strIOTCarTypeAddress, strPostData, 10000); + MessageBox.Show("测试从IOT获取车型信息完成,获取到的返回值为: " + strPostResult, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + MyBase.TraceWriteLine("测试从IOT获取车型信息完成,获取到的原返回值为: " + strPostResult); + string strNewResult = strPostResult.Substring(1, strPostResult.Length - 2).Replace("]", ""); + MessageBox.Show("测试从IOT获取车型信息完成,处理后 获取到的返回值为: " + strNewResult, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + MyBase.TraceWriteLine("测试从IOT获取车型信息完成,处理后 获取到的返回值为: " + strNewResult); + CheryCarTypeInfo ccti = new CheryCarTypeInfo(); + ccti = JsonConvert.DeserializeObject(strNewResult); + MessageBox.Show("测试从IOT获取车型信息完成,获取到的返回值为: " + strNewResult + "; 解析出的车型:" + ccti.data.model + " ;解析出的物料号为" + ccti.data.material + " ;解析出颜色编号:" + ccti.data.material.Substring(7, 2), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + + private string GetCarTypeByIOTAPI(string strVIN, out string strMaterialNo) + { + string strPostData = "{\"serno\":\"" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + "\",\"vin\":\"" + strVIN + "\"}"; + MyBase.TraceWriteLine(" Post VIN Data: " + strPostData); + string strPostResult = PostJsonToIOT(ConfigDfn.strIOTCarTypeAddress, strPostData, 5000); + MyBase.TraceWriteLine("GetCarTypeByIOTAPI IOT Return CarType Infomation : " + strPostResult); + string strNewResult = strPostResult.Substring(1, strPostResult.Length - 2).Replace("]", ""); + //MyBase.TraceWriteLine("GetCarTypeByIOTAPI IOT Return New CarType Infomation : " + strNewResult); + CheryCarTypeInfo ccti = new CheryCarTypeInfo(); + ccti = JsonConvert.DeserializeObject(strNewResult); + if (ccti.message.Contains("成功")) + { + if (ccti.data.material != null && ccti.data.material.Length > 9) + { + strMaterialNo = ccti.data.material.Substring(7, 2); + MyBase.TraceWriteLine(" IOT Return CarType Infomation : " + strNewResult + "; 解析出的车型:" + ccti.data.model + "解析出车颜色编号:" + strMaterialNo); + } + else + { + strMaterialNo = "TE"; + MyBase.TraceWriteLine(" IOT Return CarType Infomation : " + strNewResult + "; 解析出的车型:" + ccti.data.model + ";未解析出车颜色编号"); + } + return ccti.data.model; + } + else + { + MyBase.TraceWriteLine(" IOT Return CarType Infomation ERROR : " + strPostResult); + strMaterialNo = "ER"; + return "ERR"; + } + } + + private void lpcShowCarData_Click(object sender, EventArgs e) + { + if (ConfigDfn.strShowCarLR == "L") + { + if (ConfigDfn.strCarModel.ToUpper().Contains("EH3")) + { + fLEH3.Show(); + fLEHY.Show(); + fLEHY.Hide(); + } + else + { + fLEH3.Show(); + fLEH3.Hide(); + fLEHY.Show(); + } + } + else + { + if (ConfigDfn.strCarModel.ToUpper().Contains("EH3")) + { + fREH3.Show(); + fREHY.Show(); + fREHY.Hide(); + } + else + { + fREH3.Show(); + fREH3.Hide(); + fREHY.Show(); + } + } + } + + public void ShowCarMeasureDataByCarType(int iCarType) + { + Invoke((MethodInvoker)(() => + { + if (ConfigDfn.strShowCarLR == "L") + { + if (iCarType == 1) + { + fLEH3.Show(); + fLEHY.Show(); + fLEHY.Hide(); + MyBase.TraceWriteLine("显示左侧EH3车身数据界面。"); + } + else + { + fLEH3.Show(); + fLEH3.Hide(); + fLEHY.Show(); + MyBase.TraceWriteLine("显示左侧EHY车身数据界面。"); + } + } + else + { + if (iCarType == 1) + { + fREH3.Show(); + fREHY.Show(); + fREHY.Hide(); + MyBase.TraceWriteLine("显示右侧EH3车身数据界面。"); + } + else + { + fREH3.Show(); + fREH3.Hide(); + fREHY.Show(); + MyBase.TraceWriteLine("显示右侧EHY车身数据界面。"); + } + } + })); + + } + + private void rbtnTestCOM_Click(object sender, EventArgs e) + { + if (rbtnTestCOM.Text == "打开串口") + { + serialTestPort = new SerialPort(rtbPort.Text.Trim(), 115200, Parity.None, 8, StopBits.One); // 设置串口参数 + serialTestPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); // 注册数据接收事件处理方法 + serialTestPort.Open(); // 打开串口 + if (serialTestPort.IsOpen) + { + rbtnTestCOM.Text = "关闭串口"; + } + } + else + { + serialTestPort.DataReceived -= new SerialDataReceivedEventHandler(DataReceivedHandler); + serialTestPort.Close(); + serialTestPort.Dispose(); + rbtnTestCOM.Text = "打开串口"; + } + } + + private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) + { + SerialPort sp = (SerialPort)sender; + string indata = sp.ReadExisting(); + MyBase.TraceWriteLine(indata); + rtbCOMContent.Text = indata; + } + + private void CenterControl_Shown(object sender, EventArgs e) + { + rddlSizeName.SelectedIndex = 0; + DataTable dtMPName = tmdal.SelectAllMeasPointName(); + if (dtMPName.Rows.Count > 0) + { + for (int i = 0; i < dtMPName.Rows.Count; i++) + { + rddlMeasurePoint.Items.Add(dtMPName.Rows[i][0].ToString()); + } + rddlMeasurePoint.SelectedIndex = 0; + } + } + } + + public class CheryIOTData + { + /// + /// VIN号 + /// + public string vin { get; set; } + + /// + /// FG + /// + public string gfNo { get; set; } + + /// + /// 测点编号 + /// + public string pointNumber { get; set; } + + /// + /// 实测值 + /// + public string actualValue { get; set; } + + /// + /// 控制线 + /// + public string controlLine { get; set; } + + /// + /// 测量结果 + /// + public string measurementResult { get; set; } + } + + public class CarInfoData + { + public string material { get; set; } + public string model { get; set; } + } + + public class CheryCarTypeInfo + { + /// + /// data + /// + public CarInfoData data { get; set; } + + /// + /// message + /// + public string message { get; set; } + + /// + /// serno + /// + public string serno { get; set; } + + /// + /// success + /// + public string success { get; set; } + } + + public static class JsonHelper + { + /// + /// 对象转成JSON 格式字符串 + /// + /// 对象 + /// JSON格式的字符串 + public static string ObjectToJson(object obj) + { + return JsonConvert.SerializeObject(obj); + } + + /// + /// 解析JSON字符串生成对象实体 + /// + /// 对象类型 + /// json字符串 + /// 对象实体 + public static T DeserializeJsonToObject(string json) where T : class + { + Newtonsoft.Json.JsonSerializer serializer = new Newtonsoft.Json.JsonSerializer(); + StringReader sr = new StringReader(json); + object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T)); + T t = o as T; + return t; + } + + /// + /// 解析JSON数组生成对象实体集合 + /// + /// 对象类型 + /// json数组字符串(eg.[{"ID":"112","Name":"石子儿"}]) + /// 对象实体集合 + public static List DeserializeJsonToList(string json) where T : class + { + Newtonsoft.Json.JsonSerializer serializer = new JsonSerializer(); + StringReader sr = new StringReader(json); + object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List)); + List list = o as List; + return list; + } + + /// + /// 数据表转键值对集合 把DataTable转成 List集合, 存每一行 集合中放的是键值对字典,存每一列 + /// + /// 数据表 + /// 哈希表数组 + public static List> DataTableToList(DataTable dt) + { + List> list = new List>(); + + foreach (DataRow dr in dt.Rows) + { + Dictionary dic = new Dictionary(); + foreach (DataColumn dc in dt.Columns) + { + dic.Add(dc.ColumnName, dr[dc.ColumnName]); + } + list.Add(dic); + } + return list; + } + + /// + /// 数据集转键值对数组字典 + /// + /// 键值对数组字典 + public static Dictionary>> DataSetToDic(DataSet ds) + { + Dictionary>> result = new Dictionary>>(); + + foreach (DataTable dt in ds.Tables) + result.Add(dt.TableName, DataTableToList(dt)); + + return result; + } + + /// + /// 数据表转JSON + /// + /// 数据表 + /// JSON字符串 + public static string DataTableToJson(DataTable dt) + { + return ObjectToJson(DataTableToList(dt)); + } + + /// + /// JSON文本转对象,泛型方法 常用 + /// + /// 类型 + /// JSON文本 + /// 指定类型的对象 + public static T JsonToObject(string jsonText) + { + return JsonConvert.DeserializeObject(jsonText); + } + + /// + /// 将JSON文本转换为数据表数据 + /// + /// JSON文本 + /// 数据表字典 + public static Dictionary>> TablesDataFromJson(string jsonText) + { + return JsonToObject>>>(jsonText); + } + + /// + /// 将JSON文本转换成数据行 + /// + /// JSON文本 + /// 数据行的字典 + public static Dictionary DataRowFromJson(string jsonText) + { + return JsonToObject>(jsonText); + } + } } \ No newline at end of file diff --git a/Analysis/CenterControl.designer.cs b/Analysis/CenterControl.designer.cs index ba683a4..b898bcb 100644 --- a/Analysis/CenterControl.designer.cs +++ b/Analysis/CenterControl.designer.cs @@ -228,12 +228,8 @@ this.lpcPLCTest = new UserControlClass.LabPictureControl(); this.lpcPLCAddress = new UserControlClass.LabPictureControl(); this.tmSystem = new System.Windows.Forms.Timer(this.components); - this.tmReadNextsenseCSV = new System.Windows.Forms.Timer(this.components); - this.tmrReadPLCData = new System.Windows.Forms.Timer(this.components); this.tmrRefreshPLCStatus = new System.Windows.Forms.Timer(this.components); this.tmrHeartBeatConnect = new System.Windows.Forms.Timer(this.components); - this.tmrWritePLCLive = new System.Windows.Forms.Timer(this.components); - this.tmrMonitorDBToCreateReport = new System.Windows.Forms.Timer(this.components); ((System.ComponentModel.ISupportInitialize)(this.radTitleBar1)).BeginInit(); this.radTitleBar1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.radStatusStrip1)).BeginInit(); @@ -531,6 +527,7 @@ this.radStatusStrip1.SetSpring(this.commandBarSeparator3, false); this.commandBarSeparator3.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SystemDefault; this.commandBarSeparator3.UseCompatibleTextRendering = false; + this.commandBarSeparator3.Visibility = Telerik.WinControls.ElementVisibility.Collapsed; this.commandBarSeparator3.VisibleInOverflowMenu = false; // // radLabelElement3 @@ -539,6 +536,7 @@ this.radStatusStrip1.SetSpring(this.radLabelElement3, false); this.radLabelElement3.Text = "读取数据库状态:"; this.radLabelElement3.TextWrap = true; + this.radLabelElement3.Visibility = Telerik.WinControls.ElementVisibility.Collapsed; // // rleReadDBStatus // @@ -547,6 +545,7 @@ this.radStatusStrip1.SetSpring(this.rleReadDBStatus, false); this.rleReadDBStatus.Text = "●"; this.rleReadDBStatus.TextWrap = true; + this.rleReadDBStatus.Visibility = Telerik.WinControls.ElementVisibility.Collapsed; // // commandBarSeparator5 // @@ -582,7 +581,7 @@ this.RPV.ItemSizeMode = ((Telerik.WinControls.UI.PageViewItemSizeMode)((Telerik.WinControls.UI.PageViewItemSizeMode.EqualWidth | Telerik.WinControls.UI.PageViewItemSizeMode.EqualHeight))); this.RPV.Location = new System.Drawing.Point(1, 42); this.RPV.Name = "RPV"; - this.RPV.SelectedPage = this.rpvpAnalysis; + this.RPV.SelectedPage = this.rpvpSetup; this.RPV.Size = new System.Drawing.Size(1918, 1008); this.RPV.TabIndex = 127; this.RPV.ViewMode = Telerik.WinControls.UI.PageViewMode.NavigationView; @@ -665,7 +664,7 @@ ((Telerik.WinControls.UI.NavigationViewHeaderElement)(this.RPV.GetChildAt(0).GetChildAt(2))).BackColor3 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(135)))), ((int)(((byte)(161))))); ((Telerik.WinControls.UI.NavigationViewHeaderElement)(this.RPV.GetChildAt(0).GetChildAt(2))).BackColor4 = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(135)))), ((int)(((byte)(161))))); ((Telerik.WinControls.UI.NavigationViewHeaderElement)(this.RPV.GetChildAt(0).GetChildAt(2))).HorizontalLineColor = System.Drawing.Color.FromArgb(((int)(((byte)(19)))), ((int)(((byte)(46)))), ((int)(((byte)(53))))); - ((Telerik.WinControls.UI.NavigationViewHeaderElement)(this.RPV.GetChildAt(0).GetChildAt(2))).Text = " 分析主界面"; + ((Telerik.WinControls.UI.NavigationViewHeaderElement)(this.RPV.GetChildAt(0).GetChildAt(2))).Text = " 软件设置"; ((Telerik.WinControls.UI.NavigationViewHeaderElement)(this.RPV.GetChildAt(0).GetChildAt(2))).FocusBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(45)))), ((int)(((byte)(135)))), ((int)(((byte)(161))))); ((Telerik.WinControls.UI.NavigationViewHeaderElement)(this.RPV.GetChildAt(0).GetChildAt(2))).ForeColor = System.Drawing.Color.White; ((Telerik.WinControls.UI.NavigationViewHeaderElement)(this.RPV.GetChildAt(0).GetChildAt(2))).BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(27)))), ((int)(((byte)(60)))), ((int)(((byte)(68))))); @@ -3252,16 +3251,6 @@ this.tmSystem.Interval = 1000; this.tmSystem.Tick += new System.EventHandler(this.tmSystem_Tick); // - // tmReadNextsenseCSV - // - this.tmReadNextsenseCSV.Interval = 300; - this.tmReadNextsenseCSV.Tick += new System.EventHandler(this.tmReadNextsenseCSV_Tick); - // - // tmrReadPLCData - // - this.tmrReadPLCData.Interval = 300; - this.tmrReadPLCData.Tick += new System.EventHandler(this.tmrReadPLCData_Tick); - // // tmrRefreshPLCStatus // this.tmrRefreshPLCStatus.Interval = 500; @@ -3272,16 +3261,6 @@ this.tmrHeartBeatConnect.Interval = 1000; this.tmrHeartBeatConnect.Tick += new System.EventHandler(this.tmrHeartBeatConnect_Tick); // - // tmrWritePLCLive - // - this.tmrWritePLCLive.Interval = 1000; - this.tmrWritePLCLive.Tick += new System.EventHandler(this.tmrWritePLCLive_Tick); - // - // tmrMonitorDBToCreateReport - // - this.tmrMonitorDBToCreateReport.Interval = 1000; - this.tmrMonitorDBToCreateReport.Tick += new System.EventHandler(this.tmrMonitorDBToCreateReport_Tick); - // // CenterControl // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 13F); @@ -3478,7 +3457,6 @@ private Telerik.WinControls.UI.RadLabel radLabel5; private System.Windows.Forms.DataVisualization.Charting.Chart chartCPCPK; private System.Windows.Forms.Timer tmSystem; - private System.Windows.Forms.Timer tmReadNextsenseCSV; private System.Windows.Forms.PictureBox pbResult; private System.Windows.Forms.Label labRejectCount; private System.Windows.Forms.Label label7; @@ -3505,10 +3483,8 @@ private Telerik.WinControls.UI.RadLabel radLabel2; private Telerik.WinControls.UI.RadDropDownList rddlSizeName; private Telerik.WinControls.UI.RadDropDownList rddlMeasurePoint; - private System.Windows.Forms.Timer tmrReadPLCData; private System.Windows.Forms.Timer tmrRefreshPLCStatus; private System.Windows.Forms.Timer tmrHeartBeatConnect; - private System.Windows.Forms.Timer tmrWritePLCLive; private System.Windows.Forms.Label labSumMeasureCount; private System.Windows.Forms.Label label13; private System.Windows.Forms.Panel pnlPage; @@ -3586,7 +3562,6 @@ private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn6; private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn7; private System.Windows.Forms.DataGridViewTextBoxColumn MeasureItemResult; - private System.Windows.Forms.Timer tmrMonitorDBToCreateReport; private Telerik.WinControls.UI.RadLabelElement radLabelElement3; private Telerik.WinControls.UI.RadLabelElement rleReadDBStatus; private Telerik.WinControls.UI.CommandBarSeparator commandBarSeparator5; diff --git a/Analysis/CenterControl.resx b/Analysis/CenterControl.resx index 74e3740..94cf852 100644 --- a/Analysis/CenterControl.resx +++ b/Analysis/CenterControl.resx @@ -314,23 +314,11 @@ 17, 17 - - 127, 14 - - - 298, 20 - - 443, 20 + 113, 17 - 640, 18 - - - 821, 18 - - - 980, 16 + 310, 15 61 diff --git a/Analysis/Define/Define.cs b/Analysis/Define/Define.cs index cc90385..2dce7cd 100644 --- a/Analysis/Define/Define.cs +++ b/Analysis/Define/Define.cs @@ -89,7 +89,7 @@ namespace NSAnalysis public static string strIOTCarTypeAddress = ""; public static int iStartIOTFlag = 1; public static int iShowCarDataFlag = 0; - public static string strShowCarLR=""; + public static string strShowCarLR = ""; public static string strCOMPort = ""; public static int iCreateReportFlag = 0; @@ -107,7 +107,7 @@ namespace NSAnalysis public static double dTolerancePer = 0.0; public static double dExceptionTolerancePer = 0.0; public static string strPwd = ""; - public static int iAnalysisCSVFlag=1; + public static int iAnalysisCSVFlag = 1; public static int iRecordEncoderFlag = 0; public static int iIncludeRangeFlag = 0; public static int iMeasureItemsCount = 0; @@ -154,9 +154,9 @@ namespace NSAnalysis dLevel3 = double.Parse(FileIni.ReadString(ConfigDfn.strConfigFile, strSection, "Level3Times")); strReportPath = FileIni.ReadString(ConfigDfn.strConfigFile, strSection, "ReportCSVPath"); strReportPath2 = FileIni.ReadString(ConfigDfn.strConfigFile, strSection, "ReportCSVPath2"); - iAnalysisCSVFlag= FileIni.ReadInt(ConfigDfn.strConfigFile, strSection, "AnalysisCSVFlag"); + iAnalysisCSVFlag = FileIni.ReadInt(ConfigDfn.strConfigFile, strSection, "AnalysisCSVFlag"); iRecordEncoderFlag = FileIni.ReadInt(strConfigFile, strSection, "RecordEncoderFlag"); - iIncludeRangeFlag = FileIni.ReadInt(strConfigFile, strSection, "IncludeRangeFlag"); + iIncludeRangeFlag = FileIni.ReadInt(strConfigFile, strSection, "IncludeRangeFlag"); iMeasureItemsCount = FileIni.ReadInt(strConfigFile, strSection, "MeasureCarItemsCount"); iFailedCarCount = FileIni.ReadInt(strConfigFile, strSection, "ContinuousCarCount"); #endregion 读取系统配置参数 @@ -258,6 +258,7 @@ namespace NSAnalysis public static int NSStartMeasure; public static int CarPassFlag; + public static int NoCarTypeFlag; /// 读码完成:10:默认为;0 :默认 public static int ReadVINFinishFlag; @@ -294,14 +295,14 @@ namespace NSAnalysis string strConnectString = ""; LoadConfig(); - strConnectString = @"Data Source=" + SqlServerName + strConnectString = @"Data Source=" + SqlServerName + ";initial Catalog=" + SqlDbName + ";User ID=" + SqlUserName + ";password=" + SqlPassword + ";"; - MyBase.TraceWriteLine("数据库连接字符串:" + strConnectString); + MyBase.TraceWriteLine("数据库连接字符串:" + strConnectString); - return strConnectString; + return strConnectString; } public static void LoadConfig() @@ -313,12 +314,12 @@ namespace NSAnalysis SqlDbName = FileIni.ReadString(ConfigDfn.strConfigFile, strSection, "SqlDbName"); - //写入日志的 - MyBase.TraceWriteLine("数据库连接 SqlServerName:" + SqlServerName); - MyBase.TraceWriteLine("数据库连接 SqlUserName:" + SqlUserName); - MyBase.TraceWriteLine("数据库连接 SqlPassword:" + SqlPassword); - MyBase.TraceWriteLine("数据库连接 SqlDbName:" + SqlDbName); + //写入日志的 + MyBase.TraceWriteLine("数据库连接 SqlServerName:" + SqlServerName); + MyBase.TraceWriteLine("数据库连接 SqlUserName:" + SqlUserName); + MyBase.TraceWriteLine("数据库连接 SqlPassword:" + SqlPassword); + MyBase.TraceWriteLine("数据库连接 SqlDbName:" + SqlDbName); - } - } + } + } } \ No newline at end of file diff --git a/Analysis/Program.cs b/Analysis/Program.cs index 2bd635e..08697c7 100644 --- a/Analysis/Program.cs +++ b/Analysis/Program.cs @@ -154,8 +154,9 @@ namespace NSAnalysis else { MyBase.TraceWriteLine("Log in using the original authorization mode."); - Licence.GetRegisterInfo(); - Licence.Encryption_DLL(); + //Licence.GetRegisterInfo(); + //Licence.Encryption_DLL(); + Application.Run(new CenterControl()); } } } diff --git a/Analysis/Properties/AssemblyInfo.cs b/Analysis/Properties/AssemblyInfo.cs index af41c14..8878d48 100644 --- a/Analysis/Properties/AssemblyInfo.cs +++ b/Analysis/Properties/AssemblyInfo.cs @@ -10,7 +10,7 @@ using System.Runtime.InteropServices; [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Hexagon NSAnalysis")] -[assembly: AssemblyCopyright("Copyright © Hexagon 2024")] +[assembly: AssemblyCopyright("Copyright © Hexagon 2025")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -33,7 +33,7 @@ using System.Runtime.InteropServices; // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("2025.08.31.0")] -[assembly: AssemblyFileVersion("2025.08.31.0")] +[assembly: AssemblyFileVersion("2025.09.26.3")] //奇瑞总装软件 //2024.09.27.1 该版本增加读取编码器数值功能 //2024.10.08.1 该版本修改了EHY和EH3的测点图片 以及增加了上传IOT时,在1.5倍公差内,都是OK的结果,传给IOT @@ -48,4 +48,7 @@ using System.Runtime.InteropServices; //2024.10.28.1 合格率计算的时候 添加上极差 //2024.10.31.1 极差上传IOT时,在1.5倍公差内,都是OK的结果,传给IOT //2024.12.24 .1 添加判断连续多少辆车检测项数量不足,则报警 -//2025.03.03.1 添加自检报告 \ No newline at end of file +//2025.03.03.1 添加自检报告 +//2025.9.20 更新打印LOG 排查 维修工位不刷新问题 +//2025.9.24 更新Timer,解决刷新问题 +//2025.9.26 更新,解决刷新问题 \ No newline at end of file diff --git a/Analysis/bin/x64/Debug/DAL.dll b/Analysis/bin/x64/Debug/DAL.dll index 48bfbea..f72b99e 100644 Binary files a/Analysis/bin/x64/Debug/DAL.dll and b/Analysis/bin/x64/Debug/DAL.dll differ diff --git a/Analysis/bin/x64/Debug/DAL.pdb b/Analysis/bin/x64/Debug/DAL.pdb index 05cca88..c76e897 100644 Binary files a/Analysis/bin/x64/Debug/DAL.pdb and b/Analysis/bin/x64/Debug/DAL.pdb differ diff --git a/Analysis/bin/x64/Debug/Debug.txt b/Analysis/bin/x64/Debug/Debug.txt index 2372791..4a81a40 100644 --- a/Analysis/bin/x64/Debug/Debug.txt +++ b/Analysis/bin/x64/Debug/Debug.txt @@ -1,26 +1,167 @@ -2025-08-31 13:37:28.674----软件Program Main函数开始执行-- -2025-08-31 13:37:28.676--加载配置文件——>开始 -2025-08-31 13:37:28.692--数据库连接 SqlServerName:127.0.0.1 -2025-08-31 13:37:28.693--数据库连接 SqlUserName:sa -2025-08-31 13:37:28.694--数据库连接 SqlPassword:Hexagon123 -2025-08-31 13:37:28.695--数据库连接 SqlDbName:NextSenseStandardDB -2025-08-31 13:37:28.696--加载配置文件——>完成 -2025-08-31 13:37:28.698--Log in using the original authorization mode. -2025-08-31 13:37:29.816--软件授权成功 -2025-08-31 13:37:30.943--数据库连接 SqlServerName:127.0.0.1 -2025-08-31 13:37:30.945--数据库连接 SqlUserName:sa -2025-08-31 13:37:30.946--数据库连接 SqlPassword:Hexagon123 -2025-08-31 13:37:30.947--数据库连接 SqlDbName:NextSenseStandardDB -2025-08-31 13:37:30.947--数据库连接字符串:Data Source=127.0.0.1;initial Catalog=NextSenseStandardDB;User ID=sa;password=Hexagon123; -2025-08-31 13:37:31.262-- 进入显示车身模式!显示车身界面。 -2025-08-31 13:37:31.734--启动PLC写线程! -2025-08-31 13:37:31.757-- 进入解析CSV文件模式,开始解析扫码CSV文件! -2025-08-31 13:37:31.759--连接PLC.... -2025-08-31 13:37:31.760--软件首次启动, Nextsense EH3 CSV读取路径存在;不清空,读取NextSense生成 CSV报告路径下的所有文件,路径为:D:\cherytestEH3 -2025-08-31 13:37:31.761--软件首次启动, Nextsense EHY CSV读取路径存在;不清空,读取NextSense生成 CSV报告路径下的所有文件,路径为:D:\cherytestEHY -2025-08-31 13:37:32.541--Right EH3 UI Refresh tmrRefreshData (strVIN.Length==21):CarType:EHY ;VIN: LNNBBDEC8RDA23997 -2025-08-31 13:37:32.692--Right EHY UI Refresh tmrRefreshData (strVIN.Length==21):CarType:EHY ;VIN: LNNBBDEC8RDA23997 -2025-08-31 13:37:33.435--显示右侧EHY车身数据界面。 -2025-08-31 13:37:33.823--PLC S7连接失败。 -2025-08-31 13:37:33.825--连接PLC失败 -2025-08-31 13:37:35.687---------------海克斯康面隙分析软件程序关闭--------------------- +2025-10-16 11:16:30.678----软件Program Main函数开始执行-- +2025-10-16 11:16:30.681--加载配置文件——>开始 +2025-10-16 11:16:30.703--数据库连接 SqlServerName:127.0.0.1 +2025-10-16 11:16:30.704--数据库连接 SqlUserName:sa +2025-10-16 11:16:30.704--数据库连接 SqlPassword:HexagonPai=3.1415 +2025-10-16 11:16:30.705--数据库连接 SqlDbName:NextSenseStandardDB +2025-10-16 11:16:30.706--加载配置文件——>完成 +2025-10-16 11:16:30.706--Log in using the original authorization mode. +2025-10-16 11:16:32.220--数据库连接 SqlServerName:127.0.0.1 +2025-10-16 11:16:32.220--数据库连接 SqlUserName:sa +2025-10-16 11:16:32.222--数据库连接 SqlPassword:HexagonPai=3.1415 +2025-10-16 11:16:32.223--数据库连接 SqlDbName:NextSenseStandardDB +2025-10-16 11:16:32.224--数据库连接字符串:Data Source=127.0.0.1;initial Catalog=NextSenseStandardDB;User ID=sa;password=HexagonPai=3.1415; +2025-10-16 11:16:32.651-- 进入显示车身模式!显示车身界面。 +2025-10-16 11:16:33.200--启动PLC写线程! +2025-10-16 11:16:33.205-- 进入解析CSV文件模式,开始解析扫码CSV文件! +2025-10-16 11:16:33.239--连接PLC.... +2025-10-16 11:16:33.240--软件首次启动, Nextsense EH3 CSV读取路径存在;不清空,读取NextSense生成 CSV报告路径下的所有文件,路径为:D:\cherytestEH3 +2025-10-16 11:16:33.240--软件首次启动, Nextsense EHY CSV读取路径存在;不清空,读取NextSense生成 CSV报告路径下的所有文件,路径为:D:\cherytestEHY +2025-10-16 11:16:33.322-- 数据库打开连接失败System.Data.SqlClient.SqlException (0x80131904): 用户 'sa' 登录失败。 + 在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) + 在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) + 在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) + 在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) + 在 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) + 在 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) + 在 System.Data.SqlClient.SqlConnection.Open() + 在 DAL.SQLHelper.GetConn() 位置 E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\DAL\SQLHelper.cs:行号 29 +ClientConnectionId:de40ac78-3ce5-4ca0-bbad-3b7196f8d455 +Error Number:18456,State:1,Class:14 +2025-10-16 11:16:33.336--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.351--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.367--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.385--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.403--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.420--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.436--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.450--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.466--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.481--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.496--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.509--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.523--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.536--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.550--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.564--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.579--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.594--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.610--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.623--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.636--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.649--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.663--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.676--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.689--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.702--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.715--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.729--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.743--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.759--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.773--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.788--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.800--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.813--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.827--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.839--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.852--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.866--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.925--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.940--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.954--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.967--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.983--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:33.997--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.013--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.027--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.039--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.053--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.068--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.082--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.097--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.111--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.125--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.138--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.151--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.164--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.178--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.192--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.206--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.220--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.234--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.247--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.260--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.273--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.287--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.300--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.314--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.329--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.342--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.356--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.371--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.385--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.400--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.417--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.432--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.447--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.461--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.474--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.490--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.506--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.520--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.533--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.546--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.559--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.572--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.585--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.599--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.612--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.625--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.641--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.654--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.668--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.680--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.694--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.706--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.720--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.733--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.746--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.760--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.773--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.786--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.801--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.814--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.830--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.845--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.862--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.877--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.892--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.908--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.924--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.938--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.955--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.972--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:34.989--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:35.007--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:35.022--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:35.036--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:35.051--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:35.067--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:35.080--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:35.095--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:35.111--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:35.162--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:35.178--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:35.195--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:35.219--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:35.232--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:35.247--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:35.261--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:35.278--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:35.822--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:35.947--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:36.001--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:36.065--PLC S7连接失败。 +2025-10-16 11:16:36.813--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:37.093--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 +2025-10-16 11:16:38.909--Left EHY UI Refresh m_bgwRefreshCar_DoWork Error:ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。 diff --git a/Analysis/bin/x64/Debug/File/AnalysisConfig.ini b/Analysis/bin/x64/Debug/File/AnalysisConfig.ini index 24669cf..04991d1 100644 --- a/Analysis/bin/x64/Debug/File/AnalysisConfig.ini +++ b/Analysis/bin/x64/Debug/File/AnalysisConfig.ini @@ -72,7 +72,7 @@ TimerRefreshCMMStatus=3 SqlServerName=127.0.0.1 SqlDbName=NextSenseStandardDB SqlUserName=sa -SqlPassword=Hexagon123 +SqlPassword=HexagonPai=3.1415 [TCP] diff --git a/Analysis/bin/x64/Debug/File/PlcAddrDfn_S7.xml b/Analysis/bin/x64/Debug/File/PlcAddrDfn_S7.xml index ad91ca3..ee9f729 100644 --- a/Analysis/bin/x64/Debug/File/PlcAddrDfn_S7.xml +++ b/Analysis/bin/x64/Debug/File/PlcAddrDfn_S7.xml @@ -23,5 +23,6 @@ + \ No newline at end of file diff --git a/Analysis/bin/x64/Debug/NSAnalysis.exe b/Analysis/bin/x64/Debug/NSAnalysis.exe index 7e5858d..ded0ee0 100644 Binary files a/Analysis/bin/x64/Debug/NSAnalysis.exe and b/Analysis/bin/x64/Debug/NSAnalysis.exe differ diff --git a/Analysis/bin/x64/Debug/NSAnalysis.pdb b/Analysis/bin/x64/Debug/NSAnalysis.pdb index eefb2ab..808c0ef 100644 Binary files a/Analysis/bin/x64/Debug/NSAnalysis.pdb and b/Analysis/bin/x64/Debug/NSAnalysis.pdb differ diff --git a/Analysis/bin/x64/Debug/PLCModule.dll b/Analysis/bin/x64/Debug/PLCModule.dll index 1a50002..ac4d69f 100644 Binary files a/Analysis/bin/x64/Debug/PLCModule.dll and b/Analysis/bin/x64/Debug/PLCModule.dll differ diff --git a/Analysis/bin/x64/Debug/PLCModule.pdb b/Analysis/bin/x64/Debug/PLCModule.pdb index 1fce5fb..9cd72ea 100644 Binary files a/Analysis/bin/x64/Debug/PLCModule.pdb and b/Analysis/bin/x64/Debug/PLCModule.pdb differ diff --git a/Analysis/bin/x64/Debug/UserControlClass.dll b/Analysis/bin/x64/Debug/UserControlClass.dll index 0c40b99..681f3ff 100644 Binary files a/Analysis/bin/x64/Debug/UserControlClass.dll and b/Analysis/bin/x64/Debug/UserControlClass.dll differ diff --git a/Analysis/bin/x64/Debug/UserControlClass.pdb b/Analysis/bin/x64/Debug/UserControlClass.pdb index f423061..66f4adf 100644 Binary files a/Analysis/bin/x64/Debug/UserControlClass.pdb and b/Analysis/bin/x64/Debug/UserControlClass.pdb differ diff --git a/Analysis/obj/x64/Debug/9.Analysis.csproj.CoreCompileInputs.cache b/Analysis/obj/x64/Debug/9.Analysis.csproj.CoreCompileInputs.cache index 0cb17ab..c748ccd 100644 --- a/Analysis/obj/x64/Debug/9.Analysis.csproj.CoreCompileInputs.cache +++ b/Analysis/obj/x64/Debug/9.Analysis.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -03c84443b71f030c63a0429746a22a1b50f1ad4c98a70c4066ffe878755a2d1d +fdfed3bba9c9f7623954084279d59626000a8d27847677261a26f4e97b64e650 diff --git a/Analysis/obj/x64/Debug/9.Analysis.csproj.FileListAbsolute.txt b/Analysis/obj/x64/Debug/9.Analysis.csproj.FileListAbsolute.txt index 0798235..d7c2ec2 100644 --- a/Analysis/obj/x64/Debug/9.Analysis.csproj.FileListAbsolute.txt +++ b/Analysis/obj/x64/Debug/9.Analysis.csproj.FileListAbsolute.txt @@ -166,3 +166,94 @@ D:\HexagonProjects\2024-20-奇瑞间隙面差\奇瑞间隙面差总装代码资 D:\HexagonProjects\2024-20-奇瑞间隙面差\奇瑞间隙面差总装代码资料\Code\Analysis\obj\x64\Debug\9.Analysis.csproj.Up2Date D:\HexagonProjects\2024-20-奇瑞间隙面差\奇瑞间隙面差总装代码资料\Code\Analysis\obj\x64\Debug\NSAnalysis.exe D:\HexagonProjects\2024-20-奇瑞间隙面差\奇瑞间隙面差总装代码资料\Code\Analysis\obj\x64\Debug\NSAnalysis.pdb +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\bin\x64\Debug\NLog.config +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\bin\x64\Debug\NSAnalysis.exe.config +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\bin\x64\Debug\NSAnalysis.exe +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\bin\x64\Debug\NSAnalysis.pdb +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\bin\x64\Debug\DAL.dll +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\bin\x64\Debug\Newtonsoft.Json.dll +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\bin\x64\Debug\NLog.dll +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\bin\x64\Debug\PLCModule.dll +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\bin\x64\Debug\Telerik.WinControls.dll +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\bin\x64\Debug\Telerik.WinControls.UI.dll +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\bin\x64\Debug\TelerikCommon.dll +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\bin\x64\Debug\UserControlClass.dll +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\bin\x64\Debug\System.Data.SQLite.dll +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\bin\x64\Debug\UserControlClass.pdb +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\bin\x64\Debug\DAL.pdb +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\bin\x64\Debug\DAL.dll.config +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\bin\x64\Debug\Newtonsoft.Json.xml +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\bin\x64\Debug\NLog.xml +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\bin\x64\Debug\PLCModule.pdb +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\bin\x64\Debug\PLCModule.dll.config +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\bin\x64\Debug\System.Data.SQLite.xml +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\9.Analysis.csproj.AssemblyReference.cache +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\NSAnalysis.AboutSoftwareInfo.resources +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\NSAnalysis.FEH3LeftCarData.resources +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\NSAnalysis.FEH3RightCarData.resources +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\NSAnalysis.CenterControl.resources +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\NSAnalysis.Properties.Resources.resources +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\NSAnalysis.FAddRange.resources +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\NSAnalysis.FEditRange.resources +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\NSAnalysis.FRangeSetup.resources +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\NSAnalysis.FAddTolerance.resources +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\NSAnalysis.FEditTolerance.resources +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\NSAnalysis.TestPageView.resources +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\NSAnalysis.FEHYLeftCarData.resources +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\NSAnalysis.FEHYRightCarData.resources +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\NSAnalysis.FSoftwareSetup.resources +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\NSAnalysis.FToleranceSetup.resources +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\NSAnalysis.ZSFDEMO.resources +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\9.Analysis.csproj.GenerateResource.cache +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\NSAnalysis.exe.licenses +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\9.Analysis.csproj.CoreCompileInputs.cache +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\9.Analysis.csproj.Up2Date +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\NSAnalysis.exe +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\NSAnalysis.pdb +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\Analysis\obj\x64\Debug\NSAnalysis.exe.config +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\NLog.config +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\NSAnalysis.exe.config +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\NSAnalysis.exe +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\NSAnalysis.pdb +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\DAL.dll +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\Newtonsoft.Json.dll +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\NLog.dll +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\PLCModule.dll +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\Telerik.WinControls.dll +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\Telerik.WinControls.UI.dll +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\TelerikCommon.dll +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\UserControlClass.dll +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\System.Data.SQLite.dll +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\UserControlClass.pdb +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\DAL.pdb +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\DAL.dll.config +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\Newtonsoft.Json.xml +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\NLog.xml +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\PLCModule.pdb +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\PLCModule.dll.config +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\Telerik.WinControls.xml +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\Telerik.WinControls.UI.xml +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\bin\x64\Debug\System.Data.SQLite.xml +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\9.Analysis.csproj.AssemblyReference.cache +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\NSAnalysis.AboutSoftwareInfo.resources +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\NSAnalysis.FEH3LeftCarData.resources +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\NSAnalysis.FEH3RightCarData.resources +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\NSAnalysis.CenterControl.resources +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\NSAnalysis.Properties.Resources.resources +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\NSAnalysis.FAddRange.resources +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\NSAnalysis.FEditRange.resources +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\NSAnalysis.FRangeSetup.resources +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\NSAnalysis.FAddTolerance.resources +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\NSAnalysis.FEditTolerance.resources +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\NSAnalysis.TestPageView.resources +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\NSAnalysis.FEHYLeftCarData.resources +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\NSAnalysis.FEHYRightCarData.resources +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\NSAnalysis.FSoftwareSetup.resources +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\NSAnalysis.FToleranceSetup.resources +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\NSAnalysis.ZSFDEMO.resources +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\9.Analysis.csproj.GenerateResource.cache +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\NSAnalysis.exe.licenses +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\9.Analysis.csproj.CoreCompileInputs.cache +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\9.Analysis.csproj.Up2Date +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\NSAnalysis.exe +C:\Users\zhengxuan.zhang\Desktop\奇瑞总装最新源码\Analysis\obj\x64\Debug\NSAnalysis.pdb diff --git a/Analysis/obj/x64/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/Analysis/obj/x64/Debug/DesignTimeResolveAssemblyReferencesInput.cache index 0256d43..01d0f3e 100644 Binary files a/Analysis/obj/x64/Debug/DesignTimeResolveAssemblyReferencesInput.cache and b/Analysis/obj/x64/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ diff --git a/DAL/TMeasureMSSQLDAL.cs b/DAL/TMeasureMSSQLDAL.cs index 0d527da..4938a86 100644 --- a/DAL/TMeasureMSSQLDAL.cs +++ b/DAL/TMeasureMSSQLDAL.cs @@ -431,7 +431,8 @@ namespace DAL // 更新启动测量时间 public int UpdateStartMeasureTime(string carId, DateTime startTime) { - string sql = "UPDATE PlcCarStationLog SET StartMeasureTime = @StartMeasureTime, MeasureStatus = @MeasureStatus WHERE CarID = @CarID AND StartMeasureTime IS NULL"; + string sql = "UPDATE PlcCarStationLog SET StartMeasureTime = @StartMeasureTime, MeasureStatus = @MeasureStatus WHERE CarID = @CarID "; + var parameters = new[] { new SqlParameter("@StartMeasureTime", startTime), @@ -442,17 +443,20 @@ namespace DAL } // 更新离开时间 + public int UpdateLeaveTime(string carId, DateTime leaveTime) { - string sql = "UPDATE PlcCarStationLog SET LeaveTime = @LeaveTime WHERE CarID = @CarID AND LeaveTime IS NULL"; + string sql = "UPDATE PlcCarStationLog SET LeaveTime = @LeaveTime, MeasureStatus = @MeasureStatus WHERE CarID = @CarID"; var parameters = new[] { - new SqlParameter("@LeaveTime", leaveTime), - new SqlParameter("@CarID", carId) - }; + new SqlParameter("@LeaveTime", leaveTime), + new SqlParameter("@MeasureStatus", "测量完成"), + new SqlParameter("@CarID", carId) + }; return SQLHelper.ExecuteNonQuery(sql, parameters, CommandType.Text); } + // 更新测量状态 public int UpdateMeasureStatus(string carId, string measureStatus) { diff --git a/DAL/bin/Debug/DAL.dll b/DAL/bin/Debug/DAL.dll index 48bfbea..f72b99e 100644 Binary files a/DAL/bin/Debug/DAL.dll and b/DAL/bin/Debug/DAL.dll differ diff --git a/DAL/bin/Debug/DAL.pdb b/DAL/bin/Debug/DAL.pdb index 05cca88..c76e897 100644 Binary files a/DAL/bin/Debug/DAL.pdb and b/DAL/bin/Debug/DAL.pdb differ diff --git a/PLCModule/PLCModule/bin/Debug/PLCModule.dll b/PLCModule/PLCModule/bin/Debug/PLCModule.dll index 1a50002..ac4d69f 100644 Binary files a/PLCModule/PLCModule/bin/Debug/PLCModule.dll and b/PLCModule/PLCModule/bin/Debug/PLCModule.dll differ diff --git a/PLCModule/PLCModule/bin/Debug/PLCModule.pdb b/PLCModule/PLCModule/bin/Debug/PLCModule.pdb index 1fce5fb..9cd72ea 100644 Binary files a/PLCModule/PLCModule/bin/Debug/PLCModule.pdb and b/PLCModule/PLCModule/bin/Debug/PLCModule.pdb differ diff --git a/PLCModule/PLCModule/obj/x86/Debug/4.PLCModule.csproj.CoreCompileInputs.cache b/PLCModule/PLCModule/obj/x86/Debug/4.PLCModule.csproj.CoreCompileInputs.cache index 048f375..17eb20d 100644 --- a/PLCModule/PLCModule/obj/x86/Debug/4.PLCModule.csproj.CoreCompileInputs.cache +++ b/PLCModule/PLCModule/obj/x86/Debug/4.PLCModule.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -63991492e601c4145f3f34cf4ebca770038ae1a59793dc4a6713b882acac15c2 +201621fb1d1b6a13dd02957bdd55788b78a518f1920c9fcaaa4e5d45a95d76b2 diff --git a/PLCModule/PLCModule/obj/x86/Debug/4.PLCModule.csproj.FileListAbsolute.txt b/PLCModule/PLCModule/obj/x86/Debug/4.PLCModule.csproj.FileListAbsolute.txt index 729f538..51cbf29 100644 --- a/PLCModule/PLCModule/obj/x86/Debug/4.PLCModule.csproj.FileListAbsolute.txt +++ b/PLCModule/PLCModule/obj/x86/Debug/4.PLCModule.csproj.FileListAbsolute.txt @@ -55,3 +55,22 @@ D:\HexagonProjects\2024-20-奇瑞间隙面差\奇瑞间隙面差总装代码资 D:\HexagonProjects\2024-20-奇瑞间隙面差\奇瑞间隙面差总装代码资料\Code\PLCModule\PLCModule\obj\x86\Debug\4.PLCMod.738FDF59.Up2Date D:\HexagonProjects\2024-20-奇瑞间隙面差\奇瑞间隙面差总装代码资料\Code\PLCModule\PLCModule\obj\x86\Debug\PLCModule.dll D:\HexagonProjects\2024-20-奇瑞间隙面差\奇瑞间隙面差总装代码资料\Code\PLCModule\PLCModule\obj\x86\Debug\PLCModule.pdb +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\PLCModule\PLCModule\bin\Debug\PLCModule.dll.config +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\PLCModule\PLCModule\bin\Debug\PLCModule.dll +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\PLCModule\PLCModule\bin\Debug\PLCModule.pdb +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\PLCModule\PLCModule\bin\Debug\Telerik.WinControls.dll +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\PLCModule\PLCModule\bin\Debug\Telerik.WinControls.UI.dll +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\PLCModule\PLCModule\bin\Debug\TelerikCommon.dll +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\PLCModule\PLCModule\bin\Debug\Telerik.WinControls.xml +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\PLCModule\PLCModule\bin\Debug\Telerik.WinControls.UI.xml +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\PLCModule\PLCModule\obj\x86\Debug\4.PLCModule.csproj.AssemblyReference.cache +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\PLCModule\PLCModule\obj\x86\Debug\PLCModule.FormModbus.resources +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\PLCModule\PLCModule\obj\x86\Debug\PLCModule.FormDebugSiemensS7.resources +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\PLCModule\PLCModule\obj\x86\Debug\PLCModule.PlcAddrSetup.resources +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\PLCModule\PLCModule\obj\x86\Debug\PLCModule.Properties.Resources.resources +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\PLCModule\PLCModule\obj\x86\Debug\4.PLCModule.csproj.GenerateResource.cache +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\PLCModule\PLCModule\obj\x86\Debug\PLCModule.dll.licenses +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\PLCModule\PLCModule\obj\x86\Debug\4.PLCModule.csproj.CoreCompileInputs.cache +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\PLCModule\PLCModule\obj\x86\Debug\4.PLCMod.738FDF59.Up2Date +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\PLCModule\PLCModule\obj\x86\Debug\PLCModule.dll +E:\1AHexagonProjects\2024\CheryFinalAssemblyLine\奇瑞间隙面差总装代码资料-正轩\Code\PLCModule\PLCModule\obj\x86\Debug\PLCModule.pdb diff --git a/PLCModule/PLCModule/obj/x86/Debug/DesignTimeResolveAssemblyReferences.cache b/PLCModule/PLCModule/obj/x86/Debug/DesignTimeResolveAssemblyReferences.cache index 35febce..74b4b18 100644 Binary files a/PLCModule/PLCModule/obj/x86/Debug/DesignTimeResolveAssemblyReferences.cache and b/PLCModule/PLCModule/obj/x86/Debug/DesignTimeResolveAssemblyReferences.cache differ diff --git a/PLCModule/PLCModule/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/PLCModule/PLCModule/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache index 331ce01..cad941a 100644 Binary files a/PLCModule/PLCModule/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache and b/PLCModule/PLCModule/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ diff --git a/UserControlClass/bin/Debug/UserControlClass.dll b/UserControlClass/bin/Debug/UserControlClass.dll index 0c40b99..681f3ff 100644 Binary files a/UserControlClass/bin/Debug/UserControlClass.dll and b/UserControlClass/bin/Debug/UserControlClass.dll differ diff --git a/UserControlClass/bin/Debug/UserControlClass.pdb b/UserControlClass/bin/Debug/UserControlClass.pdb index f423061..66f4adf 100644 Binary files a/UserControlClass/bin/Debug/UserControlClass.pdb and b/UserControlClass/bin/Debug/UserControlClass.pdb differ