using HslCommunication; using HslCommunication.ModBus; using Microsoft.Win32; using System; using System.Data.SqlClient; using System.Diagnostics; using System.Drawing; using System.IO; using System.IO.Ports; using System.Linq; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows.Forms; using Excel = Microsoft.Office.Interop.Excel; using ZXing; using NPOI.XSSF.UserModel; using NPOI.SS.UserModel; using NPOI.HSSF.UserModel; using static System.Windows.Forms.VisualStyles.VisualStyleElement.Button; using System.Runtime.InteropServices; using System.Collections.Generic; using NPOI.SS.Formula.Functions; namespace C_Windows_1 { public partial class Form1 : Form { // Token: 0x06000003 RID: 3 [DllImport("ATS_Station_Managment.dll", CallingConvention = CallingConvention.Cdecl)] public static extern int ATS_SelectTestYorN_Batch_LineName(string MainSN, string ATSStationName, string MaterialCode, string Batch, string LineName, string Value2, string Value3, out char TestYorN); // Token: 0x06000004 RID: 4 [DllImport("ATS_Station_Managment.dll", CallingConvention = CallingConvention.Cdecl)] public static extern int ATS_InsertDataRow_JIG_V2(string strlinename, string strbatch, string strlocation, string strstation, string strsn, int iresult, string errorinfo, string JIG_Number, string strswversion, string strremark, string strkeys, string strvalues); public int stage = 10; private int write = 0; private string timestamp; private string fullpressure; private string balanpressure; public static Form1 f1; private double delaytime; private float X, Y; private string DLeakPressure = "0"; private string DLeak = "0"; public OperateResult operateResult21; public OperateResult operateResult22; public OperateResult operateResult23; public ModbusRtu CH1 = new ModbusRtu(); public ModbusRtu CH2 = new ModbusRtu(); //产测计数 public string codeBaudrate; public int ChanSum; public int ChanPass; public static UInt16[] ReadData = new UInt16[1000]; public static UInt16[] ReadData2 = new UInt16[1000]; public string codeport; public static int TIME; //已经使用时间 public static int timeflag = 0; public static int Stipulatetime;//规定时间 public static string tablename; string CODE; public Form1() { f1 = this; InitializeComponent(); Control.CheckForIllegalCrossThreadCalls = false; } //窗口自适应分辨率 private void setTag(Control cons) { foreach (Control con in cons.Controls) { con.Tag = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size; if (con.Controls.Count > 0) setTag(con); } } private void setControls(float newx, float newy, Control cons) { try { foreach (Control con in cons.Controls) { string[] mytag = con.Tag.ToString().Split(new char[] { ':' }); float a = Convert.ToSingle(mytag[0]) * newx; con.Width = (int)a; a = Convert.ToSingle(mytag[1]) * newy; con.Height = (int)(a); a = Convert.ToSingle(mytag[2]) * newx; con.Left = (int)(a); a = Convert.ToSingle(mytag[3]) * newy; con.Top = (int)(a); Single currentSize = Convert.ToSingle(mytag[4]) * newy; con.Font = new System.Drawing.Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit); if (con.Controls.Count > 0) { setControls(newx, newy, con); } } } catch (Exception) { } } //窗口改变尺寸事件 private void Form1_Resize(object sender, EventArgs e) { // throw new Exception("The method or operation is not implemented."); float newx = (this.Width) / X; // float newy = (this.Height - this.statusStrip1.Height) / (Y - y); float newy = this.Height / Y; setControls(newx, newy, this); // this.Text = this.Width.ToString() + " " + this.Height.ToString(); } public enum yiqi { start,//启动 0 rst,//复位 1 prepare,//准备 2 test,//测试 3 finish,//完成(导出数据)4 writedate,//写入数据 5 standby,//待机 6 }; //UInt16转float public static float TwoUInt16ToFloat(UInt16 high, UInt16 low) { Int32 sum = (high << 16) + (low & 0XFFFF); byte[] bs = BitConverter.GetBytes(sum); float f1 = BitConverter.ToSingle(BitConverter.GetBytes(sum), 0); return f1; } public int workstation; public int workstation2; //sta 起始寄存器 //number 读取数量 //shangweiji 存入数组 /// /// ////////////////// /// /// /// /// public OperateResult Modbusread(int sta, int number, UInt16[] shangweiji) { try { int start = number; OperateResult reslutget; reslutget = CH1.Read(Convert.ToString(sta), Convert.ToUInt16(number)); int i, j; i = 0; j = 0; int aaa2 = sta; if (reslutget.IsSuccess == true) for (; sta < aaa2 + number; sta++) { { shangweiji[sta] = (ushort)((reslutget.Content[2 * i] << 8) + reslutget.Content[2 * i + 1]); } i++; } return reslutget; } catch (Exception) { throw; } } public OperateResult Modbusread2(int sta, int number, UInt16[] shangweiji) { try { int start = number; OperateResult reslutget; reslutget = CH2.Read(Convert.ToString(sta), Convert.ToUInt16(number)); int i, j; i = 0; j = 0; int aaa2 = sta; if (reslutget.IsSuccess == true) for (; sta < aaa2 + number; sta++) { { shangweiji[sta] = (ushort)((reslutget.Content[2 * i] << 8) + reslutget.Content[2 * i + 1]); } i++; } return reslutget; } catch (Exception) { throw; } } public void ModbusRtuint(int CH, ModbusRtu X, byte station, string COM, int Bund, int numberbit, StopBits stopbit, Parity parity) { try { X.Close(); X.Station = station; X.SerialPortInni(COM, Bund, numberbit, stopbit, parity); X.Open(); X.ReceiveTimeout = 300; } catch (Exception ex) { MessageBox.Show(ex.Message); if(CH == 1) { lb_CH1ConnectionStatus.Text = "未连接"; lb_CH1ConnectionStatus.ForeColor = Color.Red; } else if (CH == 2) { lb_CH2ConnectionStatus.Text = "未连接"; lb_CH2ConnectionStatus.ForeColor = Color.Red; } } } public void CH1machine()//主要负责测试数据读取,写入 { switch (workstation) { case (int)yiqi.start: operateResult22 = CH1.WriteCoil("540", true); if (operateResult22.IsSuccess) { workstation = (int)yiqi.prepare; } break; case (int)yiqi.rst: operateResult21 = CH1.WriteCoil("86", true); pb_CH1progressBar.Value = 0; if (operateResult21.IsSuccess) { workstation = (int)yiqi.standby; } break; case (int)yiqi.prepare: ReadData[9] = 0; operateResult21 = Modbusread(25, 6, ReadData); lb_CH1Result.Text = ""; if (operateResult21.IsSuccess == true) { int aaa; aaa = ReadData[25] + ReadData[26] + ReadData[27] + ReadData[28] + ReadData[30]; pb_CH1progressBar.Value = 0; pb_CH1progressBar.Maximum = aaa; workstation = (int)yiqi.test; } break; case (int)yiqi.test: Modbusread(8, 2, ReadData); Modbusread(16, 4, ReadData); Modbusread(25, 24, ReadData); int ba = pb_CH1progressBar.Value + 2; if (ba >= pb_CH1progressBar.Maximum) ba = pb_CH1progressBar.Maximum; pb_CH1progressBar.Value = ba; if (ReadData[8] != 0 && (ReadData[9] == 1 || ReadData[9] == 2))//当仪器状态位不为0且有结果时 { workstation = (int)yiqi.finish; } if (ReadData[8] == 0) { System.Threading.Thread.Sleep(300); Modbusread(8, 2, ReadData); if (ReadData[9] == 1 || ReadData[9] == 2) { workstation = (int)yiqi.finish; } else { pb_CH1progressBar.Value = 0; workstation = (int)yiqi.standby; } } break; case (int)yiqi.standby: Modbusread(8, 2, ReadData); if (ReadData[8] != 0 && ReadData[9] == 0) { workstation = (int)yiqi.prepare; } break; case (int)yiqi.finish: Modbusread(8, 2, ReadData); Modbusread(16, 4, ReadData); pb_CH1progressBar.Value = pb_CH1progressBar.Maximum; Display(1, tb_CH1Code.Text); CreateFile(1, tb_CH1Code.Text); tb_CH1Code.Clear(); workstation = (int)yiqi.standby; break; default: break; } } public void CH1MachineDisplay() { switch (workstation) { case (int)yiqi.start: //MachineStatus.Text = "开始测试"; break; case (int)yiqi.rst: lb_CH1yiqiStatus.Text = "复位"; lb_CH1LeakPressure.Text = ""; lb_CH1PressureUnit.Text = ""; lb_CH1LeakUnit.Text = ""; lb_CH1Leak.Text = ""; label2.Text = ""; lb_CH1Result.Text = ""; break; case (int)yiqi.standby: lb_CH1yiqiStatus.Text = "待机中"; tb_CH1Code.Enabled = true; break; case (int)yiqi.prepare: lb_CH1Result.Text = ""; textBox3.Text = ""; textBox3.BackColor = Color.White; break; case (int)yiqi.test: lb_CH1yiqiStatus.Text = "测试中"; switch (ReadData[41]) { case 1: lb_CH1PressureUnit.Text = "KPa"; break; case 2: lb_CH1PressureUnit.Text = "bar"; break; case 0: lb_CH1PressureUnit.Text = "Pa"; break; case 3: lb_CH1PressureUnit.Text = "atm"; break; case 4: lb_CH1PressureUnit.Text = "psi"; break; case 5: lb_CH1PressureUnit.Text = "mmHg";break; } switch (ReadData[40]) { case 0: lb_CH1LeakUnit.Text = "Pa"; break; case 1: lb_CH1LeakUnit.Text = "Kpa"; break; case 2: lb_CH1LeakUnit.Text = "mbar"; break; case 3: lb_CH1LeakUnit.Text = "sccm"; break; case 4: lb_CH1LeakUnit.Text = "CCM/S";break; case 5: lb_CH1LeakUnit.Text = "Pa/s"; break; } if (ReadData[9] == 2) { lb_CH1Result.Text = "NG"; lb_CH1Result.ForeColor = Color.Red; } if (ReadData[9] == 1) { lb_CH1Result.Text = "OK"; lb_CH1Result.ForeColor = Color.Green; } // CH1文本框读取的压力和泄漏量 lb_CH1LeakPressure.Text = TwoUInt16ToFloat(ReadData[17], ReadData[16]).ToString("f3"); lb_CH1Leak.Text = TwoUInt16ToFloat(ReadData[19], ReadData[18]).ToString("f1"); break; case (int)yiqi.finish: if (ReadData[9] == 2) { lb_CH1Result.Text = "NG"; lb_CH1Result.ForeColor = Color.Red; } if (ReadData[9] == 1) { lb_CH1Result.Text = "OK"; lb_CH1Result.ForeColor = Color.Green; } lb_CH1LeakPressure.Text = TwoUInt16ToFloat(ReadData[17], ReadData[16]).ToString("f3"); lb_CH1Leak.Text = TwoUInt16ToFloat(ReadData[19], ReadData[18]).ToString("f1"); lb_CH1yiqiStatus.Text = "测试结束"; break; default: break; } } public void CH2machine() { switch (workstation2) { case (int)yiqi.start: OperateResult operateResult = CH2.WriteCoil("540", true); if (operateResult.IsSuccess) { workstation2 = (int)yiqi.prepare; } break; case (int)yiqi.rst: OperateResult operateResult86 = CH2.WriteCoil("86", true); pb_CH2progressBar.Value = 0; if (operateResult86.IsSuccess) { workstation2 = (int)yiqi.standby; } break; case (int)yiqi.prepare: ReadData2[9] = 0; OperateResult operateResult25 = Modbusread2(25, 6, ReadData2); lb_CH2Result.Text = ""; if (operateResult25.IsSuccess == true) { int aaa; aaa = ReadData2[25] + ReadData2[26] + ReadData2[27] + ReadData2[28] + ReadData2[30]; pb_CH2progressBar.Value = 0; pb_CH2progressBar.Maximum = aaa; workstation2 = (int)yiqi.test; } break; case (int)yiqi.test: Modbusread2(8, 2, ReadData2); Modbusread2(16, 4, ReadData2); Modbusread2(25, 24, ReadData2); int ba = pb_CH2progressBar.Value + 2; if (ba >= pb_CH2progressBar.Maximum) ba = pb_CH2progressBar.Maximum; pb_CH2progressBar.Value = ba; if (ReadData2[8] != 0 && (ReadData2[9] == 1 || ReadData2[9] == 2)) // 当仪器状态位不为0且有结果时 { workstation2 = (int)yiqi.finish; } if (ReadData2[8] == 0) { System.Threading.Thread.Sleep(300); Modbusread2(8, 2, ReadData2); if (ReadData2[9] == 1 || ReadData2[9] == 2) { workstation2 = (int)yiqi.finish; } else { pb_CH2progressBar.Value = 0; workstation2 = (int)yiqi.standby; } } break; case (int)yiqi.standby: Modbusread2(8, 2, ReadData2); if (ReadData2[8] != 0 && ReadData2[9] == 0) { workstation2 = (int)yiqi.prepare; } break; case (int)yiqi.finish: Modbusread2(8, 2, ReadData2); Modbusread2(16, 4, ReadData2); pb_CH2progressBar.Value = pb_CH2progressBar.Maximum; Display(2, tb_CH2Code.Text); CreateFile(2, tb_CH2Code.Text); tb_CH2Code.Clear(); workstation2 = (int)yiqi.standby; break; default: break; } } public void CH2MachineDisplay() { switch (workstation2) { case (int)yiqi.start: //MachineStatus.Text = "开始测试"; break; case (int)yiqi.rst: lb_CH2yiqiStatus.Text = "复位"; lb_CH2LeakPressure.Text = ""; lb_CH2PressureUnit.Text = ""; lb_CH2LeakUnit.Text = ""; lb_CH2Leak.Text = ""; label2.Text = ""; lb_CH2Result.Text = ""; break; case (int)yiqi.standby: lb_CH2yiqiStatus.Text = "待机中"; tb_CH2Code.Enabled = true; break; case (int)yiqi.prepare: lb_CH2Result.Text = ""; textBox3.Text = ""; textBox3.BackColor = Color.White; break; case (int)yiqi.test: lb_CH2yiqiStatus.Text = "测试中"; // 判断单位 switch (ReadData2[41]) { case 0: lb_CH2PressureUnit.Text = "Pa"; break; case 1: lb_CH2PressureUnit.Text = "KPa"; break; case 2: lb_CH2PressureUnit.Text = "bar"; break; case 3: lb_CH2PressureUnit.Text = "atm"; break; case 4: lb_CH2PressureUnit.Text = "psi"; break; case 5: lb_CH2PressureUnit.Text = "mmHg"; break; } switch (ReadData2[40]) { case 0: lb_CH2LeakUnit.Text = "Pa"; break; case 1: lb_CH2LeakUnit.Text = "Kpa"; break; case 2: lb_CH2LeakUnit.Text = "mbar"; break; case 3: lb_CH2LeakUnit.Text = "sccm"; break; case 4: lb_CH2LeakUnit.Text = "CCM/S"; break; case 5: lb_CH2LeakUnit.Text = "Pa/s"; break; } if (ReadData2[9] == 2) { lb_CH2Result.Text = "NG"; lb_CH2Result.ForeColor = Color.Red; } if (ReadData2[9] == 1) { lb_CH2Result.Text = "OK"; lb_CH2Result.ForeColor = Color.Green; } // CH2文本框读取的压力和泄漏量 lb_CH2LeakPressure.Text = TwoUInt16ToFloat(ReadData2[17], ReadData2[16]).ToString("f3"); lb_CH2Leak.Text = TwoUInt16ToFloat(ReadData2[19], ReadData2[18]).ToString("f1"); break; case (int)yiqi.finish: if (ReadData2[9] == 2) { lb_CH2Result.Text = "NG"; lb_CH2Result.ForeColor = Color.Red; } if (ReadData2[9] == 1) { lb_CH2Result.Text = "OK"; lb_CH2Result.ForeColor = Color.Green; } lb_CH2LeakPressure.Text = TwoUInt16ToFloat(ReadData2[17], ReadData2[16]).ToString("f3"); lb_CH2Leak.Text = TwoUInt16ToFloat(ReadData2[19], ReadData2[18]).ToString("f1"); lb_CH2yiqiStatus.Text = "测试结束"; break; default: break; } } private void ReadINI() { string path = System.Environment.CurrentDirectory + "\\Config"; //生成目录 //创建文件夹 if (Directory.Exists(path) == false)//如果不存在就创建file文件夹 { Directory.CreateDirectory(path); } path = path + "\\Config"; if (File.Exists(path)) { ConfigINI config = new ConfigINI(path); this.JIG_Number1.Text = config.IniReadValue("Mes", "JIG_Number1"); this.strlinename.Text = config.IniReadValue("Mes", "strlinename"); this.strbatch.Text = config.IniReadValue("Mes", "strbatch"); this.strlocation.Text = config.IniReadValue("Mes", "strlocation"); this.strbatch.Text = config.IniReadValue("Mes", "strbatch"); this.strstation.Text = config.IniReadValue("Mes", "strstation"); } } //窗口初始化 private void Form1_Load(object sender, EventArgs e) { Control.CheckForIllegalCrossThreadCalls = false; // 窗口自适应分辨率 this.Resize += new EventHandler(Form1_Resize); X = this.Width; Y = this.Height; // y = this.statusStrip1.Height; setTag(this); // 界面初始化 lb_CH1ConnectionStatus.Text = "未连接"; lb_CH1ConnectionStatus.ForeColor = Color.Red; lb_CH2ConnectionStatus.Text = "未连接"; lb_CH2ConnectionStatus.ForeColor = Color.Red; Station.SelectedIndex = 0; lb_CH1Result.Text = " "; lb_CH1yiqiStatus.Text = "待机中"; lb_CH1yiqiStatus.ForeColor = Color.Red; lb_CH1Leak.Text = " "; lb_CH1LeakPressure.Text = " "; MESStatus.Text = ""; CH1Tlight.Text = ""; CH1Tlight.BackColor = Color.White; button1.BackColor = Color.White; button2.BackColor = Color.White; button3.BackColor = Color.White; button4.BackColor = Color.White; chk_CodeLengthSwitch.Checked = true; pb_MESstatus.BackColor = Color.Green; lb_CH2yiqiStatus.Text = "待机中"; lb_CH2yiqiStatus.ForeColor = Color.Red; lb_CH2yiqiPort.Text = ""; lb_CH2ConnectionStatus.Text = ""; lb_CH2LeakPressure.Text = ""; lb_CH2Leak.Text = ""; lb_CH2yiqiStatus.Text = ""; lb_CH2Result.Text = ""; //Scancode.Checked = true; //修改密码ToolStripMenuItem.Enabled = false; //串口设置ToolStripMenuItem.Enabled = false; //基本设置ToolStripMenuItem.Enabled = false; //测试参数ToolStripMenuItem.Enabled = false; //存储设置ToolStripMenuItem.Enabled = false; Baudrate.Visible=false; label7.Visible=false; Read(); ReadINI(); // 通道1 try { Form1.f1.ModbusRtuint(1, Form1.f1.CH1, Convert.ToByte(Station.Text), lb_CH1yiqiPort.Text, Convert.ToInt32(Baudrate.Text), 8, System.IO.Ports.StopBits.One, System.IO.Ports.Parity.None ); } catch (Exception ex) { MessageBox.Show(ex.Message); } if (Form1.f1.CH1.IsOpen()) { bt_CH1Connect.Enabled = false; lb_CH1ConnectionStatus.Text = "已连接"; lb_CH1ConnectionStatus.ForeColor = Color.Green; } Task.Run(() => { workstation = (int)yiqi.standby; while (true) { CH1machine(); // 仪器读取线程 CH1MachineDisplay(); // 仪器显示线程 } }); // 通道2 try { var regName = new JsonConfig("config.json"); lb_CH2yiqiPort.Text = regName.GetValue($"CH2yiqiPort", "COM9"); string CH2yiqiBaudrate = regName.GetValue($"CH2yiqiBaudrate", "9600"); Form1.f1.ModbusRtuint(2, Form1.f1.CH2, Convert.ToByte(Station.Text), lb_CH2yiqiPort.Text, Convert.ToInt32(CH2yiqiBaudrate), 8, System.IO.Ports.StopBits.One, System.IO.Ports.Parity.None ); } catch (Exception ex) { MessageBox.Show(ex.Message); } if (Form1.f1.CH2.IsOpen()) { bt_CH2Connect.Enabled = false; lb_CH2ConnectionStatus.Text = "已连接"; lb_CH2ConnectionStatus.ForeColor = Color.Green; } Task.Run(() => { workstation2 = (int)yiqi.standby; while (true) { CH2machine(); // 仪器读取线程 CH2MachineDisplay(); // 仪器显示线程 } }); } // 点击“连接串口”按钮,连接串口 private void BtnCon1_Click(object sender, EventArgs e) { try { Form1.f1.ModbusRtuint(1, Form1.f1.CH1, Convert.ToByte(Form1.f1.Station.Text), lb_CH1yiqiPort.Text, Convert.ToInt32(Baudrate.Text), 8, System.IO.Ports.StopBits.One, System.IO.Ports.Parity.None); if (CH1.IsOpen() is true) { lb_CH1ConnectionStatus.Text = "已连接"; lb_CH1ConnectionStatus.ForeColor = Color.Green; bt_CH1Connect.Enabled = false; } } catch (Exception ex) { MessageBox.Show(ex.Message); } } // CH1关闭串口 private void BtnBreak_Click(object sender, EventArgs e) { try { if(CH1.IsOpen()) { CH1.Close(); } if (CH1.IsOpen() is false) { lb_CH1ConnectionStatus.Text = "未连接"; lb_CH1ConnectionStatus.ForeColor = Color.Red; bt_CH1Connect.Enabled = true; } } catch (Exception ex) { MessageBox.Show(ex.Message); } } //接收数据 private void SerialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { //try //{ // System.Threading.Thread.Sleep(50); // if (!SerialPort1.IsOpen) return; // int len = SerialPort1.BytesToRead;//获取可以读取的字节数 // if (MachineStatus.Text == "测试中") // { // SerialPort1.DiscardInBuffer(); // } // else if (len > 1) // { // byte[] buff = new byte[len];//创建缓存数据数组 // SerialPort1.Read(buff, 0, len);//把数据读取到buff数组 // Invoke((new System.Action(() => //接收计数 // { // string code = Encoding.Default.GetString(buff); // if (!code.Contains("ERROR")) // { // Code.Text = string.Empty; // CodeJudge(code, 1); // } // //CodePort1.DiscardInBuffer(); // }))); // } // else // { // return; // } //} //catch (Exception ex) //{ // //MessageBox.Show("Code:" + ex.Message); // MessageBox.Show(ex.StackTrace); //} } Log log = new Log(); //一百毫秒读状态位的定时器 private void Timer1_Tick(object sender, EventArgs e) { TIME++; if (TIME >= Stipulatetime) { Timer1.Stop(); this.Hide(); Activationcode atc = new Activationcode(); atc.ShowDialog(); } } //启动仪器 private void BtnStart_Click(object sender, EventArgs e) { try { workstation = (int)yiqi.start; } catch (Exception ex) { MessageBox.Show(ex.Message); } } //复位按钮 private void BtnReset_Click(object sender, EventArgs e) { try { workstation = (int)yiqi.rst; //Code.Clear(); tb_CH1Code.Focus(); tb_CH1Code.Enabled = true; } catch (Exception ex) { MessageBox.Show(ex.Message); } } // CH2仪器启动 private void bt_CH2yiqiStart_Click(object sender, EventArgs e) { try { workstation2 = (int)yiqi.start; } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void bt_CH2yiqiReset_Click(object sender, EventArgs e) { try { workstation2 = (int)yiqi.rst; tb_CH2Code.Focus(); tb_CH2Code.Enabled = true; } catch (Exception ex) { MessageBox.Show(ex.Message); } } public short Digitalconversion(ushort readdata) { int Z; if (readdata > 32768) Z = (int)readdata - 65536; else Z = readdata; return (short)Z; } // 客户需求表格 private void AddExcel_xlsx(int CH, string code) { try { string fileName; string date = DateTime.Now.ToString("yyyyMMdd"); string nowDateTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff"); if (string.IsNullOrEmpty(path.Text)) { fileName = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\" + date + ".xlsx"; } else { fileName = path.Text + "\\leaktest_" + date + ".xlsx"; } // 准备当前工位数据 string[] chxData = PrepareCHxData(CH, code, nowDateTime); List rowData = new List(); rowData.Add(nowDateTime); rowData.Add(code); rowData.Add(CH == 1 ? "左":"右"); rowData.AddRange(chxData); if (File.Exists(fileName)) { // 文件存在则追加数据 using (FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite)) { XSSFWorkbook workbook = new XSSFWorkbook(file); ISheet sheet = workbook.GetSheet("Sheet1"); // 检查唯一 if (!IsTimeUnique(sheet, nowDateTime)) { // 毫秒加1 DateTime originalTime = DateTime.ParseExact(nowDateTime, "yyyy/MM/dd HH:mm:ss.fff", null); DateTime newTime = originalTime.AddMilliseconds(1); nowDateTime = newTime.ToString("yyyy/MM/dd HH:mm:ss.fff"); rowData[0] = nowDateTime; } // 尾行添加数据 int lastRowNum = sheet.LastRowNum + 1; IRow newRow = sheet.CreateRow(lastRowNum); for (int i = 0; i < rowData.Count; i++) { newRow.CreateCell(i).SetCellValue(rowData[i]); } using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write)) { workbook.Write(fs); } } } else { // 文件不存在则创建新文件 XSSFWorkbook workbook = new XSSFWorkbook(); ISheet sheet = workbook.CreateSheet("Sheet1"); // 设置列宽 SetColumnWidths(sheet); // 创建表头 string[] headers = CreateHeaders(); IRow headerRow = sheet.CreateRow(0); for (int i = 0; i < headers.Length; i++) { headerRow.CreateCell(i).SetCellValue(headers[i]); } // 添加数据行 IRow dataRow = sheet.CreateRow(1); for (int i = 0; i < rowData.Count; i++) { dataRow.CreateCell(i).SetCellValue(rowData[i]); } using (FileStream file = new FileStream(fileName, FileMode.Create, FileAccess.Write)) { workbook.Write(file); } } } catch (Exception ex) { MessageBox.Show($"保存Excel文件异常:{ex.Message}"); } } // 准备数据 private string[] PrepareCHxData(int channel, string code, string testTime) { if (channel == 1) { return new string[] { TwoUInt16ToFloat(ReadData[17], ReadData[16]).ToString("f3"), (ReadData[26] / 10.0).ToString("f1"), (ReadData[27] / 10.0).ToString("f1"), TwoUInt16ToFloat(ReadData[19], ReadData[18]).ToString("f1") }; } else if (channel == 2) { return new string[] { TwoUInt16ToFloat(ReadData2[17], ReadData2[16]).ToString("f3"), (ReadData2[26] / 10.0).ToString("f1"), (ReadData2[27] / 10.0).ToString("f1"), TwoUInt16ToFloat(ReadData2[19], ReadData2[18]).ToString("f1"), }; } return Array.Empty(); } // 设置列宽 private void SetColumnWidths(ISheet sheet) { sheet.SetColumnWidth(0, 24 * 256); sheet.SetColumnWidth(1, 20 * 256); sheet.SetColumnWidth(3, 25 * 256); sheet.SetColumnWidth(4, 22 * 256); sheet.SetColumnWidth(5, 18 * 256); sheet.SetColumnWidth(6, 23 * 256); } // 创建表头 private string[] CreateHeaders() { return new string[] { "测试时间", "条形码", "工位", $"气密性测试充气气压({lb_CH1PressureUnit.Text})", $"气密性测试保压时间(s)", $"气密性测试时间(s)", $"气密性测试泄露量({lb_CH1LeakUnit.Text})", }; } // 检查时间是否唯一 private bool IsTimeUnique(ISheet sheet, string testTime) { for (int i = 1; i <= sheet.LastRowNum; i++) // 从第1行开始(跳过表头) { IRow row = sheet.GetRow(i); if (row != null && row.GetCell(0) != null) { string existingTime = row.GetCell(0).ToString(); if (existingTime == testTime) { return false; } } } return true; } private void AddExcel2(int CH, string code) { try { string FileName; string Date = DateTime.Now.ToString("yyyyMMdd"); string nowdate = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); if (path.Text == "") // 若路径处不输入则获取桌面路径 { FileName = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\" + DateTime.Now.ToString("yyyyMMdd") + ".xls"; } else { FileName = path.Text + "\\" + "leaktest" + Date + ".xls"; } if (File.Exists(FileName)) { FileStream file = new FileStream(FileName, FileMode.Open, FileAccess.ReadWrite); HSSFWorkbook workbook = new HSSFWorkbook(file); ISheet sheet = workbook.GetSheet("Sheet1"); int startRow = sheet.LastRowNum + 1; IRow newRow = sheet.CreateRow(startRow); string[] data = Array.Empty(); if (CH == 1) { data = new string[] { DateTime.Now.ToString(), code, ReadData[25] / 10.0 + "s", ReadData[26] / 10.0 + "s", ReadData[27] / 10.0 + "s", ReadData[28] / 10.0 + "s", TwoUInt16ToFloat(ReadData[33], ReadData[32]).ToString(), TwoUInt16ToFloat(ReadData[47], ReadData[46]).ToString(), ReadData[36].ToString(), (Digitalconversion(ReadData[37])).ToString(), TwoUInt16ToFloat(ReadData[39], ReadData[38]).ToString(), TwoUInt16ToFloat(ReadData[45], ReadData[44]).ToString(), lb_CH1Result.Text, TwoUInt16ToFloat(ReadData[17], ReadData[16]).ToString(), lb_CH1PressureUnit.Text, TwoUInt16ToFloat(ReadData[19], ReadData[18]).ToString("f1") , lb_CH1LeakUnit.Text }; //行名 } else if (CH == 2) { data = new string[] { DateTime.Now.ToString(), code, ReadData2[25] / 10.0 + "s", ReadData2[26] / 10.0 + "s", ReadData2[27] / 10.0 + "s", ReadData2[28] / 10.0 + "s", TwoUInt16ToFloat(ReadData2[33], ReadData2[32]).ToString(), TwoUInt16ToFloat(ReadData2[47], ReadData2[46]).ToString(), ReadData2[36].ToString(), (Digitalconversion(ReadData2[37])).ToString(), TwoUInt16ToFloat(ReadData2[39], ReadData2[38]).ToString(), TwoUInt16ToFloat(ReadData2[45], ReadData2[44]).ToString(), lb_CH2Result.Text, TwoUInt16ToFloat(ReadData2[17], ReadData2[16]).ToString(), lb_CH2PressureUnit.Text, TwoUInt16ToFloat(ReadData2[19], ReadData2[18]).ToString("f1") , lb_CH2LeakUnit.Text }; //行名 } for (int i = 0; i < data.Length; i++) { newRow.CreateCell(i).SetCellValue(data[i]); } using (FileStream fileStream = new FileStream(FileName, FileMode.Create, FileAccess.Write)) { workbook.Write(fileStream); fileStream.Close(); } } else { // 如果文件不存在,则创建文件并添加数据 HSSFWorkbook workbook = new HSSFWorkbook(); ISheet sheet = workbook.CreateSheet("Sheet1"); string[] headers = new string[] { "时间", "条形码", "充气时间", "平衡时间", "检测时间", "排气时间", "充气压力上限", "充气压力下限", "大漏压差上限", "大漏压差下限", "泄漏量上限", "泄漏量下限", "测试结果", "测试压力", "压力单位", "泄漏量", "泄漏量单位" };//列名; IRow headerRow = sheet.CreateRow(0); for (int i = 0; i < headers.Length; i++) { headerRow.CreateCell(i).SetCellValue(headers[i]); } string[] data = Array.Empty(); if (CH == 1) { data = new string[] { DateTime.Now.ToString(), code, ReadData[25] / 10.0 + "s", ReadData[26] / 10.0 + "s", ReadData[27] / 10.0 + "s", ReadData[28] / 10.0 + "s", TwoUInt16ToFloat(ReadData[33], ReadData[32]).ToString(), TwoUInt16ToFloat(ReadData[47], ReadData[46]).ToString(), ReadData[36].ToString(), (Digitalconversion(ReadData[37])).ToString(), TwoUInt16ToFloat(ReadData[39], ReadData[38]).ToString(), TwoUInt16ToFloat(ReadData[45], ReadData[44]).ToString(), lb_CH1Result.Text, TwoUInt16ToFloat(ReadData[17], ReadData[16]).ToString(), lb_CH1PressureUnit.Text, TwoUInt16ToFloat(ReadData[19], ReadData[18]).ToString("f1"), lb_CH1LeakUnit.Text }; // 行名 } else if (CH == 2) { data = new string[] { DateTime.Now.ToString(), code, ReadData2[25] / 10.0 + "s", ReadData2[26] / 10.0 + "s", ReadData2[27] / 10.0 + "s", ReadData2[28] / 10.0 + "s", TwoUInt16ToFloat(ReadData2[33], ReadData2[32]).ToString(), TwoUInt16ToFloat(ReadData2[47], ReadData2[46]).ToString(), ReadData2[36].ToString(), (Digitalconversion(ReadData2[37])).ToString(), TwoUInt16ToFloat(ReadData2[39], ReadData2[38]).ToString(), TwoUInt16ToFloat(ReadData2[45], ReadData2[44]).ToString(), lb_CH2Result.Text, TwoUInt16ToFloat(ReadData2[17], ReadData2[16]).ToString(), lb_CH2PressureUnit.Text, TwoUInt16ToFloat(ReadData2[19], ReadData2[18]).ToString("f1"), lb_CH2LeakUnit.Text }; // 行名 } IRow dataRow = sheet.CreateRow(1); for (int i = 0; i < data.Length; i++) { dataRow.CreateCell(i).SetCellValue(data[i]); } using (FileStream file = new FileStream(FileName, FileMode.Create, FileAccess.Write)) { workbook.Write(file); file.Close(); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void AddExcel() { if (path.Text.Length == 0) { path.Text = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); } string FileDialog = path.Text; //创建文件夹 if(!Directory.Exists(FileDialog))//如果不存在就创建file文件夹 { Directory.CreateDirectory(FileDialog); } string file = DateTime.Now.ToString("yyyyMMdd"); string FileName = FileDialog + "\\" + file+"测试记录" + ".xlsx"; string filepath; filepath = FileName; Excel.Application xapp = new Excel.Application(); if (!File.Exists(filepath))//判断所选路径是否有文件 { //若不存在该文件,则创建新文件 var str1 = new Microsoft.Office.Interop.Excel.Application(); Excel.Workbooks xbook1 = str1.Workbooks; Excel.Workbook xbook2 = str1.Workbooks.Add(true); xbook2.SaveAs(filepath);//按照指定路径存储新文件 xbook2.Close(); } //若存在该文件,则打开文件并写入数据 Excel.Workbook xbook = xapp.Workbooks._Open(filepath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); Excel.Worksheet xsheet = (Excel.Worksheet)xbook.Sheets[1]; string nowdate = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); //string[] fieldArr = { "时间", "条形码", "充气时间", "平衡时间", "检测时间", "排气时间", "充气压力上限", "充气压力下限", "大漏压差上限", "大漏压差下限", "泄漏量上限", "泄漏量下限", "测试结果", "测试压力", "压力单位", "泄漏量", "泄漏量单位" };//列名 //string[] dataArr = { DateTime.Now.ToString(), Code.Text, FullTime.Text + "s", BalanTime.Text + "s", TestTime1.Text + "s", ExhaustTime.Text + "s", FPtoplimit.Text + PressureUnit.Text, FPlowlimit.Text + PressureUnit.Text, BLeakTPre.Text + "Pa", BLeakLPre.Text + "Pa", Leaktoplimit.Text + LeakUnit.Text, Leaklowlimit.Text + LeakUnit.Text, Tlight.Text, DLeakPressure, PressureUnit.Text, DLeak, LeakUnit.Text }; //行名 string[] fieldArr = { "时间", "条形码", "充气时间", "平衡时间", "检测时间", "排气时间", "充气压力上限", "充气压力下限", "大漏压差上限", "大漏压差下限", "泄漏量上限", "泄漏量下限", "测试结果", "测试压力", "压力单位", "泄漏量", "泄漏量单位" };//列名 //string[] fieldArr = { I18N.GetLangText(dicLang, "时间"), I18N.GetLangText(dicLang, "条形码"), I18N.GetLangText(dicLang, "充气时间"), I18N.GetLangText(dicLang, "平衡时间"), I18N.GetLangText(dicLang, "检测时间"), I18N.GetLangText(dicLang, "排气时间"), // I18N.GetLangText(dicLang, "充气压力上限"), I18N.GetLangText(dicLang, "充气压力下限"), I18N.GetLangText(dicLang, "大漏压差上限"), I18N.GetLangText(dicLang, "大漏压差下限"), // I18N.GetLangText(dicLang, "泄漏量上限") , I18N.GetLangText(dicLang, "泄漏量下限"),I18N.GetLangText(dicLang, "测试结果"), I18N.GetLangText(dicLang, "测试压力"), I18N.GetLangText(dicLang, "压力单位"), I18N.GetLangText(dicLang, "泄漏量"), // I18N.GetLangText(dicLang, "泄漏量单位") };//列名 string[] dataArr = {DateTime.Now.ToString(),tb_CH1Code.Text, ReadData[25] / 10.0 + "s", ReadData[26] / 10.0 + "s", ReadData[27] / 10.0 + "s", ReadData[28] / 10.0 + "s", TwoUInt16ToFloat(ReadData[33], ReadData[32]).ToString(), TwoUInt16ToFloat(ReadData[47], ReadData[46]).ToString(), ReadData[36].ToString() , ( Digitalconversion( ReadData[37])).ToString() , TwoUInt16ToFloat(ReadData[39], ReadData[38]).ToString() , TwoUInt16ToFloat(ReadData[45], ReadData[44]).ToString() ,lb_CH1Result.Text , TwoUInt16ToFloat(ReadData[17], ReadData[16]).ToString() , lb_CH1PressureUnit.Text , TwoUInt16ToFloat(ReadData[19], ReadData[18]).ToString() , lb_CH1LeakUnit.Text}; int c = xsheet.UsedRange.Rows.Count; // label1.Text = c.ToString(); int a; for (a = 0; a < fieldArr.Length; a++) { xsheet.Cells[a + 1][1] = fieldArr[a]; } int b; // int j; for (b = 0; b < dataArr.Length; b++) { Excel.Range cell = (Excel.Range)xsheet.Cells[b + 1][c + 1]; cell.NumberFormat = "@"; xsheet.Cells[b + 1][c + 1] = dataArr[b];//将数据插入 } // string result="40"; // xsheet.Cells[1][1] = result; xbook.Save(); xsheet = null; xbook.Close(); xapp.DisplayAlerts = false; xapp.Quit(); xapp = null; GC.Collect(); } //将数据写入TXT private void AddTXT(int CH, string code) { string fileName; string file = DateTime.Now.ToString("yyyyMMdd"); if (path.Text == "") { fileName = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\leaktest.txt"; } else { fileName = path.Text + "\\" + file + ".txt"; } string str1 = ""; if (CH == 1) { str1 = "时间 " + DateTime.Now + " 条形码 " + code + " 充气时间 " + ReadData[25] / 10.0 + "s" + " 平衡时间 " + ReadData[26] / 10.0 + "s" + " 检测时间 " + ReadData[27] / 10.0 + "s" + " 排气时间 " + ReadData[28] / 10.0 + "s" + " 充气压力上限 " + TwoUInt16ToFloat(ReadData[33], ReadData[32]).ToString() + lb_CH1PressureUnit.Text + " 充气压力下限 " + TwoUInt16ToFloat(ReadData[47], ReadData[46]).ToString() + lb_CH1PressureUnit.Text + " 大漏压差上限 " + ReadData[36] + lb_CH1LeakUnit.Text + " 大漏压差下限 " + (Digitalconversion(ReadData[37])).ToString() + lb_CH1LeakUnit.Text + " 泄漏量上限 " + TwoUInt16ToFloat(ReadData[39], ReadData[38]).ToString() + lb_CH1LeakUnit.Text + " 泄漏量下限 " + TwoUInt16ToFloat(ReadData[45], ReadData[44]).ToString() + lb_CH1LeakUnit.Text + " 测试结果 " + lb_CH1Result.Text + " 测试压力 " + TwoUInt16ToFloat(ReadData[17], ReadData[16]).ToString() + " 压力单位 " + lb_CH1PressureUnit.Text + " 泄漏量 " + lb_CH1Leak + " 泄漏量单位 " + lb_CH1LeakUnit.Text + " \n"; } else if (CH == 2) { str1 = "时间 " + DateTime.Now + " 条形码 " + code + " 充气时间 " + ReadData2[25] / 10.0 + "s" + " 平衡时间 " + ReadData2[26] / 10.0 + "s" + " 检测时间 " + ReadData2[27] / 10.0 + "s" + " 排气时间 " + ReadData2[28] / 10.0 + "s" + " 充气压力上限 " + TwoUInt16ToFloat(ReadData2[33], ReadData2[32]).ToString() + lb_CH2PressureUnit.Text + " 充气压力下限 " + TwoUInt16ToFloat(ReadData2[47], ReadData2[46]).ToString() + lb_CH2PressureUnit.Text + " 大漏压差上限 " + ReadData2[36] + lb_CH2LeakUnit.Text + " 大漏压差下限 " + (Digitalconversion(ReadData2[37])).ToString() + lb_CH2LeakUnit.Text + " 泄漏量上限 " + TwoUInt16ToFloat(ReadData2[39], ReadData2[38]).ToString() + lb_CH2LeakUnit.Text + " 泄漏量下限 " + TwoUInt16ToFloat(ReadData2[45], ReadData2[44]).ToString() + lb_CH2LeakUnit.Text + " 测试结果 " + lb_CH2Result.Text + " 测试压力 " + TwoUInt16ToFloat(ReadData2[17], ReadData2[16]).ToString() + " 压力单位 " + lb_CH2PressureUnit.Text + " 泄漏量 " + lb_CH2Leak + " 泄漏量单位 " + lb_CH2LeakUnit.Text + " \n"; } System.IO.File.AppendAllText(fileName, str1); } //将数据写入数据库 private void AddDatebase() { try { // Form2 Form2 = new Form2(); string database = ReadRegistryKey("datasource"); string userid = ReadRegistryKey("userid"); string pwd = ReadRegistryKey("pwd"); string dataname = ReadRegistryKey("dataname"); string nowday = DateTime.Now.ToString("yyyy_MM_dd"); string connectionString = "Data source=" + database; connectionString += ";Initial Catalog=master;User Id=" + userid + ";Password=" + pwd;//定义连接字符串 SqlConnection con = new SqlConnection(connectionString);//创建连接 con.Open();//打开并连接数据库 if (dataname == "") { dataname = "LeakTest"; } string selectString = "Select * FROM master..SYSDATABASES WHERE name ='" + dataname + "'";//输入sql语句,判断是否存在名为LeakTest的数据库 SqlCommand cmd = new SqlCommand(selectString, con); var str1 = cmd.ExecuteScalar(); if (str1 is null) { cmd.CommandText = "CREATE DATABASE " + dataname;//如果不存在则新建数据库 cmd.ExecuteNonQuery(); } con.Close(); connectionString = "Data source=" + database; connectionString += ";Initial Catalog=" + dataname + "; User Id=" + userid + ";Password=" + pwd; SqlConnection con2 = new SqlConnection(connectionString);//和名为LeakTest的数据库建立连接 con2.Open(); string selectString2 = $"select * from dbo.sysobjects where name=('{tablename}')"; SqlCommand cmd2 = new SqlCommand(selectString2, con2); var str2 = cmd2.ExecuteScalar(); if (str2 is null) { //若没有表格则新建表格 cmd2.CommandText = $"CREATE TABLE {tablename} ([时间] DATETIME ,[条形码] VarChar(50),[充气时间] INT,[平衡时间] INT,[检测时间]" + " INT,[排气时间] INT,[充气压力上限] FLOAT,[充气压力下限] FLOAT,[大漏压差上限] FLOAT,[大漏压差下限] FLOAT,[泄漏量上限] " + "FLOAT,[泄漏量下限] FLOAT,[测试结果] VarChar(50),[测试压力] FLOAT,[压力单位] VarChar(50),[泄漏量] FLOAT,[泄漏量单位] VarChar(50))"; //Office is the named range. cmd2.ExecuteNonQuery(); } //往表格插入数据 cmd2.CommandText = $"INSERT INTO {tablename} (时间, 条形码, 充气时间, 平衡时间, 检测时间," + " 排气时间, 充气压力上限, 充气压力下限, 大漏压差上限, 大漏压差下限, 泄漏量上限, 泄漏量下限, 测试结果, 测试压力, 压力单位, 泄漏量, 泄漏量单位) VALUES(" + "'" + DateTime.Now + "', '" + tb_CH1Code.Text + "', '" + ReadData[25] / 10.0 + "', '" + ReadData[26] / 10.0 + "', '" + ReadData[27] / 10.0 + "', '" + ReadData[28] / 10.0 + "', '" + TwoUInt16ToFloat(ReadData[33], ReadData[32]).ToString() + "', '" + TwoUInt16ToFloat(ReadData[47], ReadData[46]).ToString() + "', '" + ReadData[36].ToString() + "', '" + (Digitalconversion(ReadData[37])).ToString() + "', '" + TwoUInt16ToFloat(ReadData[39], ReadData[38]).ToString() + "', '" + TwoUInt16ToFloat(ReadData[45], ReadData[44]).ToString() + "', '" + lb_CH1Result.Text + "', '" + TwoUInt16ToFloat(ReadData[17], ReadData[16]).ToString() + "', '" + lb_CH1PressureUnit.Text + "', '" + TwoUInt16ToFloat(ReadData[19], ReadData[18]).ToString() + "', '" + lb_CH1LeakUnit.Text + "')"; cmd2.ExecuteNonQuery(); con2.Close(); } catch (SqlException ex) { MessageBox.Show(ex.Message); } } //将数据写入CSV文件中 private void AddCSV() { try { string file = DateTime.Now.ToString("yyyyMMdd"); string fileName; if (path.Text == "") { fileName = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\" + file + ".csv"; } else { fileName = path.Text + "\\" + file + ".csv"; } if (File.Exists(fileName) == false) { StreamWriter fileWriter1 = new StreamWriter(fileName, true, Encoding.UTF8); fileWriter1.Write("时间,条形码,充气时间,平衡时间,检测时间,排气时间,充气压力上限,充气压力下限,大漏压差上限,大漏压差下限,泄漏量上限,泄漏量下限,测试结果,测试压力,压力单位,泄漏量,泄漏量单位" + "\r\n"); fileWriter1.Flush(); fileWriter1.Close(); } StreamWriter fileWriter = new StreamWriter(fileName, true, Encoding.UTF8); string nowdate = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); fileWriter.Write(nowdate + "," + tb_CH1Code.Text + ","); fileWriter.Write(FullTime.Text + "s" + ","); fileWriter.Write(BalanTime.Text + "s" + ","); fileWriter.Write(TestTime1.Text + "s" + ","); fileWriter.Write(ExhaustTime.Text + "s" + ","); fileWriter.Write(FPtoplimit.Text + PUnit.Text + ","); fileWriter.Write(FPlowlimit.Text + PUnit.Text + ","); fileWriter.Write(BLeakTPre.Text + PUnit.Text + ","); fileWriter.Write(BLeakLPre.Text + PUnit.Text + ","); fileWriter.Write(Leaktoplimit.Text + LUnit.Text + ","); fileWriter.Write(Leaklowlimit.Text + LUnit.Text + ","); fileWriter.Write(lb_CH1Result.Text + ","); fileWriter.Write(DLeakPressure + ","); fileWriter.Write(PUnit.Text + ","); fileWriter.Write(DLeak + ","); fileWriter.Write(LUnit.Text + "\n"); fileWriter.Flush(); fileWriter.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } //将数据上传至MES系统 private void ADDMES() { string result; if (lb_CH1Result.Text.Contains("OK")) { result = "PASS"; } else { result = "FAIL"; } string mesresult = MESInfo.MESInformation(URL.Text, appid.Text, appkey.Text, method.Text, Dept.Text, Type.Text, Machinemodel.Text, MESStation.Text, timestamp, tb_CH1Code.Text, result, FPtoplimit.Text + lb_CH1PressureUnit.Text, FPlowlimit.Text + lb_CH1PressureUnit.Text, fullpressure + lb_CH1PressureUnit.Text, BLeakTPre.Text + "Pa", BLeakLPre.Text + "Pa", balanpressure + "Pa", Leaktoplimit.Text + LUnit.Text, Leaklowlimit.Text + LUnit.Text, DLeak + LUnit.Text); if (mesresult.Contains("\"code\":200")) { MESStatus.Text = "PASS"; MESStatus.ForeColor = Color.Green; } else { MESStatus.Text = "FAIL"; MESStatus.ForeColor = Color.Red; MessageBox.Show(mesresult); } } //写入数据 private void CreateFile(int CH, string code) { if (ChkExcel.Checked) { AddExcel_xlsx(CH, code); } if (ChkTXT.Checked) { AddTXT(CH, code); } //if (ChkSql.Checked) //{ // AddDatebase(); //} //if (ChkCSV.Checked) //{ // AddCSV(); //} //if (ChkMES.Checked && Code.TextLength > 0) //{ // ADDMES(); //} } //在界面显示数据 private void Display(int CH, string code) { //DataGridView1.Rows.Add( // DateTime.Now.ToString(), Code.Text, ReadData[25] / 10.0 + "s", ReadData[26] / 10.0 + "s", ReadData[27] / 10.0 + "s", ReadData[28] / 10.0 + "s", // TwoUInt16ToFloat(ReadData[33], ReadData[32]).ToString(), TwoUInt16ToFloat(ReadData[47], ReadData[46]).ToString(), // ReadData[36].ToString(), (Digitalconversion(ReadData[37])).ToString(), TwoUInt16ToFloat(ReadData[39], ReadData[38]).ToString(), TwoUInt16ToFloat(ReadData[45], ReadData[44]).ToString(), Tlight.Text, // TwoUInt16ToFloat(ReadData[17], ReadData[16]).ToString(), PressureUnit.Text, TwoUInt16ToFloat(ReadData[19], ReadData[18]).ToString(), LeakUnit.Text); DataGridViewRow row = new DataGridViewRow(); row.CreateCells(DataGridView1); if (CH == 1) { row.SetValues( DateTime.Now.ToString(), code, (ReadData[25] / 10.0).ToString() + "s", (ReadData[26] / 10.0).ToString() + "s", (ReadData[27] / 10.0).ToString() + "s", (ReadData[28] / 10.0).ToString() + "s", TwoUInt16ToFloat(ReadData[33], ReadData[32]).ToString() + lb_CH1PressureUnit.Text, TwoUInt16ToFloat(ReadData[47], ReadData[46]).ToString() + lb_CH1PressureUnit.Text, ReadData[36].ToString()+"Pa", Digitalconversion(ReadData[37]).ToString()+"Pa", TwoUInt16ToFloat(ReadData[39], ReadData[38]).ToString()+ lb_CH1LeakUnit.Text, TwoUInt16ToFloat(ReadData[45], ReadData[44]).ToString() + lb_CH1LeakUnit.Text, lb_CH1Result.Text, TwoUInt16ToFloat(ReadData[17], ReadData[16]).ToString() + lb_CH1PressureUnit.Text, lb_CH1PressureUnit.Text, TwoUInt16ToFloat(ReadData[19], ReadData[18]).ToString() + lb_CH1LeakUnit.Text, lb_CH1LeakUnit.Text ); } else if (CH == 2) { row.SetValues( DateTime.Now.ToString(), code, (ReadData2[25] / 10.0).ToString() + "s", (ReadData2[26] / 10.0).ToString() + "s", (ReadData2[27] / 10.0).ToString() + "s", (ReadData2[28] / 10.0).ToString() + "s", TwoUInt16ToFloat(ReadData2[33], ReadData2[32]).ToString() + lb_CH2PressureUnit.Text, TwoUInt16ToFloat(ReadData2[47], ReadData2[46]).ToString() + lb_CH2PressureUnit.Text, ReadData2[36].ToString() + "Pa", Digitalconversion(ReadData2[37]).ToString() + "Pa", TwoUInt16ToFloat(ReadData2[39], ReadData2[38]).ToString() + lb_CH2LeakUnit.Text, TwoUInt16ToFloat(ReadData2[45], ReadData2[44]).ToString() + lb_CH2LeakUnit.Text, lb_CH2Result.Text, TwoUInt16ToFloat(ReadData2[17], ReadData2[16]).ToString() + lb_CH2PressureUnit.Text, lb_CH2PressureUnit.Text, TwoUInt16ToFloat(ReadData2[19], ReadData2[18]).ToString() + lb_CH2LeakUnit.Text, lb_CH2LeakUnit.Text ); } // 将新行插入到第一行位置 DataGridView1.Rows.Insert(0, row); } // 条形码 private void Code_TextChanged(object sender, EventArgs e) { if (tb_CH1Code.Text.Length > 0) { if (string.IsNullOrEmpty(tb_CodeLength.Text)) { tb_CodeLength.Text = "21"; } if (tb_CH1Code.TextLength > 0) { int Count = BarcodeInfo.QueryBarcodeCount(tb_CH1Code.Text); if (Count > 0) { this.tb_CH1Code.ResetText(); this.tb_CH1Code.Focus(); MessageBox.Show("条形码重码,请检查"); } if (tb_CH1Code.TextLength.ToString() == CodeLength.Text && this.chk_CodeLengthSwitch.Checked) { string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); BarcodeInfo.InsertBarcodeData(time, tb_CH1Code.Text, "", "", "", "", "", ""); } else { if (tb_CH1Code.TextLength > 0 && chk_CodeLengthSwitch.Checked) { MessageBox.Show(string.Format("条形码长度错误!当前条码长度:{0},设置长度为:{1}", this.tb_CH1Code.Text.Length, this.CodeLength.Text)); this.tb_CH1Code.ResetText(); this.tb_CH1Code.Focus(); } } } } } private void tb_CH2Code_TextChanged(object sender, EventArgs e) { if (tb_CH2Code.Text.Length > 0) { if (string.IsNullOrEmpty(tb_CodeLength.Text)) { tb_CodeLength.Text = "21"; } if (tb_CH2Code.TextLength > 0) { int Count = BarcodeInfo.QueryBarcodeCount(tb_CH2Code.Text); if (Count > 0) { tb_CH2Code.ResetText(); tb_CH2Code.Focus(); MessageBox.Show("条形码重码,请检查"); } if ((tb_CH2Code.TextLength.ToString() == CodeLength.Text) && chk_CodeLengthSwitch.Checked) { string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); BarcodeInfo.InsertBarcodeData(time, tb_CH2Code.Text, "", "", "", "", "", ""); } else { if (tb_CH2Code.TextLength > 0 && chk_CodeLengthSwitch.Checked) { MessageBox.Show($"条形码长度错误!当前条码长度:{tb_CH2Code.Text.Length},设置长度为:{CodeLength.Text}"); tb_CH2Code.ResetText(); tb_CH2Code.Focus(); } } } } } private async void timer5_Tick(object sender, EventArgs e) { timerCH1.Stop(); bool flag = this.tb_CodeLength.Text == ""; if (flag) { this.tb_CodeLength.Text = "21"; } bool flag2 = this.tb_CH1Code.TextLength > 0; if (flag2) { int Count = BarcodeInfo.QueryBarcodeCount(tb_CH1Code.Text); if (Count > 0) { this.tb_CH1Code.ResetText(); this.tb_CH1Code.Focus(); MessageBox.Show("条形码重码,请检查"); } bool flag3 = this.tb_CH1Code.TextLength == int.Parse(this.CodeLength.Text) && this.chk_CodeLengthSwitch.Checked; if (flag3) { string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); BarcodeInfo.InsertBarcodeData(time, tb_CH1Code.Text, "", "", "", "", "", ""); } else { if (tb_CH1Code.TextLength > 0 && chk_CodeLengthSwitch.Checked) { MessageBox.Show(string.Format("条形码长度错误!当前条码长度:{0},设置长度为:{1}", this.tb_CH1Code.Text.Length, this.CodeLength.Text)); this.tb_CH1Code.ResetText(); this.tb_CH1Code.Focus(); } } } } private void 登录ToolStripMenuItem_Click(object sender, EventArgs e) { LogOn l1 = new LogOn(); OpenForm(l1); } private void 修改密码ToolStripMenuItem_Click(object sender, EventArgs e) { UserPassword u1 = new UserPassword(); OpenForm(u1); } private void 串口设置ToolStripMenuItem_Click(object sender, EventArgs e) { PortSetting p1 = new PortSetting(); OpenForm(p1); } private void 基本设置ToolStripMenuItem_Click(object sender, EventArgs e) { Config c1 = new Config(); OpenForm(c1); } private void 测试参数ToolStripMenuItem_Click(object sender, EventArgs e) { Timer1.Stop(); TestPara t1 = new TestPara(); OpenForm(t1); } private void 存储设置ToolStripMenuItem_Click(object sender, EventArgs e) { Save s1 = new Save(); OpenForm(s1); } private void 帮助ToolStripMenuItem_Click(object sender, EventArgs e) { Form3 form3 = new Form3(); OpenForm(form3); } private void 注销登录ToolStripMenuItem_Click(object sender, EventArgs e) { 修改密码ToolStripMenuItem.Enabled = false; 串口设置ToolStripMenuItem.Enabled = false; 基本设置ToolStripMenuItem.Enabled = false; 测试参数ToolStripMenuItem.Enabled = false; 存储设置ToolStripMenuItem.Enabled = false; } //说明帮助 private void Manual_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { Form3 form3 = new Form3(); OpenForm(form3); } //防止打开多个相同的窗口 public void OpenForm(System.Windows.Forms.Form frm) { if (frm == null) return; foreach (System.Windows.Forms.Form f in System.Windows.Forms.Application.OpenForms) { if (f.Name == frm.Name) { f.Activate(); f.Show(); frm.Dispose(); System.GC.Collect(); System.GC.WaitForPendingFinalizers(); return; } } frm.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; frm.Show(); System.GC.Collect(); System.GC.WaitForPendingFinalizers(); } //读取数据库设置的注册表 private string ReadRegistryKey(string str) { RegistryKey regName; regName = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\PMD\\1.0\\User-LL18", true); if (regName.GetValue(str) is null) { return null; } else { regName.OpenSubKey("User"); string str1 = regName.GetValue(str).ToString(); // textBox3.Text = str1; regName.Close(); return str1; } } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { RegistryKey regName; regName = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\PMD\\1.0\\User-LL18-Set", true); if (regName is null) { regName = Registry.CurrentUser.CreateSubKey("SOFTWARE\\Microsoft\\PMD\\1.0\\User-LL18-Set"); } regName.SetValue("time", TIME); regName.SetValue("timeflag", 1); regName.Close(); Timer1.Stop(); this.Hide(); SerialPort1.Dispose(); SerialPort1.Close(); System.Environment.Exit(0); } //public static void domain2ip() //{ // try // { // } // catch (Exception e) // { // } //} // //测试用的事件,此处调用了类里面的方法 //private void button1_Click(object sender, EventArgs e) //{ // //IPHostEntry ipHostInfo = Dns.GetHostEntry("http://xms.be.test.xiaomi.com/xmsapi"); // //IPAddress myip = ipHostInfo.AddressList[0]; // string ss= MESInfo.MESInformation("https://xms.be.xiaomi.com/xmsapi", "xm_1004", "1a3015121bb93b05de89128de42f98ca", "outrepair.importWRTresult", "XZCN00114", "SA", "Mi8", "3", "2021-03-22 12:10:50", // "8000000022", "FAIL", "53","53","2","111","222", // "32","26","86","464"); // MessageBox.Show(ss); //} //读取系统设置 private void Read() { RegistryKey regName; regName = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\PMD\\1.0\\User-LL18-Set", true); if (regName is null) { regName = Registry.CurrentUser.CreateSubKey("SOFTWARE\\Microsoft\\PMD\\1.0\\User-LL18-Set"); } regName.OpenSubKey("User"); if (regName.GetValue("port") is null) { lb_CH1yiqiPort.Text = "COM2"; } else { lb_CH1yiqiPort.Text = regName.GetValue("port").ToString(); } if (regName.GetValue("codeport") is null) { codeport = "COM1"; } else { codeport = regName.GetValue("codeport").ToString(); } if (regName.GetValue("codeBaudrate") is null) { codeBaudrate = "9600"; } else { codeBaudrate = regName.GetValue("codeBaudrate").ToString(); } if (regName.GetValue("codelengthcheck") is null) { chk_CodeLengthSwitch.Checked = true; } else { chk_CodeLengthSwitch.Checked = Convert.ToBoolean(regName.GetValue("codelengthcheck")); } if (regName.GetValue("Baudrate") is null) { Baudrate.Text = "9600"; } else { Baudrate.Text = regName.GetValue("Baudrate").ToString(); } if (regName.GetValue("station") is null) { Station.Text = "01"; } else { Station.Text = regName.GetValue("station").ToString(); } if (regName.GetValue("codelength") is null) { CodeLength.Text = "21"; tb_CodeLength.Text = "21"; } else { CodeLength.Text = regName.GetValue("codelength").ToString(); tb_CodeLength.Text = regName.GetValue("codelength").ToString(); } if (regName.GetValue("excel") is null) { ChkExcel.Checked = false; } else { ChkExcel.Checked = Convert.ToBoolean(regName.GetValue("excel").ToString()); } if (regName.GetValue("txt") is null) { ChkTXT.Checked = false; } else { ChkTXT.Checked = Convert.ToBoolean(regName.GetValue("txt").ToString()); } if (regName.GetValue("sql") is null) { ChkSql.Checked = false; } else { ChkSql.Checked = Convert.ToBoolean(regName.GetValue("sql").ToString()); } if (regName.GetValue("mes") is null) { ChkMES.Checked = false; } else { ChkMES.Checked = Convert.ToBoolean(regName.GetValue("mes").ToString()); } if (regName.GetValue("path") is null) { path.Text = ""; } else { path.Text = regName.GetValue("path").ToString(); } if (regName.GetValue("csv") is null) { ChkCSV.Checked = false; } else { ChkCSV.Checked = Convert.ToBoolean(regName.GetValue("csv").ToString()); } if (regName.GetValue("url") is null) { URL.Text = "https://xms.be.xiaomi.com/xmsapi"; } else { URL.Text = regName.GetValue("url").ToString(); } if (regName.GetValue("appid") is null) { appid.Text = "xm_1004"; } else { appid.Text = regName.GetValue("appid").ToString(); } if (regName.GetValue("appkey") is null) { appkey.Text = "1a3015121bb93b05de89128de42f98ca"; } else { appkey.Text = regName.GetValue("appkey").ToString(); } if (regName.GetValue("method") is null) { method.Text = "outrepair.importWRTresult"; } else { method.Text = regName.GetValue("method").ToString(); } if (regName.GetValue("dept") is null) { Dept.Text = ""; } else { Dept.Text = regName.GetValue("dept").ToString(); } if (regName.GetValue("type") is null) { Type.Text = ""; } else { Type.Text = regName.GetValue("type").ToString(); } if (regName.GetValue("model") is null) { Machinemodel.Text = ""; } else { Machinemodel.Text = regName.GetValue("model").ToString(); } if (regName.GetValue("teststation") is null) { MESStation.Text = ""; } else { MESStation.Text = regName.GetValue("teststation").ToString(); } if (regName.GetValue("CeckScanning") is null) { CeckScanning.Checked = false; } else { CeckScanning.Checked = Convert.ToBoolean(regName.GetValue("CeckScanning").ToString()); } regName.Close(); } /// /// 16进制格式字符串转普通文本 /// /// 16进制格式字符串 /// 编码规则 /// public static string ToStringFromHexString(string hexString, Encoding encode) { byte[] _bytes = ToBytesFromHexString(hexString); //if (BitConverter.IsLittleEndian) // 若为 小端模式 //{ // Array.Reverse(_bytes); // 转换为 大端模式 //} return encode.GetString(_bytes); } private void SetcheckBox1(bool check) { RegistryKey regName; regName = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\PMD\\1.0\\User-LL18-Set", true); if (regName is null) { regName = Registry.CurrentUser.CreateSubKey("SOFTWARE\\Microsoft\\PMD\\1.0\\User-LL18-Set"); } regName.SetValue("codelengthcheck", check); regName.Close(); } private void checkBox1_CheckedChanged(object sender, EventArgs e) { //if (checkBox1.Checked) // if (/*Code.Text != "" ||*/Code.Text.Length != Convert.ToInt32(codecheck.Text)) // { // MessageBox.Show("条形码长度不正确"); // Code.ResetText(); // Code.Focus(); // } if (chk_CodeLengthSwitch.Checked) { SetcheckBox1(true); } else { SetcheckBox1(false); } } private void Setcodecheck() { RegistryKey regName; regName = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\PMD\\1.0\\User-LL18-Set", true); if (regName is null) { regName = Registry.CurrentUser.CreateSubKey("SOFTWARE\\Microsoft\\PMD\\1.0\\User-LL18-Set"); } regName.SetValue("codelength", tb_CodeLength.Text); regName.Close(); } private void codecheck_TextChanged(object sender, EventArgs e) { Setcodecheck(); } private void SetScancode() { RegistryKey regName; regName = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\PMD\\1.0\\User-LL18-Set", true); if (regName is null) { regName = Registry.CurrentUser.CreateSubKey("SOFTWARE\\Microsoft\\PMD\\1.0\\User-LL18-Set"); } regName.SetValue("Scancode", Scancode.Checked); regName.Close(); } private void button1_Click(object sender, EventArgs e) { DialogResult dialogResult = MessageBox.Show("确定要清空计数吗?", "确认", MessageBoxButtons.YesNo); // 如果用户点了“确定”按钮,则执行某些事件 if (dialogResult == DialogResult.Yes) { Sunzong.Text = "0"; Passzong.Text = "0"; ChanPass = 0; ChanSum = 0; string path = System.Environment.CurrentDirectory + "\\Config\\Config.ini"; ConfigINI config = new ConfigINI(path); config.IniWriteValue("Config", "Sunzong", Sunzong.Text); config.IniWriteValue("Config", "Passzong", Passzong.Text); } } private void CodePort1_DataReceived_1(object sender, SerialDataReceivedEventArgs e) { try { System.Threading.Thread.Sleep(50); int len = CodePort1.BytesToRead;//获取可以读取的字节数 if (len > 1) { byte[] buff = new byte[len];//创建缓存数据数组 CodePort1.Read(buff, 0, len);//把数据读取到buff数组 Invoke((new System.Action(() => //接收计数 { string code = Encoding.Default.GetString(buff); string CODE = code.Replace("\r", ""); CODE = CODE.Replace("\n", ""); //if (tb_CH1Code.Text == "") //{ // tb_CH1Code.Text = CODE; //} UpdateCode(CODE); CodePort1.DiscardInBuffer(); }))); } else { return; } } catch (Exception ex) { MessageBox.Show(":" + ex.Message); } } // 最后放的是ch1的 bool lastputInCH1 = true; // 更新条码 private void UpdateCode(string CODE) { if (string.IsNullOrEmpty(tb_CodeLength.Text)) { tb_CodeLength.Text = "21"; } if (string.IsNullOrEmpty(CODE) || CODE.Length.ToString() != CodeLength.Text || CODE == tb_CH1Code.Text || CODE == tb_CH2Code.Text) { return ; } if (string.IsNullOrEmpty(tb_CH1Code.Text)) { tb_CH1Code.Text = CODE; lastputInCH1 = true; } else if (string.IsNullOrEmpty(tb_CH2Code.Text)) { tb_CH2Code.Text = CODE; lastputInCH1 = false; } else { if (lastputInCH1) { tb_CH2Code.Text = CODE; lastputInCH1 = false; } else { tb_CH1Code.Text = CODE; lastputInCH1 = true; } } } private void label32_Click(object sender, EventArgs e) { AddDatebase(); } private void checkBox2_CheckedChanged(object sender, EventArgs e) { if (chk_MESswitch.Checked) { pb_MESstatus.BackColor = Color.Green; } else { pb_MESstatus.BackColor = Color.Red; } } private void strlinename_TextChanged(object sender, EventArgs e) { string path = System.Environment.CurrentDirectory + "\\Config\\Config"; ConfigINI config = new ConfigINI(path); config.IniWriteValue("Mes", "strlinename", this.strlinename.Text); } private void strlocation_TextChanged(object sender, EventArgs e) { string path = System.Environment.CurrentDirectory + "\\Config\\Config"; ConfigINI config = new ConfigINI(path); config.IniWriteValue("Mes", "strlocation", this.strlocation.Text); } private void strbatch_TextChanged(object sender, EventArgs e) { string path = System.Environment.CurrentDirectory + "\\Config\\Config"; ConfigINI config = new ConfigINI(path); config.IniWriteValue("Mes", "strbatch", this.strbatch.Text); } private void strstation_TextChanged(object sender, EventArgs e) { string path = System.Environment.CurrentDirectory + "\\Config\\Config"; ConfigINI config = new ConfigINI(path); config.IniWriteValue("Mes", "strstation", this.strstation.Text); } private void JIG_Number1_TextChanged(object sender, EventArgs e) { string path = System.Environment.CurrentDirectory + "\\Config\\Config"; ConfigINI config = new ConfigINI(path); config.IniWriteValue("Mes", "JIG_Number1", this.JIG_Number1.Text); } private void Form1_Activated(object sender, EventArgs e) { //PreCode1.Focus(); tb_CH1Code.Focus(); } private void PreCode1_TextChanged(object sender, EventArgs e) { if (PreCode1.Text.Length > 0) { timerCH1.Stop(); timerCH1.Start(); } } // CH2 连接串口按钮 private void bt_CH2Connect_Click(object sender, EventArgs e) { try { Form1.f1.ModbusRtuint(2, Form1.f1.CH2, Convert.ToByte(Form1.f1.Station.Text), lb_CH2yiqiPort.Text, Convert.ToInt32(Baudrate.Text), 8, System.IO.Ports.StopBits.One, System.IO.Ports.Parity.None); if (CH2.IsOpen() is true) { lb_CH2ConnectionStatus.Text = "已连接"; lb_CH2ConnectionStatus.ForeColor = Color.Green; bt_CH2Connect.Enabled = false; } } catch (Exception ex) { MessageBox.Show(ex.Message); } } // CH2 断开串口 private void bt_CH2Break_Click(object sender, EventArgs e) { try { if (CH2.IsOpen()) { CH2.Close(); } if (CH2.IsOpen() is false) { lb_CH2ConnectionStatus.Text = "未连接"; lb_CH2ConnectionStatus.ForeColor = Color.Red; bt_CH2Connect.Enabled = true; } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void label33_Click(object sender, EventArgs e) { // AddExcel_xlsx(2, "12345"); } // 测试按钮 private void button5_Click(object sender, EventArgs e) { Random rand = new Random(); string random12Digits = ""; for (int i = 0; i < 12; i++) { random12Digits += rand.Next(0, 10); } AddExcel_xlsx(1, random12Digits); random12Digits = ""; for (int i = 0; i < 12; i++) { random12Digits += rand.Next(0, 10); } AddExcel_xlsx(2, random12Digits); } /// /// 16进制格式字符串转字节数组 /// /// /// public static byte[] ToBytesFromHexString(string hexString) { //以 ' ' 分割字符串,并去掉空字符 string[] chars = hexString.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); byte[] returnBytes = new byte[chars.Length]; //逐个字符变为16进制字节数据 for (int i = 0; i < chars.Length; i++) { returnBytes[i] = Convert.ToByte(chars[i], 16); } // byte[] ss= returnBytes.Reverse().ToArray(); return returnBytes; } } }