第15章 串行通信原理与设计 浙江农林_第1页
第15章 串行通信原理与设计 浙江农林_第2页
第15章 串行通信原理与设计 浙江农林_第3页
第15章 串行通信原理与设计 浙江农林_第4页
第15章 串行通信原理与设计 浙江农林_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 介绍串行通信的基本概念,包括串行介绍串行通信的基本概念,包括串行通信的原理、传输协议以及各种串行传输通信的原理、传输协议以及各种串行传输的接口标准的接口标准 最后讲解了最后讲解了WindowsWindows环境下,最常见的环境下,最常见的APIAPI编程方法编程方法串行通信基本概念串行通信基本概念15.1串行传输协议串行传输协议15.2使用使用Windows API进行同步串口编程进行同步串口编程15.3采用重叠采用重叠I/O方式的编程方法方式的编程方法15.4采用事件驱动方式的编程方法采用事件驱动方式的编程方法15.515.1 串行通信基本概念 通信,是在一些联络信号的控制下,通信,是在一

2、些联络信号的控制下,一次将一次将8位、位、16位或位或32位数据同时进行传送位数据同时进行传送的通信方式。在并行通信中,传输线数量的通信方式。在并行通信中,传输线数量没有限制,除了数据线之外还应设置有通没有限制,除了数据线之外还应设置有通信联络控制线信联络控制线。 串行通信,只需一对传输线,数据的串行通信,只需一对传输线,数据的各位按照时间顺序依次传送,如各位按照时间顺序依次传送,如8位数据分位数据分8次传送。次传送。15.1.1 15.1.1 串行通信特点串行通信特点 由于在一条传输线上既传输数据信息,由于在一条传输线上既传输数据信息,又传输控制联络信息,这就需要一系列约又传输控制联络信息,

3、这就需要一系列约定,从而识别一条线上传送的信息流中,定,从而识别一条线上传送的信息流中,哪一部分是数据信号,哪一部分是联络信哪一部分是数据信号,哪一部分是联络信号。号。 串行通信的信息格式有异步和同步信串行通信的信息格式有异步和同步信息格式。与此对应,有异步串行通信和同息格式。与此对应,有异步串行通信和同步串行通信两种方式。步串行通信两种方式。 由于串行通信中信息逻辑定义与由于串行通信中信息逻辑定义与TTL不不兼容,故需要逻辑电平转换,以提高信息兼容,故需要逻辑电平转换,以提高信息传输的可靠性。传输的可靠性。 为为了降低通信线路的成本和简化通信了降低通信线路的成本和简化通信设备,可用现存信道(

4、如电话、电报信道设备,可用现存信道(如电话、电报信道等),配以适当的通信接口,在任意两点等),配以适当的通信接口,在任意两点之间实现串行通信。之间实现串行通信。 15.1.2 15.1.2 串行通信传输方式串行通信传输方式 串行通信的过程是将通信双方传输的串行通信的过程是将通信双方传输的数据序列变成电信号,在选定的通信线路数据序列变成电信号,在选定的通信线路上完成传递。通常,将通信传输方式分为上完成传递。通常,将通信传输方式分为信号传输方式和线路传输方式两部分。信号传输方式和线路传输方式两部分。 1信号传输方式信号传输方式 在近距离传输时,广泛使用的是按信号原在近距离传输时,广泛使用的是按信号

5、原样传输的基波传输方式。样传输的基波传输方式。 在远距离传输时,通常需要使用在远距离传输时,通常需要使用Modem。通过通过Modem,可以将原信号调制为高频的模拟,可以将原信号调制为高频的模拟信号,然后通过电话网络,进行远距离传输。信号,然后通过电话网络,进行远距离传输。 2线路传输方式线路传输方式 在串行通信中,数据通常是在两个站(如在串行通信中,数据通常是在两个站(如微机、终端等)之间进行传送,按照数据流微机、终端等)之间进行传送,按照数据流的方向及对线路的使用方式可分为如下几种的方向及对线路的使用方式可分为如下几种基本传输方式:基本传输方式: 单工传输方式。这种方式,在传输线路单工传输

