1、Modbus 通讯协议目录Modbus 协议简介 两种传输方式Modbus 协议简介 两种传输方式展开编 辑 本 段 Modbus 协 议 简 介Modbus 协 议 是 应 用 于 电 子 控 制 器 上 的 一 种 通 用 语 言 。 通 过 此 协 议 ,控制 器 相 互 之 间 、 控 制 器 经 由 网 络 ( 例 如 以 太 网 ) 和 其 它 设 备 之 间 可 以 通 信 。它 已 经 成 为 一 通 用 工 业 标 准 。 有 了 它 ,不 同 厂 商 生 产 的 控 制 设 备 可 以 连 成工 业 网 络 ,进 行 集 中 监 控 。 此 协 议 定 义 了 一 个 控
2、制 器 能 认 识 使 用 的 消 息 结 构 ,而 不 管 它 们 是 经 过 何 种 网 络 进 行 通 信 的 。 它 描 述 了 一 控 制 器 请 求 访 问 其 它 设备 的 过 程 ,如 果 回 应 来 自 其 它 设 备 的 请 求 ,以 及 怎 样 侦 测 错 误 并 记 录 。 它 制定 了 消 息 域 格 局 和 内 容 的 公 共 格 式 。 当 在 一 Modbus 网 络 上 通 信 时 ,此 协 议 决 定 了 每 个 控 制 器 须 要 知 道 它 们 的设 备 地 址 ,识 别 按 地 址 发 来 的 消 息 ,决 定 要 产 生 何 种 行 动 。 如 果
3、需 要 回 应 ,控 制 器 将 生 成 反 馈 信 息 并 用 Modbus 协 议 发 出 。 在 其 它 网 络 上 ,包 含 了Modbus 协 议 的 消 息 转 换 为 在 此 网 络 上 使 用 的 帧 或 包 结 构 。 这 种 转 换 也 扩 展 了根 据 具 体 的 网 络 解 决 节 地 址 、 路 由 路 径 及 错 误 检 测 的 方 法 。 在 Modbus 网 络 上 转 输标 准 的 Modbus 口 是 使 用 一 RS-232C 兼 容 串 行 接 口 ,它 定 义 了 连 接 口 的针 脚 、 电 缆 、 信 号 位 、 传 输 波 特 率 、 奇 偶 校
4、 验 。 控 制 器 能 直 接 或 经 由Modem 组 网 。 控 制 器 通 信 使 用 主 从 技 术 ,即 仅 一 设 备 ( 主 设 备 ) 能 初 始 化 传 输 ( 查询 ) 。 其 它 设 备 ( 从 设 备 ) 根 据 主 设 备 查 询 提 供 的 数 据 作 出 相 应 反 应 。 典 型的 主 设 备 : 主 机 和 可 编 程 仪 表 。 典 型 的 从 设 备 : 可 编 程 控 制 器 。 主 设 备 可 单 独 和 从 设 备 通 信 ,也 能 以 广 播 方 式 和 所 有 从 设 备 通 信 。 如 果单 独 通 信 ,从 设 备 返 回 一 消 息 作
5、为 回 应 ,如 果 是 以 广 播 方 式 查 询 的 ,则 不 作 任何 回 应 。 Modbus 协 议 建 立 了 主 设 备 查 询 的 格 式 : 设 备 ( 或 广 播 ) 地 址 、 功 能代 码 、 所 有 要 发 送 的 数 据 、 一 错 误 检 测 域 。 从 设 备 回 应 消 息 也 由 Modbus 协 议 构 成 ,包 括 确 认 要 行 动 的 域 、 任 何 要返 回 的 数 据 、 和 一 错 误 检 测 域 。 如 果 在 消 息 接 收 过 程 中 发 生 一 错 误 ,或 从 设备 不 能 执 行 其 命 令 ,从 设 备 将 建 立 一 错 误 消
6、 息 并 把 它 作 为 回 应 发 送 出 去 。 在 其 它 类 型 网 络 上 转 输在 其 它 网 络 上 ,控 制 器 使 用 对 等 技 术 通 信 ,故 任 何 控 制 都 能 初 始 和 其 它控 制 器 的 通 信 。 这 样 在 单 独 的 通 信 过 程 中 ,控 制 器 既 可 作 为 主 设 备 也 可 作 为从 设 备 。 提 供 的 多 个 内 部 通 道 可 允 许 同 时 发 生 的 传 输 进 程 。 在 消 息 位 ,Modbus 协 议 仍 提 供 了 主 从 原 则 ,尽 管 网 络 通 信 方 法 是 “对等 ”。 如 果 一 控 制 器 发 送 一
7、 消 息 ,它 只 是 作 为 主 设 备 ,并 期 望 从 从 设 备 得 到回 应 。 同 样 ,当 控 制 器 接 收 到 一 消 息 ,它 将 建 立 一 从 设 备 回 应 格 式 并 返 回 给发 送 的 控 制 器 。 查 询 回 应 周 期( 1) 查 询 查 询 消 息 中 的 功 能 代 码 告 之 被 选 中 的 从 设 备 要 执 行 何 种 功 能 。 数 据 段 包含 了 从 设 备 要 执 行 功 能 的 任 何 附 加 信 息 。 例 如 功 能 代 码 03 是 要 求 从 设 备 读保 持 寄 存 器 并 返 回 它 们 的 内 容 。 数 据 段 必 须
8、包 含 要 告 之 从 设 备 的 信 息 : 从 何寄 存 器 开 始 读 及 要 读 的 寄 存 器 数 量 。 错 误 检 测 域 为 从 设 备 提 供 了 一 种 验 证 消息 内 容 是 否 正 确 的 方 法 。 ( 2) 回 应 如 果 从 设 备 产 生 一 正 常 的 回 应 ,在 回 应 消 息 中 的 功 能 代 码 是 在 查 询 消 息中 的 功 能 代 码 的 回 应 。 数 据 段 包 括 了 从 设 备 收 集 的 数 据 : 象 寄 存 器 值 或 状 态 。如 果 有 错 误 发 生 ,功 能 代 码 将 被 修 改 以 用 于 指 出 回 应 消 息 是
9、 错 误 的 ,同 时 数据 段 包 含 了 描 述 此 错 误 信 息 的 代 码 。 错 误 检 测 域 允 许 主 设 备 确 认 消 息 内 容 是否 可 用 。 编 辑 本 段 两 种 传 输 方 式控 制 器 能 设 置 为 两 种 传 输 模 式 ( ASCII 或 RTU) 中 的 任 何 一 种 在 标 准 的Modbus 网 络 通 信 。 用 户 选 择 想 要 的 模 式 ,包 括 串 口 通 信 参 数 ( 波 特 率 、 校 验方 式 等 ) ,在 配 置 每 个 控 制 器 的 时 候 ,在 一 个 Modbus 网 络 上 的 所 有 设 备 都 必须 选 择
10、相 同 的 传 输 模 式 和 串 口 参 数 。 所 选 的 ASCII 或 RTU 方 式 仅 适 用 于 标 准 的 Modbus 网 络 ,它 定 义 了 在 这些 网 络 上 连 续 传 输 的 消 息 段 的 每 一 位 ,以 及 决 定 怎 样 将 信 息 打 包 成 消 息 域 和如 何 解 码 。 在 其 它 网 络 上 ( 象 MAP 和 Modbus Plus) Modbus 消 息 被 转 成 与 串 行 传输 无 关 的 帧 。 1、 ASCII 模 式 当 控 制 器 设 为 在 Modbus 网 络 上 以 ASCII( 美 国 标 准 信 息 交 换 代 码 )
11、 模式 通 信 ,在 消 息 中 的 每 个 8Bit 字 节 都 作 为 两 个 ASCII 字 符 发 送 。 这 种 方 式的 主 要 优 点 是 字 符 发 送 的 时 间 间 隔 可 达 到 1 秒 而 不 产 生 错 误 。 代 码 系 统 十 六 进 制 ,ASCII 字 符 0.9,A.F 消 息 中 的 每 个 ASCII 字 符 都 是 一 个 十 六 进 制 字 符 组 成 每 个 字 节 的 位 1 个 起 始 位 7 个 数 据 位 ,最 小 的 有 效 位 先 发 送 1 个 奇 偶 校 验 位 ,无 校 验 则 无 CRC 域 是 两 个 字 节 ,包 含 一 1
12、6 位 的 二 进 制 值 。 它 由 传 输 设 备 计 算 后 加 入到 消 息 中 。 接 收 设 备 重 新 计 算 收 到 消 息 的 CRC,并 与 接 收 到 的 CRC 域 中 的 值比 较 ,如 果 两 值 不 同 ,则 有 误 。 CRC 是 先 调 入 一 值 是 全 “1”的 16 位 寄 存 器 ,然 后 调 用 一 过 程 将 消 息 中连 续 的 8 位 字 节 各 当 前 寄 存 器 中 的 值 进 行 处 理 。 仅 每 个 字 符 中 的 8Bit 数 据对 CRC 有 效 ,起 始 位 和 停 止 位 以 及 奇 偶 校 验 位 均 无 效 。 CRC 产
13、 生 过 程 中 ,每 个 8 位 字 符 都 单 独 和 寄 存 器 内 容 相 或 ( OR) ,结 果向 最 低 有 效 位 方 向 移 动 ,最 高 有 效 位 以 0 填 充 。 LSB 被 提 取 出 来 检 测 ,如 果LSB 为 1,寄 存 器 单 独 和 预 置 的 值 或 一 下 ,如 果 LSB 为 0,则 不 进 行 。 整 个 过程 要 重 复 8 次 。 在 最 后 一 位 ( 第 8 位 ) 完 成 后 ,下 一 个 8 位 字 节 又 单 独 和 寄存 器 的 当 前 值 相 或 。 最 终 寄 存 器 中 的 值 ,是 消 息 中 所 有 的 字 节 都 执
14、行 之 后 的CRC 值 。 CRC 添 加 到 消 息 中 时 ,低 字 节 先 加 入 ,然 后 高 字 节 。 CRC 简 单 函 数 如 下 : unsigned short CRC16(puchMsg, usDataLen) unsigned char *puchMsg ; /* 要 进 行 CRC 校 验 的 消 息 */ unsigned short usDataLen ; /* 消 息 中 字 节 数 */ unsigned char uchCRCHi = 0xFF ; /* 高 CRC 字 节 初 始 化 */ unsigned char uchCRCLo = 0xFF ;
15、/* 低 CRC 字 节 初 始 化 */ unsigned uIndex ; /* CRC 循 环 中 的 索 引 */ while (usDataLen-) /* 传 输 消 息 缓 冲 区 */ uIndex = uchCRCHi *puchMsgg+ ; /* 计 算 CRC */ uchCRCHi = uchCRCLo auchCRCHiuIndex ; uchCRCLo = auchCRCLouIndex ; return (uchCRCHi 8 uchCRCLo) ; /* CRC 高 位 字 节 值 表 */ static unsigned char auchCRCHi = 0
16、x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0
17、x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0
18、x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0
19、x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0
20、x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0
21、x80, 0x41, 0x00, 0xC1, 0x81, 0x40 ; /* CRC 低 位 字 节 值 表 */ static char auchCRCLo = 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x
22、1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x
23、3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x
24、66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0x
25、B3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x
26、8D, 0x4D, 0x4C, 0x8C, 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40 ; ModBus 网 络 是 一 个 工 业 通 信 系 统 ,由 带 智 能 终 端 的 可 编 程 序 控 制 器 和计 算 机 通 过 公 用 线 路 或 局 部 专 用 线 路 连 接 而 成 。 其 系 统 结 构 既 包 括 硬 件 、 亦包 括 软 件 。 它 可 应 用 于 各 种 数 据 采 集 和 过 程 监 控 。 下 表 1 是 ModBu
27、s 的 功 能码 定 义 。 表 1 ModBus 功 能 码 01 READ COIL STATUS 02 READ INPUT STATUS 03 READ HOLDING REGISTER 04 READ INPUT REGISTER 05 WRITE SINGLE COIL 06 WRITE SINGLE REGISTER 15 WRITE MULTIPLE COIL 16 WRITE MULTIPLE REGISTER ModBus 网 络 只 是 一 个 主 机 ,所 有 通 信 都 由 他 发 出 。 网 络 可 支 持 247 个之 多 的 远 程 从 属 控 制 器 ,但 实
28、 际 所 支 持 的 从 机 数 要 由 所 用 通 信 设 备 决 定 。 采用 这 个 系 统 ,各 PC 可 以 和 中 心 主 机 交 换 信 息 而 不 影 响 各 PC 执 行 本 身 的 控 制任 务 。 ( 1) ModBus 的 传 输 方 式 在 ModBus 系 统 中 有 2 种 传 输 模 式 可 选 择 。 这 2 种 传 输 模 式 与 从 机 PC通 信 的 能 力 是 同 等 的 。 选 择 时 应 视 所 用 ModBus 主 机 而 定 ,每 个 ModBus 系 统只 能 使 用 一 种 模 式 ,不 允 许 2 种 模 式 混 用 。 一 种 模 式
29、是 ASCII( 美 国 信 息 交换 码 ) ,另 一 种 模 式 是 RTU( 远 程 终 端 设 备 ) 这 两 种 模 式 的 定 义 见 表 3 表 3 ASCII 和 RTU 传 输 模 式 的 特 性 ASCII 可 打 印 字 符 便 于 故 障 检 测 ,而 且 对 于 用 高 级 语 言 ( 如 Fortan) 编程 的 主 计 算 机 及 主 PC 很 适 宜 。 RTU 则 适 用 于 机 器 语 言 编 程 的 计 算 机 和 PC主 机 。 用 RTU 模 式 传 输 的 数 据 是 8 位 二 进 制 字 符 。 如 欲 转 换 为 ASCII 模 式 ,则每 个
30、 RTU 字 符 首 先 应 分 为 高 位 和 低 位 两 部 分 ,这 两 部 分 各 含 4 位 ,然 后 转 换成 十 六 进 制 等 量 值 。 用 以 构 成 报 文 的 ASCII 字 符 都 是 十 六 进 制 字 符 。ASCII 模 式 使 用 的 字 符 虽 是 RTU 模 式 的 两 倍 ,但 ASCII 数 据 的 译 玛 和 处 理 更为 容 易 一 些 ,此 外 ,用 RTU 模 式 时 报 文 字 符 必 须 以 连 续 数 据 流 的 形 式 传 送 ,用 ASCII 模 式 ,字 符 之 间 可 产 生 长 达 1s 的 间 隔 ,以 适 应 速 度 较 快
31、 的 机 器 。 ( 2) ModBus 的 数 据 校 验 方 式 CRC-16( 循 环 冗 余 错 误 校 验 ) CRC-16 错 误 校 验 程 序 如 下 : 报 文 ( 此 处 只 涉 及 数 据 位 ,不 指 起 始 位 、停 止 位 和 任 选 的 奇 偶 校 验 位 ) 被 看 作 是 一 个 连 续 的 二 进 制 ,其 最 高 有 效 位( MSB) 首 选 发 送 。 报 文 先 与 X 16 相 乘 ( 左 移 16 位 ) ,然 后 看X 16+X 15+X 2+1 除 ,X 16+X 15+X 2+1 可 以 表 示 为 二 进 制 数1100000000000
32、0101。 整 数 商 位 忽 略 不 记 ,16 位 余 数 加 入 该 报 文 ( MSB 先 发送 ) ,成 为 2 个 CRC 校 验 字 节 。 余 数 中 的 1 全 部 初 始 化 ,以 免 所 有 的 零 成 为一 条 报 文 被 接 收 。 经 上 述 处 理 而 含 有 CRC 字 节 的 报 文 ,若 无 错 误 ,到 接 收 设备 后 再 被 同 一 多 项 式 ( X 16+X 15+X 2+1) 除 ,会 得 到 一 个 零 余 数 ( 接 收设 备 核 验 这 个 CRC 字 节 ,并 将 其 与 被 传 送 的 CRC 比 较 ) 。 全 部 运 算 以 2 为
33、 模( 无 进 位 ) 。 习 惯 于 成 串 发 送 数 据 的 设 备 会 首 选 送 出 字 符 的 最 右 位 ( LSB-最 低 有 效位 ) 。 而 在 生 成 CRC 情 况 下 ,发 送 首 位 应 是 被 除 数 的 最 高 有 效 位 MSB。 由 于在 运 算 中 不 用 进 位 ,为 便 于 操 作 起 见 ,计 算 CRC 时 设 MSB 在 最 右 位 。 生 成 多项 式 的 位 序 也 必 须 反 过 来 ,以 保 持 一 致 。 多 项 式 的 MSB 略 去 不 记 ,因 其 只 对商 有 影 响 而 不 影 响 余 数 。 生 成 CRC-16 校 验 字
34、 节 的 步 骤 如 下 : 装 如 一 个 16 位 寄 存 器 ,所 有 数 位 均 为 1。 该 16 位 寄 存 器 的 高 位 字 节 与 开 始 8 位 字 节 进 行 “异 或 ”运 算 。 运 算结 果 放 入 这 个 16 位 寄 存 器 。 把 这 个 16 寄 存 器 向 右 移 一 位 。 若 向 右 ( 标 记 位 ) 移 出 的 数 位 是 1,则 生 成 多 项 式 1010000000000001和 这 个 寄 存 器 进 行 “异 或 ”运 算 ;若 向 右 移 出 的 数 位 是 0,则 返 回 。 重 复 和 ,直 至 移 出 8 位 。 另 外 8 位
35、与 该 十 六 位 寄 存 器 进 行 “异 或 ”运 算 。 重 复 ,直 至 该 报 文 所 有 字 节 均 与 16 位 寄 存 器 进 行 “异 或 ”运 算 ,并移 位 8 次 。 这 个 16 位 寄 存 器 的 内 容 即 2 字 节 CRC 错 误 校 验 ,被 加 到 报 文 的 最 高有 效 位 。 另 外 ,在 某 些 非 ModBus 通 信 协 议 中 也 经 常 使 用 CRC16 作 为 校 验 手 段 ,而且 产 生 了 一 些 CRC16 的 变 种 ,他 们 是 使 用 CRC16 多 项 式X 16+X 15+X 2+1,单 首 次 装 入 的 16 位
36、寄 存 器 为 0000;使 用 CRC16 的 反序 X 16+X 14+X 1+1,首 次 装 入 寄 存 器 值 为 0000 或 FFFFH。 LRC( 纵 向 冗 余 错 误 校 验 ) LRC 错 误 校 验 用 于 ASCII 模 式 。 这 个 错 误 校 验 是 一 个 8 位 二 进 制 数 ,可作 为 2 个 ASCII 十 六 进 制 字 节 传 送 。 把 十 六 进 制 字 符 转 换 成 二 进 制 ,加 上 无循 环 进 位 的 二 进 制 字 符 和 二 进 制 补 码 结 果 生 成 LRC 错 误 校 验 ( 参 见 图 ) 。这 个 LRC 在 接 收
37、设 备 进 行 核 验 ,并 与 被 传 送 的 LRC 进 行 比 较 ,冒 号 ( : ) 、回 车 符 号 ( CR) 、 换 行 字 符 ( LF) 和 置 入 的 其 他 任 何 非 ASCII 十 六 进 制 字符 在 运 算 时 忽 略 不 计 。下表是 Modbus 支持的功能码:功能码名称作用01读取线圈状态取得一组逻辑线圈的当前状态(ON/OFF)02读取输入状态取得一组开关输入的当前状态(ON/OFF)03读取保持寄存器在一个或多个保持寄存器中取得当前的二进制值04读取输入寄存器在一个或多个输入寄存器中取得当前的二进制值05强置单线圈强置一个逻辑线圈的通断状态06预置单寄
38、存器把具体二进值装入一个保持寄存器07读取异常状态取得 8 个内部线圈的通断状态,这 8 个线圈的地址由控制器决定08回送诊断校验把诊断校验报文送从机,以对通信处理进行评鉴09编程(只用于 484)使主机模拟编程器作用,修改 PC 从机逻辑10控询(只用于 484)可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码 9 的报文发送后,本功能码才发送11读取事件计数可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时12读取通信事件记录可是主机检索每台从机的 ModBus 事务处理通信事件记录。如果某项事务处理完成,记录会给出有关错误13编程(184/384 484 584)可使主机模拟编程器功能修改 PC 从机逻辑14探询(184/384 484 584)可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操作,仅在含有功能 13 的报文发送后,本功能码才得发送15强置多线圈强置一串连续逻辑线圈的通断16预置多寄存器把具体的二进制值装入一串连续的保持寄存器17报告从机标识可使主机判断编址从机的类型及该从机运行指示灯的状态18