Modbus通讯协议12.doc_第1页
Modbus通讯协议12.doc_第2页
Modbus通讯协议12.doc_第3页
Modbus通讯协议12.doc_第4页
Modbus通讯协议12.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

第 I 页 共 3 页 Modbus 通讯协议 本页为封面 由文件管理员粘贴 第 II 页 共 3 页 版本记录版本记录 第 III 页 共 3 页 目 录 1 MODBUS 协议概述协议概述 1 1 1 MODBUS协议传输模式 1 1 2 帧 1 1 2 1 ASCII帧 2 1 2 2 RTU帧 2 2 MODBUS 协议协议 3 2 1 通讯方式 3 2 2 MODBUS帧 3 2 2 1 从站地址字段 4 2 2 2 功能码字段 4 2 2 3 起始数据地址字段 5 2 2 4 数据长度字段 5 2 2 5 数据字段 5 2 2 6 校验和字段 6 2 3 功能码 6 2 3 1 读取开出状态 功能码01 6 2 3 2 读取开入状态 功能码02 7 2 3 3 读取模出状态 功能码03 7 2 3 4 读取模入状态 功能码04 8 2 3 5 强制单路开出 功能码05 9 2 3 6 强制单路模出 功能码06 9 2 3 7 强制多路开出 功能码15 10 2 3 8 强制多路模出 功能码16 11 3 附录附录 A 纵向冗余校验 纵向冗余校验 LRC 12 4 附录附录 B 循环冗余校验 循环冗余校验 CRC 13 5 附录附录 C 功能码与数据类型对应表功能码与数据类型对应表 15 6 附录附录 D 功能码和内存映射功能码和内存映射 16 7 附录附录 E 估算串口时间估算串口时间 17 8 附录附录 F 最大参数最大参数 20 9 附录附录 G 异常应答异常应答 21 第 1 页 共 22 页 1 Modbus 协议概述协议概述 Modbus 协议是主从式通讯协议 理论上可接 寻址 一台主站和至多 247 台从站 受线路和设备的限制 最多可接一台主站和 32 台从站 Modbus 协议的某些特征是固定的 如帧格式 帧顺序 通讯错误和异常情况的处理 以及所执行的功能等 都不能随便改动 其他特征属于用户可选的 如传输介质 波特率 字符奇偶校验 停止位的个数以及传输模式 ASCII 或 RTU 的选择等等 用户所选择的 参数对于各个站必须一致 在系统运行时不能改变 注 除非特别指明或表示 本文档中所有数字均为十进制数 1 1 Modbus 协议传输模式协议传输模式 Modbus 有两种可选的传输模式 ASCII 美国信息交换码 和 RTU 远程终端设备 选择时应视主站而定 表 1 1 ASCII 和 RTU 传输模式的特征 特征ASCIIRTU 编码系统十六进制 0 F 的 ASCII 码 十六进制 起始位1 位1 位 数据位7 位8 位 奇偶校验位0 或 1 位0 或 1 位 每个字符的位数 停止位1 或 2 位1 或 2 位 校验位 LRC CRC 注 纵向冗余校验 见附录A 循环冗余校验 见附录B 1 2 帧帧 Modbus 协议的帧 报文 格式 详见 2 2 对于 ASCII 和 RTU 传输模式基本相同 差别仅在于 ASCII 帧有帧首和帧尾 用以分断帧和同步 RTU 帧无帧首和帧尾 其同步用 时间间隔来实现 帧的各个字段的意义对于 ASCII 和 RTU 是相同的 主要区别在于对报 文执行的校验类型以及报文中各个字符的编码形式和数量 一个 8 位的 16 进制 RTU 字符 对应于两个 ASCII 字符 其转化方式是 将 8 位 RTU 字符按二进制分成 2 段 每段 4 位 然后把每段对应的十六进制数扩展成对应的 ASCII 字符 就实现了 RTU 字符到 ASCII 字 符的转换 例如 假设从站地址为 17 RTU 模式下 从站地址字段表示为 11H ASCII 模 式下 从站地址表示为 1 1 即 31H 31H 两个字节 由此可见 ASCII 所用的字符 是 RTU 的 2 倍 第 2 页 共 22 页 最大帧长 255 但有的厂家实现时可能会超过此限制 如北京 13 号线的 HC6000 就能 最多一次读 127 个寄存器 RTU 模式 计 259 个字节 请参考附录 F 1 2 1 ASCII 帧帧 ASCII 传输模式的帧 是以 字符表示帧的开始 CR 回车 LF 换行 表示帧 的结束 LF 换行 字符同时作同步字符使用 表示发送站已准备好接受应答 基本规范 基本规范 1 使用 ASCII 数据通讯 2 每个帧使用 冒号 3AH 作为头 CRLF Carriage Return Line Feed 0DH 0AH 作为尾 3 允许在字符之间的间隔是 1 秒 4 使用 LRC 检查错误 5 帧结构 ASCII 数据 下表是 ASCII 传输模式的一般格式命令帧 见 2 2 帧首从站地址功能码数据校验和帧尾 2 字符 16 位 2 字符 16 位 N 2 字符 N 16 位 2 字符 16 位 CRLF 1 2 2 RTU 帧帧 RTU 传输模式的帧 无帧首和帧尾 帧同步只能通过模拟同步报文来保持 接收设备 监视收到的数据的间隔 若大于 3 5 个字符时间 还未收到新字符或帧尾 则该接收设备将 去除原帧 并把下一个收到的字节作为节点地址 基本规范 基本规范 1 使用十六进制数据通讯 2 没有头和尾的区分 从地址开始 到带有 CRC 的帧结束 3 在 2 个帧之间至少有 3 5 字符时间 4 当在字符之间时间过去 1 5 倍的字符时间时 忽略当前帧 5 使用 16 位 CRC 检查错误 6 帧结构 十六进制数据 下表是 RTU 传输模式的一般格式命令帧 注 字符时间 一个字符所占位数 波特率 例如 假设一个字符8位 波特率9600 则3 5字符时间为3 5 8 9600秒 2 92毫秒 3 5 字符时间从站地址功能码数据校验和3 5 字符时间 8 位8 位N 8 位16 位 第 3 页 共 22 页 2 Modbus 协议协议 2 1 通讯方式通讯方式 Modbus 有两种通讯方式 应答方式和广播方式 应答方式是主站向某个从站 地址 1 247 发出命令 然后等待从站的应答 从站接 到主站命令后 执行命令 并将执行结果返回给主站作为应答 然后等待下一个命令 广播方式是主站向所有从站发送命令 从站地址 0 不需要等待从站应答 从站接到 广播命令后 执行命令 也不需要向主站应答 广播方式不需要额外的物理层支持 属于纯应用层 例如 主站发送帧 则所有从站 均会收到一份 从站进行分析 如果发现帧中的从站地址是广播地址或就是自身地址 则 执行帧所要求的动作 假设帧中其它字段合法 如果非法 从站可能丢弃该帧也可能作异 常应答 否则丢弃该帧 除了回送诊断校验外 只有 05 06 15 和 16 这四项功能 见 2 3 对广播方式有效 2 2 Modbus 帧帧 Modbus 的帧按应答方式分为命令帧 询问帧 和应答帧 命令帧又有一般格式和短格 式之分 应答帧有显长度帧和隐长度帧之分 图 2 1 2 2 2 3 2 4 给出了典型的帧格式 数据 从站地址功能码起始数据 地址高位 起始数据 地址低位 数据个数 高位 数据个数 低位 数据 校验和 图 2 1典型的一般格式命令帧 注 如果是模拟量 则表示寄存器的个数 也称为寄存器个数或简称寄存器数 如果是开关量 则表 示开关点数 也称为线圈个数或简称线圈数 数据个数的最大值请参考附录F 在有些命令帧中 不包含数据字段 从站地址功能码校验和 图 2 2短格式命令帧 从站地址功能码数据长度数据校验和 图 2 3显长度应答帧 从站地址功能码数据校验和 图 2 4隐长度应答帧 第 4 页 共 22 页 2 2 1 从站地址字段从站地址字段 帧中的从站地址字段表示接收主站报文的从站地址 当从站地址字段为 0 时 表示所 有从站 此时的报文是广播报文 用户必须设定每台从站的专用地址 只有被编址的设备才能对主站的命令 询问 做 出应答 从站发送应答报文时 报文中地址的作用是向主站报告正在通讯的是哪台从站 2 2 2 功能码字段功能码字段 功能码字段通知从站应执行何种功能 表 2 1 列出了功能码的意义和作用 2 3 节给出 了各个功能码对应报文的详细格式和功能 表 2 1Modbus 功能码 功能码名称作用 01读取开出状态取得一组开关量输出的当前状态 02读取开入状态取得一组开关量输入的当前状态 03读取模出状态取得一组模拟量输出的当前状态 04读取模入状态取得一组模拟量输入的当前状态 05强制单路开出强制设定某个开关量输出的值 06强制单路模出强制设定某个模拟量输出的值 07读取异常状态取得 8 个内部开关量的通断状态 这 8 个开关量的地 址由控制器决定 用户可以定义这些开关量逻辑 以 说明从站状态 短报文适宜于迅速读取状态 08回送诊断校验把诊断校验报文送从站 以对通讯处理进行评鉴 09编程 只用于 484 主站模拟编程器的作用 修改从站逻辑 10探询 只用于 484 可使主站与一台正在执行编程任务的从站通信 探询 该从站是否已完成其操作任务 仅在含有功能码 9 的 报文发送后 本功能码才发送 11读取事件计数可使主站发出单询问 并随即判定操作是否成功 尤 其是该命令或其他应答产生通信错误时 12读取通讯事件记录取得通讯状态 事件次数 报文数量和至多 64 个事件 可使主站检索每台从站的 Modbus 事务处理通信事件 记录 如果某项事务处理完成 记录会给出有关错误 13编程 184 384 484 584 主站模拟编程器的作用 修改从站逻辑 14探询 184 384 484 584 可使主站与一台正在执行编程任务的从站通信 探询 该从站是否已完成其操作任务 仅在含有功能码 13 的 报文发送后 本功能码才发送 15强制多路开出强制设定几个开关量输出的值 16强制多路模出强制设定几个模拟量输出的值 第 5 页 共 22 页 17报告从站标识取得从站类型和运行指示灯的状态 可使主站判断编 址从站的类型及该从站运行指示灯的状态 18编程 884 和 MICRO 84 主站模拟编程器的作用 修改从站逻辑 19重置通讯链路使从站复位于已知状态 发生不可修改错误后 使从 站复位于已知状态 可重置顺序字节 20读取通用参数 584L 显示扩展存储器文件中的数据信息 21写入通用参数 584L 把通用参数写入扩展存储文件 或修改之 22 64保留作扩展功能备用 65 72保留留作用户功能的扩展编码 73 119非法功能 12 127保留留作内部作用 128 255保留用于异常应答 注 这里列举了所有的功能码 但实际应用中 一般只用到其中的几种 如 01 02 03 04 05 06 15 16 圆括号中的数字或字母组成表示Modicon的PLC型号 表明该项功能只适用于所列举的PLC型 号 2 2 3 起始数据地址字段起始数据地址字段 起始数据地址字段位于所有询问帧的功能码字段后 也位于功能码 05 06 15 16 的 应答帧的功能码后 共两个字节 高位在前 低位在后 数据地址表示了 但并不就是 数据点在 PLC 内存中的地址编号 在 Modbus 帧中 所有的数据地址均编号从 0 开始 例 如 在 PLC 中编址为 00001 的开关量在 Modbus 帧中的数据地址表示为 0000 编址为 00127 的开关量在 Modbus 帧中的数据地址表示为 007E 126 编址为 10127 的开关量在 Modbus 帧中的数据地址表示为 007E 126 编址为 40001 的模出量在 Modbus 帧中的数据地址表示为 0000 功能码字段已经 说明了地址类型 因此 4 在 Modbus 帧中是隐含的 编址为 40108 的模出量在 Modbus 帧中的数据地址表示为 006B 107 编址为 30108 的模入量在 Modbus 帧中的数据地址表示为 006B 107 2 2 4 数据长度字段数据长度字段 数据长度字段记录的是随后的数据字段的长度 单位为字符 字节 数据字段的长度 总是被规定为 RTU 模式下数据字符的总数 即不管是 RTU 模式还是 ASCII 模式 数据字 符的数量总是按 RTU 模式下的数据字符计算 第 6 页 共 22 页 2 2 5 数据字段数据字段 数据字段内含有从站执行某项具体功能的信息 或者含有从站应答询问的信息 这些 信息可以是数值 地址参数或范围 例如 从哪路开关量或寄存器开始 处理几个开关位 或寄存器 开关量或寄存器的值等等 2 2 6 校验和字段校验和字段 校验和字段用于检查通讯报文在通讯线路中是否出错 以 ASCII 模式传送报文时 校 验和采用 LRC 以 RTU 模式传送时 用 CRC 16 参见表 1 1 附录 A 和附录 B 注意 采用 CRC 校验时 校验和总是低字节在前高字节在后 2 3 功能码功能码 尽管表 2 1 列出的功能码多达数十种 但其中有一部分功能码设备相关性太强 一般 只有 Modicon 的特定型号的 PLC 才支持 这部分功能码将不再详述 本节将只介绍 8 种 通用的功能码 即 01 02 03 04 05 06 15 16 2 3 1 读取开出状态 功能码读取开出状态 功能码 01 本功能可使主站取得被编址从站的开关量输出的通断状态 起始地址是指从哪一路开 关量开始 编号从 0 开始 线圈数是指读取几路 应答帧中的数据是按上述要求读取的开 关量数据 每路一位 每八位组成一个字节 最后一个字节的不足部分补 0 本功能不支 持广播方式 以下例子是读取 17 号从站开关量输出 020 056 的状态 读出的 37 位组成 5 个字节 最后一字节的高 3 位补 0 询问 ASCII 帧 帧首从站地 址 功能码起始地 址高位 起始地 址低位 线圈数 高位 线圈数 低位 校验和 LRC 帧尾 110100130025B6CR LF 询问 RTU 帧 从站地址功能码起始地址 高位 起始地址 低位 线圈数高 位 线圈数低 位 校验和 CRC 11H01H00H13H00H25H0EH 84H 应答 ASCII 帧 帧首从站地址功能码字节计数数据校验和 LRC 帧尾 110105CD 6B B2 0E 1B06CR LF 第 7 页 共 22 页 应答 RTU 帧 从站地址功能码字节计数数据校验和 CRC 11H01H05HCD 6B B2 0E 1BH45H E6H 2 3 2 读取开入状态 功能码读取开入状态 功能码 02 本功能可使主站取得被编址从站的开关量输入的通断状态 起始地址是指从哪一路开 关量开始 编号从 0 开始 线圈数是指读取几路 应答帧中的数据是按上述要求读取的开 关量数据 每路一位 每八位组成一个字节 最后一个字节的不足部分补 0 本功能不支 持广播方式 以下例子是读取 17 号从站开关量输入 0197 0218 的状态 读出的 22 位组成 3 个字节 最后一字节的高 2 位补 0 询问 ASCII 帧 帧首从站地 址 功能码起始地 址高位 起始地 址低位 线圈数 高位 线圈数 低位 校验和 LRC 帧尾 110200C4001613CR LF 询问 RTU 帧 从站地址功能码起始地址 高位 起始地址 低位 线圈数高 位 线圈数低 位 校验和 CRC 11H02H00HC4H00H16HBA A9H 应答 ASCII 帧 帧首从站地址功能码字节计数数据校验和 LRC 帧尾 110202AC DB 352ECR LF 应答 RTU 帧 从站地址功能码字节计数数据校验和 CRC 11H02H02HAC DB 35H20 18H 2 3 3 读取模出状态 功能码读取模出状态 功能码 03 本功能可使主站取得被编址从站的模拟量输出值 起始地址是指从哪一路模拟量开始 编号从 0 开始 寄存器数是指读取几路模拟量 每路模拟量 2 个字节 高位在前 应 答帧中的数据是按上述要求读取的模拟量数据 本功能不支持广播方式 以下例子是读取 17 号从站模拟量输出点 0108 0110 的状态 应答数据高字节在前 108 是 555 109 是 0 110 是 100 询问 ASCII 帧 第 8 页 共 22 页 帧首从站地 址 功能码起始地 址高位 起始地 址低位 寄存器 数高位 寄存器 数低位 校验和 LRC 帧尾 1103006B00037ECR LF 询问 RTU 帧 从站地址功能码起始地址 高位 起始地址 低位 寄存器数 高位 寄存器数 低位 校验和 CRC 11H03H00H6BH00H03H76 87H 应答 ASCII 帧 帧首从站地址功能码字节计数数据 108 110 校验和 LRC 帧尾 11030202 2B 00 00 00 6455CR LF 应答 RTU 帧 从站地址功能码字节计数数据校验和 CRC 11H03H06H02 2B 00 00 00 64HC8 BAH 2 3 4 读取模入状态 功能码读取模入状态 功能码 04 本功能可使主站取得被编址从站的模拟量输入值 起始地址是指从哪一路模拟量开始 编号从 0 开始 寄存器数是指读取几路模拟量 每路模拟量 2 个字节 高位在前 应 答帧中的数据是按上述要求读取的模拟量数据 本功能不支持广播方式 以下例子是读取 17 号从站模拟量输入点 0108 0110 的状态 应答数据高字节在前 108 是 555 109 是 0 110 是 100 询问 ASCII 帧 帧首从站地 址 功能码起始地 址高位 起始地 址低位 寄存器 数高位 寄存器 数低位 校验和 LRC 帧尾 1104006B00037DCR LF 询问 RTU 帧 从站地址功能码起始地址 高位 起始地址 低位 寄存器数 高位 寄存器数 低位 校验和 CRC 11H04H00H6BH00H03HC3 47H 应答 ASCII 帧 帧首从站地址功能码字节计数数据 108 110 校验和 LRC 帧尾 11040202 2B 00 00 00 6454CR LF 第 9 页 共 22 页 应答 RTU 帧 从站地址功能码字节计数数据校验和 CRC 11H04H06H02 2B 00 00 00 64H5C 89H 2 3 5 强制单路开出 功能码强制单路开出 功能码 05 本功能可使主站强行设定被编址从站某路开关量输出的通断状态 从站内部的任何一 路开出量均能被强置 起始地址是指设定开关量的哪一路 编号从 0 开始 数据用于设定 开或关 FF00 表示开 0000 表示关 其他值为非法值 正常应答是将报文原文返回 从 站地址为 0 时 为广播方式 以下例子是强制 17 号从站开出点 173 为 ON 询问 ASCII 帧 帧首从站地 址 功能码起始地 址高位 起始地 址低位 强制值 高位 强制值 低位 校验和 LRC 帧尾 110500ACFF003FCR LF 询问 RTU 帧 从站地址功能码起始地址 高位 起始地址 低位 强制值高 位 强制值低 位 校验和 CRC 11H05H00HACHFFH00H4E 8BH 应答 ASCII 帧 帧首从站地 址 功能码起始地 址高位 起始地 址低位 强制值 高位 强制值 低位 校验和 LRC 帧尾 110500ACFF003FCR LF 应答 RTU 帧 从站地址功能码起始地址 高位 起始地址 低位 强制值高 位 强制值低 位 校验和 CRC 11H05H00HACHFFH00H4E 8BH 2 3 6 强制单路模出 功能码强制单路模出 功能码 06 本功能可使主站强行设定被编址从站某路模拟量输出的值 从站内部的任何一路模拟 量均能被强制 起始地址是指设定哪一路模拟量 编号从 0 开始 强制值用于设定该模拟 量的值 高位在前 低位在后 正常应答是将报文原文返回 从站地址为 0 时 为广播方 式 以下例子是强制 17 号从站模出点 136 为 039EH 询问 ASCII 帧 帧首从站地功能码起始地起始地强制值强制值校验和帧尾 第 10 页 共 22 页 址址高位址低位高位低位LRC 11060087039EC1CR LF 询问 RTU 帧 从站地址功能码起始地址 高位 起始地址 低位 强制值高 位 强制值低 位 校验和 CRC 11H06H00H87H03H9EHBA 2BH 应答 ASCII 帧 帧首从站地 址 功能码起始地 址高位 起始地 址低位 强制值 高位 强制值 低位 校验和 LRC 帧尾 11060087039EC1CR LF 应答 RTU 帧 从站地址功能码起始地址 高位 起始地址 低位 强制值高 位 强制值低 位 校验和 CRC 11H06H00H87H03H9EHBA 2BH 2 3 7 强制多路开出 功能码强制多路开出 功能码 15 本功能可使主站强行设定被编址从站一组连续开关量输出的通断状态 从站内部的任 何开出量均能被强置 起始地址是指从哪一路开关量开始 编号从 0 开始 线圈数是指设 定几路 字节计数是指随后的线圈状态 1 为开 0 为关 每八位组成一个字节 最后一 个字节的不足部分补 0 正常应答是回送从站地址 功能码 起始地址和强置的开关数量 从站地址为 0 时 为广播方式 以下例子是强制 17 号从站开关输出量 0020 0029 的状态 设定置 CD 11001101 和 00 00000000 表示开关量输出的第 27 26 23 22 和 20 将被强置为开状态 询问 ASCII 帧 帧首从站地 址 功能码起始地 址高位 起始地 址低位 线圈数 高位 线圈数 低位 字节计 数 数据校验和 LRC 帧尾 110F0013000A02CD 003FCR LF 询问 RTU 帧 从站地 址 功能码起始地 址高位 起始地 址低位 线圈数 高位 线圈数 低位 字节计 数 数据校验和 CRC 11H0FH00H13H000A02CD 00H7E CBH 应答 ASCII 帧 帧首从站地功能码起始地起始地线圈数线圈数校验和帧尾 第 11 页 共 22 页 址址高位址低位高位低位LRC 110F0013000AC3CR LF 应答 RTU 帧 从站地址功能码起始地址 高位 起始地址 低位 线圈数高 位 线圈数低 位 校验和 CRC 11H0FH00H13H00H0AH26 99H 2 3 8 强制多路模出 功能码强制多路模出 功能码 16 本功能可使主站强行设定被编址从站一组连续模拟量输出的值 从站内部的任何模出 量均能被强置 起始地址是指从哪一路模拟量开始 编号从 0 开始 寄存器数是指设定几 路 字节计数是指随后的数据 模拟量设定值 的字节数 数据是设定的模出量 每路模 出量两个字节 高字节在前 低字节在后 正常应答是回送从站地址 功能码 起始地址 和强置的模拟量数 从站地址为 0 时 为广播方式 以下例子是强制 17 号从站模拟量输出 0136 0137 的状态 将设定 0136 为 000AH 设 定 0137 为 0102H 询问 ASCII 帧 帧首从站 地址 功能 码 起始 地址 高位 起始 地址 低位 寄存 器数 高位 寄存 器数 低位 字节 计数 数据校验 和 LRC 帧尾 1110008700020400 0A 01 02 45CR LF 询问 RTU 帧 从站地 址 功能 码 起始地 址高位 起始地 址低位 寄存器 数高位 寄存器 数低位 字节 计数 数据校验和 CRC 11H10H00H87H00H02H04H00 0A 01 02H4E BAH 应答 ASCII 帧 帧首从站地 址 功能码起始地 址高位 起始地 址低位 寄存器 数高位 寄存器 数低位 校验和 LRC 帧尾 11100087000256CR LF 应答 RTU 帧 从站地址功能码起始地址 高位 起始地址 低位 寄存器数 高位 寄存器数 低位 校验和 CRC 11H10H00H87H00H02H71 F3H 第 12 页 共 22 页 3 附录附录 A 纵向冗余校验 纵向冗余校验 LRC 应用对象应用对象 ASCII 模式 生成方法生成方法 将被校验的各个字节相加 相加的结果不计最高位的进位 也是一个字节 8 位 对无进位和求补 取反加 1 所得结果即为校验和 校验方法校验方法 LRC 字段是一个包含一个 8 位二进制值的字节 LRC 值由传输设备来计算 并放到消息帧中 接收设备在接收消息的过程中计算 LRC 并将它和接收到消息中 LRC 字段中的值比较 如果两值不等 说明有错误 C 源代码源代码 static unsigned char LRC unsigned char auchMsg 要进行计算的消息 unsigned short usDataLen LRC 要处理的字节的数量 unsigned char uchLRC 0 LRC 字节初始化 while usDataLen 传送消息 uchLRC auchMsg 累加 return unsigned char char uchLRC 第 13 页 共 22 页 4 附录附录 B 循环冗余校验 循环冗余校验 CRC 应用对象应用对象 RTU 模式 名称名称 CRC 16 多项式多项式 x16 x15 x2 1 生成方法生成方法 装入一个 16 位寄存器 所有数位均为 1 该 16 位寄存器的高位字节与开始 8 位字节进行 异或 运算 运算结果放入这个 16 位寄存器 把这个 16 寄存器向右移一位 若向右 标记位 移出的数位是 1 则生成多项式 1010000000000001 和这个寄存器 进行 异或 运算 若向右移出的数位是 0 则返回 重复 和 直至移出 8 位 另外 8 位与该十六位寄存器进行 异或 运算 重复 直至该报文所有字节均与 16 位寄存器进行 异或 运算 并移位 8 次 这个 16 位寄存器的内容即 2 字节 CRC 错误校验 被加到报文的最高有效位 另外 在某些非 Modbus 通信协议中也经常使用 CRC 16 作为校验手段 而且产生了 一些 CRC 16 的变种 它们是使用 CRC 16 多项式 x16 x15 x2 1 但首次装入的 16 位寄存 器为 0000 例如 深圳地铁一号线的屏蔽门 WESTINGHOUSE 西屋公司 系统 使 用 CRC 16 的反序 X16 X14 X 1 首次装入寄存器值为 0000 或 FFFFH 校验方法校验方法 CRC 字段是两个字节 包含一 16 位的二进制值 它由传输设备计算后加 入到消息中 接收设备重新计算收到消息的 CRC 并与接收到的 CRC 字段中的值比较 如果两值不同 则有误 C 源代码源代码 unsigned short CRC unsigned char datapt int bytecount if datapt return 0 unsigned short Reg16 0 xFFFF 初始值 注意 有的系统该值可能采用 0X0000 unsigned short mval 0 xA001 0 xA001 1010000000000001 固定不变 int i unsigned char j flg for i 0 i bytecount i Reg16 datapt i for j 0 j 1 右移一位 置 b15 0 if flg 1 Reg16 Reg16 mval return Reg16 第 15 页 共 22 页 5 附录附录 C 功能码与数据类型对应表功能码与数据类型对应表 Modbus 网络只有一个主站 所有通信都由它发出 网络可支持 247 个之多的远程从属 控制器 但实际所支持的从站数要由所用通信设备决定 一般地 网络可实际支持多达 32 个远程从属控制器 采用这个系统 各 PC 可以和中心主站交换信息而不影响各 PC 执行本 身的控制任务 表 5 1 是 Modbus 各功能码对应的数据类型 表 5 1 功能码与数据类型对应表 代码功能数据类型 01读位 02读位 03读整型 字符型 状态字 浮点型 04读整型 状态字 浮点型 05写位 06写整型 字符型 状态字 浮点型 15写位 16写整型 字符型 状态字 浮点型 17读字符型 第 16 页 共 22 页 6 附录附录 D 功能码和内存映射功能码和内存映射 表 6 1 功能码和内存映射 代码功能码名称 PLC 数据地址 注释 01 读取开出状态 0XXXX 位输出 读位 02 读取开入状态 1XXXX 位输入 读位 03 读取模出状态 4XXXX 字输出 读字 04 读取模入状态 3XXXX 字输入 读字 05 强制单路开出 0XXXX 位输出 写位 06 强制单路模出 4XXXX 字输出 写字 15 强制多路开出 0XXXX 位输出 写位 16 强制多路模出 4XXXX 字输出 写字 第 17 页 共 22 页 7 附录附录 E 估算串口时间估算串口时间 串口时间是指从上位机发送指令到上位机收到响应的时间间隔 上位机和下位机的整个交互过程如下 1 上位机生成发送消息 2 上位机核查 RTS 和 CTS 状态 A 3 发送消息被传送到下位机 B 4 下位机处理发送消息 C 5 下位机计算校验和并生成响应消息 D 6 下位机核查 RTS 和 CTS 状态 A 7 响应消息被传送到上位机 B 8 上位机处理响应数据 如下图所示 上位机下位机 1 生成发送消息 2 核查RTS和CTS状态 3 发送消息 4 处理收到的消息 5 计算校验和并生成响应消息 8 处理响应数据 6 检查RTS和CTS的状态 7 发送响应消息 图 7 1 交互过程 第 18 页 共 22 页 显然 串口时间是指以上过程中除 1 8 以外的时间之和 各部分分述如下 A 如果 RTS 和 CTS 针脚短接 则这部分时间可以忽略 否则大概为 5ms B 使用如下公式计算传输时间 时间 ms 波特率 单个字符的位数字符数 1000 其中 单个字符的位数 数据位 起始位 校验位 停止位 其中 数据位 5 8 起始位 1 校验位 0 1 停止位 1 2 以默认串口参数为例 数据位 8 起始位 1 校验位无 停止位 1 即 单个字符的位数 8 1 0 1 10 而默认波特率为 9600 因此 以默认串口参数传输一 个字符需要时间为 1 04ms 9600 101000 C 我们知道 下位机处理器是以轮训扫描来完成数据的更新的 在每个扫描周期 内 串口被下位机锁定 无法接收上位机的数据 直到扫描完毕才解锁 重新恢复接 收 我们称这段时间为延时 最好的情况是 上位机数据到达时 下位机刚好完成一 个扫描 此时无需等待 即延时为 0 最坏的情况是 上位机数据到达时 下位机刚 好进入一个新的扫描 即延时为一个扫描周期 平均延时为 0 5 个扫描周期 扫描周 期因处理器和扫描数据量以及其他因素而异 扫描周期可以在 0 5 到上百毫秒的范围 另一方面 Modbus 功能码 1 2 3 4 以及 15 16 请求的数据量可能很大 导 致下位机无法在一个扫描周期内完成数据的更新 这时它会花费数个扫描周期来完成 数据更新 由于这部分时间影响因素太多 我们采用估算方法 公式如下 时间 毫秒 0 5 n 扫描周期 校验发送消息时间 其中 n 为完成数据更新所需的扫描周期数 发送消息校验时间 0 3 字符数 例如 假设扫描周期为 1 毫秒 假设请求的数据可以在一个周期内完成 则时间为 0 5 1 1 0 3 8 4ms D 这部分时间就是计算响应数据校验和的时间 LRC 校验时间可以忽略不计 CRC 校验时间公式如下 时间 毫秒 0 3 字符数 例如 假设上位机要求 100 个寄存器的数据 则字符数为 2 100 5 205 即 CRC 时间为 0 3 205 61 5ms 第 19 页 共 22 页 综上所述 我们举一个具体的例子 假设串口设置为 9600bps 1 起始位 8 位数 据位 无校验位 1 位停止位 假设上位机要求 100 个寄存器的数据 假设扫描周期 为 1 毫秒 假设请求的数据可以在一个周期内完成 则 串口时间 5 1 04 8 4 61 5 5 1 04 205 297ms 如果速率提高 1 倍 192000bps 其它条件不变 则缩短为 186ms 进一步 如果 串口速率提高到可能的最大值 115200bps 则为 94ms 我们可以发现 CRC 时间在整个串口时间中占据相当大的比重 而且波特率越高 比重越大 在最大串口波特率 115200bps 下 比重竟高达 61 5 94 65 因此 当采用 Modbus 协议时 CRC 时间在相当程度上成为串口通讯实时性的瓶 颈 那么 有没有办法减少甚至去掉校验这部分时间呢 答案是肯定的 就是采用 Modbus TCP IP 协议 为了满足工业应用的实时性需求 施耐德公司将 Modbus 帧中 的 CRC 部分去掉 然后将去掉 CRC 的帧嵌入到 TCP 帧中 由此形成了 Modbus TCP IP 协议 之所以能去掉 CRC 是因为 TCP IP 协议本身在物理上就很好地保证了 数据传输的准确 Modbus TCP IP 协议在应用层采用 Modbus 信息定义 在传输层和网络层采用 TCP IP 用于以太网通讯 TCP IP 的请求 应答机制能和 Modbus 本身的主 从站制很 好的配合工作 Modbus TCP IP 协议和 OSI 各层之间的对应关系由下图表示 图片来源于 图片来源于Modbus org 参考 参考OSI模型的应用层模型 模型的应用层模型 关于 Modbus TCP IP 协议详细内容 请访问 第 20 页 共 22 页 8 附录附录 F 最大参数最大参数 最大参数是指每一帧中所能读写开关点或寄存器的最大个数 对应于帧中的数据个数 字段 最大值取决于下位机 其中开关量点一次读的最大点数从 64 2000 不等 一般不会 超过 2000 模拟量点为 32 125 不等 一般不会超过 125 在实际通讯中 通过查询下位 机配套文档可以知道最大值 否则需要通过测试来确定最大值 一

温馨提示

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

评论

0/150

提交评论