serialport控件的详细用法

http://www.cnblogs.com/jerry-bian/archive/2012/01/10/2317861.html

最近在做通讯协议,关于SerialPort类 DataReceived事件触发不了问题,找了很多资料,终于找到了发现不错。

1。简介

随着USB的流行,串口通讯已经应用到日常生活的很多方面了,USB是一种高速的串口通讯协议,USB接口非常复杂,通常被用在需要传输大量数据数据的地方,如U盘、相机、打印机等。除了USB这种较为奢侈的串口外,在工控和嵌入式行业,大量被使用的是另一种古老的串口协议,RS-232串口。RS-232是一种非常简洁的低速串口通讯接口,它可以同时进行数据接收和发送的工作。

2。.NET 2.0对串口的支持

.NET 2.0提供了对串口通信功能的支持,有关类可以在命名空间System.IO.Ports下找到,这其中最为重要的是SerialPort类。

通过创建一个新的SerialPort 对象,我们就可以在.NET程序中控制串口通讯的全过程。

3。使用 SerialPort 设置串口属性

进行串口通讯时,需要设置一些相关参数,可以通过设置SerialPort 类的属性来进行。串口属性主要包括

.PortName 串口名称,COM1, COM2等。
.BaudRate 波特率,也就是串口通讯的速度,进行串口通讯的双方其波特率需要相同,如果用PC连接其他非PC系统,一般地,波特率由非PC系统决定。
.Parity 奇偶校验。可以选取枚举Parity中的值
.DataBits 数据位
.StopBits 停止位,可以选取枚举StopBits中的值
.Handshake 握手方式,也就是数据流控制方式,可以选取枚举Handshake中的值

4。打开与关闭串口

在创建一个SerialPort 对象,设置串口属性后,可以通过 Open()方法打开串口。数据读写完成后,可以通过Close()方法关闭串口。

根据经验,对于有些系统,在打开串口后,还需要将RtsEnable设置为True,这样才能读写数据,否则不能正常读写数据。

5。读写行数据

双方通讯时,一般都需要定义通讯协议,即使最简单的通过串口发送文本聊天的程序。

通常是在当一方按下回车时,将其所数据的文本连同换行符发给另一方。在这个通讯事例中,协议桢是通过换行符界定的,每一桢数据都被换行符隔开,这样就很容易识别出通讯双发发送的信息。

在以上的例子中,可以用WriteLine()来发送数据,用ReadLine()来读取数据。WriteLine发送完数据后,会将换行符作为数据也发送给对方。ReadLine()读取数据时,直至遇到一个换行符,然后返回一个字符串代表一行信息。换行符可以通过SerialPort 的属性NewLine来设置。一般地,Windows将CrLn作为换行符,而在Linux下,换行符则只用一个Ln表示。

ReadLine()方法是阻塞的,直至遇到一个换行符后返回。在读取数据时,如果一直没有遇到换行符,那么在等待ReadTimeout时间后,抛出一个TimeoutException。默认情况下,ReadTimeout为InfiniteTimeout。这样,ReadLine一直处于阻塞状态,直至有新一行数据到达。

WriteLine()方法也是阻塞的,如果另一方不能及时接收数据,就会引起TimeoutException异常。

由于ReadLine()和WriteLine()方法都是阻塞式的,在程序使用SerialPort 进行串口通讯时,一般应该把读写操作交由其他线程处理,避免因为阻塞而导致程序不响应。

6。读写字节或字符数据

对于字节或字符数据,用Read()方法来读数据,该方法需要一个字节或字符数组作为参数来保存读取的数据,结果返回实际读取的字节或字符数。写数据使用Write()方法,该方法可以将字节数组、字符数据或字符串发送给另一方。

如果通讯双方交换的数据位字节流数据,要构建一个使用的串口通讯程序,那么双方应该定义数据桢格式。通常数据桢由桢头和桢尾来界定。

发送数据比较简单,只需要将构造好的数据用Write()方法发送出去即可。

