using DevExpress.Utils.Drawing.Helpers; using NPOI.SS.Formula.Functions; using Seagull.BarTender.Print; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading; using System.Web.Services.Description; using System.Windows.Forms; using UAS_MES_NEW.CustomControl.Pagination; using UAS_MES_NEW.DataOperate; using UAS_MES_NEW.Entity; using UAS_MES_NEW.PublicMethod; namespace UAS_MES_NEW.Make { public partial class Make_AirTightnessTest : Form { public Make_AirTightnessTest() { InitializeComponent(); } StringBuilder SQL = new StringBuilder(); DataTable dt; DataHelper dh; string oWO, oWOId, oErrMsg = ""; string mTestVal; SerialPort serialPort = new SerialPort(); StringBuilder receivedData = new StringBuilder(); DateTime lastReceiveTime = DateTime.Now; readonly object lockObj = new object(); private void Make_AirTightnessTest_Load(object sender, EventArgs e) { dh = SystemInf.dh; string[] ports = SerialPort.GetPortNames(); int[] commonBaudRates = { 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600 }; foreach (int cBRItem in commonBaudRates) { BaudRate.Items.Add(cBRItem); } for (int i = ports.Length - 1; i >= 0; i--) { Port.Items.Add(ports[i]); } serialPort.Parity = Parity.Even; serialPort.StopBits = StopBits.One; serialPort.DataBits = 8; serialPort.Encoding = Encoding.ASCII; serialPort.DataReceived += Serial_DataReceived; AutoTest.Checked = true; } private void Port_SelectedIndexChanged(object sender, EventArgs e) { if (Port.SelectedIndex == -1) return; using (SerialPort QuerySerialPort = new SerialPort(Port.Text)) { try { BaudRate.SelectedIndex = -1; QuerySerialPort.Open(); int baudRate = QuerySerialPort.BaudRate; foreach (var item in BaudRate.Items) { if (item.ToString().Contains($"{baudRate}")) { BaudRate.SelectedItem = item; break; } } } catch (Exception ex) { ShowMsg(0, $"自动获取串口波特率NG,{ex.Message}"); } finally { if (serialPort.IsOpen) { serialPort.Close(); } } } serialPort.PortName = Port.Text; } private void FirstSN_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode != Keys.Enter) return; if (Port.SelectedIndex == -1) { Port.Focus(); Port.SelectAll(); ShowMsg(0, "请选择端口"); return; } if (BaudRate.SelectedIndex == -1) { BaudRate.Focus(); BaudRate.SelectAll(); ShowMsg(0, "请选择波特率"); return; } FirstSN.Text = FirstSN.Text.Trim(); mTestVal = "LWS1"; if (AutoTest.Checked) { UpdateSN("L", FirstSN.Text); Thread thread = new Thread(() => { if (SendCom(mTestVal)) { ShowMsg(1, "已发送指令,请稍等测试结果"); } }); thread.IsBackground = true; thread.Start(); FirstSN.Focus(); FirstSN.SelectAll(); } } private void SecondSN_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode != Keys.Enter) return; if (Port.SelectedIndex == -1) { Port.Focus(); Port.SelectAll(); ShowMsg(0, "请选择端口"); return; } if (BaudRate.SelectedIndex == -1) { BaudRate.Focus(); BaudRate.SelectAll(); ShowMsg(0, "请选择波特率"); return; } SecondSN.Text = SecondSN.Text.Trim(); mTestVal = "LWS2"; if (AutoTest.Checked) { UpdateSN("L", SecondSN.Text); Thread thread = new Thread(() => { if (SendCom(mTestVal)) { ShowMsg(1, "已发送指令,请稍等测试结果"); } }); thread.IsBackground = true; thread.Start(); SecondSN.Focus(); SecondSN.SelectAll(); } } private bool SendCom(string workStation) { try { serialPort.BaudRate = Convert.ToInt32(BaudRate.Text); if (!serialPort.IsOpen) serialPort.Open(); serialPort.WriteLine(workStation); Serial_DataReceived(null,null); return true; } catch (Exception ex) { ShowMsg(0, $"获取气密性结果NG,{ex.Message}"); return true; } } private void Serial_DataReceived(object sender, SerialDataReceivedEventArgs e) { if (serialPort.BytesToRead < 0) { return; } try { string resList = serialPort.ReadExisting(); receivedData.Append(resList); //resList = "/20251014_142742/0K/2#/NULL/30/99/0/12700/0/N/0K"; lock (lockObj) { receivedData.Append(resList); lastReceiveTime = DateTime.Now; if(receivedData.Length > 0) { string completeData = receivedData.ToString(); this.Invoke(new Action(() => { if (mTestVal == "LWS1") { Result.Text = completeData; CheckPassStation(FirstSN.Text, Result.Text); LoadTestDetail("L", out string testRes); if (testRes == "NG") { Pagination.SelectedIndex = 0; RTxt8.Focus(); RTxt8.SelectAll(); } } else if (mTestVal == "LWS2") { Result1.Text = completeData; CheckPassStation(SecondSN.Text, Result1.Text); LoadTestDetail("L", out string testRes); if (testRes == "NG") { Pagination.SelectedIndex = 1; R1Txt8.Focus(); R1Txt8.SelectAll(); } } receivedData.Clear(); })); } } } catch (Exception ex) { ShowMsg(0, $"数据接收错误: {ex.Message}"); } } private void CheckPassStation(string sn,string res) { if (LogicHandler.CheckStepSNAndMacode(workOrder.Text, User.UserSourceCode, sn, User.UserCode, out oWO, out oWOId, out oErrMsg)) { if (LogicHandler.SetStepResult(oWO, User.UserSourceCode, sn, "气密性测试", "OK", User.UserCode, out oErrMsg)) { List param = new List() { }; string outMsg = ""; param.Add(oWO); param.Add(sn); param.Add(User.UserSourceCode); param.Add(res); param.Add(""); param.Add(""); param.Add("AirTightness"); param.Add(""); param.Add(outMsg); string[] paramList = param.ToArray(); dh.CallProcedure("cs_insert_testrejects", ref paramList); if (paramList[8].Substring(0, 2) == "OK") { ShowMsg(1, $"序列号{sn}采集成功:测试结果为{res}"); LogicHandler.DoCommandLog(Tag.ToString(), User.UserCode, oWO, User.UserLineCode, User.UserSourceCode, "气密性测试", "气密性测试过站成功", sn, ""); //LoadTestDetail("C", out string testRes); } } else { ShowMsg(0, $"序列号{sn},处理过站NG:{oErrMsg}"); } } else { UpdateSN("C", sn); ShowMsg(0, $"序列号{sn},过站核对NG:{oErrMsg}"); } } private void LoadTestDetail(string type, out string testRes) { string detail = Result.Text.Trim(); if (type == "L") { string[] parts = detail.Split('/'); RTxt1.Text = parts[1]; RTxt2.Text = parts[2]; RTxt3.Text = parts[3]; RTxt4.Text = parts[5]; RTxt5.Text = parts[6]; RTxt6.Text = parts[7]; RTxt7.Text = parts[8]; RTxt8.Text = parts[9]; RTxt9.Text = parts[10]; RTxt10.Text = parts[11]; testRes = parts[9].ToUpper() == "Y" ? "OK" : "NG"; } else if (type == "C") { RTxt1.Text = ""; RTxt2.Text = ""; RTxt3.Text = ""; RTxt4.Text = ""; RTxt5.Text = ""; RTxt6.Text = ""; RTxt7.Text = ""; RTxt8.Text = ""; RTxt9.Text = ""; RTxt10.Text = ""; } testRes = ""; } private void RTxt8_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode != Keys.Enter) return; RTxt8.Text = RTxt8.Text.Trim(); if (Convert.ToInt32(RTxt8.Text) < 100) { RTxt9.Text = "Y"; FirstSN.Focus(); FirstSN.SelectAll(); CheckPassStation(FirstSN.Text, "OK"); } RTxt8.Focus(); RTxt8.SelectAll(); } private void R1Txt8_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode != Keys.Enter) return; R1Txt8.Text = R1Txt8.Text.Trim(); if (Convert.ToInt32(R1Txt8.Text) < 100) { R1Txt9.Text = "Y"; SecondSN.Focus(); SecondSN.SelectAll(); CheckPassStation(SecondSN.Text, "OK"); } R1Txt8.Focus(); R1Txt8.SelectAll(); } private void ClearMsg_Click(object sender, EventArgs e) { OperatResult.Clear(); } private void UpdateSN(string type,string sn) { if (type == "C") { serialNumber.Text = ""; workOrder.Text = ""; productCode.Text = ""; productName.Text = ""; } else if (type == "L") { SQL.Clear(); SQL.Append($@"SELECT ms_sncode,ma_code,pr_code,pr_spec FROM makeserial,make,product WHERE ms_sncode = '{sn}' AND ms_makecode = ma_code AND ms_prodcode = pr_code"); dt = (DataTable)dh.ExecuteSql(SQL.ToString(), "select"); if (dt.Rows.Count > 0) { serialNumber.Text = dt.Rows[0]["ms_sncode"].ToString(); workOrder.Text = dt.Rows[0]["ma_code"].ToString(); productCode.Text = dt.Rows[0]["pr_code"].ToString(); productName.Text = dt.Rows[0]["pr_spec"].ToString(); } else { UpdateSN("C",sn); } } } private void ShowMsg(int type, string msg) { msg = msg.Replace("\r", "").Replace("\n", ""); string msgTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); string showMsg = $"{msgTime}: {msg}\n"; if (type == 0) { OperatResult.AppendText(showMsg, Color.Red); } else if (type == 1) { OperatResult.AppendText(showMsg, Color.Green); } } } }