• 串口读取和发送


    private void serialPortA1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)

    {
    ReadRU(serialPortA1, 1);
    }

    private void ReadRU(System.IO.Ports.SerialPort serial, int num)
    {
      var name = num.ToString();
      string readString = serial.ReadLine();  ///发送用serial.WriteLine()
      if (readString.Length > 20)
      {

        String R = readString.Split(',')[0].ToString();
      String U = readString.Split(',')[1].ToString();
      }
    }

    最近总结了串口(COM)读写操作的三种方式:

    1种方式是采用微软在.NET2.0推出了一个串口控件,SerialPort类,但必须是.NET2.0才可以
    2种方式是用API写串口通信,虽然难度高,但可以方便实现自己想要的各种功能
    3种方式是通过采用Visual Studio 6.0中原来的MSComm控件这是最简单的,最方便的方法,但需要注册

    以下详细分析了每种方式的使用方式,并提供相应例题下载:

    A.1种方式:

    .NET 2.0提供了对串口通信功能的支持,在命名空间System.IO.Ports下找到SerialPort类,通过创建一个新的SerialPort对象,我们就可以在.NET程序中控制串口通讯的全过程。

    (1).属性介绍
    进行串口通讯时,需要设置一些相关参数,可以通过设置SerialPort类的属性来进行。
    SerialPort属性主要包括:
    .PortName 串口名称,COM1, COM2等。
    .BaudRate 波特率,也就是串口通讯的速度,进行串口通讯的双方其波特率需要相同,如果用PC连接其他非PC系统,一般地,波特率由非PC系统决定。
    .Parity 奇偶校验。可以选取枚举Parity中的值
    .DataBits 数据位
    .StopBits 停止位,枚举StopBits中的值
    .Handshake 握手方式,也就是数据流控制方式,枚举Handshake中的值

    (2).打开与关闭串口
    在创建一个SerialPort对象,设置串口属性后,可以通过Open()方法打开串口。数据读写完成后,可以通过Close()方法关闭串口。
    根据经验,对于有些系统,在打开串口后,还需要将RtsEnable设置为True,这样才能读写数据,否则不能正常读写数据。

    (3).读写行数据
    ReadLine()方法是阻塞的,直至遇到一个换行符后返回。在读取数据时,如果一直没有遇到换行符,那么在等待ReadTimeout时间后,抛出一个TimeoutException。默认情况下,ReadTimeout为InfiniteTimeout。这样,ReadLine一直处于阻塞状态,直至有新一行数据到达。
    WriteLine()方法也是阻塞的,如果另一方不能及时接收数据,就会引起TimeoutException异常。
    由于ReadLine()和WriteLine()方法都是阻塞式的,在程序使用SerialPort 进行串口通讯时,一般应该把读写操作交由其他线程处理,避免因为阻塞而导致程序不响应。

    (4).读写字节或字符数据
    对于字节或字符数据,用Read()方法来读数据,该方法需要一个字节或字符数组作为参数来保存读取的数据,结果返回实际读取的字节或字符数。
    写数据使用Write()方法,该方法可以将字节数组、字符数据或字符串发送给另一方。

    (5).事件
    SerialPort提供了DataReceived事件。当有数据进入时,该事件被触发。
    该事件的触发由操作系统决定,当有数据到达时,该事件在辅助线程中被触发。辅助线程的优先级比较低,因此并不能确保每个字节的数据到达时,该事件都被触发。

  • 相关阅读:
    13.Query for Null or Missing Fields-官方文档摘录
    海南IT互联网招聘数据简单分析
    Mongo Spark Connector中的分区器(一)
    一、Golang中的反射基本使用
    Golang中的sync.Pool对象
    Golang中的内置函数
    golang单元测试简述
    Spark Streaming数据限流简述
    Golang中类面向对象特性
    在Docker中跑Hadoop与镜像制作
  • 原文地址:https://www.cnblogs.com/VictorBlog/p/5193396.html
Copyright © 2020-2023  润新知