Visual C++与串口通信.docx

上传人:b****7 文档编号:10307770 上传时间:2023-02-10 格式:DOCX 页数:56 大小:1.15MB
下载 相关 举报
Visual C++与串口通信.docx_第1页
第1页 / 共56页
Visual C++与串口通信.docx_第2页
第2页 / 共56页
Visual C++与串口通信.docx_第3页
第3页 / 共56页
Visual C++与串口通信.docx_第4页
第4页 / 共56页
Visual C++与串口通信.docx_第5页
第5页 / 共56页
点击查看更多>>
下载资源
资源描述

Visual C++与串口通信.docx

《Visual C++与串口通信.docx》由会员分享,可在线阅读,更多相关《Visual C++与串口通信.docx(56页珍藏版)》请在冰豆网上搜索。

Visual C++与串口通信.docx

VisualC++与串口通信

VisualC++与串口通信

利用VisualC++编制串行通信程序有3种方法:

一是采用Win32应用程序编程接口(API)所提供的串行通信函数,用SDK思路编写;二是用ActiveX通信控件MSComm开发串行通信程序;三是采用C++的MFC思路,将Win32串口通信的API函数封装在一个类中实现串行通信。

在实践中,使用VisualC++串口控件MSComm实现通信的方法比调用API动态链接库的方法更加方便、快捷,而且用较少的代码可以实现相同的功能,从而大大提高了编程效率,也减少了因编程不当而导致的系统不稳定。

采用C++的MFC思路的方法较为繁琐,不仅要了解Win32串行通信的API函数,还要掌握多线程编程,但控制灵活,既涉及到底层编程、纠错能力强,又有C++风格,一般多为专业C++开发人员所采用。

5.1串行接口

串行接口一般包括RS232/422/485,其技术简单成熟,性能可靠,价格低廉,所要求的软硬件环境或条件都很低,广泛应用于计算机及相关领域,遍及调制解调器(Modem)、串行打印机、各种监控模块、PLC、摄像头云台、数控机床、单片机及相关智能设备,甚至路由器也不例外(通过串口设置参数)。

在计算机测控系统中,主控机一般采用PC或IPC,通过串口与测控模块相连,测控模块再连接相应的传感器和执行器,形成一个简单的双层结构的计算机测控系统。

这种结构主要用于单独的中小型企业或部门,如果属于综合型企业或部门,如电力系统监控、高速公路监控和收费系统,则可以此为基础结构进行扩充。

用集线器将众多双层监控系统连接起来,再用交换机将若干集线器连接起来,统一接上路由器,从而与Internet互联,形成一个庞大的计算机测控网络。

由此可见,尽管现代计算机的新接口层出不穷,各种网络也日新月异,其规模也越来越大,但是,其基础结构却有不少是串行通信系统,串行通信也成了其中的核心技术。

5.1.1串口通信的基本概念

1.并行通信与串行通信

终端与其他设备(例如,其他终端、计算机和外部设备)通过数据传输进行通信。

数据传输可以通过两种方式进行,即并行通信和串行通信。

(1)并行通信。

在计算机和终端之间的数据传输通常是靠电缆或信道上的电流或电压变化实现的。

如果一组数据的各数据位在多条线上同时被传送,这种传输方式称为并行通信,如图5-1所示。

并行数据传送的特点是:

各数据位同时传送,传送速度快、效率高,多用在实时、快速的场合。

并行传送的数据宽度可以是1~128位,甚至更宽,但是有多少数据位就需要多少根数据线,因此传送的成本高。

在集成电路芯片的内部、同一插件板上各部件之间、同一机箱内各插件板之间的数据传送都是并行的。

并行数据传送只适用于近距离的通信,通常小于30m。

图5-1并行通信

(2)串行通信。

串行通信是指通信的发送方和接收方之间数据信息的传输是在单根数据线上,以每次一个二进制的0、1为最小单位逐位进行传输,如图5-2所示。

图5-2串行通信

串行数据传送的特点是:

数据传送按位顺序进行,最少只需要一根传输线即可完成,节省传输线。

与并行通信相比,串行通信还有较为显著的优点:

传输距离长,可以从几米到几千米;在长距离内串行数据传送速率会比并行数据传送速率快;串行通信的通信时钟频率容易提高;串行通信的抗干扰能力十分强,其信号间的互相干扰完全可以忽略。