6、方式。这种方式,在传输线路上,数据只能按一个固定的方向,且是交互上,数据只能按一个固定的方向,且是交互式的。式的。 半双工方式。当使用同一根传输线既作半双工方式。当使用同一根传输线既作为输入又作为输出时,虽然数据可以在两个为输入又作为输出时,虽然数据可以在两个方向上传送,但通信双方不能同时收发数据方向上传送,但通信双方不能同时收发数据,这种传输方式就是半双工传输方式。,这种传输方式就是半双工传输方式。 全双工传输方式。当数据的发送和接收全双工传输方式。当数据的发送和接收分别由两根不同的传输线传输时,通信双方分别由两根不同的传输线传输时,通信双方都能在同一时刻进行发送和接收操作都能在同一时刻进行

7、发送和接收操作。 多工传输方式。使用复用技术,将一个多工传输方式。使用复用技术,将一个信道(即传输信号的线路)划分为若干个频信道(即传输信号的线路)划分为若干个频带或时间片,从而使多路信号同时共享信道带或时间片,从而使多路信号同时共享信道,这就是多工传输方式。,这就是多工传输方式。15.1.3 15.1.3 数据纠错与检错数据纠错与检错 在基本通信规程中一般采用奇偶校验在基本通信规程中一般采用奇偶校验或方阵码检错,以反馈重发方式纠错。在或方阵码检错,以反馈重发方式纠错。在高级通信控制规程中,一般采用循环冗余高级通信控制规程中,一般采用循环冗余码码CRC(Cycle Redundancy Cod

8、e)检验)检验,以自动纠错方式来纠错。,以自动纠错方式来纠错。 首先,改善传输通道的电特性,使误首先,改善传输通道的电特性,使误码率达到要求,但是由于经济因素和技术码率达到要求,但是由于经济因素和技术因素等条件的限制,这方面的努力往往不因素等条件的限制,这方面的努力往往不能得到理想的效果;能得到理想的效果; 其次,采取检错、纠错技术,即所谓其次,采取检错、纠错技术,即所谓差错控制技术,在差错控制技术中,对数差错控制技术,在差错控制技术中,对数据进行可靠有效地编码是很重要的途径之据进行可靠有效地编码是很重要的途径之一。一。15.1.4 传输速率与距离 传输速率和距离是衡量串行通信的两个传输速率和

