C#串口SerialPort常用属性方法

SerialPort():

//属性

.BaudRate;获取或设置波特率

.BytesToRead;得到 接收到数据的字节数

.BytesToWrites;得到送往串口的字节数

.DataBits;获取或设置数据位

.IsOpen;获取一个值,判断串口是否打开

.Pariy;获取或设置校验位

.PortName;串口名称

.ReadBufferSize;获取或设置读取数据的缓存大小

.ReadTimeout;读取超时时间

.StopBits;停止位

.NewLine;用于解释通过ReadLine()与WriteLine()的值

.WriteBufferSize;与ReadBufferSize相对

.WriteTimeout;与ReadTimeout相对

方法:

.Close();判断串口

.Open();打开串口

.Read(Byte[], int32, int32);读取数据

.Read(Char[], int32, int32);

.ReadByte();读取一个字节的数据

.ReadChar();读取一个字符的数据

.ReadLine();一直读取到输入缓冲区的NewLine值:返回string类型

.ReadExisting();读取可用的字节

.ReadTo(string value);读取数据,直到读到该value时停止。

.Write(string);写入数据

.Write(byte[], int32, int32);

.Write(char[], int32, int32);

.WriteLine(string value);将指定的value值与NewLine值一起写入

事件:

DataReceived

例子MSDN:

SerialPort mySerialPort = new SerialPort("COM2");//new SerialPort("COM"+string);

mySerialPort.BaudRate = 9600;

mySerialPort.Parity=Parity.None;

mySerialPort.StopBits = StopBits.One;

mySerialPort.DataBits = 8;

mySerialPort.Handshake = Handshake.Non;

mySerialPort.ReadTimeout = 200;

mySerialPort.WriteTiemout = 200;

mySerialPort.DataReceived += new SerialDataReceivedEvenHandler(DataReceive_Method);

mySerialPort.Open();

 ....

mySerialPort.DiscardInBuffer();

mySerialPort.DiscardOutBuffer(); 

mySerialPort.Close();

 

 static void DataReceive_Method(object sender, SerialPortDataReceivedEventArgs e)

{

SerialPort sp = (SerialPort)seder;

string indata = sp.ReadExisting();

Console.Write(indata);

}

串口通信属性及事件解析

RS-232串口,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。

 

本文以c#中的SerialPort类为例,分析串口各参数及事件,其他平台串口库的操作类似。

专门串口通信的朋友,建议参看《Visual C++串口通信工程开发实例导航》。

 

一、属性

1. PortName 串口名    默认值COM1

串口对于操作系统来说是一个文件,如果设置PortName为本机不存在的串口名(即文件名),如“COM7”或“COMK”,Open()打开串口将失败,提示“端口COM7不存在”。

2. BaudRate 获取或设置串行波特率bit/s    默认值9600

比特率=波特率X单个调制状态对应的二进制位数。

RS232是要用在近距离传输上最大距离为30M

RS485用在长距离传输最大距离1200M

3. DataBits 获取或设置每个字节的标准数据位长度    默认值8

当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。

4. StopBits 获取或设置每个字节的标准停止位数    默认值One

用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

5. Parity 获取或设置奇偶校验检查协议    默认值None

在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,

校验位位1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。

6. ParityReplace 获取或设置一个字节,该字节在发生奇偶校验错误时替换数据流中的无效字节   默认值63(?)

7. ReadBufferSize 获取或设置 SerialPort 输入缓冲区的大小     默认值4096

ReadBufferSize 属性忽略任何小于 4096 的值??由于 ReadBufferSize 属性只表示 Windows 创建的缓冲区,而 BytesToRead 属性除了表示 Windows 创建的缓冲区外还表示 SerialPort 缓冲区,所以 BytesToRead 属性可以返回一个比 ReadBufferSize 属性大的值。

8. ReadTimeout 获取或设置读取操作未完成时发生超时之前的毫秒数    默认值-1

确切的说ReadTimeout设置了Read(outBuf, offset, count)超时等待的时间,即如果接收缓冲区一直没有数据,则Read()等待ReadTimeout毫秒后甩TimeoutException异常。但是在ReadTimeout期间,只要有一个数据,则Read()立马返回,而不是等待count个字节数据。ReadTimeout不是为了Read()阻塞等待count个字节,那它有什么意义?

9. ReceivedBytesThreshold 获取或设置 DataReceived 事件发生前内部输入缓冲区中的字节数   默认值1

如果缓冲区一次性有4个字节数据,那么DataReceived事件是触发1次还是4次?

