900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > C#对串口数据接收 发送的处理

C#对串口数据接收 发送的处理

时间:2021-11-14 18:24:33

相关推荐

C#对串口数据接收 发送的处理

最近在做与设备进行串口通信交互的项目,然后简单记录一下过程

使用的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.模拟串口发送数据

模拟串口调试工具可参考我另一篇文章链接/qq_39569480/article/details/120776868

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。