9、距离是衡量串行通信的两个重要方面。重要方面。 通常串行通信涉及以下通常串行通信涉及以下三三个方面:个方面:1波特率波特率2发送接收时钟发送接收时钟3传输距离与传输速率的关系传输距离与传输速率的关系 波特率波特率 在并行通信中,传输速率以每秒传送的在并行通信中,传输速率以每秒传送的字节(字节(B/s)数来表示,而串行通信中,在基)数来表示,而串行通信中,在基波传输的情况下用每秒传送的位数(波传输的情况下用每秒传送的位数(bit/s)来表示数据传输速率。来表示数据传输速率。 用的标准波特率是用的标准波特率是110、300、1200、2 400、4 800、9 600和和19 200等。随着技术的等

10、。随着技术的进步,某些串行通信可以支持更高的波特率进步,某些串行通信可以支持更高的波特率,如,如38 400、57 600等。等。 发送接收时钟发送接收时钟 在发送数据时,发送器在发送时钟的有效在发送数据时,发送器在发送时钟的有效沿(下降沿)作用下将移位寄存器的数据按位沿(下降沿)作用下将移位寄存器的数据按位移位串行输出。移位串行输出。 发送发送/接收时钟频率与波特率的关系如下:接收时钟频率与波特率的关系如下: 发送发送/接收时钟频率接收时钟频率n发送发送/接收波特率接收波特率 表达式中的表达式中的n1,16,64。 传输距离与传输速率的关系传输距离与传输速率的关系 串行接口或终端直接传送串行

11、信息流的串行接口或终端直接传送串行信息流的最大距离与传输速率及传输线的电气特性有最大距离与传输速率及传输线的电气特性有关,传输距离随传输速率的增加而减少。关,传输距离随传输速率的增加而减少。 RS-232C标准规定,当数据传送速度小标准规定,当数据传送速度小于于20kbit/s,并且电缆的电容负荷小于,并且电缆的电容负荷小于2 500pF时,传送距离小于时,传送距离小于30m。由于电缆的。由于电缆的电容没有那么大,当传输速度较慢时,传输电容没有那么大,当传输速度较慢时,传输距离将超过这个距离。距离将超过这个距离。15.2 串行传输协议 采用的串行通信协议有两类:异步通采用的串行通信协议有两类:

12、异步通信和同步通信。信和同步通信。 同步协议又分为面向字符、面向比特同步协议又分为面向字符、面向比特和面向字节计数和面向字节计数3种。种。15.2.1 异步传输协议 1特点及传输格式特点及传输格式 在传输一个字符时总是以起始位开始,在传输一个字符时总是以起始位开始,以停止位结束。异步通信传输格式如图以停止位结束。异步通信传输格式如图15.1所示。所示。 图图15.1 异步通信字符传输帧格式异步通信字符传输帧格式 2异步传输的错误检测异步传输的错误检测 由于线路或程序出错等原因,使得通信由于线路或程序出错等原因,使得通信过程中产生了传送错误。因为异步通信的实过程中产生了传送错误。因为异步通信的实

13、质是字符的发送是随机的,接收方通常可检质是字符的发送是随机的,接收方通常可检测到如下一些错误:奇偶错测到如下一些错误:奇偶错、超越错超越错、帧格帧格式错式错。15.2.2 面向字符的同步传输协议1特点与格式特点与格式 它的特点是一次传送由若干个字符组成它的特点是一次传送由若干个字符组成的数据块,而不是只传送一个字符,并规定的数据块,而不是只传送一个字符,并规定了了10个特殊字符作为这个数据块的开头与结个特殊字符作为这个数据块的开头与结束标志以及整个传输过程的控制信息,它们束标志以及整个传输过程的控制信息,它们也叫做通信控制字。由于被传送的数据块是也叫做通信控制字。由于被传送的数据块是由一序列字

14、符组成的,故被称为面向字符的由一序列字符组成的,故被称为面向字符的协议。协议的一帧数据格式如图协议。协议的一帧数据格式如图15.2所示。所示。 图图15.2 面向字符的同步协议帧格式面向字符的同步协议帧格式 由图由图15.2可知,一个面向字符的数据帧可知,一个面向字符的数据帧由几个控制字符开始,紧跟着数据位数相由几个控制字符开始,紧跟着数据位数相同的各字符(同的各字符(1n),最后以校验字段结),最后以校验字段结束束。2控制字符的定义控制字符的定义 在面向字符同步协议的帧格式中规定了在面向字符同步协议的帧格式中规定了10个通信控制字符。面向字符协议中规定的个通信控制字符。面向字符协议中规定的1

15、0个通信控制字符的名称及代码如表个通信控制字符的名称及代码如表15.1所所示。示。 面向字符的同步通信有别于异步通信面向字符的同步通信有别于异步通信的一个特点是,它允许连续发送一序列字的一个特点是,它允许连续发送一序列字符,而每个字符的数据位数都相同,且没符,而每个字符的数据位数都相同,且没有起始位和停止位。有起始位和停止位。 由于在面向字符的同步通信协议中采用由于在面向字符的同步通信协议中采用了一些传输控制字,从而增强了通信控制了一些传输控制字,从而增强了通信控制能力和校验功能,但也出现了一些问题。能力和校验功能,但也出现了一些问题。15.2.3 面向比特的同步传输协议1特点与格式特点与格式

16、 面向比特的同步传输又称做二进制同步面向比特的同步传输又称做二进制同步传输。在面向比特的同步协议中,最有代表传输。在面向比特的同步协议中,最有代表性的同步协议有如下性的同步协议有如下3种:种: 同步数据链路控制规程同步数据链路控制规程SDLC(Synchronous Data Link Control),由),由IBM公司制定。公司制定。 高级数据链路控制规程高级数据链路控制规程HDLC(High Level Data Link Control),由国际标准化组织),由国际标准化组织ISO(International Standards Organization)制定。)制定。 先进数据通信规

