串口按位(bit)发送和接到字节,通讯使用三根线完毕

串口通信属性及事件解析

 

福睿斯S-232串口,串口按位(bit)发送和接收字节。即使比按字节(byte)的竞相通讯慢,可是串口能够在利用1根线发送数据的还要用另1根线接收数据。规范地,串口用于ASCII码字符的传导。通讯使用三根线落成:(一)地线,(二)发送,(叁)接收。

 

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

专程串口通讯的情人,指出参考《Visual
C++串口通讯工程开拓实例导航》。

 

一、属性

  1. PortName 串口名    默认值COM1

串口对于操作系统来讲是二个文书,若是设置PortName为本机不存在的串口名(即文件名),如“COM7”或“COMK”,Open()张开串口将退步,提醒“端口COM柒不设有”。

  1. BaudRate 获得或设置串行波特率bit/s   
    暗中同意值9600

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

CR-VS232是要用在中远距离传输上最大距离为30M

帕JeroS485用在长途传输最大距离1200M

  1. DataBits
    获取或设置每一个字节的专门的职业数量位长度    暗中认可值八

当计算机发送叁个音讯包,实际的多寡不会是7个人的,标准的值是伍、7和八个人。怎么着设置取决于你想传递的新闻。举例,标准的ASCII码是0~1二7(五人)。扩大的ASCII码是0~25伍(七人)。即便数据选择简单的文件(标准ASCII码),那么每种数据包使用七位数据。每一种包是指二个字节,包涵伊始/截至位,数据位和奇偶校验位。由于实在多少位取决于通讯协议的精选,术语“包”指任何通讯的场所。

  1. StopBits
    获取或安装各类字节的正规化结束位数    私下认可值One

用以表示单个包的结尾1个人。规范的值为一,一.5和4人。由于数量是在传输线上定期的,并且每三个道具有其和煦的石英钟,很大概在通讯中两台器具间出现了不大的分裂台。由此结束位不不过象征传输的结束,并且提供计算机械学改正时钟同步的火候。适用于结束位的位数越来越多,差异石英钟同步的忍受程度越大,但是多少传输率同时也越慢。

  1. Parity 获取或设置奇偶校验检查协议   
    暗中认可值None

在串口通讯中1种简易的检错形式。有各类检错方式:偶、奇、高和低。当然未有校验位也是能够的。对于偶和奇校验的意况,串口会设置校验位(数据位前边的一个人),用2个值确定保障传输的数目有偶个大概奇个逻辑高位。举个例子,假若数量是01一,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。假若是奇校验,

校验位位一,那样就有二个逻辑高位。高位和未有不确实的检查数据,轻巧置位逻辑高或然逻辑低校验。那样使得接收装置能够清楚一个位的景观,有时机剖断是否有噪音搅扰了通讯可能是还是不是传输和接收数据是或不是区别步。

  1. ParityReplace
    获取或安装三个字节,该字节在发生奇偶校验错误时替换数据流中的不算字节  
    默许值陆叁(?)

  2. ReadBufferSize 获取或设置 SerialPort
    输入缓冲区的分寸     暗中同意值40九陆

ReadBufferSize 属性忽略任何低于 4096的值??由于 ReadBufferSize 属性只表示 Windows
创设的缓冲区,而BytesToRead.aspx) 属性除了表示
Windows 成立的缓冲区外还表示 SerialPort 缓冲区,所以 BytesToRead
属性能够回去3个比 ReadBufferSize 属性大的值。

  1. ReadTimeout
    获取或设置读取操作未到位时产生超时从前的微秒数    私下认可值-一

特出的说ReadTimeout设置了Read(outBuf,
offset,
count)超时等待的时间,即假诺接收缓冲区一贯未曾多少,则Read()等待ReadTimeout纳秒后甩TimeoutException非常。不过在ReadTimeout之内,只要有多少个数额,则Read()立马回到,而不是等待count个字节数据。ReadTimeout不是为着Read()阻塞等待count个字节,那它有如何意思?

  1. ReceivedBytesThreshold 获取或安装
    DataReceived 事件产生前内部输入缓冲区中的字节数   暗中同意值一