10. WriteBufferSize 获取或设置串行端口输出缓冲区的大小    默认值2048

ReadBufferSize 属性忽略任何小于 4096 的值。

由于 ReadBufferSize 属性仅表示 Windows 创建的缓冲区,所以它可以返回比 BytesToRead属性小的值,这表示 SerialPort 和 Windows 创建的缓冲区。

11. WreiteTimeout 获取或设置写入操作未完成时发生超时之前的毫秒数    默认值-1

写入超时值在 Win32 通信 API 中最初被设置为 500 毫秒。此属性允许您设置此值。此值可以设置为 0 以立即从写入操作返回,或设置为任意正值,也可以设置为默认的 InfiniteTimeout。此属性不影响 BaseStream 的 BeginWrite 方法。

12. BytesToRead   获取接收缓冲区中数据的字节数

由于 ReadBufferSize 属性只表示 Windows 创建的缓冲区,而 BytesToRead 属性除了表示 Windows 创建的缓冲区外还表示 SerialPort 缓冲区,所以 BytesToRead 属性可以返回一个比 ReadBufferSize 属性大的值。

13. BytesToWrite   获取发送缓冲区中数据的字节数

14. NewLine 获取或设置用于解释 ReadLine( )和WriteLine( )方法调用结束的值    默认值“\n”

15. DiscardNull 获取或设置一个值,指示 Null 字节在端口和接收缓冲区之间传输时是否被忽略  默认值false

正常情况下,特别是对于二进制传输而言,此值应该设置为 false。将此属性设置为 true 会使 UTF32 和 UTF16 编码字节产生意外结果。

16. Handshake 获取或设置串行端口数据传输的握手协议    默认值None

使用握手时,将指示连接到 SerialPort 对象的设备在缓冲区中至少有 (ReadBufferSize-1024) 个字节时停止发送数据。当缓冲区中的字节数小于等于 1024 时,将指示设备重新开始发送数据。如果设备在大于 1024 个字节的块中发送数据,可能会导致缓冲区溢出。

如果将 Handshake 属性设置为 RequestToSendXOnXOff 并将 CtsHolding 设置为 false,则不会发送 XOff 字符。如果后来将 CtsHolding 设置为 true,则必须发送更多的数据后才会发送 XOff 字符。

17. Encodeing 获取或设置传输前后文本转换的字节编码      默认为 ASCIIEncoding

ASCIIEncoding 不提供错误检测。出于安全原因,建议您使用 UTF8Encoding、UnicodeEncoding 或 UTF32Encoding并启用错误检测。

ASCIIEncoding 仅支持 U+0000 和 U+007F之间的 Unicode 字符值。因此,UTF8Encoding、UnicodeEncoding 和 UTF32Encoding 可以更好地适应全球化的应用程序。

18. DtrEnable 获取或设置一个值,该值在串行通信过程中启用数据终端就绪 (DTR) 信号   默认值 false

在 XON/XOFF 软件握手、请求发送/可以发送 (RTS/CTS) 硬件握手和调制解调器通信的过程中通常启用数据终端就绪 (DTR)。

19. RtsEnable 获取或设置一个值,该值指示在串行通信中是否启用请求发送 (RTS) 信号   默认值false

请求发送 (RTS) 信号通常用在请求发送/可以发送 (RTS/CTS) 硬件握手中。

20. CDHolding 获取端口的载波检测行的状态

此属性可用于监视端口的载波检测行的状态。无载波通常表明接收方已挂断且载波已被丢弃。

21. CtsHolding       获取“可以发送”行的状态

在请求发送/可以发送 (RTS/CTS) 硬件握手中使用可以发送 (CTS) 行。发送数据之前端口会查询 CTS 行。

22. DsrHolding       获取数据设置就绪 (DSR) 信号的状态

在数据设置就绪/数据终端就绪 (DSR/DTR) 握手中使用此属性。通常由调制解调器将数据设置就绪 (DSR) 信号发送到端口,以表明它已经为数据传输或数据接收做好准备。

23. BufferSize    值1024

24. maxDataBits    值8

25. minDataBits    值5

26. SERIAL_NAME    值\\Device\\Serial

 

二、方法

1. Open()   打开一个新的串行端口连接

2. Close()   关闭端口连接,将 IsOpen 属性设置为 false,并释放内部 Stream 对象

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

4. ReadByte()   从 SerialPort 输入缓冲区中同步读取一个字节

5. ReadChar()   从 SerialPort 输入缓冲区中同步读取一个字符