但是串行通信传送速度比并行通信慢得多,并行通信时间为T,则串行时间为NT。

正是由于串行通信的接线少、成本低,因此它在数据采集和控制系统中得到了广泛的应用,产品也多种多样。

2.串行通信的工作模式

通过单线传输信息是串行数据通信的基础。

数据通常是在两个站(点对点)之间进行传送,按照数据流的方向可分成3种传送模式:

单工、半双工和全双工。

(1)单工形式。

单工形式的数据传送是单向的。

通信双方中,一方固定为发送端,另一方则固定为接收端。

信息只能沿一个方向传送,使用一根传输线,如图5-3所示。

单工形式一般用在只向一个方向传送数据的场合。

例如,计算机与打印机之间的通信是单工形式,因为只有计算机向打印机传送数据,而没有相反的数据传送。

还有在某些通信信道中,如单工无线发送等。

图5-3单工形式

(2)半双工形式。

半双工通信使用同一根传输线,既可发送数据又可接收数据,但不能同时发送和接收。

在任何时刻只能由其中的一方发送数据,另一方接收数据。

因此半双工形式

既可以使用一条数据线,也可以使用两条数据线,如图5-4所示。

图5-4半双工形式

半双工通信中每端需有一个收/发切换电子开关,通过切换来决定数据向哪个方向传输。

因为有切换,所以会产生时间延迟。

信息传输效率低些。

但是对于像打印机这样单方向传输的外围设备,用半双工方式就能满足要求了,不必采用全双工方式,可节省一根传输线。

(3)全双工形式。

全双工数据通信分别由两根可以在两个不同的站点同时发送和接收的传输线进行传送,通信双方都能在同一时刻进行发送和接收操作,如图5-5所示。

图5-5全双工形式

在全双工方式中,每一端都有发送器和接收器,有两条传送线,可在交互式应用和远程监控系统中使用,信息传输效率较高。

3.异步传输与同步传输

串行传输中,数据是一位一位按照到达的顺序依次传输的,每位数据的发送和接收都需要时钟来控制。

发送端通过发送时钟确定数据位的开始和结束,接收端需要在适当的时间间隔对数据流进行采样来正确地识别数据。

接收端和发送端必须保持步调一致,否则就会在数据传输中出现差错。

为了解决以上问题,串行传输可采用以下两种方法:

异步传输和同步传输。

(1)异步传输。

在异步传输方式中,字符是数据传输单位。

在通信的数据流中,字符间异步,字符内部各位间同步。

异步通信方式的“异步”主要体现在字符与字符之间通信没有严格的定时要求。

异步传输中,字符可以是连续地、一个个地发送,也可以是不连续地、随机地进行单独发送。

在一个字符格式的停止位之后,立即发送下一个字符的起始位,开始一个新的字符的传输,这叫做连续的串行数据发送,即帧与帧之间是连续的。

断续的串行数据传送是指在一帧结束之后维持数据线的“空闲”状态,新的起始位可在任何时刻开始。

一旦传送开始,组成这个字符的各个数据位将被连续发送,并且每个数据位持续的时间是相等的。

接收端根据这个特点与数据发送端保持同步,从而正确地恢复数据。

收/发双方则以预先约定的传输速率,在时钟的作用下,传送这个字符中的每一位。

(2)同步传输。

在同步传输方式中,比特块以稳定的比特流的形式传输,数据被封装成更大的传输单位,称为帧。

每个帧中含有多个字符代码,而且字符代码与字符代码之间没有间隙以及起始位和停止位。

和异步传输相比,数据传输单位的加长容易引起时钟漂移。

为了保证接收端能够正确地区分数据流中的每个数据位,收发双方必须通过某种方法建立起同步的时钟。

可以在发送器和接收器之间提供一条独立的时钟线路,由线路的一端(发送器或者接收器)定期地在每个比特时间中向线路发送一个短脉冲信号,另一端则将这些有规律的脉冲作为时钟。

这种技术在短距离传输时表现良好,但在长距离传输中,定时脉冲可能会和信息信号一样受到破坏,从而出现定时误差。