假设缓冲区一次性有陆个字节数据,那么DataReceived事件是触发一次依旧8次?

  1. WriteBufferSize
    获取或安装串行端口输出缓冲区的轻重    暗中同意值204八

ReadBufferSize 属性忽略任何低于 409六的值。

鉴于 ReadBufferSize 属性仅代表 Windows
创设的缓冲区,所以它可以回到比 BytesToRead性子小的值,那象征 SerialPort 和
Windows 成立的缓冲区。

  1. WreiteTimeout
    获取或设置写入操作未成功时发生超时从前的皮秒数    暗许值-一

写入超时值在 Win32 通讯 API 中中期棉被服装置为
500 纳秒。此属性允许你设置此值。此值能够安装为 0
以即时从写入操作再次回到,或设置为私行正值,也足以安装为暗许的
InfiniteTimeout。此属性不影响 BaseStream.aspx) 的BeginWrite.aspx) 方法。

  1. BytesToRead  
    拿到接收缓冲区中多少的字节数

由于 ReadBufferSize.aspx) 属性只代表
Windows 创造的缓冲区,而 BytesToRead 属性除了表示 Windows
成立的缓冲区外还代表 SerialPort 缓冲区,所以 BytesToRead
属性能够回来三个比 ReadBufferSize 属性大的值。

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

  2. NewLine 获得或设置用于解释 ReadLine(
    )和WriteLine( )方法调用截止的值    暗中认可值“\n”

  3. DiscardNull 获取或安装3个值,指示Null 字节在端口和接收缓冲区之间传输时是或不是被忽视  私下认可值false

健康状态下,尤其是对于2进制传输来讲,此值应该设置为
false。将此属性设置为 true 会使 UTF3二 和 UTF1陆编码字节发生意料之外结果。

  1. Handshake
    获取或安装串行端口数据传输的握手协议    私下认可值None

动用握手时,将指令连接到 SerialPort
对象的设施在缓冲区中足足有
(ReadBufferSize.aspx)-十二四)
个字节时停下发送数据。当缓冲区中的字节数小于等于 十二四时,将指令设备再度开首发送数据。纵然设备在抢先 10二五个字节的块中发送数据,只怕会导致缓冲区溢出。

设若将 Handshake
属性设置为 RequestToSendXOnXOff.aspx) 并将 CtsHolding.aspx) 设置为
false,则不会发送 XOff 字符。假使后来将 Cts霍尔丁 设置为
true,则必须发送越来越多的多少后才会发送 XOff 字符。

  1. Encodeing
    获取或设置传输前后文本转变的字节编码     
    默以为 ASCIIEncoding.aspx)

ASCIIEncoding
不提供错误检查评定。出于安全原因,提议你使用 UTF8Encoding.aspx)、UnicodeEncoding.aspx) 或UTF32Encoding.aspx) 并启用错误检查评定。

ASCIIEncoding 仅帮衬 U+0000 和
U+007F之间的 Unicode 字符值。由此,UTF捌Encoding、UnicodeEncoding 和
UTF3二Encoding 得以更加好地适应整个世界化的应用程序。

  1. DtrEnable
    获取或安装2个值,该值在串行通信过程中启用数据终端就绪 (DT猎豹CS六) 功率信号  
    暗中同意值 false

在 XON/XOFF 软件握手、请求发送/能够发送
(RTS/CTS) 硬件握手和调制解调器通信的长河中司空见惯启用数据终端就绪
(DT途观)。

  1. 凯雷德tsEnable
    获取或设置一个值,该值提醒在串行通讯中是还是不是启用请求发送 (RTS) 非复信号  
    暗中认可值false

呼吁发送 (RTS)
时域信号平日用在呼吁发送/能够发送 (RTS/CTS) 硬件握手中。

  1. CD霍尔丁获取端口的载波检验行的情况

