yusijie
2024-07-17 c0e503107d910761bb8ceb287bc3dfbab44d8ae5
WarM/ÌõÂë´òÓ¡/Kf_WeighToBarCode.cs
@@ -14,9 +14,6 @@
using System.IO.Ports;
using System.Linq;
using System.IO.Ports;
using System.Linq;
namespace WarM
{
    public partial class Kf_WeighToBarCode : Form
@@ -54,13 +51,6 @@
        public DAL.ClsGy_BarCodeBill_Ctl oBar = new DAL.ClsGy_BarCodeBill_Ctl();
        public DBUtility.ClsPub.Enum_BillStatus BillStatus;
        SQLHelper.ClsCN oCn = new SQLHelper.ClsCN();
        private static string repeatData = string.Empty;
        private SerialPort ComDevice = null;
        private int HGetWeight = 0;
        private string Message = "";
        private int timeIndex = 0;
        #region  //固定代码
@@ -191,228 +181,6 @@
            DBUtility.Xt_BaseBillFun.DefaultGridView(grdMain, this.Name);
            DBUtility.Xt_BaseBillFun.DefaultGridView(grdSub, this.Name + "grdSub");
        }
        //打开串口
        private void button3_Click(object sender, EventArgs e)
        {
            OpenCom();
        }
        public void OpenCom()
        {
            //初始化串口
            ComDevice = new SerialPort();
            ComDevice.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived);//绑定事件
            string[] PortNames = SerialPort.GetPortNames();
            if (!ComDevice.IsOpen)
            {
                try
                {
                    ComDevice.PortName = txtPortName.Text;
                    ComDevice.BaudRate = int.Parse(txtBaudRate.Text);
                    switch (cmbParity.SelectedItem.ToString())
                    {
                        case "0":
                            ComDevice.Parity = Parity.None;
                            break;
                        case "1":
                            ComDevice.Parity = Parity.Odd;
                            break;
                        case "2":
                            ComDevice.Parity = Parity.Even;
                            break;
                        case "3":
                            ComDevice.Parity = Parity.Mark;
                            break;
                        case "4":
                            ComDevice.Parity = Parity.Space;
                            break;
                        default:
                            break;
                    }
                    ComDevice.DataBits = int.Parse(txtDataBits.Text);
                    switch (cmbStopBits.SelectedItem.ToString())
                    {
                        case "0":
                            ComDevice.StopBits = StopBits.None;
                            break;
                        case "1":
                            ComDevice.StopBits = StopBits.One;
                            break;
                        case "2":
                            ComDevice.StopBits = StopBits.Two;
                            break;
                        case "1.5":
                            ComDevice.StopBits = StopBits.OnePointFive;
                            break;
                        default:
                            break;
                    }
                    ComDevice.Open();
                    //lblComStatus.Text = "串口状态:开启";
                    timer3.Enabled = true;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("打开串口失败!" + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }
            else
            {
            }
        }
        //关闭串口
        private void button2_Click(object sender, EventArgs e)
        {
            CloseCom();
        }
        public void CloseCom()
        {
            if (!ComDevice.IsOpen)
            {
            }
            else
            {
                try
                {
                    timer3.Enabled = false;
                    Thread.Sleep(100);
                    ComDevice.Close();
                    //   valueCounts = new Dictionary<string, int>();
                    // lblComStatus.Text = "串口状态:关闭";
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }
        }
        //发送数据
        public bool SendData(byte[] data)
        {
            if (ComDevice.IsOpen)
            {
                try
                {
                    ComDevice.Write(data, 0, data.Length);//发送数据
                    return true;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                finally
                {
                }
            }
            else
            {
                MessageBox.Show("串口未打开", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            return false;
        }
        //接收数据
        private void Com_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            //if (!ComDevice.IsOpen)
            //    {
            //        return;
            //    }
            //    Thread.Sleep(100);
            if (HGetWeight == 1)
            {
                byte[] ReDatas = new byte[ComDevice.BytesToRead];
                ComDevice.Read(ReDatas, 0, ReDatas.Length);//读取数据
                this.AddData(ReDatas);//输出数据
            }
        }
        //处理接收到的数据
        public void AddData(byte[] data)
        {
            //Thread.Sleep(100);
            StringBuilder sb = new StringBuilder();
            sb.Append(Encoding.ASCII.GetString(data));
            var str = sb.ToString();
            str = str.Replace("w", "").Replace("n", "").Replace("kg\r\n", ";");
            if (str != repeatData)
            {
                repeatData = str;
                string[] strArray = str.Split(';');
                for (int i = 0; i < strArray.Length; i++)
                {
                    if (double.TryParse(strArray[i], out double ret))//判断是否是数字
                    {
                        Message += double.Parse(strArray[i]) + ";";
                        //UpdateLabel(ret.ToString());
                    }
                }
            }
        }
        //获取数组中出现频率最高的数据
        private string getMostStr(string message)
        {
            string[] strArray = message.Split(';');
            // ä½¿ç”¨LINQ查询出现次数最多的元素
            var maxElement = strArray.GroupBy(x => x)
                                  .OrderByDescending(g => g.Count())
                                  .First()
                                  .Key;
            return maxElement;
        }
        //依据线程,将数据写入界面组件
        private void UpdateLabel(string text)
        {
            if (txtHWeightQyt.InvokeRequired)
            {
                // åœ¨UI线程上调用 UpdateLabel
                txtHWeightQyt.Invoke(new Action<string>(UpdateLabel), text);
            }
            else
            {
                // ç›´æŽ¥æ›´æ–° txtHWeightQyt.Text
                txtHWeightQyt.Text = text;
            }
        }
        //获取数据按钮,启动计时器
        private void button4_Click(object sender, EventArgs e)
        {
            HGetWeight = 1;
            timer2.Enabled = true;
        }
        //计时器事件
        private void timer2_Tick(object sender, EventArgs e)
        {
        }
        #endregion
@@ -1272,12 +1040,6 @@
                this.txtHRemark.Tag = oBadReason.oModel.HItemID.ToString();
            }
        }
        #endregion