17、程先进数据通信规程ADCCP(Advanced Data Communications Control Procedure),由美国国家标准协会制定。),由美国国家标准协会制定。 2帧信息的分段帧信息的分段 SDLC/HDLC的一帧信息包括以下几个的一帧信息包括以下几个场,所有场都是从最低有效位开始传送。场,所有场都是从最低有效位开始传送。 SDLC/HDLC的标志字符。的标志字符。SDLC/HDLC协议规定,所有信息传输必须以一个标志符协议规定,所有信息传输必须以一个标志符开始,且以同一个标志符结束。这个标志符开始,且以同一个标志符结束。这个标志符是是01111110,称为标志场(,称为标志

18、场(Flag)。)。 地址场和控制场在标志场之后,可以有地址场和控制场在标志场之后,可以有一个地址场一个地址场A(Address)和一个控制场)和一个控制场C(Control)。地址场用来规定与之通信的)。地址场用来规定与之通信的次站地址。控制场可规定若干个命令。次站地址。控制场可规定若干个命令。 信息场(数据场)。跟在控制场之后的信息场(数据场)。跟在控制场之后的信息场信息场I(Information)。信息场包含有要)。信息场包含有要传送的数据,并不是每一帧都必须有信息场传送的数据,并不是每一帧都必须有信息场,即数据场可为,即数据场可为0。当它为。当它为0时,则这一帧时,则这一帧主要是控制

19、命令。主要是控制命令。 帧校验场。紧跟在信息场之后的是两帧校验场。紧跟在信息场之后的是两个字节的帧校验场,帧校验场称为个字节的帧校验场,帧校验场称为FC(Frame Check)或称为帧校验序列)或称为帧校验序列FCS(Frame Check Sequence)。)。SDLC/HDLC均采用循环冗余校验码均采用循环冗余校验码CRC。其生成多项式为。其生成多项式为CCITT多项式多项式x16+x12+x5+1。除了标志场和自动插入的。除了标志场和自动插入的“0”位外,所有的信息都参加位外,所有的信息都参加CRC计算。计算。3实际应用时的几个技术问题实际应用时的几个技术问题 “0”位插入位插入/删

20、除技术。由于删除技术。由于SDLC/HDLC协议规定以协议规定以01111110为标志字为标志字节,但在信息场中也完全有可能有同一种模节,但在信息场中也完全有可能有同一种模式的字符,为了能将它与标志区分开来,所式的字符,为了能将它与标志区分开来,所以采取了以采取了“0”位插入和删除技术。位插入和删除技术。 SDLC/HDLC异常结束。如果在发送过程异常结束。如果在发送过程中出现错误,则中出现错误,则SDLC/HDLC协议用异常结束协议用异常结束(Abort)字符,或称失效序列使本帧作废。)字符,或称失效序列使本帧作废。 HDLC的的3种基本通信操作方式。正常响种基本通信操作方式。正常响应方式(

21、应方式(NRA),用于由一个主站和多个从),用于由一个主站和多个从站组成的多点式结构。异步响应方式(站组成的多点式结构。异步响应方式(ARM),用于一个主站和一个从站组成的点点式),用于一个主站和一个从站组成的点点式结构,或者通信双方均由主站和从站叠加而结构,或者通信双方均由主站和从站叠加而成的平衡型结构。成的平衡型结构。 同步通信中的纠错与数据帧重发。面同步通信中的纠错与数据帧重发。面向比特的同步协议中,由标志字段开始,向比特的同步协议中,由标志字段开始,紧跟着几千比特的信息,最后以具有自动紧跟着几千比特的信息,最后以具有自动纠错能力的纠错能力的CRC校验码结束。校验码结束。15.3 使用