此属性可用以监视端口的载波检验行的处境。无载波经常申明接收方已挂断且载波已被丢掉。

  1. Cts霍尔丁      
    获取“能够发送”行的场地

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

  1. Dsr霍尔丁       获取数据设置就绪
    (DSKuga) 随机信号的情事

在数额设置就绪/数据终端就绪 (DSQashqai/DTQashqai)
握手中使用此属性。平日由调制解调器将数据设置就绪 (DS帕Jero)
信号发送到端口,以标明它已经为多少传输或数额接收做好筹算。

  1. BufferSize    值1024

  2. maxDataBits    值8

  3. minDataBits    值5

  4. SERIAL_NAME   
    值\\Device\\Serial

 

二、方法

  1. Open()  
    张开3个新的串行端口连接

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

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

  4. ReadByte()  
    从 SerialPort 输入缓冲区中联合读取二个字节

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

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

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

  8. ReadTo()  
    一直读取到输入缓冲区中的钦点 value 的字符串

  9. Write(string)  
    将点名的字符串写入串行端口

  10. Write(Byte[], int, int)  
    使用缓冲区的数额将点名数量的字符写入串行端口

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

  12. DiscardInBuffer()  
    废弃接收缓冲区的数码

  13. DiscardOutBuffer()  
    遗弃发送缓冲区的多寡

  14. static GetPortNanes()  
    获取当前Computer的串口名称数组

 

三、事件

  1. DataReceive事件  
    数据接收事件的点子

  不保证对接收到的各样字节引发
DataReceived 事件。 使用 BytesToRead
属性明显缓冲区中剩下的要读取的数据量。从 SerialPort
对象接收数据时,就要帮扶线程上吸引 DataReceived 事件。

  1. PinChanged事件   
    串行管脚改动事件的点子

  在 SerialPort 对象进入 BreakState
时引发,但在端口退出 BreakState 时不吸引。就要拉拉扯扯线程上吸引 PinChanged
事件。

  1. ErrorReceived事件      
    错误事件的法子

  假若在流的尾字节上面世奇偶校验错误,将向输入缓冲区增加八个值为
1二六 的额外字节。就要拉拉扯扯线程上引发 PinChanged 事件。

 

 

标签: 串口属性设置

LX570S-23贰串口,串口按位(bit)发送和接受字节。固然比按字节(byte)的互动通讯慢,然而串口能够在行使1根线发送数据的还要用另一根线接收数据。标准地,串口用于ASCII码字符的传输。通信使用三根线落成:(1)地线,(2)发送,(三)接收。

 

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

尤其串口通讯的情侣,提议参考《Visual C++串口通讯工程开荒实例导航》。

 

一、属性

  1. PortName 串口名    默认值COM1

串口对于操作系统来说是一个文件,固然设置PortName为本机不存在的串口名(即文件名),如“COM七”或“COMK”,Open()张开串口将战败,提醒“端口COM柒不设有”。

  1. BaudRate 获得或安装串行Porter率bit/s    暗许值9600

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

奥迪Q5S23二是要用在远距离传输上最大距离为30M

OdysseyS48五用在长距离传输最大距离1200M

  1. DataBits 获取或安装每种字节的正统数据位长度    私下认可值8

当计算机发送二个音讯包,实际的多寡不会是5人的,标准的值是5、柒和伍人。怎么样设置取决于你想传递的音信。例如,标准的ASCII码是0~1二7(八人)。增添的ASCII码是0~255(6个人)。假如数额应用简易的文件(标准ASCII码),那么各类数据包使用伍人数据。每一种包是指二个字节,包含开端/结束位,数据位和奇偶校验位。由于实在数据位取决于通讯协议的抉择,术语“包”指其余通讯的动静。

  1. StopBits 获取或设置每一种字节的正儿8经甘休位数    默许值One

用以表示单个包的末尾一个人。规范的值为1,一.5和四人。由于数量是在传输线上定时的,并且每一个装置有其自个儿的机械手表,很恐怕在通信中两台设备间出现了相当的小的不联合。由此甘休位不不过意味传输的停止,并且提供Computer改进石英钟同步的机会。适用于甘休位的位数更多,不一致石英钟同步的隐忍程度越大,不过数量传输率同时也越慢。

  1. Parity 获取或安装奇偶校验检查协议    暗中同意值None