6. ReadExisting()   在编码的基础上,读取 SerialPort 对象的流和输入缓冲区中所有立即可用的字节

6. ReadLine()   一直读取到输入缓冲区中的 NewLine 值

7. ReadTo()   一直读取到输入缓冲区中的指定 value 的字符串

8. Write(string)   将指定的字符串写入串行端口

9. Write(Byte[], int, int)   使用缓冲区的数据将指定数量的字符写入串行端口

10. WriteLine()   将指定字符串和NewLine值写入输出缓冲区

11. DiscardInBuffer()   丢弃接收缓冲区的数据

12. DiscardOutBuffer()   丢弃发送缓冲区的数据

12. static GetPortNanes()   获取当前计算机的串口名称数组

 

三、事件

1. DataReceive事件   数据接收事件的方法

  不保证对接收到的每个字节引发 DataReceived 事件。 使用 BytesToRead 属性确定缓冲区中剩余的要读取的数据量。从 SerialPort 对象接收数据时,将在辅助线程上引发 DataReceived 事件。

2. PinChanged事件    串行管脚更改事件的方法

  在 SerialPort 对象进入 BreakState 时引发,但在端口退出 BreakState 时不引发。将在辅助线程上引发 PinChanged 事件。

3. ErrorReceived事件       错误事件的方法

  如果在流的尾字节上出现奇偶校验错误,将向输入缓冲区添加一个值为 126 的额外字节。将在辅助线程上引发 ErrorReceived事件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NTFS文件系统的简述

NTFS文件系统的设计思想基于稳定性、和安全性并支持大容量存储设备的文件系统:1.它提供日志可以增加文件系统的容错率,可以有效的保护系统的安全。NTFS是一个可恢复的文件系统。在NTFS分区上即使强制关机后,一般也不需要运行CHKDSK命令修复磁…

Rxjava基础