另一种方法是通过采用嵌有时钟信息的数据编码位向接收端提供同步信息。

4.硬件握手与软件握手

握手信号实际上是控制信号,用来控制数据的传送。

通过握手信号,发送方可以通知接收方是否有数据要发送。

接收方通过握手信号告知发送方自身是否已经准备好了接收信号。

握手信号遵循某种协议。

当发送方和接收方处理数据的速度不一样时,可能会造成数据丢失。

在传输中,如果发送方的发送速度大于接收方的接收速度,同时接收方处理数据的速度不够快的话,那么接收端的缓冲区必定在一定时间后溢出,从而造成以后发送过来的数据不能进入缓冲区而丢失。

发送方何时可以继续发送数据,何时必须暂停发送,从而让接收方有时间处理数据,称为流量控制,必须靠握手信号来解决这个问题。

例如,打印机和计算机进行通信时,一些打印机打印速度可能跟不上计算机发送数据的速度,就必须要通过握手信号通知计算机暂停发送数据。

(1)硬件握手。

在硬件握手中,发送方通过将某一个导线拉到高电平或者低电平,来表示发送方可以发送数据。

接收方已经准备好接收数据之后,也把某一个导线拉到高电平或者是低电平,来通知发送方,发送方一直在检测这个信号。

接收方可以在任何时候把这个信号变为无效,甚至是在接收一个数据块过程中。

当发送方检测到这个信号变为无效之后,就必须停止本次发送,直到这个信号变为有效。

(2)软件握手。

在软件握手中,以数据线上的数据信号来代替实际的硬件电路。

这种方法用在直接连接或者通过调制解调器连接的两台计算机之间进行双向通信的场合。

对于软件握手现在已经建立了一些标准协议,其中最常用的是通信协议。

通信协议是指通信双方的一种约定,约定包括对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题作出统一规定,通信双方必须共同遵守,也叫做通信控制规程或称传输控制规程,它属于OSI七层参考模型中的数据链路层。

(3)硬件和软件结合的握手方法。

如果使用个人计算机或终端通过调制解调器和主计算机进行通信,那么调制解调器使用硬件握手方法和个人计算机联系,主计算机和调制解调器之间也使用硬件握手方法,主计算机和个人计算机之间将使用软件握手方法进行联系。

因此,个人计算机必须要编程,仅当调制解调器的DSR(有时可能使用CD)线电位变高和软件停止信号没有收到时,软件才送出一个通知信号。

一些计算机自动监测硬件握手信号,这些计算机等待硬件握手信号变高以后送出一个字符,所以程序只需要处理软件握手信号。

5.串口通信的基本参数

串行端口的通信方式是将字节拆分成一个接着一个的位再传送出去。

接到此电位信号的一方再将此一个一个的位组合成原来的字节,如此形成一个字节的完整传送。

在传输进行的过程中,双方要明确传送信息的具体方式,否则双方就没有一套共同的译码方式,从而无法了解对方所传过来的信息的意义。

因此双方为了进行通信,必须遵守一定的通信规则,这个共同的规则就是通信端口的初始化。

通信端口的初始化必须对以下几项参数进行设置。

(1)数据的传输速度。

串行通信的传输受到通信双方配备性能及通信线路的特性所左右,收、发双方必须按照同样的速率进行串行通信,即收、发双方采用同样的波特率。

我们通常将传输速度称为波特率,指的是串行通信中每一秒所传送的数据位数,单位是bps。

我们经常可以看到仪器或Modem的规格书上都写着19200bps、38400bps……所指的就是传输速度。

就仪器或工业场合来说,4800bps、9600bps是最常见的传输速度,现在的个人计算机所提供的串行端口的传输速度都可达到15200bps(甚至达到921600bps),若传输距离较近而设备也提供时,使用最高的传输速度也可以。

例如:

在某异步串行通信中,每传送一个字符需要8位,如果采用波特率4800bps进行传送,则每秒可以传送600个字符。

(2)数据的传送单位。

一般串行通信端口所传送的数据是字符型,若用来传输文件,则会使用二进制的数据型。

当使用字符型时,工业界使用到的有ASCII字符码及JIS字符码;ASCII码使用8位形成一个字符,而JIS码则以7位形成一个字符。