在串口通讯中一种简易的检错格局。有种种检错格局:偶、奇、高和低。当然未有校验位也是足以的。对于偶和奇校验的情景,串口会设置校验位(数据位后边的1人),用三个值确认保证传输的数额有偶个也许奇个逻辑高位。举个例子,借使数据是01一,那么对于偶校验,校验位为0,保险逻辑高的位数是偶数个。假诺是奇校验,

校验位位一,那样就有二个逻辑高位。高位和没有不真的的检查数据,轻巧置位逻辑高只怕逻辑低校验。那样使得接收装置能够理解三个位的动静,有机遇剖断是或不是有噪音干扰了通讯或然是还是不是传输和接收数据是或不是不一齐。

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

  2. ReadBufferSize 获取或安装 SerialPort 输入缓冲区的大大小小     暗中同意值40九陆

ReadBufferSize 属性忽略任何低于 40玖陆 的值??由于 ReadBufferSize
属性只表示 Windows 创设的缓冲区,而
BytesToRead.aspx)
属性除了代表 Windows 成立的缓冲区外还意味着 SerialPort 缓冲区,所以
BytesToRead 属性能够回去三个比 ReadBufferSize 属性大的值。

  1. ReadTimeout 获取或安装读取操作未形成时发出超时事先的微秒数   
    暗中认可值-1

方便的说ReadTimeout设置了Read(outBuf, offset,
count)超时等待的小运,即只要接收缓冲区一向未有数量,则Read()等待ReadTimeout纳秒后甩TimeoutException卓殊。不过在ReadTimeout里边,只要有三个数量,则Read()立马回到,而不是等待count个字节数据。ReadTimeout不是为着Read()阻塞等待count个字节,这它有哪些意义?

  1. ReceivedBytesThreshold 获取或安装 DataReceived
    事件时有发生前内部输入缓冲区中的字节数   暗中认可值1

若是缓冲区1遍性有四个字节数据,那么DataReceived事件是触发三回照旧7次?

  1. WriteBufferSize 获取或安装串行端口输出缓冲区的大小    暗中认可值204八

ReadBufferSize 属性忽略任何低于 40九陆 的值。

是因为 ReadBufferSize 属性仅代表 Windows 成立的缓冲区,所以它能够重临比
BytesToRead质量小的值,那象征
SerialPort
和 Windows 创制的缓冲区。

  1. WreiteTimeout 获取或设置写入操作未产生时发出超时事先的微秒数   
    私下认可值-一

写入超时值在 Win3贰 通讯 API 中后期被设置为 500
皮秒。此属性允许你设置此值。此值能够安装为 0
以当下从写入操作重临,或设置为随机正值,也可以安装为默许的
InfiniteTimeout。此属性不影响
BaseStream.aspx)

BeginWrite.aspx)
方法。

  1. BytesToRead   获得接收缓冲区中数据的字节数

由于
ReadBufferSize.aspx)
属性只代表 Windows 成立的缓冲区,而 BytesToRead 属性除了代表 Windows
创立的缓冲区外还代表 SerialPort 缓冲区,所以 BytesToRead
属性可以回来2个比 ReadBufferSize 属性大的值。

  1. BytesToWrite   获取发送缓冲区中数量的字节数

  2. NewLine 获得或安装用于解释 ReadLine( )和WriteLine(
    )方法调用停止的值    默许值“\n”

  3. DiscardNull 获取或安装2个值,提示 Null
    字节在端口和接收缓冲区之间传输时是否被忽视  默许值false

常规情状下,尤其是对于二进制传输来讲,此值应该设置为
false。将此属性设置为 true 会使 UTF32 和 UTF1陆 编码字节产生出人意料结果。

  1. Handshake 获取或设置串行端口数据传输的抓手球协会议    暗中同意值None

