(1)波特率
最常用的标准波特率有110,300,600,1200,2400,4800,9600和19200[38]。(2)数据的传输单位
串口所传输的数据一般是字符型。使用到ASCII字符及JIS字符,ASCII码使用8位形成一个字符,而JIS码则以7位形成一个字符[38]。不同的情形下(根据所使用的协议),会使用到不同的传输单位。
(3)起始位与停止位
(4)校验位为了防止传输的过程造成数据的错误,数据帧中加入了奇偶校验位,校验位用来
检查所传输数据的正确性,分为奇校验(OddParity)和偶校验(EvenParity)两种,分别是检查字符码中1的数目是奇数或是偶数[38]。串行通信字符的数据格式是:起始位+传送字符+校验位+停止位[38]。
2.1.5实现串行通信多种方法
WindowsAPI(ApplicationProgrammingInterfaceAPI)函数是Windows平台的应用程序编程接口,它为运行的应用程序提供各种服务,屏蔽操作系统底层细节,为上层应用程序和硬件提供相关驱动和支持[39]。针对串口通信,WindowsAPI也提供了很多的库函数,调用这些API库函数就可以使用串行通信端口的驱动[39]。
串行通信端口在Windows环境下把该系统资源当成文件来进行操作,因此在打
开串口时,必须向系统申请资源,使用完之后,还必须使用关闭文件的函数将其关闭,并且释放所占用的系统资源[39]。
WindowsAPI是由操作系统所提供的函数,使用时必须遵从API函数的定义和应用,才能得出正确的结果,尤其是参数的定义更为重要,一般的API使用的定义是C语言的定义方式[39]。
串行通信组件也是通过API来完成通信端口的驱动功能的,它将串行通信函数封装起来,提供方便、直观的通信端口控制和访问模式,通信组件所具有的属性,事件和方法能够直接反映串行通信端口的动作和状态,用户直接操作通信组件来完成串行通信驱动程序的设计,不需要直接接触WindowsAPI函数,避免了大量的参数设置和复杂的函数调用,使串行通信的驱动程序设计更加方便和迅速[39]。
2.1.6 SerialPort类
.NETFramework4.0类库提供了对串口通信功能的支持,使用其中的SerialPort类可以方便的实现所需要串口通信的多种功能[39]。创建一个新的SerialPort对象,就可以在.NET程序中控制串口通信的整个过程[39]。根据系统具体功能需要,使用SerialPort类编写串口通信接口程序能够弥补MSComm组件的不足。
利用SerialPort类进行串口通信时,流程一般是:设置通讯波特率和端口号,数据位,停止位和校验位,然后打开端口连接,发送数据,接收数据,最后关闭端口连接这样几个步骤。
(1) 使用SerialPort设置串口属性
可以通过设置SerialPort类的属性来设置串口通信时需要设置的一些参数。串口属性包括:串口号,比如COM1,COM2等;波特率,奇偶校验,数据位,停止位,Handshake握手方式等。
(2)打开与关闭串口
在创建完SerialPort对象,设置了串口的属性后,使用Open()方法打开串口。数据读写完成后,使用Close()方法来关闭串口。
(3)读写行数据双方进行通信时,都需要定义相关的通信协议。在当某一方按下回车键时,会将其文本连同换行符发给另一方。在本事件中,协议的桢数是通过换行符确定的,每一桢数据都是被换行符隔开的,这样便能很容易地识别出双方交换的信息。在上述事例
中,发送数据用WriteLine(),读取数据用ReadLine()[39]。当WriteLine发送完数据后,会将换行符也作为数据信息发送给对方。ReadLine()读取时,遇到一个换行符就返回一个字符串表示一行信息。换行符可以通过属性NewLine来设置[39]。ReadLine()方法是阻塞的,直至遇到一个换行符后返回。在读取时,如果没有遇到换行符,那么在等待ReadTimeout时间后,就会抛一个异常[39]。默认的ReadTimeout为InfiniteTimeout。这样,ReadLine将一直处于阻塞状态,直到新数据到达。WriteLine()方法同样也是阻塞的,如果不能及时接收数据,就会抛出异常。