C#串口编程(1)

  1. 概念

    串口  

      可以接受CPU并行数据字符转换,为连续的串行数据流发送出去,同时可接受的串行数据流转换为并行的数据字符供给CPU的器件

    串口通讯

      串口按位(bit)发送和接收字节,尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另外一根线接收数据。

      串口最重要的参数是波特率、数据位、停止位和奇偶校验。

          波特率

            衡量符号传输速率的参数,指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数。

            如:每秒钟传送960个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为960Bd,比特率为10位*960个/秒=9600bps

          数据位

            衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据往往不会是8位 ,标准的值是6、7和8位。

            标准的ASCII码是0-127(7位),扩展的ASCII码是0-255(8位)。

            如果数据使用简单的文本(标准的ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始位、停止位、数据位和奇偶校验位。

          停止位

            用于表示单个包的最后几位,典型的值为1,1.5和2.由于数据是在传输线上定时的,并且每个设备有其自己的时钟,很可能在通信中两台设备间出现了小小不同步。

            因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。

          校验位

            串口通信中一种简单的检错方式,四种检错方式:偶、奇、高和低。没有校验位也是可以的

    串口通信的接口标准

      RS-232C,RS-232,RS-422A,RS-485等。常用RS-232和RS-485 


串口操作类

 

      System.IO.Port.SerialPort     

      常用字段

名称   说明
PortName   获取或设置通信端口 (如:COM3)
BaudRate   获取或设置串行波特率(如:9600)
DataBits   获取或设置每个字节的标准数据位长度  
Parity   获取或设置奇偶数校验检查协议
StopBits   获取或设置每个字节的标准停止位数

      案例     

private SerialPort serialPort;
        private void init()
        {
            serialPort = new SerialPort();
            //串口名称
            serialPort.PortName = "COM3";
            //串行波特率
            serialPort.BaudRate = 9600;
            //每个字节的标准数据长度
            serialPort.DataBits = 8;
            //设置停止位
            serialPort.StopBits = StopBits.One;
            //读写超时时间 单位为毫秒
            serialPort.ReadTimeout = 500;
            serialPort.WriteTimeout = 500;
        }

 


 

常用方法
名称   说明
Open   打开一个新的串行端口连接
Close 关闭端口连接
GetPortNames     获取当前计算机串行端口名称数组
Read   从SerialPort输入缓冲区读取
ReadExisting  读取SerialPort对象的流和输入缓冲区中所有立即可用的字节
Write   将数据写入串行端口输出缓冲区
 public void Test()
        {
            if (serialPort == null || serialPort.IsOpen)
            {
                return;
            }
            //打开串口
            serialPort.Open();
            //读取串口中的内容
            serialPort.ReadExisting();
            //如果串口出于打开状态,则关闭。
            if (serialPort.IsOpen)
            {
                serialPort.Close();
            }
        }

常用事件
名称   说明
DataReceived   表示将处理SerialPort对象的数据接收事件的方法

示例:

 public void Test2()
        {
            //设备监听回调
            serialPort.DataReceived += SerialPort_DataReceived;
        }

        //回调方法
        private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            //获取可以读取的字节数
            int len = serialPort.BytesToRead;
            //创建缓存数据的数组
            byte[] buff = new byte[len];
            //把数据读取到buff数组中
            serialPort.Read(buff, 0, len);
            //将byte[]数组转换成string类型
            string data = Encoding.Default.GetString(buff);
        }

 

posted @ 2023-05-18 11:19  小溪_1  阅读(291)  评论(0编辑  收藏  举报