diff --git a/Analysis/CenterControl.cs b/Analysis/CenterControl.cs
index 7da1f4e..c6ab28a 100644
--- a/Analysis/CenterControl.cs
+++ b/Analysis/CenterControl.cs
@@ -1,1368 +1,1221 @@
-using System;
+using BaseFunction;
+using DAL;
+using HslCommunication.Profinet.Siemens;
+using Newtonsoft.Json;
+using NSAnalysis.Properties;
+using PLCModule;
+using System;
using System.Collections.Generic;
-using System.ComponentModel;
using System.Data;
using System.Drawing;
-using System.Text;
-using System.Windows.Forms;
-using System.Text.RegularExpressions;
-using System.Collections;
using System.IO;
-using System.Xml;
-using BaseFunction;
-using Telerik.WinControls.UI;
-using Telerik.WinControls;
-using System.Linq;
-using System.Windows.Forms.DataVisualization.Charting;
-using NSAnalysis.Properties;
-using static Telerik.WinControls.UI.ValueMapper;
-using PLCModule;
-using HslCommunication.Profinet.Siemens;
-using static System.Windows.Forms.VisualStyles.VisualStyleElement.TrackBar;
-using System.Threading;
-using UserControlClass;
-using DAL;
-using System.Linq.Expressions;
-using Newtonsoft.Json;
-using System.Net;
-using System.Xml.Linq;
using System.IO.Ports;
-using System.Drawing.Printing;
-using System.Drawing.Text;
-using NSAnalysis;
+using System.Linq;
+using System.Net;
+using System.Text;
+using System.Threading;
+using System.Windows.Forms;
+using Telerik.WinControls;
+using Telerik.WinControls.UI;
+using UserControlClass;
namespace NSAnalysis
{
- public partial class CenterControl : Telerik.WinControls.UI.ShapedForm
- {
- #region 全局变量
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// 2025.08.29 ----------------------------------------------------
+ /// 1、增加对 生成报告数据的备份 √
+ /// 2、增加对上传json的记录和重发
+ /// 3、增加对 PLC启动测量信号的判断 4、PLC通讯阻塞问题
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
- 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;
+ public partial class CenterControl : Telerik.WinControls.UI.ShapedForm
+ {
+ #region 全局变量
- private FEH3LeftCarData fLEH3 = null;
- private FEH3RightCarData fREH3 = null;
+ 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 int iCurrentMeasureItemsFailedCount = 0;
- #region PLC相关变量
+ private FEH3LeftCarData fLEH3 = null;
+ private FEH3RightCarData fREH3 = null;
- private bool bStopPlcNormal = false;
- private static int HeartBeatCount = 0;
- private bool bPlcLiveTickLast = false;
+ private int iCurrentMeasureItemsFailedCount = 0;
+ #region PLC相关变量
- 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 bool bStopPlcNormal = false;
+ private static int HeartBeatCount = 0;
+ private bool bPlcLiveTickLast = false;
- private SerialPort serialTestPort = null;
+ 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 serialPort = null;
- private int iLastMesureCount = 0;
+ private SerialPort serialTestPort = null;
- #endregion PLC相关变量
+ private SerialPort serialPort = null;
+ private int iLastMesureCount = 0;
- #region 分页全局变量
+ #endregion PLC相关变量
- private DataTable PageTable = new DataTable();
+ #region 分页全局变量
- ///
- /// 每页记录数
- ///
- public int pageSize = 20;
+ private DataTable PageTable = new DataTable();
- ///
- /// 总记录数
- ///
- public int recordCount = 0;
+ ///
+ /// 每页记录数
+ ///
+ public int pageSize = 20;
- ///
- /// 总页数
- ///
- public int pageCount = 0;
+ ///
+ /// 总记录数
+ ///
+ public int recordCount = 0;
- ///
- /// 当前页
- ///
- public int currentPage = 0;
+ ///
+ /// 总页数
+ ///
+ public int pageCount = 0;
- #endregion 分页全局变量
+ ///
+ /// 当前页
+ ///
+ public int currentPage = 0;
- #endregion 全局变量
+ #endregion 分页全局变量
- #region 主窗口事件
+ #endregion 全局变量
- public CenterControl()
- {
- InitializeComponent();
- SQLHelper.connStr = DatabaseDfn.SqlConnectStr();
+ // 定义三个文件路径,分别存储 plc, csv 和iot过点数据,位于程序运行目录下 plc.csv iot.csv nextsense.csv
+ private string strPlcDataPath = Application.StartupPath + "\\plc.csv";
- //
+ private string strIotDataPath = Application.StartupPath + "\\iot.csv";
+ private string strNextsenseDataPath = Application.StartupPath + "\\nextsense.csv";
- #region 加载皮肤
+ #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);
+ public CenterControl()
+ {
+ InitializeComponent();
+ SQLHelper.connStr = DatabaseDfn.SqlConnectStr();
- #endregion 加载皮肤
- }
+ #region 加载皮肤
- 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();
-
-
- 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;
- }
- //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();
+ 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 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 测量数据表始化表
-
- #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()
- {
- 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)
- {
- #region 解析完报告后,重新生成客户模板报告
-
- string filePath = strSaveReprotPath + DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + strCarID + ".csv"; //wsp 后期还要再改
- 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(filePath, sb.ToString());
- MyBase.TraceWriteLine("客户csv报告生成完毕,路径为:" + filePath);
-
- #endregion 解析完报告后,重新生成客户模板报告
- }
- 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 (!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成功 ^_^");
- }
- else
- {
- MyBase.TraceWriteLine("EH3数据上传IOT失败!");
- }
-
- #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()
- {
- 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"))
- {
+ 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()
+ {
+ 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);
+ }
+
+ // 向 strNextsenseDataPath 文件中插入数据 strCarID
+ AppendRecord(strCarID, strNextsenseDataPath);
+ }
+ 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";
- }
- }
+ }
+ 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] = "";
- }
+ //测量数据存储到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]);
+ 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;
- }
+ 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);
- }
- #endregion 解析EHY CSV报告
+ // 连续多个车异常
+ if (iCurrentMeasureItemsFailedCount >= ConfigDfn.iFailedCarCount)
+ {
+ MyBase.TraceWriteLine("iCurrentMeasureItemsFailedCount=" + iCurrentMeasureItemsFailedCount.ToString() + "超过报警数量" + ConfigDfn.iFailedCarCount.ToString() + " ;给PLC发送报警10。");
+ PlcObject.InsertWriteQueue(PlcSignalDfn.MeasureError, (byte)10);
+ }
- #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++;
- }
- }
+ // 单个报告内 invalued 项超过某个值
- 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 解析EH3 CSV报告
- #endregion
+ #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++;
+ }
+ }
- #region 界面显示功能
+ 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());
+ }
+ }
- 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);
+ if (ConfigDfn.iIncludeRangeFlag == 1)
+ {
+ dtRowCount = dtRowCount + dtAllRangeDate.Rows.Count;
+ for (int i = 1; i <= dtRowCount; i++)
+ {
+ dgvMeasureContent.Rows[i - 1].HeaderCell.Value = i.ToString();
+ }
- string strTargetRate = Math.Round(ConfigDfn.dFPY2 * 100.00d, 2).ToString("F2") + "%";
+ MyBase.TraceWriteLine("计算合格率的时:包含极差计算项!");
+ }
+ #endregion 计算极差
- 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();
+ #region 界面显示功能
- 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
- {
- }
- }
- }
+ 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);
- #endregion 界面显示功能
+ 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
+ {
+ }
+ }
+ }
- if (ConfigDfn.iCreateReportFlag == 1)
- {
- #region 解析完报告后,重新生成客户模板报告
+ #endregion 界面显示功能
- MyBase.TraceWriteLine("开始生成客户所需要的CSV格式文件:");
- string filePath = strSaveReprotPath + DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + strCarID + ".csv"; //wsp 后期还要再改
- 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(filePath, sb.ToString());
- MyBase.TraceWriteLine("客户EHY csv报告生成完毕,路径为:" + filePath);
+ //生成客户的 CSV文件
+ if (ConfigDfn.iCreateReportFlag == 1)
+ {
+ GenUserReportCSV(strCarID, listCSVTitleInfo, dtAllRangeDate, FPYPercent);
+ }
+ else
+ {
+ MyBase.TraceWriteLine("EH3数据生成报告功能未启用!");
+ }
- #endregion 解析完报告后,重新生成客户模板报告
- }
- 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
+ {
+ #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成功 ^_^");
+ }
+ else
+ {
+ MyBase.TraceWriteLine("EH3数据上传IOT失败!");
+ }
- #region Update Data To IOT
+ #endregion IOT上传功能
+ }
+ }
+ else
+ {
+ MyBase.TraceWriteLine("数据上传IOT功能未启用!");
+ }
- if (ConfigDfn.iStartIOTFlag == 1)
- {
+ #endregion Update Data To IOT
+ }
+ }
+ }
+ //else
+ //{
+ // MyBase.TraceWriteLine("错误:AnalysisNextSenseEH3CSV函数中,检测EH3 CSV 路径不存在:" + ConfigDfn.strNextSenseCSVPath);
+ //}
+ }
+ catch (Exception ex)
+ {
+ MyBase.TraceWriteLine("AnalysisNextSenseCSV 函数分析异常:" + ex.ToString());
+ }
+ }
+ private void AnalysisNextSenseEHYCSV()
+ {
+ 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);
+ }
+
+ // 向 strNextsenseDataPath 文件中插入数据 strCarID
+ AppendRecord(strCarID, strNextsenseDataPath);
+ }
+ 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)
{
@@ -1375,7 +1228,6 @@ namespace NSAnalysis
{
foreach (DataRow row in dtAllRangeDate.Rows)
{
-
CheryIOTData cIOTData = new CheryIOTData();
cIOTData.vin = strCarID;
cIOTData.gfNo = "G";
@@ -1385,7 +1237,7 @@ namespace NSAnalysis
cIOTData.measurementResult = row.ItemArray[5].ToString();
if (cIOTData.measurementResult.ToUpper().Contains("NG"))
{
- if (!cIOTData.actualValue.ToLower().Contains("inv"))
+ 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));
@@ -1423,50 +1275,317 @@ namespace NSAnalysis
{
MyBase.TraceWriteLine("EHY数据上传IOT失败!");
}
-
}
-
}
- 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 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);
+ 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 UploadIOTData(string strCarID, DataTable dtAllRangeDate, string strTargetRate)
+ 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 tempFilePath = Application.StartupPath + "\\ReportBackup";
+
+ if (!Directory.Exists(tempFilePath))
+ {
+ Directory.CreateDirectory(tempFilePath);
+ //日志
+ MyBase.TraceWriteLine("创建ReportBackup文件夹完毕,路径为:" + tempFilePath);
+ }
+
+ 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(tempFilePath, sb.ToString());
+ MyBase.TraceWriteLine("客户自检报告生成完毕,备份路径为:" + targetFilePath);
+
+ // 尝试进行复制到 目标路径 往目标路径copy该文件,并记录是否成功
+ try
+ {
+ File.Copy(tempFilePath, targetFilePath, true);
+ if (File.Exists(targetFilePath))
+ {
+ MyBase.TraceWriteLine("客户自检报告生成并复制成功,路径为:" + targetFilePath);
+ }
+ else
+ {
+ MyBase.TraceWriteLine("客户自检报告复制失败,目标文件不存在:" + targetFilePath);
+ }
+ }
+ catch (Exception ex)
+ {
+ MyBase.TraceWriteLine("客户自检报告复制异常:" + ex.Message);
+ }
+
+ #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 backupPath = Application.StartupPath + "\\ReportBackup";
+ if (!Directory.Exists(backupPath))
+ {
+ Directory.CreateDirectory(backupPath);
+ //日志
+ MyBase.TraceWriteLine("创建ReportBackup文件夹完毕,路径为:" + backupPath);
+ }
+
+ 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(backupPath, sb.ToString());
+ // 记录日志,说明备份成功
+ MyBase.TraceWriteLine("客户EHY csv报告备份完毕,路径为:" + backupPath);
+
+ // 往目标路径copy该文件,并记录是否成功
+ try
+ {
+ File.Copy(backupPath, targetFilePath, true);
+ if (File.Exists(targetFilePath))
+ {
+ MyBase.TraceWriteLine("客户csv报告生成并复制成功,路径为:" + targetFilePath);
+ }
+ else
+ {
+ MyBase.TraceWriteLine("客户csv报告复制失败,目标文件不存在:" + targetFilePath);
+ }
+ }
+ catch (Exception ex)
+ {
+ MyBase.TraceWriteLine("客户csv报告复制异常:" + ex.Message);
+ }
+
+ #endregion 解析完报告后,重新生成客户模板报告
+ }
+
+ private void UploadIOTData(string strCarID, DataTable dtAllRangeDate, string strTargetRate)
{
double dStrictTLower = 0;
double dStrictTUpper = 0;
@@ -1484,7 +1603,6 @@ namespace NSAnalysis
{
foreach (DataRow row in dtAllRangeDate.Rows)
{
-
CheryIOTData cIOTData = new CheryIOTData();
cIOTData.vin = strCarID;
cIOTData.gfNo = "G";
@@ -1532,1762 +1650,1671 @@ namespace NSAnalysis
{
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++;
- }
- }
+ 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 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 解析EHY CSV报告
-
- if (ConfigDfn.iCreateReportFlag == 1)
- {
- #region 解析完报告后,重新生成客户模板报告
-
- MyBase.TraceWriteLine("开始生成客户所需要的CSV格式文件:");
- string filePath = strSaveReprotPath + DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + strCarID + ".csv"; //wsp 后期还要再改
- 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(filePath, sb.ToString());
- MyBase.TraceWriteLine("客户自检报告生成完毕,路径为:" + filePath);
-
- #endregion 解析完报告后,重新生成客户模板报告
- }
- else
- {
- MyBase.TraceWriteLine("iCreateReportFlag=0 : 数据生成报告功能未启用!");
- }
- }
- }
- }
- }
- catch (Exception ex)
- {
- MyBase.TraceWriteLine("AnalysisNextSenseSelfMeasureCSV 函数分析异常:" + ex.ToString());
- }
- }
- #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 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();
-
- #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);
- //从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中完成。");
- }
- else
- {
- MyBase.TraceWriteLine("报错:根据VIN从IOT上获取车型信息失败,不发送给PLC车型信息和颜色信息。 ");
- }
- }
- }
- PLCDfn.CarPassFlag = PlcObject.GetS7ByteData(PlcSignalDfn.CarPassFlag);
- 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 (!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;
- #endregion 循环读取PLC数据块中的信息
- }
- catch (Exception ex)
- {
- MyBase.TraceWriteLine("tmrReadPLCData_Tick exception: " + ex.ToString());
- }
-
-
- tmrReadPLCData.Start();
- }
-
- 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)
- {
- bTickt = !bTickt;
- PlcObject.InsertWriteQueue(PlcSignalDfn.SoftLive, Convert.ToByte(bTickt ? 1 : 0));
- }
-
- 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);
- 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();
- }
-
-
- }
-
- 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);
- }
- }
+ {
+ 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 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();
+
+ #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);
+ //从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中完成。");
+ }
+ else
+ {
+ MyBase.TraceWriteLine("报错:根据VIN从IOT上获取车型信息失败,不发送给PLC车型信息和颜色信息。 ");
+ }
+ }
+ }
+ PLCDfn.CarPassFlag = PlcObject.GetS7ByteData(PlcSignalDfn.CarPassFlag);
+ 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 (!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;
+ #endregion 循环读取PLC数据块中的信息
+ }
+ catch (Exception ex)
+ {
+ MyBase.TraceWriteLine("tmrReadPLCData_Tick exception: " + ex.ToString());
+ }
+
+ tmrReadPLCData.Start();
+ }
+
+ 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)
+ {
+ bTickt = !bTickt;
+ PlcObject.InsertWriteQueue(PlcSignalDfn.SoftLive, Convert.ToByte(bTickt ? 1 : 0));
+ }
+
+ 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);
+ 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 static void AppendRecord(string id, string filePath)
+ {
+ try
+ {
+ // 如果文件不存在则创建并写入标题行
+ if (!File.Exists(filePath))
+ {
+ File.WriteAllText(filePath, "ID,RecordTime\n");
+ }
+
+ // 追加新记录(ID + 当前时间戳)
+ string record = $"{id},{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}\n";
+ File.AppendAllText(filePath, record);
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine($"写入CSV失败: {ex.Message}");
+ }
+ }
+ }
+
+ 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 926e503..ba683a4 100644
--- a/Analysis/CenterControl.designer.cs
+++ b/Analysis/CenterControl.designer.cs
@@ -582,7 +582,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.rpvpSetup;
+ this.RPV.SelectedPage = this.rpvpAnalysis;
this.RPV.Size = new System.Drawing.Size(1918, 1008);
this.RPV.TabIndex = 127;
this.RPV.ViewMode = Telerik.WinControls.UI.PageViewMode.NavigationView;
@@ -665,7 +665,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)))));
@@ -3301,6 +3301,7 @@
this.Text = "海克斯康间隙面差分析系统";
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.CenterControl_FormClosed);
this.Load += new System.EventHandler(this.CenterControl_Load);
+ this.Shown += new System.EventHandler(this.CenterControl_Shown);
((System.ComponentModel.ISupportInitialize)(this.radTitleBar1)).EndInit();
this.radTitleBar1.ResumeLayout(false);
this.radTitleBar1.PerformLayout();
diff --git a/Analysis/Program.cs b/Analysis/Program.cs
index 60be98a..2bd635e 100644
--- a/Analysis/Program.cs
+++ b/Analysis/Program.cs
@@ -91,7 +91,7 @@ namespace NSAnalysis
gAuthorizationMode = FileIni.ReadInt(ConfigDfn.strConfigFile, "Chery", "AuthorizationMode", 1);
#endregion 创建Log文件
- //Application.Run(new CenterControl());
+
if (gAuthorizationMode == 1)
{
MyBase.TraceWriteLine("Log in using the CLMS authorization.");
diff --git a/Analysis/bin/x64/Debug/DAL.dll b/Analysis/bin/x64/Debug/DAL.dll
index afd633c..95759f1 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 1eb3788..157f6cf 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 31836fb..d2687c9 100644
--- a/Analysis/bin/x64/Debug/Debug.txt
+++ b/Analysis/bin/x64/Debug/Debug.txt
@@ -1,24 +1,34 @@
-2025-08-28 00:01:33.190----软件Program Main函数开始执行--
-2025-08-28 00:01:33.191--加载配置文件——>开始
-2025-08-28 00:01:33.206--数据库连接 SqlServerName:127.0.0.1
-2025-08-28 00:01:33.207--数据库连接 SqlUserName:sa
-2025-08-28 00:01:33.207--数据库连接 SqlPassword:Hexagon123
-2025-08-28 00:01:33.207--数据库连接 SqlDbName:NextSenseStandardDB
-2025-08-28 00:01:33.210--加载配置文件——>完成
-2025-08-28 00:01:34.614--数据库连接 SqlServerName:127.0.0.1
-2025-08-28 00:01:34.615--数据库连接 SqlUserName:sa
-2025-08-28 00:01:34.616--数据库连接 SqlPassword:Hexagon123
-2025-08-28 00:01:34.617--数据库连接 SqlDbName:NextSenseStandardDB
-2025-08-28 00:01:34.618--数据库连接字符串:Data Source=127.0.0.1;initial Catalog=NextSenseStandardDB;User ID=sa;password=Hexagon123;
-2025-08-28 00:01:35.112-- 进入显示车身模式!显示车身界面。
-2025-08-28 00:01:35.624--启动PLC写线程!
-2025-08-28 00:01:35.627-- 进入解析CSV文件模式,开始解析扫码CSV文件!
-2025-08-28 00:01:35.650--连接PLC....
-2025-08-28 00:01:35.652--软件首次启动, Nextsense EH3 CSV读取路径存在;不清空,读取NextSense生成 CSV报告路径下的所有文件,路径为:D:\cherytestEH3
-2025-08-28 00:01:35.653--软件首次启动, Nextsense EHY CSV读取路径存在;不清空,读取NextSense生成 CSV报告路径下的所有文件,路径为:D:\cherytestEHY
-2025-08-28 00:01:37.708--PLC S7连接失败。
-2025-08-28 00:01:40.645--连接PLC失败
-2025-08-28 00:01:41.053--Right EH3 UI Refresh tmrRefreshData (strVIN.Length==21):CarType:EHY ;VIN: LNNBBDEC8RDA23997
-2025-08-28 00:01:41.063--Right EHY UI Refresh tmrRefreshData (strVIN.Length==21):CarType:EHY ;VIN: LNNBBDEC8RDA23997
-2025-08-28 00:01:50.246--显示右侧EHY车身数据界面。
-2025-08-28 00:02:31.399---------------海克斯康面隙分析软件程序关闭---------------------
+2025-08-29 22:53:21.911----软件Program Main函数开始执行--
+2025-08-29 22:53:22.122--加载配置文件——>开始
+2025-08-29 22:53:22.436--数据库连接 SqlServerName:127.0.0.1
+2025-08-29 22:53:22.545--数据库连接 SqlUserName:sa
+2025-08-29 22:53:22.573--数据库连接 SqlPassword:Hexagon123
+2025-08-29 22:53:22.576--数据库连接 SqlDbName:NextSenseStandardDB
+2025-08-29 22:53:22.625--加载配置文件——>完成
+2025-08-29 22:53:22.666--Log in using the original authorization mode.
+2025-08-29 22:53:24.548--软件授权成功
+2025-08-29 22:53:27.359--数据库连接 SqlServerName:127.0.0.1
+2025-08-29 22:53:27.361--数据库连接 SqlUserName:sa
+2025-08-29 22:53:27.362--数据库连接 SqlPassword:Hexagon123
+2025-08-29 22:53:27.363--数据库连接 SqlDbName:NextSenseStandardDB
+2025-08-29 22:53:27.364--数据库连接字符串:Data Source=127.0.0.1;initial Catalog=NextSenseStandardDB;User ID=sa;password=Hexagon123;
+2025-08-29 22:53:28.309-- 进入显示车身模式!显示车身界面。
+2025-08-29 22:53:29.581--启动PLC写线程!
+2025-08-29 22:53:29.583-- 进入解析CSV文件模式,开始解析扫码CSV文件!
+2025-08-29 22:53:29.585--连接PLC....
+2025-08-29 22:53:29.586--软件首次启动, Nextsense EH3 CSV读取路径存在;不清空,读取NextSense生成 CSV报告路径下的所有文件,路径为:D:\cherytestEH3
+2025-08-29 22:53:29.588--软件首次启动, Nextsense EHY CSV读取路径存在;不清空,读取NextSense生成 CSV报告路径下的所有文件,路径为:D:\cherytestEHY
+2025-08-29 22:53:31.222--Right EH3 UI Refresh tmrRefreshData (strVIN.Length==21):CarType:EHY ;VIN: LNNBBDEC8RDA23997
+2025-08-29 22:53:31.257--Right EHY UI Refresh tmrRefreshData (strVIN.Length==21):CarType:EHY ;VIN: LNNBBDEC8RDA23997
+2025-08-29 22:53:31.753--PLC S7连接失败。
+2025-08-29 22:53:32.612--显示右侧EHY车身数据界面。
+2025-08-29 22:53:32.619--连接PLC失败
+2025-08-29 22:55:12.952--Test Post Data: {"serno":"312314141","vin":"LNNAJDDU9RDA00213"}
+2025-08-29 22:55:24.984--测试从IOT获取车型信息完成,获取到的原返回值为: Error: System.Net.WebException: 操作超时
+ 在 System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
+ 在 System.Net.HttpWebRequest.GetRequestStream()
+ 在 NSAnalysis.CenterControl.PostJsonToIOT(String url, String jsonData, Nullable`1 timeout) 位置 D:\HexagonProjects\2024-20-奇瑞间隙面差\奇瑞间隙面差总装代码资料\Code\Analysis\CenterControl.cs:行号 1598
+2025-08-29 22:55:25.831--测试从IOT获取车型信息完成,处理后 获取到的返回值为: rror: System.Net.WebException: 操作超时
+ 在 System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
+ 在 System.Net.HttpWebRequest.GetRequestStream()
+ 在 NSAnalysis.CenterControl.PostJsonToIOT(String url, String jsonData, Nullable`1 timeout) 位置 D:\HexagonProjects\2024-20-奇瑞间隙面差\奇瑞间隙面差总装代码资料\Code\Analysis\CenterControl.cs:行号 159
diff --git a/Analysis/bin/x64/Debug/File/AnalysisConfig.ini b/Analysis/bin/x64/Debug/File/AnalysisConfig.ini
index 7a676df..24669cf 100644
--- a/Analysis/bin/x64/Debug/File/AnalysisConfig.ini
+++ b/Analysis/bin/x64/Debug/File/AnalysisConfig.ini
@@ -16,14 +16,14 @@ ReportCSVPath=D:\QMLTest
CLMSModeID=10
;1:CLMS授权
-AuthorizationMode=1
+AuthorizationMode=2
;CarModel 初始化车型
CarModel=EHY
EquipmentNo=NS002
EquipmentName=Hexagon
;1:上传IOT;0:不上传IOT
-StartIOTFlag=0
+StartIOTFlag=1
IOTAddress=http://10.188.2.56:9337/web/httpServlet/api/saveGfResult
IOTCarTypeAddr=http://10.188.2.56:9337/web/httpServlet/api/queryGFModelAndMaterial
;显示车身数据:1:显示;0:不显示
diff --git a/Analysis/bin/x64/Debug/File/PlcAddrDfn_S7.xml b/Analysis/bin/x64/Debug/File/PlcAddrDfn_S7.xml
index 3dd0985..ad91ca3 100644
--- a/Analysis/bin/x64/Debug/File/PlcAddrDfn_S7.xml
+++ b/Analysis/bin/x64/Debug/File/PlcAddrDfn_S7.xml
@@ -13,7 +13,7 @@
-
+
diff --git a/Analysis/bin/x64/Debug/Key/reg.key b/Analysis/bin/x64/Debug/Key/reg.key
index 0b1662f..6b1b574 100644
--- a/Analysis/bin/x64/Debug/Key/reg.key
+++ b/Analysis/bin/x64/Debug/Key/reg.key
@@ -1 +1 @@
-E0257D210D71798C7D342413B6AE6E827FF7CDF4D9B987590FAE35D6DCCAFB886AA76997CF2A0EB6CE1262B84EAA89847CE6CDC5A6F8D2EED117805EA3C58FC41BAE98458ABC8F6E2F7D3BC1F235ECAA82954257F761B6EDE6B01E9FFEE276B41AAB0B16C34FF9D2865DF53073BE883F9187EB6EB61E90DDAAA99D8CEBD45D79C7B258FDE9888FDC6ACCD540C3DB33F837A1CD9E7A11BB9D832E332CAE39B9F387EB6710AB221145D9A6E1F2A1FA298D40262129F295BA060BED16C420C03178782B354A00BAD77335C105D312852C3ACEA15E3CA3F54D6B16970431D3E78069F9EAD8D82F39E953F2D6B51CAEE05D904F400BAFC3F41FF2152E610D26B4CDCF27B257D642BF1F30BD8A177925C11CCA10126D0A2870F62CEE7FBD251DCC6A5C68D62B656F9ADA143E07B02516F84636148A81409E1D928DFB346CD8050354C82CA074EDB89ADCBE6E31AD2D142B58B04F2577A03F4CE43586150CE1C69370F28D58DAEABCB2C5920A9759C3D210DF7422DFAA2D1CB0D95564D2A07A82B2F4B4A497C47C57CE23CB1294C515FACF9EEF0C4A6CB8300317D90ECBC6B30D2ABA0EBE5698648EB59A1B33F770C4EB0F928970D13FD27DA4B9521F223210E3B43345B22C2583B76CFAF265F453C3835D7ADAF002206BD6F4C338D19D0DCCFC21F76526CAFDDEC710742816AFD59794DA9653452A9EF92504C1D44B9ED41133C75E185B80E331B531F0535705493788E09E4B04CF0AF947157D7C9E1D6F7F55ADFF4CA2786E83F4315A170E4C7F461B43515DA399766454E68E89428308D085AF0CC75182F5F21077D3A1A42E53784A13DA35D174311F41CB0C111672D7AF1E3EA0E62530BFD5AED3055D783C8020517B9BDB734E885A536BE72FC79A53B301F6994EE89E1EC3D195C4A95C8E880A1F058A9C745242797396C1505ADE70F66B51C0028466F38DDBFBDB66351B696404DC767D0886B7E903EA892C6D667723939B66376CBABF1035635CB9
+E0257D210D71798C7D342413B6AE6E827FF7CDF4D9B987590FAE35D6DCCAFB886AA76997CF2A0EB6183A1A07A6254010415BCA8EF7EB824B6AC227D17C067A53EC3C074338CE4489D1526A6745F8326A3CCC88BA268537C2982273D504D3FBD0570E4C172917E3829DA2C9683B7D6556C8F161F85B4111525371DC60C71086CCC0DED32D5E81E9A83608FB23D8A98F0CE9A56F4559B73159E51D63588E1D1B1995354C2A43825755B0D8869373E58D59AF678076388BCAD83C36867FE0FCFB50D6200CA3AF3E09CB8A154F46BDBE1651F20EAB4AE02E0D16267C192E4B8AEB473DBD8EA87CFD59933062F5FC46B4C360507E9ABEA928539EDCA1FDE38757CB5D50CD286312A907C8659BB2CD95C1C5EB5FB3FF894808137E7F01C767C4AFF501FE74A18570277994AC542D7CF811A0AAB4B53BF5083C4EC10DE7EC55E72BCEAE80B364DDBA2515CEA190D585F349A2A704ADFD6F7EA8D23C429EEE440239844CEC4ACA624A34933816E72E71BFF1669EC74486B70E0C7DD1418C983FCBC9D35043CB2523A685435B541C7B59F511B00347D7E16E1044B337CDD4A819E499EDE975FE7A553DE2604235916CAE6FC2C906625DAE32A7C2441969B842242AAE869F95C22AE889BC2388CBECD6BD0B3074A656940CAB067C850C554E112A104F445F4F7AAA5A879F2C476B088120CEFA03CB3597CC695AF681C6A54B61DEC63E8F39B25446DAAB73608AF105A1F1C2631780E4A7A202FB03323B82115B2BFE71A26FA516FDAAA00A1D4887BEBE6DF4C8D9130C57E0DA55DAC33220C891A46CB8B73D8EFA47314D8015A7F3267D2C726ACAB59DAC92E8CD24F4D08F3B030A96489379642E982F8E4A8B25FA3979A230A6A7C6B38EEB71B0B3E65305D38AB9AD3C3433BC7A5555AAA21F3807ED4BFE97093359CB1E80BBC539B97F616E017218773297294742D0EAB299DD2FD178FAD7D01FD2FA200E6974BA95123B01367C62EF6F0ECDF715ECA67BFE83
diff --git a/Analysis/bin/x64/Debug/NSAnalysis.exe b/Analysis/bin/x64/Debug/NSAnalysis.exe
index 314bd97..b4ab58d 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 b410c1d..950fcf1 100644
Binary files a/Analysis/bin/x64/Debug/NSAnalysis.pdb and b/Analysis/bin/x64/Debug/NSAnalysis.pdb differ
diff --git a/DAL/SQLHelper.cs b/DAL/SQLHelper.cs
index 7575c7b..0297432 100644
--- a/DAL/SQLHelper.cs
+++ b/DAL/SQLHelper.cs
@@ -112,9 +112,9 @@ namespace DAL
DataTable dt = new DataTable();
cmd = new SqlCommand(cmdText, GetConn());
cmd.CommandType = ct;
- cmd.CommandTimeout = 60;
+ //cmd.CommandTimeout = 60;
- using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
+ using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
dt.Load(sdr);
}
diff --git a/DAL/bin/Debug/DAL.dll b/DAL/bin/Debug/DAL.dll
index afd633c..95759f1 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 1eb3788..157f6cf 100644
Binary files a/DAL/bin/Debug/DAL.pdb and b/DAL/bin/Debug/DAL.pdb differ