22、Windows API进行同步串口编程 如何使用如何使用API实现串口通信,对于数据实现串口通信,对于数据的接收采用查询方式。的接收采用查询方式。 使用使用WinAPI来编写串口通信程序时,来编写串口通信程序时,读写操作可以有同步方式与重叠的异步方读写操作可以有同步方式与重叠的异步方式。式。15.3.1 概述 所谓同步方式,就是当发出写命令后,所谓同步方式,就是当发出写命令后,直到数据确实写入到输出缓冲区后,写函数直到数据确实写入到输出缓冲区后,写函数才返回。这种方式操作简单,但当数据写入才返回。这种方式操作简单,但当数据写入时间较长时,将会使程序挂起,降低程序的时间较长时,将会使程序挂起,降

23、低程序的效率。效率。 首先使用首先使用CreateFile()函数打开串口,函数打开串口,以非重叠方式打开。该函数可以返回一个以非重叠方式打开。该函数可以返回一个串口句柄,使用该句柄初始化串口参数。串口句柄,使用该句柄初始化串口参数。然后使用然后使用WriteFile()可以发送串行数据,使可以发送串行数据,使用用ReadFile()可以从串口读取串行数据。操可以从串口读取串行数据。操作完串口后,使用作完串口后,使用CloseHandle()函数来关函数来关闭串口。闭串口。15.3.2 15.3.2 创建串口创建串口1CreateFil 该函数是一个通用的创建或打开文件的该函数是一个通用的创建

24、或打开文件的函数。在函数。在WinAPI编程中,它不仅可以操作文编程中,它不仅可以操作文件,也可以操作串口。使用该函数可以打开件,也可以操作串口。使用该函数可以打开一个串口,并返回一个句柄,在程序中便可一个串口,并返回一个句柄,在程序中便可以通过访问该句柄来实现对串口的访问。下以通过访问该句柄来实现对串口的访问。下面针对在串口方面的应用介绍其参数的含义面针对在串口方面的应用介绍其参数的含义及设置方法。及设置方法。HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_

25、ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile );2SetupComm()函数函数设置串口输入缓冲区及输出缓冲区的大小。设置串口输入缓冲区及输出缓冲区的大小。BOOL SetupComm( HANDLE hFile, DWORD dwInQueue, DWORD dwOutQueue );3DCB数据结构数据结构 串口通信中,使用该数据结构存放通信串口通信中,使用该数据结构存放通信参数。由于该结构包括的通信参数很多,逐参

26、数。由于该结构包括的通信参数很多,逐个设置不方便。通常的做法是首先将串口的个设置不方便。通常的做法是首先将串口的当前设置值读出到一个当前设置值读出到一个DCB结构中,然后根结构中,然后根据需要修改该据需要修改该DCB结构中的某些参数,再以结构中的某些参数,再以该结构来设置串口通信参数。该结构来设置串口通信参数。4SetCommState()函数函数 要设置串行通信参数,首先定义一个要设置串行通信参数,首先定义一个DCB结构结构类型的变量。根据通信要求,设置该结构变量的数值类型的变量。根据通信要求,设置该结构变量的数值,然后以该结构变量作为参数,执行,然后以该结构变量作为参数,执行SetComm

27、State()函数即可完成串口通信参数的设置函数即可完成串口通信参数的设置。 BOOL SetCommState( HANDLE hFile, LPDCB lpDCB );5GetCommState()函数函数 使用该函数可以获取当前串口通信参数使用该函数可以获取当前串口通信参数的设置值。获取的参数值存放到一个的设置值。获取的参数值存放到一个DCB结结构型的变量中。构型的变量中。 BOOL GetCommState( HANDLE hFile, LPDCB lpDCB );6举例说明举例说明 举举例子说明创建串口的程序代码,串口例子说明创建串口的程序代码,串口参数在代码注释中说明参数在代码注释

