1、组 态 王 软 件 与 单 片 机 串 口 a s c i i 通 讯 的 机 制 及 实 现 方 法 组 态 软 件 广 泛 的 应 用 于 工 农 业 生 产 的 各 个 领 域 , 是 保 证 相 关 系 统 设 备 经 济 稳 定 安 全 运 行 的 重 要 方 式 , 是 对 传 统 控 制 方 式 的 一 次 革 命 , 得 到 了 越 来 越 广 泛 的 应 用 。 很 多 工 控 及 电 子 爱 好 者 对 这 方 面 很 感 兴 趣 , 都 跃 跃 欲 试 , 可 苦 于 软 件 要 想 得 到 实 际 效 果 , 就 得 连 接 设 备 , 通 过 设 备 预 设 的 寄
2、存 器 与 软 件 的 变 量 进 行 连 接 , 辅 以 命 令 语 言 , 才 能 取 得 真 正 的 体 验 。 软 件 支 持 的 设 备 比 如 板 卡 、 数 字 仪 表 、 P L C 、 变 频 器 等 等 都 是 属 于 工 控 设 备 , 价 格 都 比 较 昂 贵 , 一 般 很 难 触 及 。 那 是 不 是 组 态 软 件 就 不 适 合 于 我 们 用 了 呢 , 也 不 一 定 , 比 如 国 产 的 组 态 王 组 态 软 件 支 持 单 片 机 串 口 a s c i i 通 讯 , 烧 写 了 相 应 程 序 的 单 片 机 也 可 以 当 做 组 态 软
3、件 的 设 备 , 和 其 他 设 备 一 样 , 也 能 完 成 诸 如 水 位 、 行 程 等 状 态 的 监 视 及 电 机 、 阀 门 、 灯 泡 、 加 热 器 等 的 启 动 停 止 , 开 与 关 , 以 及 模 拟 量 经 A D 转 换 后 , 通 过 串 口 以 a s c i i 码 的 形 式 传 送 给 组 态 软 件 , 只 是 这 些 功 能 的 实 现 是 依 靠 单 片 机 的 端 口 来 完 成 , 组 态 软 件 访 问 单 片 机 , 监 视 单 片 机 所 有 端 口 状 态 , 控 制 一 部 分 端 口 的 高 低 电 平 状 态 , 辅 以 外
4、部 电 气 回 路 , 同 样 能 实 现 相 应 的 功 能 。 例 如 : 组 态 软 件 通 过 串 口 发 送 指 令 , 控 制 单 片 机 的 某 个 输 出 端 口 的 电 平 高 低 变 化 , 端 口 通 过 驱 动 使 继 电 器 的 触 点 闭 合 , 电 机 转 动 , 假 如 这 个 电 机 是 带 动 水 泵 往 水 箱 里 面 打 水 , 水 箱 水 位 的 预 定 位 置 装 有 触 点 , 这 个 触 点 连 接 在 单 片 机 的 另 一 个 输 入 端 口 上 , 当 水 位 到 达 触 点 位 置 , 触 点 动 作 单 片 机 的 这 个 端 口 电
5、平 发 生 变 化 , 这 个 变 化 通 过 同 一 个 串 口 传 回 给 组 态 软 件 , 组 态 软 件 可 以 根 据 命 令 语 言 编 写 的 程 序 酌 情 是 自 动 还 是 手 动 停 止 电 机 运 行 , 或 者 是 调 整 电 机 的 转 速 , 保 证 水 箱 的 水 位 在 预 设 的 范 围 内 , 这 就 是 组 态 软 件 构 成 的 控 制 系 统 的 最 基 本 应 用 。图 1 相 对 而 言 , 用 单 片 机 与 组 态 软 件 实 现 的 控 制 系 统 要 比 其 他 成 品 设 备 的 组 态 稍 微 麻 烦 一 些 , 不 但 需 要 了
6、 解 掌 握 组 态 软 件 的 工 作 机 制 , 还 需 要 单 片 机 的 软 硬 件 及 电 路 方 面 的 知 识 , 这 里 边 的 重 点 就 是 单 片 机 的 汇 编 或 c 语 言 编 程 , 但 掌 握 了 组 态 软 件 的 通 讯 协 议 , 按 协 议 编 写 , 比 较 起 来 并 不 是 很 难 。 图 2 就 是 用 组 态 软 件 与 单 片 机 通 讯 实 际 运 行 状 态 截 图 , 这 个 画 面 ( 组 态 软 件 的 定 义 ) , 显 示 的 是 组 态 软 件 与 单 片 机 通 讯 状 态 以 及 单 片 机 各 脚 位 的 电 平 高 低
7、 , 即 8 0 5 1 芯 片 P 2 和 P 1 的 状 态 , 还 有 控 制 端 口 电 平 的 按 钮 开 关 。 他 不 是 控 制 画 面 , 如 果 镶 嵌 在 实 际 系 统 中 , 应 该 算 通 讯 诊 断 画 面 , 图 中 显 示 的 具 体 内 容 的 含 义 , 后 边 将 做 介 绍 。 组 态 王 预 装 了 单 片 机 设 备 的 驱 动 , 也 就 是 它 把 单 片 机 当 成 设 备 来 对 待 , 与 数 字 仪 表 、 P L C 、 变 频 器 等 同 , 这 些 装 置 中 有 一 部 分 也 是 通 过 串 口 与 组 态 软 件 通 讯 的
8、 。 既 然 是 串 口 通 信 , 就 要 遵 循 组 态 软 件 制 定 的 通 讯 规 则 , 体 现 在 软 件 通 讯 的 格 式 上 , 就 是 通 讯 协 议 。 协 议 明 确 了 组 态 软 件 访 问 单 片 机 的 读 、 写 命 令 以 及 与 之 对 应 的 单 片 机 的 应 答 之 间 的 关 系 , 单 片 机 只 有 按 照 这 个 协 议 来 编 制 程 序 , 回 复 组 态 软 件 的 读 写 命 令 , 这 样 才 能 保 证 准 确 无 误 的 显 示 、 控 制 、 操 作 目 标 设 备 , 它 不 同 于 平 常 说 的 , 单 片 机 想 发
9、 什 么 , 组 态 软 件 就 接 收 什 么 、 显 示 什 么 。 组 态 王 软 件 与 设 备 之 间 的 关 系 是 软 件 方 是 主 人 , 设 备 方 是 从 属 。 也 可 以 比 喻 成 软 件 是 人 的 大 脑 , 设 备 是 人 的 四 肢 。 主 机 发 出 指 令 , 从 机 按 指 令 行 事 , 并 做 出 相 应 的 回 复 。 这 样 做 的 道 理 很 简 单 , 作 为 控 制 系 统 , 操 作 者 是 主 人 , 他 的 信 息 来 自 于 设 备 反 馈 给 软 件 显 示 的 画 面 上 信 息 , 同 时 根 据 现 场 的 状 态 工 艺
10、 流 程 等 做 出 相 应 的 操 作 , 比 如 电 机 的 启 动 停 止 、 阀 门 的 开 启 与 关 闭 等 等 。图 2 下 面 我 们 就 来 分 析 一 下 组 态 王 软 件 和 设 备 之 间 是 如 何 进 行 通 讯 的 : 当 你 运 行 了 组 态 软 件 , 也 就 是 安 装 完 软 件 , 在 桌 面 上 生 成 了 快 捷 启 动 方 式 的 图 标 , 鼠 标 单 击 它 , 软 件 就 运 行 了 。 首 先 显 示 的 是 工 程 管 理 器 , 选 择 目 录 , 也 就 是 你 要 建 立 的 工 程 安 装 在 电 脑 的 哪 个 位 置 。
11、你 可 以 在 空 白 框 里 填 上 一 个 名 称 , 它 就 会 在 软 件 启 动 位 置 新 建 一 个 目 录 。 因 为 你 是 在 桌 面 启 动 的 , 鼠 标 单 击 下 一 步 , 它 就 会 提 示 你 是 否 新 建 , 你 回 答 是 , 这 时 桌 面 上 就 出 现 了 刚 才 你 输 入 名 称 的 目 录 , 然 后 软 件 提 示 你 输 入 工 程 名 称 、 工 程 描 述 , 依 你 的 情 况 填 写 , 然 后 单 击 完 成 , 这 样 你 的 工 程 名 称 就 出 现 在 了 工 程 管 理 器 的 目 录 中 。 鼠 标 双 击 你 的
12、工 程 名 称 , 启 动 这 项 工 程 , 也 就 开 始 了 你 的 工 程 建 设 了 。 首 先 要 做 的 第 一 步 就 是 连 接 或 叫 注 册 你 的 设 备 , 让 软 件 知 道 它 连 接 了 什 么 设 备 , 从 而 使 用 哪 个 协 议 和 连 接 的 设 备 对 话 。 我 们 这 里 安 装 的 无 疑 是 单 片 机 , 安 装 设 备 也 就 是 安 装 相 应 的 驱 动 , 是 安 装 逻 辑 设 备 , 大 体 步 骤 很 多 文 章 都 有 介 绍 , 不 过 为 了 讲 解 的 完 整 性 , 在 这 再 重 新 梳 理 一 下 : 单 击
13、左 侧 设 备 右 侧 的 新 建 设 备 下 拉 菜 单 设 备 驱 动 智 能 模 块 单 片 机 通 用 单 片 机 A S C I I 串 口 。 指 定 一 个 逻 辑 名 称 , 就 用 系 统 给 定 的 新 I O 设 备 , 通 讯 口 等 选 择 默 认 即 可 . 在 组 态 王 中 设 置 的 通 讯 参 数如 波 特 率 , 数 据 位 , 停 止 位 , 奇 偶 校 验 必 须 与 单 片 机 编 程 中 的 通 讯 参 数 一 致 。 有 关 组 态 王 中 与 单 片 机 的 通 讯 协 议 的 标 准 文 本 请 查 阅 安 装 文 件 夹 中 : 组 态 王
14、 6 . 5 5 V A L U E P A 技 术 资 料 常 用 协 议 单 片 机 A S 通 用 单 片 机 . D O C 中 的 内 容 。 组 态 王 的 单 片 机 A S C I I 串 口 协 议 的 通 讯 格 式 一 共 六 条 : 其 中 上 位 机 也 就 是 软 件 发 出 的 只 有 两 条 , 分 别 是 上 位 机 发 送 读 命 令 和 上 位 机 发 送 写 命 令 。 下 位 机 也 就 是 单 片 机 分 别 应 答 若 正 常 若 不 正 常 。 读 懂 这 两 条 命 令 , 对 于 组 态 王 与 单 片 机 构 成 的 系 统 也 就 成 功
15、 了 一 半 了 。 上 位 机 发 送 读 命 令 字 头 设 备 地 址 标 志 数 据 地 址 数 据 字 节 数 异 或 C R 下 位 机 应 答 : 若 正 常 : 字 头 设 备 地 址 数 据 字 节 数 数 据 异 或 C R 若 不 正 常 : 字 头 设 备 地 址 * * 异 或 C R 上 位 机 发 送 写 命 令 字 头 设 备 地 址 标 志 数 据 地 址 数 据 字 节 数 数 据 异 或 C R 下 位 机 应 答 : 若 正 常 : 字 头 设 备 地 址 # # 异 或 C R 若 不 正 常 : 字 头 设 备 地 址 * * 异 或 C R 为 了
16、 能 更 好 的 理 解 组 态 王 软 件 与 单 片 机 A S C I I 通 信 的 原 理 , 我 们 做 一 个 实 验 : 这 个 实 验 除 了 需 要 组 态 王 软 件 之 外 , 需 要 一 个 虚 拟 串 口 连 接 软 件 , 一 个 串 口 调 试 软 件 。 运 行 虚 拟 串 口 连 接 软 件 , 相 连 接 的 两 个 串 口 分 别 设 定 成 组 态 王 的 串 口 号 , 和 串 口 调 试 软 件 的 串 口 号 。 串 口 调 试 软 件 的 通 讯 参 数 要 和 组 态 王 软 件 的 一 致 , 设 定 为 接 收 , H E X 格 式 ,
17、 运 行 这 个 软 件 。 鼠 标 右 键 单 击 组 态 王 软 件 刚 刚 建 立 的 新 I O 设 备 , 选 择 测 试 新 I O 设 备 出 现 串 口 测 试 对 话 框 , 选 择 设 备 测 试 选 项 卡 , 头 一 项 是 寄 存 器 , 只 有 一 个 值 x , 不 管 三 七 二 十 一 , 你 先 填 一 个 x 0 , 也 就 是 在 已 经 有 的 x 后 边 加 个 0 。 后 边 一 个 数 据 类 型 学 过 c 或 c 5 1 都 知 道 , 里 边 的 下 拉 项 中 是 在 c 语 言 中 经 常 能 遇 到 的 数 据 类 型 , 对 x 寄
18、 存 器 而 言 , 与 之 对 应 的 只 有 几 项 , 先 填 上 这 个 B Y T E 即 字 节 型 , 也 就 是 说 , 单 片 机 这 个 设 备 的 寄 存 器 x 0 的 数 据 类 型 是 字 节 型 的 , 紧 接 着 鼠 标 单 击 添 加 按 钮 , 上 边 填 写 的 寄 存 器 名 以 及 数 据 类 型 就 出 现 在 了 下 边 的 采 集 列 表 中 。 选 中 这 个 寄 存 器 , 然 后 单 击 读 取 按 钮 , 正 常 情 况 下 , 串 口 调 试 软 件 的 接 收 窗 体 内 会 出 现 一 串 数 码 , 格 式 应 该 是 这 个 样
19、 子 :4 0 3 0 4 6 4 1 3 0 3 0 3 0 3 0 3 0 3 0 3 1 3 0 3 6 0 D 上 面 说 过 , 组 态 王 向 单 片 机 发 送 的 只 有 两 条 命 令 , 一 个 是 读 , 一 个 是 写 , 上 面 从 串 口 软 件 读 出 这 串 字 符 , 就 是 组 态 王 软 件 的 读 命 令 。 那 么 为 什 么 我 按 读 取 , 组 态 王 会 发 出 一 串 字 符 呢 , 这 就 是 软 件 与 单 片 机 的 通 讯 机 制 , 用 通 俗 的 语 言 就 是 , 组 态 王 软 件 通 过 串 口 问 与 之 连 接 的 设
20、备 你 那 里 什 么 情 况 了 。 这 只 是 测 试 , 我 们 再 组 态 试 一 下 , 在 添 加 了 新 I O 设 备 以 后 , 单 击 数 据 词 典 , 新 建 一 个 名 字 为 a 变 量 , 变 量 类 型 为 I O 整 数 , 连 接 设 备 为 新 I O 设 备 , 寄 存 器 和 数 据 类 型 同 上 , 是 x 0 和 B Y T E , 其 它 不 变 , 然 后 确 定 。 选 择 画 面 , 新 建 画 面 , 为 画 面 起 个 名 字 , 可 以 是 字 母 , 也 可 以 是 汉 字 , 确 定 。 出 现 画 面 , 选 择 工 具 箱
21、中 的 字 符 T 工 具 , 在 画 面 中 适 当 位 置 单 击 鼠 标 , 输 入 两 个 # # , 鼠 标 双 击 这 两 个 字 符 , 显 示 动 画 连 接 对 话 框 , 选 择 模 拟 值 输 出 , 弹 出 模 拟 值 连 接 对 话 框 , 单 击 表 达 式 右 侧 的 ? , 选 择 刚 才 在 数 据 词 典 中 建 立 的 变 量 a , 其 他 不 变 , 确 定 , 确 定 。 然 后 文 件 全 部 保 存 , 关 闭 画 面 。 选 择 切 换 到 运 行 系 统 , 这 时 你 还 是 用 串 口 调 试 软 件 , 会 接 收 到 同 样 的 字
22、符 串 。 也 就 是 说 , 只 有 你 在 画 面 上 连 接 了 与 你 添 加 的 设 备 有 关 的 变 量 , 软 件 一 旦 进 入 运 行 状 态 , 组 态 软 件 就 会 主 动 发 出 与 之 匹 配 的 一 串 字 符 , 等 待 设 备 的 应 答 。 设 备 只 有 在 设 定 的 间 隔 内 正 确 回 复 了 , 通 讯 才 能 持 续 进 行 , 否 则 软 件 会 提 示 通 讯 错 误 , 变 量 都 会 变 成 设 定 值 , 比 如 ? ? 等 。 下 面 解 读 一 下 这 串 代 码 , 头 一 个 4 0 和 最 后 一 个 0 D 是 固 定
23、的 , 组 态 王 不 管 是 读 还 是 写 , 这 两 个 都 是 一 样 的 , 十 六 进 制 格 式 , 分 别 代 表 代 码 的 开 始 和 结 束 。 这 两 个 中 间 的 若 干 个 都 是 a s c i i 格 式 , 这 也 是 组 态 王 中 单 片 机 a s c i i 串 口 的 由 来 。 从 4 0 开 始 的 第 二 个 和 第 三 个 代 表 单 片 机 的 地 址 , 3 0 和 4 6 , 翻 译 成 十 六 进 制 就 是 0 f , 再 翻 译 成 十 进 制 就 是 1 5 , 他 和 组 态 王 新 I O 设 备 设 置 的 地 址 对
24、应 , 意 思 就 是 组 态 王 要 和 地 址 为 1 5 的 单 片 机 设 备 对 话 。 再 往 后 的 两 位 4 1 和 3 0 是 标 志 位 , 其 中 的 3 0 对 应 的 十 六 进 制 和 二 进 制 都 是 0 , 字 节 型 数 据 , 不 打 包 , 读 。 二 进 制 最 后 一 位 要 是 1 的 话 就 是 写 。 再 往 后 的 四 个 都 是 3 0 , 代 表 的 是 数 据 地 址 , 先 头 设 定 的 寄 存 器 不 是 x 0 么 , x 代 表 寄 存 器 , 后 边 的 0 代 表 地 址 。 你 可 以 将 寄 存 器 改 成 x 1
25、试 试 , 这 四 个 的 最 后 一 个 就 变 成 了 3 1 了 。 再 后 边 的 3 0 和 3 1 , 代 表 数 据 字 节 数 , 刚 才 设 定 的 数 据 类 型 是 B Y T E , 一 个 字 节 正 好 对 应 。 再 往 后 的 3 0 和 3 6 , 是 这 两 个 数 前 边 除 了 开 头 的 4 0 以 外 的 异 或 值 , 你 可 以 用 电 脑 上 x p 系 统 自 带 的 科 学 计 算 器 算 一 下 , 数 值 吻 合 。设 置 异 或 值 的 目 的 应 该 是 保 障 串 口 收 发 双 方 数 据 的 一 致 性 。 以 上 就 是 组
26、 态 王 读 命 令 的 全 部 解 释 , 写 命 令 的 解 读 方 式 类 似 , 读 者 可 自 行 测 试 。 下 位 机 也 就 是 单 片 机 的 应 答 都 是 写 在 单 片 机 程 序 里 的 , 这 个 格 式 是 固 定 的 , 当 单 片 机 接 收 到 组 态 王 的 读 或 写 命 令 时 正 常 或 有 误 时 的 应 答 。 有 了 这 个 解 释 就 可 以 编 写 单 片 机 的 程 序 了 , 这 里 要 勾 画 一 下 程 序 的 框 图 : 定 义 端 口 的 用 途 , 这 里 P 2 输 出 , P 1 输 入 。 他 们 的 差 别 就 是 ,
27、 组 态 王 都 可 以 读 , 但 是 只 能 写 P 2 , 不 能 写 P 1 。 定 义 一 个 数 组 , 用 于 接 收 组 态 王 的 读 写 命 令 , 根 据 串 口 协 议 的 格 式 有 3 0 个 够 了 。 u n s i g n e d c h a r r e c 3 0 ; 串 口 定 义 , 放 在 主 程 序 中 , 这 个 很 常 见 : T M O D = 0 x 2 0 ; / / 定 时 器 1 - - 方 式 2 T L 1 = 0 x f d ; T H 1 = 0 x f d ; / / 1 1 . 0 5 9 2 M H Z 晶 振 , 波 特
28、 率 为 9 6 0 0 S C O N = 0 x 5 0 ; / / 方 式 1 T R 1 = 1 ; / / 启 动 定 时 I E = 0 x 9 0 ; / / E A = 1 , E S = 1 : 打 开 串 口 中 断 还 有 以 下 几 个 子 程 序 : 1 、 中 断 处 理 2 、 数 据 处 理 3 、 A s c i i 到 1 6 进 制 转 换 , 用 于 接 收 到 a s c i i 码 转 换 4 、 1 6 进 制 到 A s c i i 转 化 , 用 于 发 送 应 答 5 , 、 接 收 和 发 送 。 程 序 运 行 过 程 : 1 、 串 口
29、 中 断 发 生 后 , 先 用 判 断 语 句 判 断 头 一 个 是 不 是 4 0 , 如 果 是 , 将 循 环 变 量 赋 值 0 , 然 后 接 收 , 当 收 到 0 D 后 完 成 接 收 , 进 行 数 据 处 理 。 2 、 判 断 一 下 是 否 是 本 机 地 址 , 也 就 是 把 接 收 到 的 第 二 个 和 第 三 个 a s c i i 转 换 成 1 6 进 制 后 与 单 片 机 内 一 个 1 6 进 制 的 固 定 值 进 行 比 较 , 相 等 就 是 本 机 地 址 。 3 、 对 第 二 位 , 到 异 或 值 前 的 几 个 a s c i i
30、 码 进 行 异 或 运 算 , 与 收 到 的 异 或 码 进 行 比 较 , 如 果 相 同 , 即 为 数 据 正 确 。 4 、 然 后 将 接 收 到 的 第 五 个 a s c i i 转 换 成 1 6 进 制 , 与 0 x 0 1 进 行 与 运 算 , 判 断 是 读 还 是 写 。 5 、 如 果 是 读 , 将 P 1 和 P 2 端 口 的 状 态 送 到 应 答 格 式 中 的 数 据 中 , 发 送 回 组 态 王 。6 、 如 果 是 写 , 将 后 边 的 数 据 值 赋 值 于 P 2 端 口 , P 2 端 口 的 相 应 的 位 就 随 之 进 行 变
31、化 了 。 以 上 就 是 单 片 机 程 序 的 运 行 流 程 , 对 于 c 5 1 来 说 , 不 是 很 难 , 大 家 可 以 尽 情 的 发 挥 吧 。 下 面 解 释 一 下 图 2 组 态 王 与 单 片 机 通 讯 控 制 中 各 个 单 元 代 表 的 内 容 : 组 态 王 与 单 片 机 通 讯 状 态 栏 , 显 示 的 是 软 件 与 单 片 机 的 通 讯 状 态 , 其 中 通 讯 状 态 后 面 的 通 讯 正 常 接 收 的 是 新 I O 设 备 中 的 C o m m E r r 变 量 。 通 讯 如 果 出 现 问 题 , 会 显 示 通 讯 故
32、障 。 单 片 机 端 口 数 据 , 连 接 的 是 一 个 变 量 类 型 为 U S H O R T 的 变 量 , 因 为 要 接 收 两 个 端 口 P 1 和 P 2 的 数 据 , 每 个 端 口 的 数 据 范 围 都 是 0 - f f , 一 个 字 节 , 所 以 用 U S H O R T 类 型 变 量 , 是 两 个 字 节 的 连 接 。 下 面 的 单 片 机 P 1 ( P 2 ) 端 口 位 状 态 , 分 别 显 示 的 是 P 1 和 P 2 端 口 每 一 位 的 状 态 , 其 中 红 色 代 表 低 电 平 , 绿 色 代 表 高 电 平 。 不
33、难 看 出 , 端 口 状 态 的 二 进 制 数 转 换 成 1 6 进 制 后 , 与 上 面 接 收 到 的 字 类 型 变 量 分 解 成 两 个 后 的 1 6 进 制 数 值 都 是 相 等 的 。 下 面 的 按 钮 就 是 控 制 P 2 端 口 的 对 应 位 的 状 态 用 的 , 实 际 应 用 也 就 是 开 关 的 作 用 , 用 于 启 停 与 之 对 应 相 连 的 电 机 、 阀 门 等 等 执 行 机 构 的 。 P 1 端 口 的 状 态 软 件 只 能 读 但 是 不 能 改 写 , 它 们 相 当 于 现 场 的 限 位 器 或 水 位 开 关 , 它 们 的 状 态 取 决 于 现 场的 状 态 。 为 了 简 单 明 了 的 说 明 问 题 , 以 上 内 容 仅 涉 及 到 了 数 字 量 的 传 输 , 模 拟 量 结 果 的 传 输 类 似 , 大 家 可 以 举 一 反 三 , 以 此 类 推 。