基于Windows95 平台的VB5串行端口通信程序的设计

2008-02-23 06:58:33来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

---- Visual Basic5.0 以 其 简 单 易 学、32 位 面 向 对 象 程 序 设 计 的 支 持, 倍 受 广 大 计 算 机 开 发 者 的 青 睐, 已 广 泛 地 应 用 于 各 个 领 域, 而 在 实 时 监 测 系 统 中 串 行 端 口 通 信 又 是 一 项 基 础 功 能, 我 们 使 用VB5 编 写 了 实 时 水 库 水 文 自 动 监 测 系 统 的 后 台 机 软 件, 本 文 就Windows95 环 境 中 采 用VB5 设 计 串 行 端 口 通 信 程 序 进 行 较 为 详 细 的 讨 论 且 给 予 实 例。

---- 一 般 用VB 开 发 串 行 通 信 程 序 有 两 种 方 法: 一 是 利 用WINDOWS 的 通 信API 函 数; 另 一 种 是 采 用VB 标 准 控 件Mscomm 来 实 现。

---- 一.WINDOWS95 的 通 信API 方 法

---- WINDOWS95 中 的 串 口 通 信API 函 数 不 同 于WINDOWS32 中 的OpenComm、CloseComm、ReadComm、WriteComm, 而 是 采 用 硬 件 与 文 件 通 用 的 函 数CreateFile、ReadFile、WriteFile、CloseHandle, 该 类 函 数 更 具 有 一 般 性, 并 且 可 以 用EscapeCommFunction 函 数 实 现 低 层 次 的 硬 件 操 作, 比 如:SETXOFF、 CLRDTR 等。

---- 利 用API 编 写 串 口 通 信 程 序 较 为 复 杂, 需 要 掌 握 的 通 信 知 识 多 一 些, 其 优 点 是 实 现 功 能 上 可 作 的 更 好、 应 用 面 更 广 泛, 更 适 合 于 编 写 较 为 复 杂 的 低 层 次 通 信 程 序 等。 采 用 这 种 方 法 编 写 串 行 端 口 通 信 程 序 一 般 分 可 为 以 下 几 个 过 程:

---- (1) 初 始 化 串 行 端 口

---- 首 先 用CreateFile 函 数 打 开 指 定 串 口, 置 参 数 中 访 问 类 型 为GENERIC_READ |GENERIC_WRITE、 共 享 模 式 为0、 创 建 标 志 为OPEN_EXISTING、 模 板 句 柄 为NULL。

---- (2) 配 置 串 口

---- WINDOWS95 的 串 口 配 置 比WINDOWS3.x 版 本 较 为 复 杂, 但 其 功 能 更 强 大, 对 一 般 程 序 可 使 用CommConfigDialog 函 数 以 对 话 框 方 式 设 置: 波 特 率、 数 据 位、 奇 偶 校 验、 停 止 位 和 流 控 制 方 式, 并 且 可 以 恢 复 缺 省 值。

---- (3) 超 时 控 制

---- WINDOWS95 为 了 防 止 意 外 情 况 的 出 现 使 得 串 口 读 写 无 休 止 地 等 待, 而 提 供 了 超 时 设 置, 这 是 由COMMTIMEOUTS 结 构 定 义 的, 通 过 调 用GetCcommTimeOuts 函 数 获 得 当 前 的 设 置, 而 用SetCommTimeOuts 函 数 来 完 成 设 置。

---- (4) 数 据 传 输

---- 读 写 串 行 端 口 与 读 写 文 件 采 用 相 同 的 函 数, 即ReadFile、WriteFile, 读 写 操 作 可 分 四 种 方 式: 查 询 方 式、 同 步I/O、 异 步( 后 台)I/O 和 事 件 驱 动I/O。

---- (5) 关 闭 串 口

---- 程 序 的 终 止 可 以 自 动 关 闭 串 口, 也 可 用 函 数CloseHandle(), 以 便 释 放 该 独 占 资 源。

---- 二. 用VB 通 信 控 件Mscomm 的 方 法