28、中说明。15.3.3 关闭串口 关闭串口的操作很简单,只需执行关闭串口的操作很简单,只需执行CloseHandle()函数即可。函数即可。 BOOL CloseHandle( HANDLE hObject /指向串口句柄指向串口句柄 );15.3.4 发送数据 发送数据使用发送数据使用WriteFile()函数。函数。 BOOL WriteFile( HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped ); 1

29、5.3.5 接收数据 接收数据使用接收数据使用ReadFile()函数。函数。 BOOL ReadFile( HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped ); 15.3.6 定时接收数据的方法 1编写定时器响应函数编写定时器响应函数 定时器响应函数是全局函数,不属于任定时器响应函数是全局函数,不属于任何类。直接在何类。直接在cpp文件中书写,格式如下:文件中书写,格式如下: VOID CALLBACK Timer

30、Proc( HWND hwnd, /发出定时器消息窗口的句柄发出定时器消息窗口的句柄 UINT uMsg, /WM_TIMER消息消息 UINT idEvent, /定时器定时器ID DWORD dwTime) /当前的系统时间当前的系统时间 /这里加入接收操作代码这里加入接收操作代码 该函数是一个回调函数。当设置的定时器时间该函数是一个回调函数。当设置的定时器时间达到时,由系统自动调用。调用该函数时,传入达到时,由系统自动调用。调用该函数时,传入4个参数。个参数。 2启动定时器启动定时器 启动定时器使用启动定时器使用SetTimer()函数。该函数可在函数。该函数可在程序的任何地方加入。程序

31、的任何地方加入。 UINT SetTimer( HWND hWnd, /发出定时器消发出定时器消息窗口的句柄息窗口的句柄 UINT nIDEvent, /定时器定时器ID UINT uElapse, /超时值超时值 TIMERPROC lpTimerFunc /定时器处理程定时器处理程序的地址序的地址 ); 3关闭定时器关闭定时器 关闭定时器使用关闭定时器使用KillTimer()函数。该函函数。该函数可在程序的任何地方加入。数可在程序的任何地方加入。 BOOL KillTimer( HWND hWnd, / handle of window that installed timer UINT

32、 uIDEvent / timer identifier ); 15.4 采用重叠I/O方式的编程方法 采用同步方式的查询方式读取串口数采用同步方式的查询方式读取串口数据时,若由于读取操作耗费较长的时间,据时,若由于读取操作耗费较长的时间,则程序会被挂起。为解决这种问题,可以则程序会被挂起。为解决这种问题,可以在读取数据时采用重叠在读取数据时采用重叠I/O操作。操作。 为实现重叠为实现重叠I/O操作,主要有如下几个操作,主要有如下几个编程步骤:定义全局变量、创建串口、发编程步骤:定义全局变量、创建串口、发出读写操作、读写线程函数的建立、关闭出读写操作、读写线程函数的建立、关闭串口等。串口等。

33、15.4.1 定义全局变量 在主对话框的实现文件(后缀名为在主对话框的实现文件(后缀名为cpp)中定义全局变量。通常在该文件的最顶)中定义全局变量。通常在该文件的最顶端,在所有函数的外面定义。端,在所有函数的外面定义。 HANDLE hCom; /串口句柄串口句柄 DWORD ThreadProcWrite(LPVOID pParam); /写线程写线程函数函数 DWORD ThreadProcRead(LPVOID pParam); /读线程读线程函数函数 OVERLAPPED Wol=0; /写操作写操作 OVERLAPPED结构变量结构变量 OVERLAPPED Rol=0; /读操作读