我们可以发现,欧美的设备多使用8位的字节,而日本的设备多使用7位为一个字节。

以实际的RS-232传输上看来,由于工业界常使用的PLC大多只是传送文字码,因此只要7位就可以将ASCII码的0~127码表达出来(27=128,共有128种组合方式),所有的可见字符也落在此范围内,所以只要7个数据位就够了。

不同的情形下(看所使用的协议)会使用到不同的传送单位。

使用多少位合成一个字节必须先行确定。

(3)起始位与停止位。

由于异步串行传输中并没有使用同步脉冲作基准,故接收端完全不知道传送端何时将进行数据的传送。

发送端准备要开始传送数据时,发送端会在所送出的字符前后分别加上高电位的起始位(逻辑0)及低电位的停止位(逻辑1),它们分别是所谓的起始位和停止位,也就是说,当传送端要开始传送数据时,便将传输线上的电位由低电位提升至高电位,而当传送结束后,再将电位降至低电位。

接收端会因起始位的触发(因电压由低电位升至高电位)而开始接收数据;并因停止位的通知(因电压维持在低电位)而明确数据的字符信号已经结束。

当加入了起始位及停止位才比较容易达到多字符的接收能力。

起始位固定为1位,而停止位则有1、1.5、2位等多种选择,至于如何选择,只要通信双方协议通过即可,没有强制规定。

(4)校验位。

为了预防错误的产生,使用校验位作为检查的机制。

校验位即是用来检查所传送数据的正确性的一种核对码,又分成奇校验与偶校验两种,分别是检查字符码中1的数目是奇数或偶数。

以偶校验为例,“A”的ASCII码是41H(十六进制),以二进制表示时,是01000001,其中1的数目是2,因此校验位便是0,使1的数目保持偶数;同样的,校验位是奇校验时,“A”的校验位便是1,使1的数目保持在奇数。

接收者重新计算奇偶校验位,如果新的计算值正确,那么表示正常。

如果新的计算值错误,那么接收端就会收到一些指示,表示此次接收的数据有误。

5.1.2RS-232C串口通信标准

RS-232C是美国电子工业协会EIA(ElectronicIndustryAssociation)于1962年公布,并于1969年修订的串行接口标准。

它已经成为国际上通用的标准。

1987年1月,RS-232C经修改后,正式改名为EIA-232D。

由于标准修改得并不多,因此现在很多厂商仍使用旧的名称。

RS-232C标准(协议)的全称是EIA-RS-232C标准,其中RS(RecommendedStandard)代表推荐标准,232是标识号,C代表RS-232的最新一次修改,它适合于数据传输速率在0~20000bit/s范围内的通信。

这个标准对串行通信接口的有关问题,如信号电平、信号线功能、电气特性、机械特性等都作了明确规定。

目前RS-232C已成为数据终端设备(DataTerminalEquipment,简称DTE,如计算机)和数据通信设备(DataCommunicationEquipment,简称DCE,如Modem)的接口标准。

RS-232C是PC与通信工业中应用最广泛的一种串行接口,

在PC上的COM1、COM2接口,就是RS-232C接口。

利用RS-232C串行通信接口可实现两台个人计算机的点对点的通信;通过RS-232C接口可与其他外设(如打印机、逻辑分析仪、智能调节仪、PLC等)近距离串行连接;通过RS-232C接口连接调制解调器可远距离地与其他计算机通信;将RS-232C接口转换为RS-422或RS-485接口,可实现一台个人计算机与多台现场设备之间的通信。

1.接口连接器

由于RS-232C并未定义连接器的物理特性,因此,出现了DB-25和DB-9各种类型的连接器,其引脚的定义也各不相同。

现在计算机上一般只提供DB-9连接器,都为公头。

相应的连接线上的串口连接器也有公头和母头之分,如图5-6所示。

图5-6公头与母头串口连接器图5-7DB9串口连接器

作为多功能I/O卡或主板上提供的COM1和COM2两个串行接口的DB-9连接器,它只提供异步通信的9个信号针脚,如图5-6所示,各针脚的信号功能描述见表5-1。

表5-19针串行口的针脚功能

针脚

符号

通信方向

功能

1

DCD

计算机→调制解调器

载波信号检测

2

RXD

计算机←调制解调器

