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