最近在做与设备进行串口通信交互的项目,然后简单记录一下过程
使用的winform应用程序
方式1
1.声明串口对象 或者直接在工具箱拖拽串口控件
本篇文章不采用拖拽工具箱控件 直接声明对象
声明串口对象
SerialPort port = new SerialPort();//在选择了串口之后设置 串口、波特率、校验位等
也可以直接拖拽工具箱的串口控件SerialPort
2.引用串口命名控件 声明串口对象、声明委托
using System.IO.Ports;
SerialPort serialPort1 = new SerialPort();
public delegate void Displaydelegate(byte[] InputBuf);
public Displaydelegate disp_delegate;
public Form1()
{
InitializeComponent();
disp_delegate = new Displaydelegate(DispUI);
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
}
3.先获取电脑所有串口列表
获取到列表后绑定给conboBox,以便选择串口打开 在load事件绑定下拉框
String[] portnames = SerialPort.GetPortNames();
foreach (var item in portnames)
{
comboBox1.Items.Add(item);
}
4.实例化串口打开串口
选择串口后实例化串口
string aaa = comboBox1.SelectedItem.ToString();
serialPort11 = new SerialPort(aaa, 9600, Parity.None, 8, StopBits.One); //初始化串口设置 serialPort11 声明为全局变量
serialPort1.Open();
if (serialPort1.IsOpen)
{
MessageBox.Show("打开成功");
}
else
{
MessageBox.Show("打开失败");
}
5.写一个接收数据事件获取串口发送来的数据
//编写一个接收事件
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// writetxt("端口名称:" + serialPort1.PortName + "====" + "端口名称:" + "波特率:" + serialPort1.BaudRate + "串口状态:" + serialPort1.IsOpen + "错误信息:无");
//string receive = "";//数据接收
try
{
Thread.Sleep(100); //(毫秒)等待一定时间,确保数据的完整性 int len
int len = serialPort1.BytesToRead;
if (len != 0)
{
byte[] buff = new byte[len];
serialPort1.Read(buff, 0, len);
//receive = Encoding.Default.GetString(buff);//数据接收内容
//textBox1.Text = receive + "\r\n"; //不能直接给textbox1 不然会报错
this.Invoke(disp_delegate, buff);
}
}
catch (Exception asd)
{
//writetxt("端口名称:" + serialPort1.PortName + "====" + "端口名称:" + "波特率:" + serialPort1.BaudRate + "串口状态:" + serialPort1.IsOpen + "错误信息:" + asd.Message);
return;
}
}
public void DispUI(byte[] InputBuf)
{
//textBox1.Text = Convert.ToString(InputBuf);
string aaa = Encoding.Default.GetString(InputBuf);
textBox1.Text = aaa;
// writetxt("端口名称:" + serialPort1.PortName + "====" + "端口名称:" + "波特率:" + serialPort1.BaudRate + "串口状态:" + serialPort1.IsOpen + "错误信息:无 " + "数据:" + aaa);
}
6.模拟串口发送数据
模拟串口调试工具可参考我另一篇文章链接https://blog.csdn.net/qq_39569480/article/details/120776868