毕业设计-开发在WINDOWS下的串口异步通信程序—论文.doc_第1页
毕业设计-开发在WINDOWS下的串口异步通信程序—论文.doc_第2页
毕业设计-开发在WINDOWS下的串口异步通信程序—论文.doc_第3页
毕业设计-开发在WINDOWS下的串口异步通信程序—论文.doc_第4页
毕业设计-开发在WINDOWS下的串口异步通信程序—论文.doc_第5页
免费预览已结束,剩余40页可下载查看

下载本文档

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

文档简介

1 用用 VCVC 开发在开发在 WindowsWindows 下的串口异步通信程序下的串口异步通信程序 学 生 指导老师 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 5 6 引言 在 Windows 应用程序的开发过程中 相互之间常常需要通信 而串口是工 业控制中计算机与外部串行设备之间常用的数据传输通道 由于串行通信方便 易行 其应用非常广泛 本文将介绍串行通信的基本原理 在 Windows 平台下 的工作机制和用 VC 实现串行通信的方法 串口是工业控制中计算机与外部设备之间常用的数据传输通道 但在 Windows 环境下 计算机系统完全接管了各 种硬件资源 不允许用户直接控制 串口的中断管理 用户只能通过一些 Windows 开发软件 如 Visual Basic Visual C 等才能控制计算机的底层资源 Visual C 因其高性能编译技 术 面向对象设计方法 可视化开发环境等特点得到广泛的应用 它包含了丰 富的编程工具 具有很高的代码效率 提供了与 Windows 系统更紧密的接口 易于进行硬件访问 是一个灵活度和集成化都很高的软件开发环境 非常适合 开发 Windows 应用程序 本文以 Windows 环境下串口的通信为基础 主要介 绍串行通信的基本原理 并探讨用 Visual C 6 0 开发串口通信程序的几种方 法 7 第 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 接收 由于串口 通信是异步的 端口能够在一根线上发送数据同时在另一 根线上接收数据 其 他线用于握手 但是不是必须的 串口通信最重要的参数是波特率 数据位 停止位和奇偶校验 对于两个进行通行的端口 这些参数必须匹配 a 波特率 波特率 这是一个衡量通信速度的参数 它表示每秒钟传送的 bit 的个 数 例如 300 波特表示每秒钟发送 300 个 bit 当我们提到时钟周期时 我们就 是指波特率例如如果协议需要 4800 波特率 那么时钟是 4800Hz 这意味着串 口通信在数据线上的采样率为 4800Hz 通常电话线的波特率为 14400 28800 和 36600 波特率可以远远大于这些值 但是波特率和距离成反比 高波特率 常常用于放置的很近的仪器间的通信 典型的例子就是 GPIB 设备的通信 8 b 数据位 数据位 这是衡量通信中实际数据位的参数 当计算机发送一个信息包 实际的数据不会是 8 位的 标准的值是 5 7 和 8 位 如何设置取决于你想传送 的信 息 比如 标准的 ASCII 码是 0 127 7 位 扩展的 ASCII 码是 0 255 8 位 如果数据使用简单的文本 标准 ASCII 码 那么每个数据包 使用 7 位数据 每个包是指一个字节 包括开始 停止位 数据位和奇偶校验位 由于实际数据位取决于通信协议的选取 术语 包 指任何通信的情况 c 停止位 停止位 用于表示单个包的最后一位 典型的值为 1 1 5 和 2 位 由 于数据是在传输线上定时的 并且每一个设备有其自己的时钟 很可能在通信 中两台设 备间出现了小小的不同步 因此停止位不仅仅是表示传输的结束 并 且提供计算机校正时钟同步的机会 适用于停止位的位数越多 不同时钟同步 的容忍程度越大 但是数据传输率同时也越慢 d 奇偶校验位 奇偶校验位 在串口通信中一种简单的检错方式 有四种检错方式 偶 奇 高和低 当然没有校验位也是可以的 对于偶和奇校验的情况 串口会设 置校验位 数据位后面的一位 用一个值确保传输的数据有偶个或者奇个逻 辑高位 例如 如果数据是 011 那么对于偶校验 校验位为 0 保证逻辑高的 位数是偶数 个 如果是奇校验 校验位位 1 这样就有 3 个逻辑高位 高位和 低位不真正的检查数据 简单置位逻辑高或者逻辑低校验 这样使得接收设备 能够知道一个位的状 态 有机会判断是否有噪声干扰了通信或者是否传输和接 收数据是否不同步 9 第 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 个串行接口标准 RS 232 RS 422 与 RS 485 标准只对接口的电气特性作出规定 而不涉及 接插件 电缆或协议 在此基础上用户可以建立自己的高层通信协议 因此在 视频界的应用 许多厂家都建立了一套高层通信协议 或公开或厂家独家使用 表 2 1 是以上 3 种串行接口电气性能参数的综合比较 表 2 1 RS 232 RS 422 与 RS 485 串行接口电气性能参数综合比较 10 性 能 参 数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 3k 7k10054 摆率 最大值 30V sN AN A 接收器输入电压范围 15V 10V 10V 7V 12V 接收器输入门限 3V 200mV 200mV 接收器输入电阻 W 3k 7k4k 最小 12k 驱动器共模电压 3V 3V 1V 3V 接收器共模电压 7V 7V 7V 12V 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 所示 11 图 2 1 DB 9 DB 25 的 公头 和 母头 在 RS 232 标准中定义了逻辑 1 和逻辑 0 电压级数 以及标准的传输速率和 连接器类型 信号大小在正的和负的 3 15V 之间 RS 232 规定接近 0 的电平 是无效的 逻辑 1 规定为负电平 有效负电平的信号状态称为传号 Marking 它的功能意义为 OFF 逻辑 0 规定为正电平 有效正电平的信号 状态称为空号 Spacing 它的功能意义为 ON 根据设备供电电源的不同 正负 5 正负 10 正负 12 和正负 15 这样的电平都是可能的 在 RS 232 标准中规定的设备可以分为数据终端设备 DTE 和数据通信设 备 DCE 两类 这种分类定义了不同的线路用来发送和接收信号 一般来说 计算机和终端设备有 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输入接收数据 12 4RTS输出请示发送 5CTS输入清除发送 6DSR输入数据设备准备好 7SG公共端信号地 8DCD输入载波检测 9 保留 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输出数据终端准备好 13 5GND公共端信号地 6DSR输入数据装置准备好 7RTS输出请示发送 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 联络信号使其变高 数据载波检出 Data Carrier Dectection DCD 也叫 接收线信号检出 Received Line Dectection RLSD 用来表示 DCE 已接通通信链路 告知 DTE 准备接收数据 当本地的 MODEM 收到由通信链路另一端 远地 的 MODEM 送来的载波信号时 使 RLSD 信号有效 通知终端准备接收 并且由 14 MODEM 将接收下来的载波信号解调成数字数据后 沿接收数据线 RxD 送到终 端 振铃指示 Ringing RI 当 MODEM 收到交换台送来的振铃呼叫信号 时 使该信号有效 ON 状态 通知终端 已被呼叫 2 数据发送与接收线 2 和 3 号 2 个引脚 发送数据 Transmitted Data TxD 通过 TxD 终端将串行数据发送到 MODEM DTE DCE 接收数据 Received Data RxD 通过 RxD 线终端接收从 MODEM 发 来的串行数据 DCE DTE 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 型连接器的引脚分 配与 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 不允许出 15 现多个发送端 而只能有多个接收端 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 月制定的 它规定了 数据终端设备和数据通信设备之间的接口的功能特性和机械特性 规定 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 采用不可转换 16 的单发送端 EIA 485 的发送端需要设置为发送模式 这使得 EIA 485 可以使 用双线模式实现真正的多点双向通信 EIA 485 推荐使用在点对点网络中 线型是总线型 不能是星型和环型网 络 在理想情况下 EIA 485 需要 2 个终接电阻 其阻值要求等于传输电 缆的特 性阻抗 没有特性阻抗的话 当所有的设备都静止或者没有能量的时候就会产 生噪声 没有终接电阻的话 会使得较快速的发送端产生多个数据信号的边缘 这其中的一些是不正确的 EIA 485 不能使用星型或者环型的拓扑结构 主要 是由于在这些结构中 EIA 485 接口过低或者过高的终接电阻可以产生电 磁干 扰 EIA 485 在使用 4 线时可以和 EIA 422 一样实现全双工 还可实现真正的 多点通信 在某些限制条件下 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 17 Ready To Send RTS Request To Send RTS 47 Transmitted Data TxD Clear To Send CTS 58 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 得到当前使用的串口 SetSettings 指定串口的参数 一般设为默认参数 9600 N 8 1 这 样方便与其他串口进行通讯 GetSettings 取得串口参数 18 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 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 short MESSAGELENGTH short MESSAGELENGTH OutBuffer bstrVal newOutBuffer bstrVal new unsignedunsigned short MESSAGELENGTH short MESSAGELENGTH OutBuffer vt VT BSTR OutBuffer vt VT BSTR returnreturn true true 19 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 下磁盘文件只能做同步访问 而串口只能做异步 访问 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 向串口写数据 20 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 读取每字符间的超时 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 来得 21 到现有串口的属性 SetupComm 设置串口输入 输出缓冲区 OVERLAPPED 保存串口异步通讯的信息 具体结构如下 typedeftypedef structstruct OVERLAPPED OVERLAPPED DWORDDWORD Internal Internal DWORDDWORD InternalHigh InternalHigh DWORDDWORD Offset Offset DWORDDWORD OffsetHigh OffsetHigh HANDLEHANDLE hEvent hEvent OVERLAPPED OVERLAPPED Internal InternalHigh 是保留给系统使用的 用户不需要设置 Offset OffsetHigh 是读写串口的偏移量 一般设置 OffsetHigh 为 NULL 可以支持 2GB 数据 hEvent 读写事件 因为串口是异步通讯 操作可能被其他进程堵塞 程序 可以通过检查该时间来得知是否读写完毕 事件将在读写完成后 自动设置为 有效 通过以上这些函数和结构 我们就可以通过串口进行通讯了 现在我们具 体看下面的实例 BOOLBOOL CSerial Open CSerial Open intint nPort nPort intint nBaudnBaud if if m bOpenedm bOpened return return TRUETRUE charchar szPort 15 szPort 15 DCBDCB dcb dcb wsprintf wsprintf szPort szPort COM d COM d nPortnPort m hComDevm hComDev CreateFile CreateFile szPort szPort GENERIC READGENERIC READ GENERIC WRITE GENERIC WRITE 0 0 NULL NULL OPEN EXISTING OPEN EXISTING FILE ATTRIBUTE NORMALFILE ATTRIBUTE NORMAL FILE FLAG OVERLAPPED FILE FLAG OVERLAPPED NULLNULL if if m hComDevm hComDev NULLNULL return return FALSEFALSE memset memset memset memset COMMTIMEOUTSCOMMTIMEOUTS CommTimeOuts CommTimeOuts CommTimeOuts ReadIntervalTimeoutCommTimeOuts ReadIntervalTimeout 0 xFFFFFFFF 0 xFFFFFFFF CommTimeOuts ReadTotalTimeoutMultiplierCommTimeOuts ReadTotalTimeoutMultiplier 0 0 22 CommTimeOuts ReadTotalTimeoutConstantCommTimeOuts ReadTotalTimeoutConstant 0 0 CommTimeOuts WriteTotalTimeoutMultiplierCommTimeOuts WriteTotalTimeoutMultiplier 0 0 CommTimeOuts WriteTotalTimeoutConstantCommTimeOuts WriteTotalTimeoutConstant 5000 5000 SetCommTimeouts SetCommTimeouts m hComDev m hComDev m OverlappedRead hEventm OverlappedRead hEvent CreateEvent CreateEvent NULL NULL TRUE TRUE FALSE FALSE NULLNULL m OverlappedWrite hEventm OverlappedWrite hEvent CreateEvent CreateEvent NULL NULL TRUE TRUE FALSE FALSE NULLNULL dcb DCBlengthdcb DCBlength sizeof sizeof DCBDCB GetCommState GetCommState m hComDev m hComDev dcb BaudRatedcb BaudRate nBaud nBaud dcb ByteSizedcb ByteSize 8 8 if if SetCommState SetCommState m hComDev m hComDev GetLastError if if m OverlappedRead hEventm OverlappedRead hEvent NULLNULL CloseHandle CloseHandle m OverlappedRead hEventm OverlappedRead hEvent if if m OverlappedWrite hEventm OverlappedWrite hEvent NULLNULL CloseHandle CloseHandle m OverlappedWrite hEventm OverlappedWrite hEvent CloseHandle CloseHandle m hComDevm hComDev returnreturn FALSE FALSE m bOpenedm bOpened TRUE TRUE returnreturn m bOpened m bOpened intint CSerial InBufferCount CSerial InBufferCount voidvoid if if m bOpened m bOpened m hComDevm hComDev NULLNULL return return 0 0 DWORDDWORD dwErrorFlags dwErrorFlags COMSTATCOMSTAT ComStat ComStat ClearCommError ClearCommError m hIDComDev m hIDComDev returnreturn int ComStat cbInQue int ComStat cbInQue 23 DWORDDWORD CSerial ReadData CSerial ReadData voidvoid buffer buffer DWORDDWORD dwBytesRead dwBytesRead if if m bOpened m bOpened m hComDevm hComDev NULLNULL returnreturn 0 0 BOOLBOOL bReadStatus bReadStatus DWORDDWORD dwErrorFlags dwErrorFlags COMSTATCOMSTAT ComStat ComS

温馨提示

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

评论

0/150

提交评论