接收数据

3

TXD

计算机→调制解调器

发送数据

4

DTR

计算机→调制解调器

数据终端准备好

5

GND

计算机=调制解调器

信号地线

6

DSR

计算机←调制解调器

数据装置准备好

7

RTS

计算机→调制解调器

请求发送

8

CTS

计算机←调制解调器

清除发送

9

RI

计算机←调制解调器

振铃信号指示

RS-232的每一支脚都有它的作用,也有它信号流动的方向。

原来的RS-232是设计用来连接调制解调器作传输之用的,因此它的脚位意义通常也和调制解调器传输有关。

从功能来看,全部信号线分为3类,即数据线(TXD、RXD)、地线(GND)和联络控制线(DSR、DTR、RI、DCD、RTS、CTS)。

以下是这9支脚的相关说明:

DCD:

此脚位是由调制解调器(或其他DCE,以下同)控制。

当电话接通之后,传送的信号被加载在载波信号上面,调制解调器利用此脚位通知计算机检测到载波,而当载波被检测到时才可保证此时是处于连接的状态。

一般情况下,如果计算机没有收到此信号,仍会有所响应,并将调制解调器挂起。

RXD:

此脚位负责将传送过来的远程信息进行接收。

在接收的过程中,由于信息是以数字形式传送的,用户可以在调制解调器的RXD指示灯上看到明灭交错,这是由于0、1交替导致的结果,也就是电位高低所产生的现象。

TXD:

此脚位负责为计算机传送信息。

在传送的过程中,由于信息是以数字形式传送的,读者可以在调制解调器的TXD指示灯上看到明灭交错,这是由于0、1交替导致的结果,也就是电位高低所产生的现象。

DTR:

此脚位由计算机(或其他DTE,以下同)控制,用以通知调制解调器可以进行传输。

高电位时表示计算机已经准备就绪,随时可以接收信息。

GND:

此脚位为地线,作为计算机与调制解调器之间的参考基准。

两端设备的地线准位必须一样,否则会产生地回路,使得信号因准位的不同而产生偏移,也会导致结果失常。

RS-232信息在传输上是采用单向式的信号传送方式,其特点是信号的电压基准由参考地线提供,因此传输双方的地线必须连接在一起,以避免基准不同而造成信息的错误。

DSR:

此脚位由调制解调器控制,调制解调器用这支脚位的高电位通知计算机一切均准备就绪,可以把信息传送过来。

RTS:

此脚位由计算机控制,用以通知调制解调器马上传送信息到计算机。

而当调制解调器收到此信号后,便会将它在电话线上收到的信息传送给计算机,在此之前若有信息传送到调制解调器则会暂存在缓冲区中。

CTS:

此脚位由调制解调器控制,用以通知计算机打算传送的信息已经到达调制解调器。

当计算机收到此脚位信号后,便把准备送出的信息送到调制解调器,而调制解调器则将计算机送过来的信息通过电话线路送出。

RI:

调制解调器通知计算机有电话进来,是否接听电话则由计算机决定。

如果计算机设置调制解调器为自动应答模式,则调制解调器在听到一定的铃响后便会自动接听电话。

上述控制信号线何时有效、何时无效的顺序表示了接口信号的传送过程。

例如,只有当DSR和DTR都处于有效(ON)状态时,才能在DTE和DCE之间进行传送操作。

若DTE要发送数据,则预先将DTR线置成有效(ON)状态,等CTS线上收到有效(ON)状态的回答后,才能在TXD线上发送串行数据。

这种顺序的规定对半双工的通信线路特别有用,因为半双工的通信确定DCE已由接收方向改为发送方向,这时线路才能开始发送。

从表5-1可以了解到硬件线路上的方向。

另外值得一提的是,如果从计算机的角度来看这些脚位的通信状况的话,流进计算机端的可以看为数字输入;而流出计算机端的则可以看为数字输出。

数字输入与数字输出的关系是什么呢?

从工业应用的角度来看,所谓的输入就是用来“监测”,而输出就是用来“控制”的。

2.串口电气特性

有两点需要进行说明。

首先,RS-232-C标准最初是为远程通信数据终端设备DTE(DataTerminalEquipment)与数据通信设备DCE(DataCommunicationEquipment)而制定的,因此这个标准的制定,并未考虑计算机系统的应用要求。