现在很多Android App的开发开始使用Rxjava,但是Rxjava以学习曲线陡峭著称,入门有些困难。经过一段时间的学习和使用,这里来介绍一下我对Rxjava的理解。 说到Rxjava首先需要了解的两个东西,一个是Observable(被观察者&a…

『协议』XML-RPC 协议规格说明

为什么80%的码农都做不了架构师?>>> 这篇文章提供所有实现XML-RPC协议所需要的内容。 一览 XML-RPC是一个工作在因特网上的远端程序调用(Remote Procedure Calling)协议。 XML-RPC消息是一个HTTP-POST请求(Request&…

Qt之QLineEdit详解(附源码)

原博客地址:http://blog.csdn.net/liang19890820/article/details/52044639,感谢原作者总结和分享。 简述 QLineEdit是一个单行文本输入框。 QLineEdit允许用户输入和编辑单行纯文本,提供了很多有用的编辑功能,包括:撤…

POJ 1323 Game Prediction#贪心

(&#xff5e;&#xffe3;▽&#xffe3;)&#xff5e;* //既然是求最少能胜几次 //说明对方是要尽可能让我输 //但为了避免浪费&#xff0c;对方会用比我的牌大的牌中的最小pip的牌来击败我 #include<iostream> #include<cstdio> #include<cstring> #inclu…

qt学习之键盘事件( keyPressEvent)

//最近一直忙于做驱动&#xff0c;对底层东西很是好奇&#xff0c;好奇键盘是 怎么区分每个键值的&#xff0c;又是怎么响应的&#xff01;因此&#xff0c;就有了下面这些代码//环境windows 工具qt 语言c//在主窗体类中声明键盘响应函数 void keyPressEvent(QKeyEvent * event…

C#json数据的序列化和反序列化(将数据转换为对象或对象集合)

引用 System.Runtime.Serialization.Json 转载于:https://www.cnblogs.com/a849788087/p/5645828.html

位图(bmp)文件格式分析

from&#xff1a;https://blog.csdn.net/qingchuwudi/article/details/25785307 位图(bmp)文件格式分析 作者&#xff1a;深蓝&#xff08;由博主分享&#xff09; 一、什么是位图 计算机能以位图和矢量图格式显示图像。 1、位图(Bitmap)&#xff1a; 图像又称点阵图或光…

汇付 支付,痛苦的接入过程

有文档&#xff0c;但是&#xff0c;写文档的人明白&#xff0c;看文档的人很有难度。 没有SDK&#xff0c;要自已写。 然后&#xff0c;钱的流入流出都必须经过虚拟钱包&#xff0c;提现还要绑取现卡&#xff0c;这个我也能理解&#xff0c;不能理解的是&#xff0c;订单退款&…

随笔分类 - HALCON学习例程中文详解

from: https://www.cnblogs.com/chita/category/563492.html随笔分类 - HALCON学习例程中文详解HALCON学习例程中文详解跟我学机器视觉-HALCON学习例程中文详解-测量圆环脚宽间距摘要: 跟我学机器视觉-HALCON学习例程中文详解-测量圆环脚宽间距* This example program demonstr…

WinCE6 如何去掉控制面板中的应用?

在WINCE600/PUBLIC/WCESHELLFE/OAK/FILES/wceshellfe.bib把对应的cpl 干掉例如区域设置 好像是2个 ; CESYSGEN IF WCESHELLFE_MODULES_INTLPintlp.cpl $(_FLATRELEASEDIR)/intlp.cpl NK SH ; CESYSGEN ENDIF ; CESYSGEN IF WCESHELLFE_MODULES_INTLLintll.cpl $(_FLATRELEASEDI…

软件自动更新解决方案及QT实现

from&#xff1a;https://blog.csdn.net/hulinhulin/article/details/46839107软件自动更新解决放案及QT实现...11 文件的版本控制-XML.22 更新程序的实现...22.1 界面设置...22.2 程序功能...32.2.1 下载网络数据...32.2.2 XML文件的分析...62.2.3 下载XML文件的DownLoadXML函…

java 基本功 —— 内存相关

2019独角兽企业重金招聘Python工程师标准>>> 首先我们来说说内存&#xff0c;因为从内存的角度来出发来分析一些变量&#xff0c;引用或者对象的生命周期会更好理解一些。 java是一门编程语言&#xff0c;他跟C有什么不同呢&#xff1f;本质上&#xff0c;他们都是一…

DOM事件处理有三个阶段

DOM事件处理有三个阶段&#xff1a; 捕捉阶段&#xff08;capture phase&#xff09;&#xff1a;从最上层元素&#xff0c;直到最下层&#xff08;你点击的那个target&#xff09;元素。路过的所有节点都可以捕捉到该事件。命中阶段&#xff08;target phase&#xff09;&…

客户端程序自动更新(升级)的方式

from&#xff1a;https://blog.csdn.net/woaitingting1985/article/details/72954652一、C/S自动更新原理C/S程序自动升级是一个很重要的功能&#xff0c;原理其实很简单&#xff0c;一般包含两个程序一个是主程序&#xff0c;也就是除了升级功能以外的程序&#xff0c;另一个就…

怎么用源程序把ChemDraw结构复制到Word文档

在学习化学过程中&#xff0c;不可避免的会接触到各种化学结构。这个时候就需要通过绘制化学结构来进行这方面的学习和传播。ChemDraw Professional 15就可以辅助完成这方面的工作。很多的用户朋友会通过选中后复制粘贴可以将ChemDraw结构复制到Word文档中&#xff0c;但这只是…

网络流(最大流) HDU 1565 方格取数(1) HDU 1569 方格取数(2)

HDU 1565 方格取数(1)给你一个n*n的格子的棋盘&#xff0c;每个格子里面有一个非负数。从中取出若干个数&#xff0c;使得任意的两个数所在的格子没有公共边&#xff0c;就是说所取的数所在的2个格子不能相邻&#xff0c;并且取出的数的和最大。 Input 包括多个测试实例&#…

python学习 第一篇 基础

上周报名了reboot python 课程&#xff0c;终于下决心要把python 搞好了&#xff0c;希望自己能坚持下来&#xff0c;并得到自己想要的成绩#coding:utf-8 #呵呵 #print hello world #xhello world #print x #xraw_input(hello world) #print x #int #print 23 #print 12*3 #pri…

QT串口编程的相关类(QSerialPortInfo)

QT Serial Port相关的类只有两个QSerialPortInfo(#include<QSerialPortInfo>) 和QserialPort(#include<QSerialPort>) 先来介绍QSerialPortInfo 1&#xff1a;QSerialPortInfo(#include<QSerialPortInfo>) 该类是一个串口的辅助类类&#xff0c;提供主要是提…

用jquery写一个属于自己的音乐播放器

看到一个用css3实现的CD的动画&#xff0c;演示在这儿http://codepen.io/_kieran/pen/QNRmep 突然那我就想说给自己做一个音乐播放器吧&#xff0c;说做就做。演示在https://echolsx.github.io/music/ Github传送门&#xff1a;https://github.com/EchoLsx/music 主要代码&…