C#-串口设备对接

描述

接口电路

基本概况

串口介绍

  • 串口:是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。
  • 串口通信(Serial Communications):串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。
    • 波特率:这是一个衡量符号传输速率的参数。指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位*240个/秒=2400bps。
    • 数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据往往不会是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。串口通信使用的大多都是 DB9 接口,如下图

接口电路编辑

1 载波检测(DCD) 2 接受数据(RXD) 3 发出数据(TXD) 4 数据终端准备好(DTR) 5 信号地线(SG) 6 数据准备好(DSR) 7 请求发送(RTS) 8 清除发送(CTS) 9 振铃指示(RI)

c#中的串口操作类

****System.IO.Port.SerialPort.NET Framework提供的操作串行端口的类,里面提供了一些方法、属性和和事件供开发者调用操作串口。

** 常用字段**

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

示例

// 建立串口对象privatestaticSerialPort serialPort;publicvoidinit(){ serialPort =newSerialPort();//串行波特率serialPort.BaudRate =115200;//每个字节的标准数据位长度serialPort.DataBits =8;// 设置每个字节的标准停止位数serialPort.StopBits = StopBits.One;// 读、写 超时时间 单位毫秒serialPort.ReadTimeout =500; serialPort.WriteTimeout =500;// 串口名称serialPort.PortName ="COM1"; }

常用方法

名称 说明
Close 关闭端口连接,将 IsOpen 属性设置为false,并释放内部 Stream 对象
GetPortNames 获取当前计算机的串行端口名称数组
Open 打开一个新的串行端口连接
Read SerialPort输入缓冲区中读取
ReadExisting 读取 SerialPort 对象的流和输入缓冲区中所有立即可用的字节
Write 将数据写入串行端口输出缓冲区

示例

publicvoidtest1() {// 判断串口是否打开if(serialPort==null || serialPort.IsOpen) {return; }// 打开串口serialPort.Open();// 读取串口中的内容serialPort.ReadExisting()//如果串口处于打开状态,则关闭if(serialPort.IsOpen) {// 关闭串口serialPort.Close(); } }

常用事件

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

示例

publicvoidtest2(){//设备监听回调serialPort.DataReceived +=newSerialDataReceivedEventHandler(DataReceivedHandler); }// 回调方法publicvoidDataReceivedHandler(objectsender, SerialDataReceivedEventArgs e){try{//解析内容SerialPort sp = (SerialPort)msg;stringcontent = sp.ReadExisting(); Console.WriteLine("WX GZH: 程序猿知秋,"+content); }catch(Exception ex) { Console.WriteLine(ex); } }
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分