但目前它又广泛地被借来用于计算机(更准确的说,是计算机接口)与终端或外设之间的近端连接标准。

显然,这个标准的有些规定和计算机系统是不一致的,甚至是相矛盾的。

有了对这种背景的了解,我们对RS-232C标准与计算机不兼容的地方就不难理解了。

其次,RS-232C标准中所提到的“发送”和“接收”,都是站在DTE立场上,而不是站在DCE的立场来定义的。

由于在计算机系统中,往往是CPU和I/O设备之间传送信息,两者都是DTE,因此双方都能发送和接收。

EIA-RS-232C对电气特性、逻辑电平和各种信号线功能都作了规定。

在TXD和RXD上:

逻辑1为-3V~-15V,逻辑0为+3V~+15V。

在RTS、CTS、DSR、DTR和DCD等控制线上:

信号有效(接通,ON状态,正电压)为+3V~+15V;

信号无效(断开,OFF状态,负电压)为-3V~-15V。

以上规定说明了RS-232C标准对逻辑电平的定义。

对于数据(信息码):

逻辑“1”的电平低于-3V,逻辑“0”的电平高于+3V。

对于控制信号:

接通状态(ON)即信号有效的电平高于+3V,断开状态(OFF)即信号无效的电平低于-3V,也就是当传输电平的绝对值大于3V时,电路可以有效地检查出来,介于-3V~+3V之间的电平无意义,低于-15V或高于+15V的电平也认为无意义,因此,实际工作时,应保证电平在±(3~15)V之间。

RS-232C是用正负电压来表示逻辑状态,与TTL以高低电平表示逻辑状态的规定不同,因此,为了能够同计算机接口或终端的TTL器件连接,必须在RS-232C与TTL电路之间进行电平和逻辑关系的变换,实现这种变换的方法可用分立元件,也可用集成电路芯片。

目前较为广泛地使用集成电路转换器件,如MCl488、SN75150芯片可完成TTL电平到EIA电平的转换,而MCl489、SN75154可实现EIA电平到TTL电平的转换。

现在常用的RS-232C/TTL转换芯片是MAX232。

MAX232内部有电压倍增电路和转换电路,只需+5V电源便可完成TTL与EIA双向电平转换。

5.1.3串口通信线路连接

1.近距离通信线路连接

当2台RS-232串口设备通信距离较近时(<15m),可以用电缆线直接将2台设备的RS-232端口连接,若通信距离较远(>15m)时,需附加调制解调器(Modem)。

在RS-232的应用中,很少严格按照RS-232标准。

其主要原因是因为许多定义的信号在大多数的应用中并没有用上。

在许多应用中,例如,Modem只用了9个信号(两条数据线、6条控制线、1条地线);在其他一些应用中,可能只需要5个信号(两条数据线、两条握手线、1条地线);还有一些应用,可能只需要数据线,而不需要握手线,即只需要3个信号线。

因为在控制领域,在近距离通信时常采用RS-232,所以这里只对近距离通信的线路连接进行讨论。

当通信距离较近时,通信双方不需要Modem,可以直接连接,这种情况下,只需使用少数几根信号线。

最简单的情况,在通信中根本不需要RS-232C的控制联络信号,只需3根线(发送线、接收线、信号地线)便可实现全双工异步串行通信。

图5-8(a)所示为两台串口通信设备之间的最简单连接(即三线连接),图中的2号接收脚与3号发送脚交叉连接是因为在直连方式时,把通信双方都当作数据终端设备看待,双方都可发也可收。

在这种方式下,通信双方的任何一方,只要请求发送RTS有效和数据终端准备好DTR有效就能开始发送和接收。

图5-8串口设备最简单连接

如果只有一部计算机,而且也没有两个串行通信端口可以使用,那么将第2脚与第3管脚短路,如图5-8(b)所示,那么由第3脚的输出信号就会被传送到第2脚而送到同一串行端口的输入缓冲区,程序只要再由相同的串行端口上作读取的操作,即可将数据读入,一样可以形成一个测试环境。

2.远距离通信线路连接

一般PC采用RS-232通信接口,当PC与串口设备通信距离较远时,两者不能用电缆

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1