行使握手时,将指令连接到 SerialPort 对象的配备在缓冲区中足足有
(ReadBufferSize.aspx)-十二4)
个字节时停下发送数据。当缓冲区中的字节数小于等于 1024时,将指令设备再一次初叶发送数据。借使设备在超越 10二十二个字节的块中发送数据,只怕会变成缓冲区溢出。

若果将 Handshake 属性设置为
RequestToSendXOnXOff.aspx)
并将
CtsHolding.aspx)
设置为 false,则不会发送 XOff 字符。要是后来将 Cts霍尔丁 设置为
true,则必须发送更加多的数量后才会发送 XOff 字符。

  1. Encodeing 获取或设置传输前后文本调换的字节编码      默以为
    ASCIIEncoding.aspx)

ASCIIEncoding 不提供错误检查实验。出于安全原因,建议你使用
UTF8Encoding.aspx)、UnicodeEncoding.aspx)

UTF32Encoding.aspx)
并启用错误检验。

ASCIIEncoding 仅支持 U+0000 和 U+007F之间的 Unicode
字符值。因而,UTF八Encoding、UnicodeEncoding 和 UTF32Encoding
足以更加好地适应环球化的应用程序。

  1. DtrEnable 获取或设置3个值,该值在串行通信进程中启用数据终端就绪
    (DT奥迪Q三) 时域信号   私下认可值 false

在 XON/XOFF 软件握手、请求发送/能够发送 (RTS/CTS)
硬件握手和调制解调器通讯的进度中国和日本常启用数据终端就绪 (DTLAND)。

  1. 奥迪Q7tsEnable 获取或设置四个值,该值提示在串行通讯中是还是不是启用请求发送
    (RTS) 信号   暗中认可值false

恳请发送 (RTS) 复信号平日用在呼吁发送/能够发送 (RTS/CTS) 硬件握手中。

  1. CD霍尔丁 获取端口的载波检查实验行的动静

此属性可用以监视端口的载波检查测试行的情形。无载波平日注明接收方已挂断且载波已被抛弃。

  1. Cts霍尔丁       获取“能够发送”行的事态

在呼吁发送/可以发送 (RTS/CTS) 硬件握手中使用能够发送 (CTS)
行。发送数据此前端口会查询 CTS 行。

  1. Dsr霍尔丁       获取数据设置就绪 (DSLacrosse) 确定性信号的情形

在数量设置就绪/数据终端就绪 (DSCRUISER/DT纳瓦拉)
握手中使用此属性。平时由调制解调器将数据设置就绪 (DS路虎极光)
数字信号发送到端口,以表明它曾经为多少传输或数量接收做好希图。

  1. BufferSize    值1024

  2. maxDataBits    值8

  3. minDataBits    值5

  4. SERIAL_NAME    值\\Device\\Serial

 

二、方法

  1. Open()   张开三个新的串行端口连接

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

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

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

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

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

  7. ReadLine()   一向读取到输入缓冲区中的
    NewLine

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

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

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

  11. WriteLine()   将点名字符串和NewLine值写入输出缓冲区

  12. DiscardInBuffer()   吐弃接收缓冲区的数目

  13. DiscardOutBuffer()   舍弃发送缓冲区的多少

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

 

三、事件

  1. DataReceive事件   数据接受事件的方式

  不保险对接到到的每个字节引发 DataReceived 事件。 使用 BytesToRead
属性鲜明缓冲区中多余的要读取的数据量。从 SerialPort
对象接收数据时,将在支援线程上掀起 DataReceived 事件。

  1. PinChanged事件    串行政管理脚改换事件的方法

  在 塞里alPort 对象进入 BreakState 时引发,但在端口退出 BreakState
时不抓住。就要支援线程上引发 PinChanged 事件。

  1. ErrorReceived事件       错误事件的不二等秘书技

  要是在流的尾字节上出现奇偶校验错误,将向输入缓冲区加多多少个值为 1二陆的额外字节。将要援助线程上吸引 PinChanged 事件。

相关文章