接收数据则比较复杂,通讯是以字节流的形式到达的,通过调用一次Read()方法并不能确保所读取的数据就是完整一桢。因此需要将每次读取的数据整合在一起,对整合后的数据进行分析,按照定义的桢格式,通过桢头和桢尾,将桢信息从字节流中抽取出来,这样才能获取有意义的信息。

除了利用Read()方法来读数据,还可以使用ReadExisting()方法来读取数据。该方法读取当前所能读到的数据,以字符串的形式返回。

7。事件

SerialPort 提供了DataReceived事件。当有数据进入时,该事件被触发。该事件的触发由操作系统决定,当有数据到达时,该事件在辅助线程中被触发。辅助线程的优先级比较低,因此并不能确保每个字节的数据到达时,该事件都被触发。

在使用该事件接收数据时,最好对定义通讯协议格式,添加桢头和桢尾。在DataReceived事件中接收数据时,把数据放在数组中或字符串中缓冲起来,当接收的包含桢头和桢尾的完整数据时,在进行处理,另外,为了有效地接收数据,可以在每次读取数据后,加入System.Threading.Thread.Sleep方法进行演示。

8。其他
       用跳线使串口的第2、3针连接,可以在本地计算机上实现串口通信,所以,通过串口的第2、3针的连接可以对程序进行检测。

.BytesToRead 该属性返回能够读到的字节数。


方 法 名 称


说  明


Close


关闭端口连接,将 IsOpen 属性设置为False,并释放内部 Stream 对象


Open


打开一个新的串行端口连接


Read


从 SerialPort 输入缓冲区中读取数据字节数


ReadByte


从 SerialPort 输入缓冲区中同步读取一个字节


ReadChar


从 SerialPort 输入缓冲区中同步读取一个字符


ReadLine


一直读取到输入缓冲区中的 NewLine 值


ReadTo


一直读取到输入缓冲区中指定 value 的字符串


Write


已重载。将数据写入串行端口输出缓冲区


WriteLine


将指定的字符串和 NewLine 值写入输出缓冲区


DiscardInBuffer

DiscardOutBuffer


清空接收缓冲区数据

清空输出缓冲去数据

属性说明


名  称


说  明


BaseStream


获取 SerialPort 对象的基础 Stream 对象


BaudRate


获取或设置串行波特率


BreakState


获取或设置中断信号状态


BytesToRead


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


BytesToWrite


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


CDHolding


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


CtsHolding


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


DataBits


获取或设置每个字节的标准数据位长度


DiscardNull


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


DsrHolding


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


DtrEnable


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


Encoding


获取或设置传输前后文本转换的字节编码


Handshake


获取或设置串行端口数据传输的握手协议


IsOpen


获取一个值,该值指示 SerialPort 对象的打开或关闭状态


NewLine


获取或设置用于解释 ReadLine( )和WriteLine( )方法调用结束的值


Parity


获取或设置奇偶校验检查协议


ParityReplace


获取或设置一个字节,该字节在发生奇偶校验错误时替换数据流中的无效字节


PortName


获取或设置通信端口,包括但不限于所有可用的 COM 端口


ReadBufferSize


获取或设置 SerialPort 输入缓冲区的大小


ReadTimeout


获取或设置读取操作未完成时发生超时之前的毫秒数


ReceivedBytesThreshold


获取或设置 DataReceived 事件发生前内部输入缓冲区中的字节数


RtsEnable


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


StopBits


获取或设置每个字节的标准停止位数


WriteBufferSize


获取或设置串行端口输出缓冲区的大小


WriteTimeout


获取或设置写入操作未完成时发生超时之前的毫秒数

时间: 2024-08-09 02:18:49

serialport控件的详细用法的相关文章

转:Tab Control控件的详细使用

1. 新建一个MFC工程, 取名MyTab, 选择Dialog based, 然后Finish. 2. 删除对话框上默认添加的三个控件. 添加Tab Control控件并在Property属性中设置ID为IDC_TABTEST 在More Styles里勾上Bottom. 调速尺寸使其布满整个对话框, 我这边Tab Control的尺寸最后为164X203. 在ClassWizard为其添加变量, 变量名为m_tab. 类型为CTabCtrl.    3. 在对话框的初始化函数OnInitDia

