C# 一个C#串口通信的简单调试工具
2014-05-28 16:40
549 查看
这个小工具是小弟两年前写的,代码可能有点稚嫩,但是原理以及机制依旧不变 ,原文发布在其他博客中.....
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; } } }
相关文章推荐
- 一个简单的通用命令工具(可以使用串口或其它的任意通信接口)
- 使用RXTX实现简单串口通信调试工具
- C# 关闭/打开显示器工具+源码(一个API的简单操作)
- C#真他妈神奇,一个函数都不用写就能实现一个简单的邮件发送工具
- C# Socket编程 一个简单的Socket 客户端服务器通信架构
- 一个简单实用的sql数据库查询工具(c#)
- C#串口介绍以及简单串口通信程序设计实现
- WinCE之路:3.串口的基本操作,算是一个最简单的调试软件吧
- C#串口介绍以及简单串口通信程序设计实现
- C#超级通信调试工具
- 一个基于C#的简单串口示例
- C#串口介绍以及简单串口通信程序设计实现
- [C#]使用TcpListener及TcpClient开发一个简单的Chat工具
- C#超级通信调试工具[v1.0][全新发布]
- 编写了一个简单的串口映射工具
- 我的小工具-nodejs串口转TCP调试通信
- C# 关闭/打开显示器工具+源码(一个API的简单操作)
- 一个串口通信程序,适用于3g模块发送简单AT指令
- 发一个简洁实用的串口调试工具
- C#使用TcpListener及TcpClient开发一个简单的Chat工具实例