c#串⼝缓存字节数_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
writeline方法属于类例⼦MSDN:
SerialPort mySerialPort = new SerialPort("COM2");
mySerialPort.BaudRate = 9600;
mySerialPort.Parity=Parity.None;
mySerialPort.StopBits = StopBits.One;
mySerialPort.DataBits = 8;
mySerialPort.Handshake = Handshake.Non;
mySerialPort.DataReceived += new SerialDataReceivedEvenHandler(DataReceive_Method);
mySerialPort.Open();
....
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) 握⼿中使⽤此属性。通常由调制解调器将数据设置就绪 (D
SR) 信号发送到端⼝,以表明它已经为数据传输或数据接收做好准备。
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事件。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论