C# 一个C#串口通信的简单调试工具

来源:互联网 发布:php class w3c 编辑:程序博客网 时间:2024/05/03 22:22

这个小工具是小弟两年前写的,代码可能有点稚嫩,但是原理以及机制依旧不变 ,原文发布在其他博客中.....



using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Collections;namespace one{    /// <summary>    /// 一个串口的例子    /// </summary>    public partial class Form1 : Form    {        Form from = new Form();        private string str = string.Empty;        private byte[] by;        public Form1()        {            InitializeComponent();        }        #region 加载本电脑上的串口        private void Form1_Load(object sender, EventArgs e)        {            button3.Enabled = true;            button4.Enabled = false;            comboBox2.Text = "9600";            string[] portList = System.IO.Ports.SerialPort.GetPortNames();            for (int i = 0; i < portList.Length; i++)            {                comboBox3.Items.Add(portList[i]);                comboBox1.Items.Add(portList[i]);                comboBox4_shou.Items.Add(portList[i]);            }        }        #endregion        /// <summary>        /// 将信息发送到该Com口        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void button1_Click(object sender, EventArgs e)        {                byte[] b = new byte[10];                b = GEt();                write();            //MessageBox.Show(ByteArrayToHexString(Data).ToString());        }        #region 写入数据        public void write()         {            try            {                // serialPort1.PortName = comboBox1.Text;                //serialPort1.Open();                //serialPort1.BaudRate = int.Parse(comboBox2.Text);                //声明一个byte的数组来将需要发的信息发到byte 上                 byte[] Data = new byte[4];                 Data = Encoding.Unicode.GetBytes(textBox1.Text.Trim());                // string sr = ByteArrayToHexString(Data);                //使用缓冲区将数据写入 串行端口                serialPort1.Write(by, 0, by.Length);            }            catch (Exception p)            {                Console.WriteLine(p.Message);                MessageBox.Show(p.Message);            }        }        #endregion        private void button2_Click(object sender, EventArgs e)        {            //read();            textBox2.Text = "";        }        #region 读取串口数据的方法        public void read()         {            try            {                byte[] _data = new byte[4];                serialPort2.Read(_data,0,_data.Length );              //  str = Encoding.Unicode.GetString(_data);                str = ByteArrayToHexString(_data);            }            catch (Exception ex)            {                MessageBox.Show(ex.Message);            }        }        #endregion        #region 打开串口        /// <summary>        /// 打开当前串口        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void button3_Click(object sender, EventArgs e)        {            try            {                serialPort1.PortName = comboBox1.Text;                serialPort1.BaudRate = 9600;                if (!serialPort1.IsOpen)                {                    serialPort1.Open();                    button3.Enabled = false;                    button4.Enabled = true;                }                else                {                    MessageBox.Show("串口或许被打开或者不存在");                }            }            catch (Exception g)            {                Console.WriteLine(g.Message);                MessageBox.Show(g.Message);            }        }        #endregion         #region 关闭串口        /// <summasry>        /// 关闭当前串口        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void button4_Click(object sender, EventArgs e)        {            try            {                if (serialPort1.IsOpen)                {                    serialPort1.Close();                    button4.Enabled = false;                    button3.Enabled = true;                }                else                 {                    MessageBox.Show("串口或许被关闭或者串口不存在");                }            }            catch (Exception ex)             {                Console.WriteLine(ex);                MessageBox.Show(ex.Message);            }        }        #endregion        private void button5_Click(object sender, EventArgs e)        {            MessageBox.Show(serialPort1.ReadBufferSize.ToString());        }        #region 打开串口        /// <summary>        /// 打开接受信息的串口        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void button7_Click(object sender, EventArgs e)        {            try            {                serialPort2.PortName = comboBox4_shou.Text;                serialPort2.BaudRate = 9600;                if (!serialPort2.IsOpen)                {                    serialPort2.Open();                    button7.Enabled = false;                    button6.Enabled = true;                                    }                else                {                    MessageBox.Show("串口或许被打开或者不存在");                }            }            catch (Exception g)            {                Console.WriteLine(g.Message);                MessageBox.Show(g.Message);            }        }        #endregion        #region 串口被关闭        /// <summary>        /// 关键接受信息的串口        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void button6_Click(object sender, EventArgs e)        {            try            {                if (serialPort2.IsOpen)                {                    serialPort2.Close();                    button6.Enabled = false;                    button7.Enabled = true;                }                else                {                    MessageBox.Show("串口或许被关闭或者串口不存在");                }            }            catch (Exception ex)            {                Console.WriteLine(ex);                MessageBox.Show(ex.Message);            }        }        #endregion        #region 设置自动发送的代码        private void timer1_Tick(object sender, EventArgs e)        {            if (chek_bok.Checked)            {                write();                send();            }            else            {                send();            }        }        #endregion        #region 读取串口数据        private void serialPort2_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)        {            read();        }        #endregion        #region 发送数据        /// <summary>        /// 发送数据        /// </summary>        private void send()         {            button8.Text = DateTime.Now.ToString();            if (str.Length > 0)            {                textBox2.Text += " " + str;                str = "";            }            else            {                textBox2.ForeColor = Color.Red;            }            if (textBox2.Text.Length > 100)            {                //textBox2.Clear();            }        }        #endregion        #region 将字节数据转换为16进制的数据        /// <summary>        /// 一个将字节数组转换为16进制的        /// </summary>        /// <param name="data"></param>        /// <returns></returns>        private string ByteArrayToHexString(byte[] data)        {            StringBuilder sb = new StringBuilder(data.Length * 3);            foreach (byte b in data)            {                sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' '));              string s= Convert.ToString(b, 16);            }                        return sb.ToString().ToUpper();        }        #endregion         /// <summary>        /// 返回一个byte[] 类型的一个数组        /// </summary>        /// <returns>byte类型的数组</returns>        public byte[] GEt()         {            string s = textBox1.Text.Trim();            /*拿到那个从文本框输入的文本值             *              * 并且             */            if (s.Length<10)            {                for (int i = 0; i < 9; i++)                {                    if (s.Length==9)                    {                        goto GZ;                    }                    else                    {                        s += 0;                    }                }            }            GZ:            List<byte> arr = new List<byte>();            string a_ = string.Empty;            for (int i = 0; i < s.Length;i++)            {                if (s.Length > 2)                {                    a_ = s.Substring(0, 2);                    s = s.Remove(0, 2);                    byte a = Convert.ToByte(Convert.ToInt32(a_, 16));                    arr.Add(a);                }                else                {                    break;                }            }             by = new byte[4];             by = arr.ToArray();             return by;        }    }}





0 0
原创粉丝点击