using System; using System.Data; using System.IO; using System.IO.Ports; using System.Text.RegularExpressions; using System.Threading; using System.Windows.Forms; using UAS_MES_NEW.DataOperate; using UAS_MES_NEW.Entity; using UAS_MES_NEW.PublicMethod; using System.Drawing; using LabelManager2; using UAS_MES_NEW.PublicForm; using System.Net.Sockets; using System.Collections.Generic; using System.Net; using System.Text; using Seagull.BarTender.Print; namespace UAS_MES_NEW.Make { public partial class Make_PalletWeigh : Form { AutoSizeFormClass asc = new AutoSizeFormClass(); ApplicationClass lbl; DataHelper dh; DataTable dt; LogStringBuilder sql = new LogStringBuilder(); //启用线程进行称重数据读取 Thread thread; SerialPort serialPort1 = new SerialPort(); //称量的标准重量 Double Weight; //最大重量 Double MaxWeight; //最小重量 Double MinWeight; //是否通过串口获取数据 bool GetData = true; string LastSncode; DataTable Dbfind; Regex re = new Regex("\\d+.\\W+"); string ErrorMessage; Thread InitPrint; private bool AutoCut; public Make_PalletWeigh() { InitializeComponent(); CheckForIllegalCrossThreadCalls = false; } Engine engine; private void InPrint() { try { engine = new Engine(true); } catch (Exception ex) { OperateResult.AppendText(ex.Message + ex.StackTrace, Color.Red); } } private void Make_ColorBoxWeigh_Load(object sender, EventArgs e) { asc.controllInitializeSize(this); ComList.Text = BaseUtil.GetCacheData("PortName").ToString(); BaudRate.Text = BaseUtil.GetCacheData("BaudRate").ToString(); InitPrint = new Thread(InPrint); SetLoadingWindow stw = new SetLoadingWindow(InitPrint, "初始化打印程序"); BaseUtil.SetFormCenter(stw); stw.ShowDialog(); //设置锁定工单 LockMakeCode.GetMakeCodeCtl(ma_code); ma_code.SetLockCheckBox(LockMakeCode); //工单号放大镜配置 ma_code.TableName = "make left join product on ma_prodcode=pr_code"; ma_code.SelectField = "ma_code # 工单号,pr_code # 产品编号,pr_spec # 产品规格"; ma_code.FormName = Name; ma_code.SetValueField = new string[] { "ma_code", "pr_code", "pr_spec" }; ma_code.Condition = "ma_statuscode='STARTED'"; ma_code.DbChange += Ma_code_DbChange; StartWeight.PerformClick(); dh = SystemInf.dh; StepCount.StepCode = User.CurrentStepCode; StepCount.Source = User.UserSourceCode; StepCount.LineCode = User.UserLineCode; StepCount.Dh = dh; StepCount.Start(); AutoPrint.Checked = false; } private void Ma_code_DbChange(object sender, EventArgs e) { Dbfind = ma_code.ReturnData; BaseUtil.SetFormValue(this.Controls, Dbfind); //获取工单的其他信息 sql.Clear(); sql.Append("select ma_code,ma_prodcode as pr_code , pr_detail as pr_spec,"); sql.Append("pr_spec,ma_qty - nvl(mcd_inqty, 0) mcd_remainqty from make left join makecraftdetail_view on "); sql.Append("mcd_maid=ma_id left join product on pr_code=ma_prodcode where ma_code='" + ma_code.Text + "' and mcd_stepcode='" + User.CurrentStepCode + "'"); dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select"); if (dt.Rows.Count > 0) { BaseUtil.SetFormValue(this.Controls, dt); } } private void sncode_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { double ActualWeight = double.Parse(weight.Text == "" ? "0" : weight.Text.Replace("kg", "").Replace("g", "").Trim()); ListViewItem lsi = new ListViewItem(); lsi.SubItems.Add(sncode.Text); lsi.SubItems.Add(ActualWeight.ToString()); lsi.SubItems.Add(System.DateTime.Now.ToString()); WeighRecord.Items.Add(lsi); WeighRecord.Items[this.WeighRecord.Items.Count - 1].EnsureVisible(); OperateResult.AppendText(">>彩盒" + sncode.Text + "称重完成\n", Color.Green); } } private void getSerialData() { if (serialPort1.IsOpen) { if (!SystemInf.OpenPort.Contains(serialPort1.PortName)) { SystemInf.OpenPort.Add(serialPort1.PortName); try { while (GetData) { try { int len = serialPort1.BytesToRead; Byte[] readBuffer = new Byte[len]; serialPort1.Read(readBuffer, 0, len); //将数据读入缓存 string weigh = Encoding.Default.GetString(readBuffer); Remark.AppendText(weigh + "\n"); if (weigh != "") { weight.Text = re.Match(weigh).Value; } } catch (Exception) { GetData = false; } } } catch (IOException ex) { MessageBox.Show(ex.Message); } } else OperateResult.AppendText(">>端口已被占用,请关闭其他窗口\n", Color.Red); } } private void 彩盒称重_SizeChanged(object sender, EventArgs e) { weight.Location = new Point(weight_label.Location.X + weight_label.Size.Width - 10, weight_label.Location.Y - 20); asc.controlAutoSize(this); } protected override void OnVisibleChanged(EventArgs e) { base.OnVisibleChanged(e); if (!IsHandleCreated) { this.Close(); } } private void Clean_Click(object sender, EventArgs e) { OperateResult.Clear(); } //关闭窗口的时候停止进程读取串口数据 private void 彩盒称重_FormClosing(object sender, FormClosingEventArgs e) { BaseUtil.ClosePrint(lbl); StopWeight.PerformClick(); InitPrint.Abort(); if (serialPort1.IsOpen) { GetData = false; serialPort1.Close(); SystemInf.OpenPort.Remove(serialPort1.PortName); thread.Interrupt(); } } private void Confirm_Click(object sender, EventArgs e) { if (ma_code.Text == "") { OperateResult.AppendText(">>请先选择工单号\n", Color.Red); return; } sncode.Text = LogicHandler.GetOutBoxCode1("PALLETCODE", ma_code.Text, pr_code.Text, User.UserCode); if (PrintLabel.Items.Count != 0) { string oErrorMessage; if (!Print.BarTender(Tag.ToString(), ref engine, PrintLabel.Text, PrintLabel.SelectedValue.ToString(), PrinterList.Text, sncode.Text, int.Parse(PrintNum.Text), ma_code.Text, pr_code.Text, "卡板标", "0", out oErrorMessage)) { OperateResult.AppendText(oErrorMessage + "\n", Color.Red); } } else { OperateResult.AppendText(">>产品" + pr_code.Text + "未维护打印标签\n", Color.Red); } } Thread threadWatch = null; //负责监听客户端的线程 Socket socketWatch = null; //负责监听客户端的套接字 Socket socConnection; private void StartWeight_Click(object sender, EventArgs e) { thread = new Thread(getSerialData); try { serialPort1.PortName = ComList.Text; serialPort1.BaudRate = int.Parse(BaudRate.Text); serialPort1.Open(); GetData = true; thread.Start(); } catch (Exception mes) { if (BaudRate.Text == "" || ComList.Text == "") OperateResult.AppendText(">>请先在电子秤调试界面维护波特率和串口\n", Color.Red); else OperateResult.AppendText(">>" + mes.Message + "\n", Color.Red); } } private void StopWeight_Click(object sender, EventArgs e) { if (serialPort1.IsOpen) { GetData = false; serialPort1.Close(); SystemInf.OpenPort.Remove(serialPort1.PortName); thread.Abort(); } } private void pr_code_TextChanged(object sender, EventArgs e) { DataTable _dt = (DataTable)dh.ExecuteSql("select la_id,la_url,la_isdefault from label where la_templatetype='卡板标' and la_statuscode='AUDITED' order by la_isdefault", "select"); PrintLabel.DataSource = _dt; PrintLabel.DisplayMember = "la_url"; PrintLabel.ValueMember = "la_id"; } private void PrintLabel_SelectedValueChanged(object sender, EventArgs e) { if (PrintLabel.SelectedValue != null && PrintLabel.SelectedValue.ToString() != "System.Data.DataRowView") { string PrintNums = dh.getFieldDataByCondition("label", "la_printnos", "la_id='" + PrintLabel.SelectedValue.ToString() + "'").ToString(); PrintNum.Text = (PrintNums == "" ? "1" : PrintNums); } } } }