百度 flash html5自切换 多文件异步上传控件webuploader基本用法

双核浏览器下在chrome内核中使用uploadify总有302问题,也不知道如何修复,之所以喜欢360浏览器是因为帮客户控制渲染内核: 若页面需默认用极速核,增加标签:<meta name="renderer" content="webkit"> 若页面需默认用ie兼容内核,增加标签:<meta name="renderer" content="ie-comp"> 若页面需默认用ie标准内核,增加标签

照片美化和处理控件ColorSwap详细介绍

ColorSwap是一款图形处理工具,可以对任何的数码图片进行颜色处理,并且保持原有图片的光泽和阴影以HSV颜色空间进行先进的图像处理,使用该工具不仅可以极其容易地改变色调.饱和度等,还可以使用标记执行对象分离. 具体功能: 可以对图片进行多种颜色的着色 支持从图片提取对象 对照片进行美化 对图片某部分进行高亮显示 如果您拥有数码相机,并且相对照出的照片进行处理,那么该控件是您最好的选择 如果您在网上看到一张图片,想对其进行颜色修改,或者是截取某一部分,那么该工具是您最好的选择 支持对图片进行添

[Swift学习]UIKit学习之滑块控件UISlider的用法

UIKit学习之滑块控件UISlider的用法 Slider: Sliders enable users to interactively modify some adjustable value in an app, such as speaker volume or screen brightness. UISlider: A UISlider object is a visual control used to select a single value from a continuous

Iocomp.net 工业仪表盘控件包详细介绍

Iocomp 工业仪表盘控件包(.net版)包括多种用来创建专业的仪表和测量.工业控制.工业监控等相关的应用程序的控件包,包括仪表盘控件, 开关控件, 实时曲线控件, LED灯控件等等. 所有的控件均为100% 托管代码,并且支持Microsoft / Borland/CodeGear/Embarcadero等不同的开发环境. 包括三个不同的版本,终极版(ultimate),专业版( Pro Pack) 和 曲线版(Plot Pack.) 控件包中的所有控件都是面向对象的设计,并且共用通用的底层

ios UILabel(label控件)的详细使用及特殊效果

UILabel *label = [[UILabelalloc] initWithFrame:CGRectMake(0, 0, 75, 40)];   //声明UIlbel并指定其位置和长宽 label.backgroundColor = [UIColorclearColor];   //设置label的背景色,这里设置为透明色. label.font = [UIFont fontWithName:@"Helvetica-Bold" size:13];   //设置label的字体和字

VC单选按钮控件(Radio Button)用法

先为对话框加上2个radio button,分别是Radio1和Radio2. 问题1:如何让Radio1或者Radio2默认选上?如何知道哪个被选上了? 关键是选上,“默认”只要放在OnInitDialog()即可.三种方法可以让它选上, 第一种:((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);//选上((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(FALSE);//不选上((CButton

JAVA SWING嵌入IE浏览器控件JExplorer详细介绍及下载

JExplorer用于在Swing程序中添加Microsoft Internet Explorer的控件.您可以结合JNIWrapper中的共同特点来使用该类库,尤其是当您需要使用低级Internet Explorer的API函数来深度整合MSHTML和DOM功能时. 具体功能: JExplorer具有多种功能特点,方便您在Java程序中整合Internet Explorer Visual Browser组件用于嵌入一个Swing用户界面中,并自动执行HeadlessBrowser进行测试 自动

WPF的ListView控件自定义布局用法实例

本文实例讲述了WPF的ListView控件自定义布局用法.分享给大家供大家参考,具体如下: 概要: 以源码的形式贴出,免得忘记后,再到网上查资料.在VS2008+SP1环境下调试通过 引用的GrayscaleEffect模块,可根据参考资料<Grayscale Effect...>中的位置下载. 正文: 如何布局是在App.xaml中定义源码如下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27