




已阅读5页,还剩47页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 用用 vcvc 开发在开发在 windowswindows 下的串口异步通信程序下的串口异步通信程序 学 生: 指导老师: 计算机科学系 2008 年 5 月 1 日 2 用用 vcvc 开发在开发在 windowswindows 下的串口异步通信程序下的串口异步通信程序 摘要 异步串行通信在现在的生产生活中被得到广泛的应用,在 pc 机上一 般至少有两个串行口 com1 和 com2,常用的串行外设有电传打字机、 crt 终端设备、传真机以及远程数据采集设备、通信设备等。串行通信接 口标准经过使用和发展,目前已经有多种。但都是在 rs-232 标准的基础 上经过改进而形成的。如何在 windows 平台下实现串口通信,也越来越来 越多地被得到研究,实现的方法重要有利用 mscomm 控件和直接用 windows api 编程。利用 mscomm 控件编程相对来说更简单一些,而直 接使用 windows api 编程更灵活一些。本文主要讨论了使用 mscomm 控 件来开发串口通信程序,而界面是利用 vc+ 6.0 mfc 来做的,这样编程 灵活性大,并且能够将主要工作集中在串口编程方面。程序可以实现利用 pc 机的两个 com 口实现异步通信,并能根据设置调整异步传行通信参数。 【关键词关键词】串口通信、异步通信、终端、句柄 3 abstract serial communication is used more and more in our job and livings. there are two serial communication port at least in the pc,com1 and com2. typewriter, crt terminal device, electrograph , remote dada receiver, and communication device are depended on serial port. with the development of serial communication port standard, there are many kinds of port standard, but they are developed from the rs-232 standard. how to program serial communication based on the windows platform is studied more and more. there are two methods of programming , using windows api and using msccomm. using msccomm to program is discussed in the article ,the graphical interface is carried out using mfc. so this method is flexible and we can set focus in programming serial communication. two pc can communicate to each other by com port and you can change the serial port parameter with the program. keywords: serial port communication, asynchronous communication, terminal device, handle 4 目录 摘要摘要.2 abstract.3 引言引言.2 第第 1 1 章章 绪论绪论.3 1.1问题的提出.3 1.2研究的意义.3 第第 2 2 章章 相关技术简介相关技术简介.6 2.1 串行接口标准.6 2.2 rs-232 串行接口标准.8 2.3 其他 eia 标准接口.13 2.4vc+ 的串口通讯.15 2.4.1 microsoft communications control .16 2.4.2 直接用 vc+访问串口。.18 2.5 mscomm控件介绍.24 2.5.1 mscomm 控件的通讯的方式.24 2.5.2 mscomm 控件的属性.25 第第 3 章章 系统设计系统设计.31 3.1 系统功能设计.31 3.2 算法分析.33 第第 4 章章 系统调试与运行系统调试与运行.38 4.1 系统调试.38 4.2 系统测试与运行.38 4.2.1 测试方法.38 4.2.2 测试内容.39 4.2.3 测试结果.39 第第 5 章章 结论结论.40 致谢致谢.41 参考文献参考文献.42 2 引言 在 windows 应用程序的开发过程中,相互之间常常需要通信。而串口 是工业控制中计算机与外部串行设备之间常用的数据传输通道,由于串行 通信方便易行,其应用非常广泛。本文将介绍串行通信的基本原理、在 windows 平台下的工作机制和用 vc 实现串行通信的方法。 串口是工业控制中计算机与外部设备之间常用的数据传输通道。但在 windows 环境下,计算机系统完全接管了各 种硬件资源,不允许用户直 接控制串口的中断管理,用户只能通过一些 windows 开发软件,如 visual basic、visual c+等才能控制计算机的底层资源。visual c+因其高性能 编译技术、面向对象设计方法、可视化开发环境等特点得到广泛的应用, 它包含了丰富的编程工具,具有很高的代码效率,提供了与 windows 系 统更紧密的接口,易于进行硬件访问,是一个灵活度和集成化都很高的软 件开发环境,非常适合开发 windows 应用程序。本文以 windows 环境下 串口的通信为基础,主要介绍串行通信的基本原理,并探讨用 visual c+ 6.0 开发串口通信程序的几种方法。 3 第 1 章 绪论 1.1 问题的提出 在 windows 应用程序的开发中,我们常常需要面临与外围数据源设备 通信的问题。计算机和单片机(如 mcs-51)都具有串行通信口,可以设 计相应的串口通信程序,完成二者之间的数据通信任务。 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线 universal serial bus 或者 usb 混淆) 。大多数计算机包含两个基于 rs232 的串口。串口同时也是仪器仪表设备通用的通信协议;很多 gpib 兼容的 设备也带有 rs- 232 口。同时,串口通信协议也可以用于获取远程采集设 备的数据。 1.2 研究的意义 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比 按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同 时用另一根线接收数据。它很简单并且能够实现远距离通信。比如 ieee488 定义并行通行状态时,规定设备线总长不得超过 20 米,并且任 意两个设备间的长度不得超过 2 米;而对于串口而言,长度可达 1200 米。 典型地,串 口用于 ascii 码字符的传输。通信使用 3 根线完成:(1)地 线, (2)发送, (3)接收。由于串口通信是异步的,端口能够在一根线上 发送数据同时在另一 根线上接收数据。其他线用于握手,但是不是必须 的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于 两个进行通行的端口,这些参数必须匹配: 4 a,波特率,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的 bit 的个数。例如 300 波特表示每秒钟发送 300 个 bit。当我们提到时钟周期时, 我们就 是指波特率例如如果协议需要 4800 波特率,那么时钟是 4800hz。这意味着串口通信在数据线上的采样率为 4800hz。通常电话线 的波特率为 14400,28800 和 36600。波特率可以远远大于这些值,但是 波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典 型的例子就是 gpib 设备的通信。 b,数据位,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个 信息包,实际的数据不会是 8 位的,标准的值是 5、7 和 8 位。如何设置 取决于你想传送的信 息。比如,标准的 ascii 码是 0127(7 位) 。扩展 的 ascii 码是 0255(8 位) 。如果数据使用简单的文本(标准 ascii 码) ,那么每个数据包使用 7 位数据。每个包是指一个字节,包括开始/停止位, 数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“ 包” 指任何通信的情况。 c,停止位,停止位:用于表示单个包的最后一位。典型的值为 1,1.5 和 2 位。 由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能 在通信中两台设 备间出现了小小的不同步。因此停止位不仅仅是表示传 输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越 多,不同时钟同步的容忍程度越大, 但是数据传输率同时也越慢。 d,奇偶校验位,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方 式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情 况,串口会设置校验位 (数据位后面的一位) ,用一个值确保传输的数据 有偶个或者奇个逻辑高位。例如,如果数据是 011,那么对于偶校验,校 验位为 0,保证逻辑高的位数是偶数 个。如果是奇校验,校验位位 1,这 样就有 3 个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或 5 者逻辑低校验。这样使得接收设备能够知道一个位的状 态,有机会判断 是否有噪声干扰了通信或者是否传输和接收数据是否不同步。 6 第 2 章 相关技术简介 2.1 串行接口标准 在计算机网络数据通信中,有几个接口标准是经常见到和用到的,那 就是通常所说的 rs-232、rs-422 与 rs-485 标准。它们都是串行数据接口 标准,最初都是由电子工业协会(eia)制定并发布的。 rs-232 接口(又称 eia rs-232)是目前最常用的一种串行通信接口。 它是在 1970 年由美国电子工业协会(eia)联合贝尔系统公司、调制解调 器厂家及计算机终端生产厂家共 同制定的用于串行通信的标准。它的全 名是“数据终端设备(dte)和数据通信设备(dce)之间串行二进制数 据交换接口技术标准”。该标准规定采用一个 25 脚的 db25 连接器,对连 接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。 rs-422 由 rs-232 发展而来,它是为弥补 rs-232 之不足而提出的。 为改进 rs-232 通信距离短、速率低的缺点,rs-422 定义了一 种平衡通信 接口,将传输速率提高到 10mb/s,传输距离延长到 4 000 英尺(速率低于 100kb/s 时) ,并允许在一条平衡总线上连接最多 10 个接收器。rs-422 是 一种单机发送、多机接收的单向、平衡传输规范,后 来被命名为 tia/eia-422a 标准。为扩展应用范围,eia 又于 1983 年在 rs-422 基础 上制定了 rs-485 标准,增加了多点、双向通信能 力,即允许多个发送器 连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩 展了总线共模范围,后命名为 tia/eia-485a 标准。由于 eia 提出的建议 标准都是以“rs”作为前缀的,所以在通信工业领域,仍然习惯将上述标准 以 rs 作前缀称谓,也就是上面说到的 3 个串行接口标准。 7 rs-232、rs-422 与 rs-485 标准只对接口的电气特性作出规定,而不 涉及接插件、电缆或协议,在此基础上用户可以建立自己的高层通信协议。 因此在视频界的应用,许多厂家都建立了一套高层通信协议,或公开或厂 家独家使用。 表 2-1 是以上 3 种串行接口电气性能参数的综合比较。 表 2-1 rs-232、rs-422 与 rs-485 串行接口电气性能参数综合比较 性 能 参 数rs232rs422r485 工作方式单端差分差分 节点数1 收 1 发1 发 10 收1 发 32 收 最大传输电缆长度50 英尺400 英尺400 英尺 最大传输速率20kb/s10mb/s10mb/s 最大驱动输出电压+/-25v-0.25v+6v-7v+12v 驱动器输出信号电平(负 载最小值) +/-5+/-15v+/-2.0v+/-1.5v 驱动器输出信号电平(空 载最大值) +/-25v+/-6v+/-6v 驱动器负载阻抗(w)3k7k10054 摆率(最大值)30v/sn/an/a 接收器输入电压范围+/-15v-10v+10v-7v+12v 接收器输入门限+/-3v+/-200mv+/-200mv 接收器输入电阻(w)3k7k4k(最小) 12k 驱动器共模电压-3v+3v-1v+3v 接收器共模电压-7v+7v-7v+12v 8 2.2 rs-232 串行接口标准 目前 rs-232 是 pc 与通信工业中应用最广泛的一种串行接口,其中 eia(electronic industry association)代表美国电子工业协会,rs 代表推 荐标准,232 是标识号。rs-232 被定义为一种在低速率串行通信中增加通 信距离的单端标 准。rs-232 采取不平衡传输方式,即所谓单端通信。一 个完整的 rs-232 接口有 22 根线,采用标准的 25 芯插头座(db-25) 。除 此之处,目前广 泛应用的还有一种 9 芯的 rs-232 接口(db-9) 。它们的 外观都是一个 d 形的,不过,对接的两个接口又分为针式的“公头”和孔式 的“母头”两 种,db-9“母头”和“公头”与 db-25 的“母头”和“公头”分别如 图 2-1 所示。 图 2-1 db-9/db-25 的“公头”和“母头” 在 rs-232 标准中定义了逻辑 1 和逻辑 0 电压级数,以及标准的传输 速率和连接器类型。信号大小在正的和负的 315v 之间。rs-232 规定接 近 0 的电平是无效的,逻辑 1 规定为负电平,有效负电平的信号状态称为 传号(marking) ,它的功能意义为 off;逻辑 0 规定为正电平,有效正电 平的信号 状态称为空号(spacing) ,它的功能意义为 on。根据设备供电 电源的不同,正负 5、正负 10、正负 12 和正负 15 这样的电平都是可能的。 在 rs-232 标准中规定的设备可以分为数据终端设备(dte)和数据 通信设备(dce)两类,这种分类 9 定义了不同的线路用来发送和接收信号。一般来说,计算机和终端设备有 dte 连接器,调制解调器和打印机有 dce 连接器。 rs-232 标准中指定了 20 个不同的信号连接,由 25 个 d-sub(微型 d 类)管脚构成的 db-25 连接器。但很多设备只用了其中的一小部分管脚, 出于节省资金和空间的考虑不少机器采用较小的连接器,特别是 9 管脚的 d-sub 或者是 db-9 型连接器被广泛使用。 因为 rs-232 到目前为止经历了好多个不同版本,最近的版本号为 e,它相对目前广泛应用的 c 版本来说,电气性能改进了不少,也对连接 器中的 25 个 管脚进行了充分利用(只有 2 个予以保留) 。表 2-2 列出的是 25 芯 rs-232e 接口的信号和管脚分配,而表 2-3 所示的则是在 pc 机、调 制解调器和路由 器等网络设备中使用的 9 芯 rs-232 接口的信号和管脚分 配。 表 2-2 25 芯 rs-232 接口的信号和管脚分配 引 脚 号缩 写 符信 号 方 向说 明 1pe公共端连接器外壳 2txd输出发送数据 3rxd输入接收数据 4rts输出请示发送 5cts输入清除发送 6dsr输入数据设备准备好 7sg公共端信号地 8dcd输入载波检测 9 保留 10 保留 10 11stf输出选择传送通道 12dcd输入载波检测 13cts输入清除发送 14txd输出发送数据 15tck输入发送时钟 16rxd输入接收数据 17rck输入接收器定时 18ll输出本地回路控制 19rts输出请示发送 20dtr输出数据终端准备好 21rl输出远程回路控制 22ri输入振铃指示器 23dsr输入数据装置准备好 24xck输出发送器定时 25ti输入测试指示器 表 2-3 9 芯 rs-232 接口的信号和管脚分配 引 脚 号缩 写 符信 号 方 向说 明 1dcd输入载波检测 2rxd输入接收数据 3txd输出发送数据 4dtr输出数据终端准备好 5gnd公共端信号地 6dsr输入数据装置准备好 7rts输出请示发送 11 8cts输入清除发送 9ri输入振铃指示 在 rs-232c 版本中,db-25 的 25 个引脚(4 个数据引脚、11 个控制 信号引脚、3 个定时引脚、7 个备用和未定义引脚)实际上只用了表 2-2 中 的 9 个,分别是:1、2、3、4、5、6、8、20、22 脚。它们的作用分别如 下。 (1)控制信号引脚(4、5、6、8、20 和 22 号 6 个引脚) 数据装置准备好(data set ready,dsr):有效时(on)状态,表 明接口处于可以使用的状态。 数据终端准备好(data terminal ready,dtr):有效时(on)状态, 表明数据终端可以使用。 这两个信号有时连到电源上,一上电就立即有效。但这两个设备状态 信号有效,只表示设备本身可用,并不说明通信链路可以开始进行通信了, 能否开始进行通信要由下面的控制信号决定。 请求发送(request to send,rts):用来表示 dte 请求 dce 发送 数据,即当终端要发送数据时,使该信号有效(on 状态) ,向 dte 设备 请求发送。 允许发送(clear to send,cts):用来表示 dce 准备好接收 dte 发来的数据,是对请求发送信号 rts 的响应信号。 当 modem 之类设备已准备好接收终端传来的数据并向前发送时, 使该信号有效,通知终端开始沿发送数据线 txd 发送数据。这对 rts/cts 请求应答联络信 号是用于半双工 modem 系统中发送方式和接 收方式之间的切换。在全双工系统中作发送方式和接收方式之间的切换。 在全双工系统中,因配置双向通道,故不需 要 rts/cts 联络信号使其变 高。 12 数据载波检出(data carrier dectection,dcd):也叫“接收线信号 检出”(received line dectection,rlsd) ,用来表示 dce 已接通通信链 路,告知 dte 准备接收数据。当本地的 modem 收到由通信链路另一端 (远地)的 modem 送来的载波信号时,使 rlsd 信号有效,通知终端 准备接收,并且由 modem 将接收下来的载波信号解调成数字数据后,沿 接收数据线 rxd 送到终端。 振铃指示(ringing,ri):当 modem 收到交换台送来的振铃呼叫 信号时,使该信号有效(on 状态) ,通知终端,已被呼叫。 (2)数据发送与接收线(2 和 3 号 2 个引脚) 发送数据(transmitted data,txd):通过 txd 终端将串行数据发 送到 modem, (dtedce) 。 接收数据(received data,rxd):通过 rxd 线终端接收从 modem 发来的串行数据, (dcedte) 。 (3)地线 sg(7 脚) 、pe(1 脚)分别用来接信号地和保护地信号线,无方向。 上述控制信号线何 时有效,何时无效的顺序表示了接口信号的传送 过程。例如,只有当 dsr 和 dtr 都处于有效(on)状态时,才能在 dte 和 dce 之间进行传送操作。若 dte 要发送数据,则预先将 dtr 线 置成有效(on)状态,等 cts 线上收到有效(on)状态的回答后,才能 在 txd 线上发送串行数据。这种顺序的规定对 半双工的通信线路特别有 用,因为只有半双工的通信能确定 dce 已由接收方向改为发送方向,这 时线路才能开始发送。 使用 db-9 连接器,作为提供多功能 i/o 卡或主板上 com1 和 com2 两个串行接口的连接器,它只提供异步通信的 9 个信号。db-25 型连接器 13 的引脚分配与 db-25 型引脚信号完全不同。因此,若与配接 db-25 型连 接器的 dce 设备连接,必须使用专门的电缆线。 在连接距离上,如果通信速率低于 20kbit/s 时,rs-232c 所直接连接 的最大物理距离为 15m。 2.3 其他 eia 标准接口 除了前面介绍的 eia-232 接口外,在 eia 接口标准中,常见的串行接 口协议还有诸如 eia-422、eia-449、eia-485、eia-530 等,本节予以简 单介绍。 eia-422(过去称为 rs-422)是采用 4 线、全双工、差分传输、多点 通信的数据传输接口协议。与下面将要介绍的 eia-485 不同的是 eia-422 不允许出现多个发送端,而只能有多个接收端(eia-232 接口也可以有多 个接收端) 。如 eia-232 型可以有两端口、四端口和八端口等 几种型号, 而 eia-422 型接口可以有四端口、八端口,甚至十端口等几种型号。eia- 422 解决方案传输信号的距离和速度比标准 eia-232 通信更 远、更快,并 且一般都能抗电子干扰和电涌。当电缆线的长度为 12m(40 码)时传输速 率可以达到 10mb/s。由于 eia-422 解决方案具有上述优点, 因此成为工 业和制造应用及分布广泛的销售经营企业的首选产品。 eia-422 的通常用途是作为 rs-232 的扩展,曾在苹果麦金托什 (mac)上大量使用。 eia-422 接口的机械特性由 eia-530 或 eia-449 规定,然而设备仅有 在发送方和接收方成对出现时才存在。电缆的最高传输速率为在 1.2m 时 为 10mb/s,1 200m 时 100kb/s。eia-422 不能实现像 eia-485 那样的真正 的多点通信,尽管一个发送端就可连接最多 10 个接收端。 eia-449(过去也称 rs-449)接口协议是于 1992 年 9 月制定的。它规 14 定了数据终端设备和数据通信设备之间的接口的功能特性和机械特性。 规定 rs-449 采用平衡传输时的电气特性协议是 rs-422。规定非平衡传输 时的电气特性协议是 rs-423,数据的传输率可达 200kbit/s。协 议规定了 两个 d-sub 连接时第一个为 37 脚,第二个为 9 脚。尽管这种协议没有在 个人电脑上使用,这种接口在大型数据交换服务器上还是很常见的。 eia-485(过去叫做 rs-485 或者 rs485)接口协议是电力特性规定为 2 线、全双工、多点通信的标准,它的电力特性和 rs-232 大不一 样,用 缆线两端的电压差值来表示传递信号。1 端的电压标识为逻辑 1,另一端 标识为逻辑 0。两端的电压差最小为 0.2v 以上时有效,任何不大于 12v 或者不 小于7v 的差值对接收端都被认为是正确的。 eia-485 仅仅规定了接收端和发送端的电力特性,没有规定或推荐任 何数据协议。eia-485 可以应用于配置便宜的广域网和采用单机发送,多 机 接收通信连接,可提供高速的数据通信速率(10m 时 35mb/s,1 200m 时 100 kb/s) 。eia-485 和 eia-422 一样使用双绞线进行高电压差分平衡传 输,可以进行大面积长距离传输(最长为 1 200m) 。与 eia-422 不同的是, eia-422 采用不可转换的单发送端,eia-485 的发送端需要设置为发送模 式,这使得 eia-485 可以使 用双线模式实现真正的多点双向通信。 eia-485 推荐使用在点对点网络中,线型是总线型,不能是星型和环 型网络。在理想情况下 eia-485 需要 2 个终接电阻,其阻值要求等于传输 电 缆的特性阻抗。没有特性阻抗的话,当所有的设备都静止或者没有能 量的时候就会产生噪声。没有终接电阻的话,会使得较快速的发送端产生 多个数据信号的边缘, 这其中的一些是不正确的。eia-485 不能使用星型 或者环型的拓扑结构,主要是由于在这些结构中,eia-485 接口过低或者 过高的终接电阻可以产生电 磁干扰。 eia-485 在使用 4 线时可以和 eia-422 一样实现全双工,还可实现真 15 正的多点通信。在某些限制条件下 eia-485 和 eia-422 可以实 现相互的 连接。如 scsi-2 和 scsi-3 控制卡通常使用这种标准的设备来作为物理层。 eia-485 接口同样可以在一些工厂的项目控制机器上看到,来 实现工厂不 同楼层之间的数据通信。它可以抵抗机械设备和焊接设备的电磁干扰。 eia-485 还可以在大型音频系统中使用,如在音乐厅或剧院中通过这 种接口设备就可以使用普通的计算机来运行一些特殊的软件,实现远距离 音频设备的控制。eia-485 通过 xlr 标准的线缆连接设备大量用于麦克风 上,从而实现舞台和控制台之间的连接而不需要预设线路。 表 2-4 列出了 eia-485 的一些特性和引脚的分配及和 rs-232 的比较。 表 2-4 eia-485 的一些特性和引脚的分配及和 rs-232 的比较 eia-485rs-232db-25de-9 common groundcarrier detect(dcd)81 clear to send +(cts+)received data(rd)32 ready to send +(rts+) transmitted data(td)23 received data +(rxd+) data terminal ready(dtr) 204 received data -(rxd-)common ground75 clear to send -(cts-)data set ready(dsr)66 ready to send -(rts-)request to send(rts)47 transmitted data +(txd+) clear to send(cts)58 16 2.4vc+ 的串口通讯 c+语言是当今最流行的面向对象程序设计语言,而 visual c+是 microsoft 公司开发的基于 windows 操作系统的 c+语言程序的可视化编 程工具。visual c+的执行速度快,对操作系统的访问权限高,这些是其 他许多编程工具所无法比拟的。因此,visual c+成为众多程序员在 windows 操作系统下编程的首选工具。 我们选择 visual c+6.0(以下简称 vc6)作为我们的编程工具。它提 供了强大的编译能力以及良好的界面操作性。能够对 windows 95/98、windows nt 以及 windows 2000 下的 c+程序设计提供完善的编 程环境。同时 vc6 对网络、数据库等方面的编程也都提供相应的环境支 持。 在 vc+中有两种方法可以进行串口通讯。一种是利用 microsoft 公司 提供的 activex 控件 microsoft communications control。另一种是直接用 vc+访问串口。下面将简述这两种方法。 2.4.1 microsoft communications control microsoft 公司在 windows 中提供了一个串口通讯控件,用它,我们 可以很简单的利用串口进行通讯。在使用它之前,应将控件加在应用程序 的对话框上。然后再用 classwizard 生成相应的对象。现在我们可以使用 它了。 该控件有很多自己的属性,你可以通过它的属性窗口来设置,也可以 用程序设置。我推荐用程序设置,这样更灵活。 setcommport:指定使用的串口。 getcommport:得到当前使用的串口。 17 setsettings:指定串口的参数。一般设为默认参数 9600,n,8,1。这样方便与其他串口进行通讯。 getsettings:取得串口参数。 setportopen:打开或关闭串口,当一个程序打开串口时,另外的程 序将无法使用该串口。 getportopen:取得串口状态。 getinbuffercount:输入缓冲区中接受到的字符数。 setinputlen:一次读取输入缓冲区的字符数。设置为 0 时,程序将 读取缓冲区的全部字符。 getinput:读取输入缓冲区。 getoutbuffercount:输出缓冲区中待发送的字符数。 setoutput:写入输出缓冲区。 一般而言,使用上述函数和属性就可以进行串口通讯了。以下是一个 范例。 #define#define messagelengthmessagelength 100100 classclass cmydialogcmydialog : : publicpublic cdialogcdialog protected:protected: variantvariant inbuffer;inbuffer; variantvariant outbuffer;outbuffer; cmscommcmscomm m_com;m_com; public:public: . boolbool cmydialog:oninitdialog()cmydialog:oninitdialog() cdialog:oninitdialog();cdialog:oninitdialog(); m_com.setcommport(1);m_com.setcommport(1); ifif (!m_com.getportopen()(!m_com.getportopen() 18 m_com.setsettings(57600,n,8,1);m_com.setsettings(57600,n,8,1); m_com.setportopen(true);m_com.setportopen(true); m_com.setinbuffercount(0);m_com.setinbuffercount(0); settimer(1,10,null);settimer(1,10,null); inbuffer.bstrval=newinbuffer.bstrval=new unsignedunsigned shortmessagelength;shortmessagelength; outbuffer.bstrval=newoutbuffer.bstrval=new unsignedunsigned shortmessagelength;shortmessagelength; outbuffer.vt=vt_bstr;outbuffer.vt=vt_bstr; returnreturn true;true; voidvoid cmydialog:ontimer(uintcmydialog:ontimer(uint nidevent)nidevent) ifif (m_com.getinbuffercount()=messagelength)(m_com.getinbuffercount()=messagelength) inbuffer=m_com.getinput();inbuffer=m_com.getinput(); / handlehandle thethe inbuffer.inbuffer. / fillfill thethe outbuffer.outbuffer. m_com.setoutput(outbuffer);m_com.setoutput(outbuffer); cdialog:ontimer(nidevent);cdialog:ontimer(nidevent); 用该控件传输的数据是 unicode 格式。关于 unicode 和 ansi 的关系 和转换请参看 msdn。 关于该控件的其他详细资料请查看 msdn 关于 comm control 部分。 2.4.2 直接用直接用 vc+访问串口。访问串口。 在 vc+中,串口和磁盘文件可以统一的方式来简单读写。这两者几乎 没有什么不同,只是在 windows 9x 下磁盘文件只能做同步访问,而串口 只能做异步访问。 19 createfile:用指定的方式打开指定的串口。通常的方式为 m_hcom = createfile( com1, generic_read | generic_write, 0, null, open_existing, file_attribute_normal | file_flag_overlapped, null ); m_hcom 为文件句柄。generic_read | generic_write 指定可以对串 口进行读写操作。第三个参数 0 表示串口为独占打开。open_existing 表 示当指定串口不存在时,程序将返 回失败。 file_attribute_normal | file_flag_overlapped 则表示文件属性。当打开串口时,必须指定 file_flag_overlapped,它表示文件或设备不会维护访问指针,则在读写 时,必须使用 overlapped 结构指定访问的文件偏移量。 readfile:读取串口数据。 writefile:向串口写数据。 closehandle:关闭串口。 commtimeouts:commtimeouts 主要用于串口超时参数设置。 commtimeouts 结构如下: typedeftypedef structstruct _commtimeouts_commtimeouts dworddword readintervaltimeout;readintervaltimeout; dworddword readtotaltimeoutmultiplier;readtotaltimeoutmultiplier; dworddword readtotaltimeoutconstant;readtotaltimeoutconstant; dworddword writetotaltimeoutmultiplier;writetotaltimeoutmultiplier; dworddword writetotaltimeoutconstant;writetotaltimeoutconstant; commtimeouts,*lpcommtimeouts;commtimeouts,*lpcommtimeouts; readintervaltimeout:两字符之间最大的延时,当读取串口数据时, 一旦两个字符传输的时间差超过该时间,读取函数将返回现有的数据。设 置为 0 表示该参数不起作用。 readtotaltimeoutmultiplier:读 20 取每字符间的超时。 readtotaltimeoutconstant:一次读取串口数据的固定超时。所以在 一次读取串口的操作中,其超时为 readtotaltimeoutmultiplier 乘以读 取的字节数再加上 readtotaltimeoutconstant。将 readintervaltimeout 设置为 maxdword,并将 readtotaltimeoutmultiplier 和 readtotaltimeoutconstant 设置为 0,表示读取操作将立即返回存放在输 入缓冲区的字符。 writetotaltimeoutmultiplier:写入每字符间的超时。 writetotaltimeoutconstant:一次写入串口数据的固定超时。所以 在一次写入串口的操作中,其超时为 writetotaltimeoutmultiplier 乘以 写入的字节数再加上 writetotaltimeoutconstant。 setcommtimeouts 函数可以设置某设备句柄的超时参数,要得到某设 备句柄的超时参数可以用 getcommtimeouts 函数。 dcb:dcb 结构主要用于串口参数设置。该结构太庞大,这里就不一一 讲述了,有兴趣者可查看 msdn 关于 dcb 的描述。其中下面两个是比较重 要的属性。 baudrate:串口的通讯速度。一般设置为 9600。 bytesize:字节位数。一般设置为 8。 dcb 结构可以用 setcommstate 函数来设置,并可以用 getcommstate 来得到现有串口的属性。 setupcomm:设置串口输入、输出缓冲区。 overlapped:保存串口异步通讯的信息。具体结构如下: typedeftypedef structstruct _o
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年眼科学术前沿知识综合考试卷答案及解析
- 2025采购合同确认单
- 2025年感染控制医院感染管理制度模拟考试卷答案及解析
- 2025年骨科骨肿瘤手术操作规范性考卷答案及解析
- 全球及2025-2030中国新鲜鱿鱼行业销售态势与竞争趋势预测报告
- 2025年营养科营养支持知识与膳食指导考试答案及解析
- 2025年传染病学疫情防控知识考察答案及解析
- 2025年眼科青光眼药物使用误区辨析考查试卷答案及解析
- 2025年康复理论与操作实践能力评估答案及解析
- 综合复习与评价教学设计-2025-2026学年初中信息技术沪科版八年级上册-沪科版
- 事故油池基坑开挖专项施工方案
- 沁园春 长沙综合练习(含答案)统编版必修上册
- 第一次世界大战ppt
- 奥迪TT汽车说明书
- 消防喷淋系统安装检验批质量验收记录
- 融资租赁测算表-2016-2
- 倾听与问题讲义
- 糖尿病合并足底烫伤护理查房
- 通信工程用电登高等高风险作业施工安全操作
- 邮政储汇业务员高级技师理论知识试卷
- 激光拉曼光谱
评论
0/150
提交评论