using DevExpress.Utils.Drawing.Helpers; using DevExpress.XtraBars.Docking2010.Views.Widget; 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(); 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().Replace(";", ";"); 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().Replace(";", ";"); 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(); //resList = "/20251014_142742/0K/2#/NULL/30/99/0/12700/0/N/0K"; receivedData.Append(resList); string completeData = receivedData.ToString(); string dateString = DateTime.Now.ToString("yyyyMMdd"); string[] records = completeData.Split(new string[] { "/"+ dateString }, StringSplitOptions.RemoveEmptyEntries); string parseStr = "/" + dateString + records[records.Length - 1].ToString(); if (parseStr.Split('/').Length > 10) { if (receivedData.ToString().Contains("1#")) { Result.Text = parseStr; string testRes = LoadTestDetail("L", "1"); CheckPassStation(FirstSN.Text.Trim(), testRes); if (testRes == "NG") { Pagination.SelectedIndex = 0; RTxt8.Focus(); RTxt8.SelectAll(); } } else if (receivedData.ToString().Contains("2#")) { Result1.Text = parseStr; string testRes = LoadTestDetail("L", "2"); CheckPassStation(SecondSN.Text.Trim(), 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) { List param = new List() { }; string outMsg = ""; param.Add(workOrder.Text.Trim()); 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, ""); } dt = (DataTable)dh.ExecuteSql($"SELECT mp_id FROM makeprocess WHERE mp_sncode = '{sn}' AND mp_sourcecode = 'QMX'", "select"); if (dt.Rows.Count > 0) return; 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)) { ShowMsg(1, $"序列号{sn}过站OK"); } else { ShowMsg(0, $"序列号{sn},处理过站NG:{oErrMsg}"); } } else { UpdateSN("C", sn); ShowMsg(0, $"序列号{sn},过站核对NG:{oErrMsg}"); } } private string LoadTestDetail(string type, string num) { string detail,testRes; if (type == "L") { if(num == "1") { detail = Result.Text.Trim(); 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[parts.Length - 2].ToUpper() == "Y" ? "OK" : "NG"; return testRes; } else { detail = Result1.Text.Trim(); string[] parts = detail.Split('/'); R1Txt1.Text = parts[1]; R1Txt2.Text = parts[2]; R1Txt3.Text = parts[3]; R1Txt4.Text = parts[5]; R1Txt5.Text = parts[6]; R1Txt6.Text = parts[7]; R1Txt7.Text = parts[8]; R1Txt8.Text = parts[9]; R1Txt9.Text = parts[10]; R1Txt10.Text = parts[11]; testRes = parts[parts.Length - 2].ToUpper() == "Y" ? "OK" : "NG"; return testRes; } } else if (type == "C") { if(num == "1") { RTxt1.Text = ""; RTxt2.Text = ""; RTxt3.Text = ""; RTxt4.Text = ""; RTxt5.Text = ""; RTxt6.Text = ""; RTxt7.Text = ""; RTxt8.Text = ""; RTxt9.Text = ""; RTxt10.Text = ""; } else { R1Txt1.Text = ""; R1Txt2.Text = ""; R1Txt3.Text = ""; R1Txt4.Text = ""; R1Txt5.Text = ""; R1Txt6.Text = ""; R1Txt7.Text = ""; R1Txt8.Text = ""; R1Txt9.Text = ""; R1Txt10.Text = ""; } return ""; } return ""; } 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); } } } }