iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >C#如何实现串口通信
  • 400
分享到

C#如何实现串口通信

2023-06-29 05:06:22 400人浏览 泡泡鱼
摘要

这篇文章主要讲解了“C#如何实现串口通信”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#如何实现串口通信”吧!1.基本概念2.前端winForm布局如下(仅仅为了实现功能,布局略丑)3.代

这篇文章主要讲解了“C#如何实现串口通信”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#如何实现串口通信”吧!

1.基本概念

C#如何实现串口通信

2.前端winForm布局如下(仅仅为了实现功能,布局略丑)

C#如何实现串口通信

3.代码实现如下

namespace SerialPortTest  {      public partial class FORM1 : Form      {          SerialPort sp1 = new SerialPort();          public Form1()          {              InitializeComponent();          }            private void Form1_Load(object sender, EventArgs e)          {        //分别对应前端的波特率、数字位、校验位、停止位              cbBaudRate.SelectedIndex = 0;              cbDataBits.SelectedIndex = 0;              cbCheck.SelectedIndex = 0;              cbStop.SelectedIndex = 0;                string[] strCom = SerialPort.GetPortNames();              if (strCom == null)              {                  MessageBox.Show("本机没有串口!", "Error");                  return;              }              //GetPortNames()方法:获取当前计算机的串行端口名的数组              foreach (string com in System.io.Ports.SerialPort.GetPortNames())              {                  cbCom.Items.Add(com);              }                cbCom.SelectedIndex = 0;              sp1.BaudRate = 9600;              Control.CheckForIllegalCrossThreadCalls = false;              sp1.DataReceived += Sp1_DataReceived;                                         sp1.DtrEnable = true;//获取或设置一个值,该值在串行通信过程中启用数据终端就绪 (DTR) 信号。              sp1.RtsEnable = true;//获取或设置一个值,该值指示在串行通信中是否启用请求发送 (RTS) 信号              //设置数据读取超时为1秒              sp1.ReadTimeout = 1000;                sp1.Close();          }            private void Sp1_DataReceived(object sender, SerialDataReceivedEventArgs e)          {              if (sp1.IsOpen)     //判断是否打开串口              {                  //输出当前时间                  DateTime dt = DateTime.Now;                  txtReceived.Text += dt.GetDateTimeFormats('f')[0].ToString() + "\r\n";                  try                  {                      Byte[] receivedData = new Byte[sp1.BytesToRead];        //创建接收字节数组                      sp1.Read(receivedData, 0, receivedData.Length);         //读取数据                      AddContent(new UTF8Encoding().GetString(receivedData));//用万能的UTF8可以传输中文不会乱码                  }                 catch (System.Exception ex)                  {                      MessageBox.Show(ex.Message, "出错提示!!!!!");                      txtSendStr.Text = "";                  }              }              else              {                  MessageBox.Show("请打开某个串口", "错误提示");              }          }            //将接受到的内容显示出来          private void AddContent(string content)          {              this.BeginInvoke(new MethodInvoker(delegate              {                  txtReceived.AppendText(content);                  txtReceived.AppendText("\r\n");                  //记录收到的字符个数                  lblRevCount.Text = (int.Parse(lblRevCount.Text) + content.Length).ToString();              }));          }            private void btnOpen_Click(object sender, EventArgs e)          {              //serialPort1.IsOpen              if (!sp1.IsOpen)              {                  try                  {                      //设置串口号                      string serialName = cbCom.SelectedItem.ToString();                      sp1.PortName = serialName;                        //设置各“串口设置”                      string strBaudRate = cbBaudRate.Text;                      string strDateBits = cbDataBits.Text;                      string strStopBits = cbStop.Text;                      Int32 iBaudRate = Convert.ToInt32(strBaudRate);                      Int32 iDateBits = Convert.ToInt32(strDateBits);                      sp1.BaudRate = iBaudRate;       //波特率                     sp1.DataBits = iDateBits;       //数据位                     switch (cbStop.Text)            //停止位                     {                         case "1":                             sp1.StopBits = StopBits.One;                             break;                         case "1.5":                             sp1.StopBits = StopBits.OnePointFive;                             break;                         case "2":                             sp1.StopBits = StopBits.Two;                             break;                         default:                             MessageBox.Show("Error:参数不正确!", "Error");                             break;                     }                     switch (cbCheck.Text)             //校验位                     {                         case "无":                             sp1.Parity = Parity.None;                             break;                         case "奇校验":                             sp1.Parity = Parity.Odd;                             break;                         case "偶校验":                             sp1.Parity = Parity.Even;                             break;                         default:                             MessageBox.Show("Error:参数不正确!", "Error");                             break;                     }                      if (sp1.IsOpen == true)//如果打开状态,则先关闭一下                     {                         sp1.Close();                     }                      //设置必要控件不可用                     cbCom.Enabled = false;                     cbBaudRate.Enabled = false;                     cbDataBits.Enabled = false;                     cbStop.Enabled = false;                     cbCheck.Enabled = false;                     sp1.Open();     //打开串口                     btnOpen.Text = "关闭串口";                 }                 catch (System.Exception ex)                 {                     MessageBox.Show("Error:" + ex.Message, "Error");                     return;                 }             }             else             {                 //恢复控件功能                 //设置必要控件不可用                 cbCom.Enabled = true;                 cbBaudRate.Enabled = true;                 cbDataBits.Enabled = true;                 cbStop.Enabled = true;                 cbCheck.Enabled = true;                 sp1.Close();                    //关闭串口                 btnOpen.Text = "打开串口";             }         }          private void btnSend_Click(object sender, EventArgs e)         {             byte[] sendData = null;             if (!sp1.IsOpen) //如果没打开             {                 MessageBox.Show("请先打开串口!", "Error");                 return;             }             String strSend = txtSendStr.Text;             try             {                 sendData = Encoding.UTF8.GetBytes(txtSendStr.Text.Trim());                //sp1.WriteLine(txtSendStr.Text);    //写入数据                 sp1.Write(sendData, 0, sendData.Length);              }              catch (Exception ex)              {                  MessageBox.Show("Error:" + ex.Message, "Error");} } }}

4.测试运行结果如下

在自己同一台电脑上测试,需要先用Configure Virtual Serial Port Driver建立两个虚拟串口,如下

C#如何实现串口通信

串口运行结果如下:

C#如何实现串口通信

上述两窗体通信时要选择同一波特率,不然收发数据会失败

关于C# serialport的一些说明:

SerialPort() :如果未指定,则此构造函数使用默认属性值。 例如, DataBits 属性默认值为 8, Parity 属性默认为 None 枚举值,
StopBits 属性默认值为 1,默认端口名为 COM1。

public static string[] GetPortNames() :获取当前计算机的串行端口名的数组

SerialPort.Read 方法 (Byte[], Int32, Int32) :从 SerialPort 输入缓冲区读取一些字节并将那些字节写入字节数组中指定的偏移量处

SerialPort.ReadLine 方法 () :一直读取到输入缓冲区中的 NewLine 值

SerialPort.Write 方法 (Byte[], Int32, Int32) : 使用缓冲区中的数据将指定数量的字节写入串行端口

SerialPort.WriteLine 方法 (String) : 将指定的字符串和 NewLine 值写入输出缓冲区。

感谢各位的阅读,以上就是“C#如何实现串口通信”的内容了,经过本文的学习后,相信大家对C#如何实现串口通信这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: C#如何实现串口通信

本文链接: https://www.lsjlt.com/news/322791.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#如何实现串口通信
    这篇文章主要讲解了“C#如何实现串口通信”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#如何实现串口通信”吧!1.基本概念2.前端winForm布局如下(仅仅为了实现功能,布局略丑)3.代...
    99+
    2023-06-29
  • C#怎么实现串口通信
    本篇内容介绍了“C#怎么实现串口通信”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!框架准备出于简单考虑,首先创建一个Winform项目,本文...
    99+
    2023-07-05
  • 基于C#实现串口通信
    本文实例为大家分享了C#实现串口通信的具体代码,供大家参考,具体内容如下 1.基本概念 2.前端winForm布局如下(仅仅为了实现功能,布局略丑) 3.代码实现如下 names...
    99+
    2024-04-02
  • C#实现简单串口通信
    串口通信(Serial Communications)是指外设和计算机间通过数据信号线、地线等按位(bit)进行传输数据的一种通信方式,属于串行通信方式,能够实现远距离通信,长度可达...
    99+
    2024-04-02
  • QT如何实现串口通信
    小编给大家分享一下QT如何实现串口通信,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言:如果用qt写程序作为上位机,然后通过和usb和下位机通信的时候,就需要用...
    99+
    2023-06-15
  • c#模拟串口通信SerialPort怎么实现
    这篇“c#模拟串口通信SerialPort怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“c#模拟串口通信Serial...
    99+
    2023-06-30
  • c#模拟串口通信SerialPort的实现示例
    目录一、前导知识实现串口通信的必要设置二、实验绘制窗口测试 三、总结四、附件完整代码一、前导知识 串行口是计算机的标准接口,现在的PC机(个人电脑)一般至少有两个串行口CO...
    99+
    2024-04-02
  • Flutter:如何在Android中实现串口通信调试
            本文介绍如何通过flutter_libserialport插件在Flutter中实现串口通信调试。 1、引入依赖         在flutter工程的pubspec.yaml文件中引入flutter_libserialpo...
    99+
    2023-08-31
    android flutter 串口 dart
  • 【Python】Python实现串口通信(Python+Stm32)
    🎉欢迎来到Python专栏~Python实现串口通信 ...
    99+
    2023-08-31
    python stm32 开发语言 串口通信 嵌入式硬件 Python+Stm32
  • QT串口通信的实现方法
    前言:如果用qt写程序作为上位机,然后通过和usb和下位机通信的时候,就需要用到qt中的串口通信了。 使用qt中的串口通信的时候需要用到的两个头文件分别为: #include &...
    99+
    2024-04-02
  • 怎么使用Java实现串口通信
    要使用Java实现串口通信,可以使用Java的RXTX库。以下是一个简单的示例代码: import gnu.io.CommPort;...
    99+
    2023-10-22
    Java
  • java 串口通信实现流程示例
    下载64位rxtx for java 链接:http://fizzed.com/oss/rxtx-for-java下载下来的包解压后按照说明放到JAVA_HOME即JAVA的安装路径下面去在maven的pom.xml下添加 <dep...
    99+
    2023-05-30
    java 串口通信 ava
  • C#实现简单串口通讯实例
    本文实例为大家分享了C#实现简单串口通讯的具体代码,供大家参考,具体内容如下 参数设置界面代码: using System; using System.Collections.Gen...
    99+
    2024-04-02
  • C#基于WinForm实现串口通讯
    串口通讯是一种计算机常用的数据传输方式。 程序运行如下: 首先,检查计算机的串口,并获取所有串口信息。 private void CheckPort()//检查串口是否可用    ...
    99+
    2024-04-02
  • c# 实现简单的串口通讯
    目录开发环境:第一步第二步第三步本文提供一个用C#实现串口通讯实例,亲自编写,亲测可用! 开发环境: VS2008+.net FrameWork3.5(实际上2.0应该也可以) 第一...
    99+
    2024-04-02
  • winform串口通信出现乱码如何解决
    出现乱码有可能是由于串口通信设置不正确或者数据格式不匹配导致的。以下是一些可能的解决方案: 确保串口通信的波特率、数据位、停止位和...
    99+
    2024-04-02
  • C#中的串口通信SerialPort详解
    今天这篇文章带大家学习下C#中的串口通讯。在日常的开发工作中,如果工作内容是CS方向的同学应该很容易接触到串口通讯方面的业务需求。那么也就很容易想到C#中SerialPort类,它就...
    99+
    2024-04-02
  • Android串口开发之使用JNI实现ANDROID和串口通信
    导语:Android串口通信在物联网、智能家居等领域具有广泛的应用。本文将详细介绍如何使用JNI技术实现Android设备与串口的通信,包括串口的打开、设置参数和读写数据等过程。 目录 一...
    99+
    2023-10-20
    android java android studio 串口通信 JNI
  • C++如何实现即时通信
    本篇内容主要讲解“C++如何实现即时通信”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++如何实现即时通信”吧!软件:VS服务器端//TcpServer_plus.exe#include<...
    99+
    2023-06-30
  • Python应用开发之实现串口通信
    目录前言1.环境搭建2.硬件准备3.代码编写与测试3.1 简单测一下串口收发3.2 补充细节3.3 完善整个收发流程前言 在嵌入式开发中我们经常会用到串口,串口通信简单,使用起来方便...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作