---- Mscomm 控 件 提 供 了 功 能 完 善 的 串 口 数 据 的 发 送 和 接 收,Mscomm 控 件 具 有 两 种 处 理 方 式: ① 事 件 驱 动 方 式: 由Mscomm 控 件 的OnComm 事 件 捕 获 并 处 理 通 信 错 误 及 事 件。 ② 查 询 方 式: 通 过 检 查CommEvent 属 性 的 值 来 判 断 事 件 和 错 误。

---- Mscomm 控 件 的 通 信 功 能 实 现 实 际 上 是 调 用 了API 函 数, 而API 函 数 是 由Comm.drv 解 释 并 传 给 设 备 驱 动 程 序 执 行 的, 对 于VB 程 序 开 发 者 只 需 知 道Mscomm 控 件 的 属 性 和 事 件 的 用 法 即 可 以 实 现 串 口 的 操 作。 以 下 是Mscomm 控 件 的 主 要 属 性 和 方 法:

---- (1) CommPort: 设 置 或 返 回 串 行 端 口 号, 其 取 值 范 围1-99, 缺 省 为1。

---- (2) Setting: 设 置 或 返 回 串 行 端 口 的 波 特 率、 奇 偶 校 验 位、 数 据 位 数、 停 止 位。 如:Mscomm.Setting="9600,N,8,1"。

---- (3) PortOpen: 打 开 或 关 闭 串 行 端 口, 格 式 为:Mscomm.PortOpen={TRUE|FALSE}。

---- (4) InBufferSize: 设 置 或 返 回 接 收 缓 冲 区 的 大 小, 缺 省 为1024 字 节。

---- (5) InBufferCount: 返 回 接 收 缓 冲 区 内 的 等 待 读 取 的 字 节 个 数, 可 通 过 设 该 属 性 为0 来 清 除 接 收 缓 冲 区。

---- (6) RThreshold: 该 属 性 为 一 阀 值, 它 确 定 当 接 收 缓 冲 区 内 字 节 个 数 达 到 或 超 过 该 值 后 就 产 生 代 码 为MSCOMM_EV_RECEIVE 的OnComm 事 件。

---- (7) InputLen: 设 置 或 返 回 接 收 缓 冲 区 内 用Input 读 入 的 个 数。 若 取0, 则INPUT 读 取 整 个 缓 冲 区 的 内 容。

---- (8) Input: 该 属 性 表 示 从 接 收 缓 冲 区 移 走 一 串 字 符。

---- (9) OutBufferSize: 设 置 或 返 回 发 送 缓 冲 区, 缺 省 为512 字 节。

---- (10) OutBufferCounter: 返 回 发 送 缓 冲 区 内 等 待 发 送 的 字 符 数, 可 用 来 清 空 缓 冲 区。

---- (11) Output: 向 发 送 缓 冲 区 传 送 一 字 符 串。

---- (12) EOFEnable: 若 置TRUE, 则 当 输 入 中 出 现EOF, 就 停 止 输 入 并 产 生OnComm 事 件。

---- 如 果 在 通 信 过 程 中 发 生 错 误 或 事 件, 就 会 引 发OnComm 事 件 并 且 改 变 属 性 值, 由CommEvent 属 性 代 码 反 映 错 误 类 型, 在 通 信 程 序 的 设 计 中 可 跟 据 该 属 性 值 来 执 行 不 同 的 操 作, 以 下 是 部 分 属 性 常 数 值 及 其 含 义:

---- (1) ComEvSend: 其 值 为1, 发 送 缓 冲 区 的 内 容 少 于SThreshold 指 定 的 值。

---- (2) ComEvReceive: 其 值 为2, 接 收 缓 冲 区 内 字 符 数 达 到 RThreshold 值, 该 事 件 在 缓 冲 区 中 数 据 被 移 走 前 将 持 续 产 生。

---- (3) ComEventFrame: 其 值 为1004, 硬 件 检 测 到 帧 错 误。

---- (4) ComEventRxOver: 其 值 为1008, 接 收 缓 冲 区 溢 出。

---- (5) ComEventTxFull: 其 值 为1010, 发 送 缓 冲 区 溢 出。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:用VB实现文件查找功能

下一篇:Visual Basic 6.0 FAQ