34、操作OVERLAPPED结构变量结构变量 HANDLE hThreadWrite; /写线程句柄写线程句柄 HANDLE hThreadRead; /读线程句柄读线程句柄HWND hWnd; 15.4.2 创建串口 创建串口的操作可以设置在一个按钮创建串口的操作可以设置在一个按钮的单击事件中执行,也可以在主对话框的的单击事件中执行,也可以在主对话框的初始化函数初始化函数OnInitDialog()中执行。中执行。 15.4.3 发出读写操作 1读操作读操作 在读操作中,只是启动读线程。实际的在读操作中,只是启动读线程。实际的读操作在读线程函数中完成。读操作在读线程函数中完成。 2写操作写操作

35、在写操作中,同样只是启动写线程。实在写操作中,同样只是启动写线程。实际的写操作在写线程函数中完成。际的写操作在写线程函数中完成。 DWORD dwThreadID;/ DWORD dwParam; hThreadWrite=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE )ThreadProcWrite, /写线程函数写线程函数名称名称 &dwParam, 0, /创建线程后,立即执行该线程创建线程后,立即执行该线程 &dwThreadID); if (hThreadWrite=NULL) AfxMessageBox(写线程创建失败!

36、写线程创建失败!); 15.4.4 读写线程函数的建立 1读线程函数读线程函数 在读线程函数中,首先应初始化重叠结构在读线程函数中,首先应初始化重叠结构Rol的成员的成员hEvent,将其设置为无信号状态,将其设置为无信号状态。当读操作完成或出现通信错误时,该变量。当读操作完成或出现通信错误时,该变量会被自动设置为有信号状态。接下来就可以会被自动设置为有信号状态。接下来就可以使用使用ReadFile()函数发出读命令。若该读函函数发出读命令。若该读函数返回数返回TRUE,说明读操作已经完成,可以处,说明读操作已经完成,可以处理读取的数据。若该读函数返回理读取的数据。若该读函数返回FALSE,说

37、,说明读操作未完成。明读操作未完成。 2写线程函数写线程函数 写线程函数所作操作与读线程函数的操写线程函数所作操作与读线程函数的操作相似。首先初始化作相似。首先初始化Wol的的hEvent事件成事件成员,然后发出写命令员,然后发出写命令WriteFile()。若该写命。若该写命令返回令返回TRUE,说明写操作成功完成。若写,说明写操作成功完成。若写命令返回命令返回FALSE,说明写操作没有完成。,说明写操作没有完成。 15.4.5 关闭串口 使用使用CloseHandle()函数关闭串口句柄。函数关闭串口句柄。 CloseHandle(hCom); 15.5 采用事件驱动方式的编程方法 主要介

38、绍在事件驱动方式下,实现串行通信主要介绍在事件驱动方式下,实现串行通信的编程方法。本节内容涉及到重叠的编程方法。本节内容涉及到重叠I/O操作、自定操作、自定义义Windows消息等概念。这些概念在与其相关的消息等概念。这些概念在与其相关的代码中详细说明。代码中详细说明。 这种方式的工作原理是建立一个事件线程,这种方式的工作原理是建立一个事件线程,它监视串口的事件和错误信息。当有事件或错误它监视串口的事件和错误信息。当有事件或错误发生时,它向主线程发送一个发生时,它向主线程发送一个Windows消息。主消息。主线程在消息响应函数中处理已发生的事件或错误线程在消息响应函数中处理已发生的事件或错误。采用这种方式编程,可以按照如下几个步骤进。采用这种方式编程,可以按照如下几个步骤进行,即:定义全局变量、创建串口、开启事件线行,即:定义全局变量、创建串口、开启事件线程、发送数据、自定义消息、关闭串口及关闭事程、发送数据、自定义消息、关闭串口及关闭事件线程。件线程。15.5.1 定义全局变量 在主对话框的实现文件(后缀名为在主对话框的实现文件(后缀名为cpp)中定义全局变量。通常在该文件的最顶)中定义全局变量。通常在该文件的最顶端定义,并在所有函数的外面。端定义,并在所有函数的外面。 15.5.2 打开串口及开启事件线程 1打开串口打

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论