Modbus通信协议教程

上传人:gbs****77 文档编号:9290230 上传时间:2020-04-04 格式:DOC 页数:41 大小:337.50KB
返回 下载 相关 举报
Modbus通信协议教程_第1页
第1页 / 共41页
Modbus通信协议教程_第2页
第2页 / 共41页
Modbus通信协议教程_第3页
第3页 / 共41页
点击查看更多>>
资源描述
Modbus 通信协议 一 Modbus 协议简介 Modbus 协议是应用于电子控制器上的一种通用语言 通过此协议 控制器相互之间 控制器经由网络 例如以太网 和其它设备之间可以通信 它已经成为一通用工业标准 有了它 不同厂商生产的控制设备可以连成工业网络 进行集中监控 此协议定义了一个控制器能认识使用的消息结构 而不管它们是经过何种网络进行通 信的 它描述了一控制器请求访问其它设备的过程 如果回应来自其它设备的请求 以及 怎样侦测错误并记录 它制定了消息域格局和内容的公共格式 当在一 Modbus 网络上通信时 此协议决定了每个控制器须要知道它们的设备地址 识别按地址发来的消息 决定要产生何种行动 如果需要回应 控制器将生成反馈信息并 用 Modbus 协议发出 在其它网络上 包含了 Modbus 协议的消息转换为在此网络上使用 的帧或包结构 这种转换也扩展了根据具体的网络解决节地址 路由路径及错误检测的方 法 1 在 Modbus 网络上转输 标准的 Modbus 口是使用一 RS 232C 兼容串行接口 它定义了连接口的针脚 电缆 信号位 传输波特率 奇偶校验 控制器能直接或经由 Modem 组网 控制器通信使用主 从技术 即仅一设备 主设备 能初始化传输 查询 其它 设备 从设备 根据主设备查询提供的数据作出相应反应 典型的主设备 主机和可编程 仪表 典型的从设备 可编程控制器 主设备可单独和从设备通信 也能以广播方式和所有从设备通信 如果单独通信 从设备返回一消息作为回应 如果是以广播方式查询的 则不作任何回应 Modbus 协议建 立了主设备查询的格式 设备 或广播 地址 功能代码 所有要发送的数据 一错误检 测域 从设备回应消息也由 Modbus 协议构成 包括确认要行动的域 任何要返回的数据 和一错误检测域 如果在消息接收过程中发生一错误 或从设备不能执行其命令 从设备 将建立一错误消息并把它作为回应发送出去 2 在其它类型网络上转输 在其它网络上 控制器使用对等技术通信 故任何控制都能初始和其它控制器的通 信 这样在单独的通信过程中 控制器既可作为主设备也可作为从设备 提供的多个内部 通道可允许同时发生的传输进程 在消息位 Modbus 协议仍提供了主 从原则 尽管网络通信方法是 对等 如果一 控制器发送一消息 它只是作为主设备 并期望从从设备得到回应 同样 当控制器接收 到一消息 它将建立一从设备回应格式并返回给发送的控制器 3 查询 回应周期 1 查询 查询消息中的功能代码告之被选中的从设备要执行何种功能 数据段包含了从设备 要执行功能的任何附加信息 例如功能代码 03 是要求从设备读保持寄存器并返回它们的内 容 数据段必须包含要告之从设备的信息 从何寄存器开始读及要读的寄存器数量 错误 检测域为从设备提供了一种验证消息内容是否正确的方法 2 回应 如果从设备产生一正常的回应 在回应消息中的功能代码是在查询消息中的功能代 码的回应 数据段包括了从设备收集的数据 象寄存器值或状态 如果有错误发生 功能 代码将被修改以用于指出回应消息是错误的 同时数据段包含了描述此错误信息的代码 错误检测域允许主设备确认消息内容是否可用 二 两种传输方式 控制器能设置为两种传输模式 ASCII 或 RTU 中的任何一种在标准的 Modbus 网 络通信 用户选择想要的模式 包括串口通信参数 波特率 校验方式等 在配置每个 控制器的时候 在一个 Modbus 网络上的所有设备都必须选择相同的传输模式和串口参数 ASCII 模式 地址 功能代码 数据数量 数据 1 数据n LRC 高字节 LRC 低字节 回车 换行 RTU 模式 地址 功能代码 数据数量 数据 1 数据 n CRC 低字节 CRC 高字节 所选的 ASCII 或 RTU 方式仅适用于标准的 Modbus 网络 它定义了在这些网络上连 续传输的消息段的每一位 以及决定怎样将信息打包成消息域和如何解码 在其它网络上 象 MAP 和 Modbus Plus Modbus 消息被转成与串行传输无关的帧 1 ASCII 模式 当控制器设为在 Modbus 网络上以 ASCII 美国标准信息交换代码 模式通信 在消 息中的每个 8Bit 字节都作为两个 ASCII 字符发送 这种方式的主要优点是字符发送的时间 间隔可达到 1 秒而不产生错误 代码系统 十六进制 ASCII 字符 0 9 A F 消息中的每个 ASCII 字符都是一个十六进制字符组成 每个字节的位 1 个起始位 7 个数据位 最小的有效位先发送 1 个奇偶校验位 无校验则无 1 个停止位 有校验时 2 个 Bit 无校验时 错误检测域 LRC 纵向冗长检测 2 RTU 模式 当控制器设为在 Modbus 网络上以 RTU 远程终端单元 模式通信 在消息中的每 个 8Bit 字节包含两个 4Bit 的十六进制字符 这种方式的主要优点是 在同样的波特率下 可比 ASCII 方式传送更多的数据 代码系统 8 位二进制 十六进制数 0 9 A F 消息中的每个 8 位域都是一个两个十六进制字符组成 每个字节的位 1 个起始位 8 个数据位 最小的有效位先发送 1 个奇偶校验位 无校验则无 1 个停止位 有校验时 2 个 Bit 无校验时 错误检测域 CRC 循环冗长检测 三 Modbus 消息帧 两种传输模式中 ASCII 或 RTU 传输设备以将 Modbus 消息转为有起点和终点 的帧 这就允许接收的设备在消息起始处开始工作 读地址分配信息 判断哪一个设备被 选中 广播方式则传给所有设备 判知何时信息已完成 部分的消息也能侦测到并且错 误能设置为返回结果 1 ASCII 帧 使用 ASCII 模式 消息以冒号 字符 ASCII 码 3AH 开始 以回车换行符结束 ASCII 码 0DH 0AH 其它域可以使用的传输字符是十六进制的 0 9 A F 网络上的设备不断侦测 字符 当有一个冒号接收到时 每个设备都解码下个域 地址域 来判断是否发给自己的 消息中字符间发送的时间间隔最长不能超过 1 秒 否则接收的设备将认为传输错误 一个典型消息帧如下所示 起始位 设备地址 功能代码 数据 LRC 校验 结束符 1 个字符 2 个字符 2 个字符 n 个字符 2 个字符 2 个字符 图 2 ASCII 消息帧 2 RTU 帧 使用 RTU 模式 消息发送至少要以 3 5 个字符时间的停顿间隔开始 在网络波特率 下多样的字符时间 这是最容易实现的 如下图的 T1 T2 T3 T4 所示 传输的第一个域是 设备地址 可以使用的传输字符是十六进制的 0 9 A F 网络设备不断侦测网络总线 包 括停顿间隔时间内 当第一个域 地址域 接收到 每个设备都进行解码以判断是否发往 自己的 在最后一个传输字符之后 一个至少 3 5 个字符时间的停顿标定了消息的结束 一个新的消息可在此停顿后开始 整个消息帧必须作为一连续的流转输 如果在帧完成之前有超过 1 5 个字符时间的停 顿时间 接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域 同样地 如果一个新消息在小于 3 5 个字符时间内接着前个消息开始 接收的设备将认为它是前一 消息的延续 这将导致一个错误 因为在最后的 CRC 域的值不可能是正确的 一典型的消 息帧如下所示 起始位 设备地址 功能代码 数据 CRC 校验 结束符 T1 T2 T3 T4 8Bit 8Bit n 个 8Bit 16Bit T1 T2 T3 T4 图 3 RTU 消息帧 3 地址域 消息帧的地址域包含两个字符 ASCII 或 8Bit RTU 可能的从设备地址是 0 247 十进制 单个设备的地址范围是 1 247 主设备通过将要联络的从设备的地址放 入消息中的地址域来选通从设备 当从设备发送回应消息时 它把自己的地址放入回应的 地址域中 以便主设备知道是哪一个设备作出回应 地址 0 是用作广播地址 以使所有的从设备都能认识 当 Modbus 协议用于更高水准 的网络 广播可能不允许或以其它方式代替 4 如何处理功能域 消息帧中的功能代码域包含了两个字符 ASCII 或 8Bits RTU 可能的代码范 围是十进制的 1 255 当然 有些代码是适用于所有控制器 有此是应用于某种控制器 还有些保留以备后用 当消息从主设备发往从设备时 功能代码域将告之从设备需要执行哪些行为 例如 去读取输入的开关状态 读一组寄存器的数据内容 读从设备的诊断状态 允许调入 记 录 校验在从设备中的程序等 当从设备回应时 它使用功能代码域来指示是正常回应 无误 还是有某种错误发生 称作异议回应 对正常回应 从设备仅回应相应的功能代码 对异议回应 从设备返 回一等同于正常代码的代码 但最重要的位置为逻辑 1 例如 一从主设备发往从设备的消息要求读一组保持寄存器 将产生如下功能代码 0 0 0 0 0 0 1 1 十六进制 03H 对正常回应 从设备仅回应同样的功能代码 对异议回应 它返回 1 0 0 0 0 0 1 1 十六进制 83H 除功能代码因异议错误作了修改外 从设备将一独特的代码放到回应消息的数据域 中 这能告诉主设备发生了什么错误 主设备应用程序得到异议的回应后 典型的处理过程是重发消息 或者诊断发给从 设备的消息并报告给操作员 5 数据域 数据域是由两个十六进制数集合构成的 范围 00 FF 根据网络传输模式 这可以 是由一对 ASCII 字符组成或由一 RTU 字符组成 从主设备发给从设备消息的数据域包含附加的信息 从设备必须用于进行执行由功 能代码所定义的所为 这包括了象不连续的寄存器地址 要处理项的数目 域中实际数据 字节数 例如 如果主设备需要从设备读取一组保持寄存器 功能代码 03 数据域指定了 起始寄存器以及要读的寄存器数量 如果主设备写一组从设备的寄存器 功能代码 10 十六 进制 数据域则指明了要写的起始寄存器以及要写的寄存器数量 数据域的数据字节数 要写入寄存器的数据 如果没有错误发生 从从设备返回的数据域包含请求的数据 如果有错误发生 此 域包含一异议代码 主设备应用程序可以用来判断采取下一步行动 在某种消息中数据域可以是不存在的 0 长度 例如 主设备要求从设备回应通信 事件记录 功能代码 0B 十六进制 从设备不需任何附加的信息 6 错误检测域 标准的 Modbus 网络有两种错误检测方法 错误检测域的内容视所选的检测方法而定 ASCII 当选用 ASCII 模式作字符帧 错误检测域包含两个 ASCII 字符 这是使用 LRC 纵 向冗长检测 方法对消息内容计算得出的 不包括开始的冒号符及回车换行符 LRC 字符 附加在回车换行符前面 RTU 当选用 RTU 模式作字符帧 错误检测域包含一 16Bits 值 用两个 8 位的字符来实现 错误检测域的内容是通过对消息内容进行循环冗长检测方法得出的 CRC 域附加在消息的 最后 添加时先是低字节然后是高字节 故 CRC 的高位字节是发送消息的最后一个字节 7 字符的连续传输 当消息在标准的 Modbus 系列网络传输时 每个字符或字节以如下方式发送 从左到 右 最低有效位 最高有效位 使用 ASCII 字符帧时 位的序列是 有奇偶校验 启始 位 1 2 3 4 5 6 7 奇偶 位 停止 位 无奇偶校验 启始 位 1 2 3 4 5 6 7 停止 位 停止 位 图 4 位顺序 ASCII 使用 RTU 字符帧时 位的序列是 有奇偶校验 启始位 1 2 3 4 5 6 7 8 奇偶位 停止位 无奇偶校验 启始 位 1 2 3 4 5 6 7 8 停止位 停止 位 图 4 位顺序 RTU 四 错误检测方法 标准的 Modbus 串行网络采用两种错误检测方法 奇偶校验对每个字符都可用 帧检 测 LRC 或 CRC 应用于整个消息 它们都是在消息发送前由主设备产生的 从设备在接 收过程中检测每个字符和整个消息帧 用户要给主设备配置一预先定义的超时时间间隔 这个时间间隔要足够长 以使任 何从设备都能作为正常反应 如果从设备测到一传输错误 消息将不会接收 也不会向主 设备作出回应 这样超时事件将触发主设备来处理错误 发往不存在的从设备的地址也会 产生超时 1 奇偶校验 用户可以配置控制器是奇或偶校验 或无校验 这将决定了每个字符中的奇偶校验 位是如何设置的 如果指定了奇或偶校验 1 的位数将算到每个字符的位数中 ASCII 模式 7 个数据 位 RTU 中 8 个数据位 例如 RTU 字符帧中包含以下 8 个数据位 1 1 0 0 0 1 0 1 整个 1 的数目是 4 个 如果便用了偶校验 帧的奇偶校验位将是 0 便得整个 1 的 个数仍是 4 个 如果便用了奇校验 帧的奇偶校验位将是 1 便得整个 1 的个数是 5 个 如果没有指定奇偶校验位 传输时就没有校验位 也不进行校验检测 代替一附加 的停止位填充至要传输的字符帧中 2 LRC 检测 使用 ASCII 模式 消息包括了一基于 LRC 方法的错误检测域 LRC 域检测了消息域 中除开始的冒号及结束的回车换行号外的内容 LRC 域是一个包含一个 8 位二进制值的字节 LRC 值由传输设备来计算并放到消息 帧中 接收设备在接收消息的过程中计算 LRC 并将它和接收到消息中 LRC 域中的值比 较 如果两值不等 说明有错误 LRC 方法是将消息中的 8Bit 的字节连续累加 丢弃了进位 LRC 简单函数如下 static unsigned char LRC auchMsg usDataLen unsigned char auchMsg 要进行计算的消息 unsigned short usDataLen LRC 要处理的字节的数量 unsigned char uchLRC 0 LRC 字节初始化 while usDataLen 传送消息 uchLRC auchMsg 累加 return unsigned char char uchLRC 3 CRC 检测 使用 RTU 模式 消息包括了一基于 CRC 方法的错误检测域 CRC 域检测了整个消 息的内容 CRC 域是两个字节 包含一 16 位的二进制值 它由传输设备计算后加入到消息中 接收设备重新计算收到消息的 CRC 并与接收到的 CRC 域中的值比较 如果两值不同 则有误 CRC 是先调入一值是全 1 的 16 位寄存器 然后调用一过程将消息中连续的 8 位字 节各当前寄存器中的值进行处理 仅每个字符中的 8Bit 数据对 CRC 有效 起始位和停止 位以及奇偶校验位均无效 CRC 产生过程中 每个 8 位字符都单独和寄存器内容相或 OR 结果向最低有效 位方向移动 最高有效位以 0 填充 LSB 被提取出来检测 如果 LSB 为 1 寄存器单独和 预置的值或一下 如果 LSB 为 0 则不进行 整个过程要重复 8 次 在最后一位 第 8 位 完成后 下一个 8 位字节又单独和寄存器的当前值相或 最终寄存器中的值 是消息中所 有的字节都执行之后的 CRC 值 CRC 添加到消息中时 低字节先加入 然后高字节 CRC 简单函数如下 unsigned short CRC16 puchMsg usDataLen unsigned char puchMsg 要进行 CRC 校验的消息 unsigned short usDataLen 消息中字节数 unsigned char uchCRCHi 0 xFF 高 CRC 字节初始化 unsigned char uchCRCLo 0 xFF 低 CRC 字节初始化 unsigned uIndex CRC 循环中的索引 while usDataLen 传输消息缓冲区 uIndex uchCRCHi puchMsgg 计算 CRC uchCRCHi uchCRCLo auchCRCHi uIndex uchCRCLo auchCRCLo uIndex return uchCRCHi 8 uchCRCLo CRC 高位字节值表 static unsigned char auchCRCHi 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 0 x01 0 xC0 0 x80 0 x41 0 x01 0 xC0 0 x80 0 x41 0 x00 0 xC1 0 x81 0 x40 CRC 低位字节值表 static char auchCRCLo 0 x00 0 xC0 0 xC1 0 x01 0 xC3 0 x03 0 x02 0 xC2 0 xC6 0 x06 0 x07 0 xC7 0 x05 0 xC5 0 xC4 0 x04 0 xCC 0 x0C 0 x0D 0 xCD 0 x0F 0 xCF 0 xCE 0 x0E 0 x0A 0 xCA 0 xCB 0 x0B 0 xC9 0 x09 0 x08 0 xC8 0 xD8 0 x18 0 x19 0 xD9 0 x1B 0 xDB 0 xDA 0 x1A 0 x1E 0 xDE 0 xDF 0 x1F 0 xDD 0 x1D 0 x1C 0 xDC 0 x14 0 xD4 0 xD5 0 x15 0 xD7 0 x17 0 x16 0 xD6 0 xD2 0 x12 0 x13 0 xD3 0 x11 0 xD1 0 xD0 0 x10 0 xF0 0 x30 0 x31 0 xF1 0 x33 0 xF3 0 xF2 0 x32 0 x36 0 xF6 0 xF7 0 x37 0 xF5 0 x35 0 x34 0 xF4 0 x3C 0 xFC 0 xFD 0 x3D 0 xFF 0 x3F 0 x3E 0 xFE 0 xFA 0 x3A 0 x3B 0 xFB 0 x39 0 xF9 0 xF8 0 x38 0 x28 0 xE8 0 xE9 0 x29 0 xEB 0 x2B 0 x2A 0 xEA 0 xEE 0 x2E 0 x2F 0 xEF 0 x2D 0 xED 0 xEC 0 x2C 0 xE4 0 x24 0 x25 0 xE5 0 x27 0 xE7 0 xE6 0 x26 0 x22 0 xE2 0 xE3 0 x23 0 xE1 0 x21 0 x20 0 xE0 0 xA0 0 x60 0 x61 0 xA1 0 x63 0 xA3 0 xA2 0 x62 0 x66 0 xA6 0 xA7 0 x67 0 xA5 0 x65 0 x64 0 xA4 0 x6C 0 xAC 0 xAD 0 x6D 0 xAF 0 x6F 0 x6E 0 xAE 0 xAA 0 x6A 0 x6B 0 xAB 0 x69 0 xA9 0 xA8 0 x68 0 x78 0 xB8 0 xB9 0 x79 0 xBB 0 x7B 0 x7A 0 xBA 0 xBE 0 x7E 0 x7F 0 xBF 0 x7D 0 xBD 0 xBC 0 x7C 0 xB4 0 x74 0 x75 0 xB5 0 x77 0 xB7 0 xB6 0 x76 0 x72 0 xB2 0 xB3 0 x73 0 xB1 0 x71 0 x70 0 xB0 0 x50 0 x90 0 x91 0 x51 0 x93 0 x53 0 x52 0 x92 0 x96 0 x56 0 x57 0 x97 0 x55 0 x95 0 x94 0 x54 0 x9C 0 x5C 0 x5D 0 x9D 0 x5F 0 x9F 0 x9E 0 x5E 0 x5A 0 x9A 0 x9B 0 x5B 0 x99 0 x59 0 x58 0 x98 0 x88 0 x48 0 x49 0 x89 0 x4B 0 x8B 0 x8A 0 x4A 0 x4E 0 x8E 0 x8F 0 x4F 0 x8D 0 x4D 0 x4C 0 x8C 0 x44 0 x84 0 x85 0 x45 0 x87 0 x47 0 x46 0 x86 0 x82 0 x42 0 x43 0 x83 0 x41 0 x81 0 x80 0 x40 RS 232 RS 422 与 RS 485 标准及应用 一 RS 232 RS 422 与 RS 485 的由来 RS 232 RS 422 与 RS 485 都是串行数据接口标准 最初都是由电子工业协会 EIA 制订并发布的 RS 232 在 1962 年发布 命名为 EIA 232 E 作为工业标准 以保 证不同厂家产品之间的兼容 RS 422 由 RS 232 发展而来 它是为弥补 RS 232 之不足而提 出的 为改进 RS 232 通信距离短 速率低的缺点 RS 422 定义了一种平衡通信接口 将 传输速率提高到 10Mb s 传输距离延长到 4000 英尺 速率低于 100kb s 时 并允许在一 条平衡总线上连接最多 10 个接收器 RS 422 是一种单机发送 多机接收的单向 平衡传 输规范 被命名为 TIA EIA 422 A 标准 为扩展应用范围 EIA 又于 1983 年在 RS 422 基 础上制定了 RS 485 标准 增加了多点 双向通信能力 即允许多个发送器连接到同一条 总线上 同时增加了发送器的驱动能力和冲突保护特性 扩展了总线共模范围 后命名为 TIA EIA 485 A 标准 由于 EIA 提出的建议标准都是以 RS 作为前缀 所以在通讯工业领 域 仍然习惯将上述标准以 RS 作前缀称谓 RS 232 RS 422 与 RS 485 标准只对接口的电气特性做出规定 而不涉及接插件 电缆或协议 在此基础上用户可以建立自己的高层通信协议 因此在视频界的应用 许多 厂家都建立了一套高层通信协议 或公开或厂家独家使用 如录像机厂家中的 Sony 与松 下对录像机的 RS 422 控制协议是有差异的 视频服务器上的控制协议则更多了 如 Louth Odetis 协议是公开的 而 ProLINK 则是基于 Profile 上的 二 RS 232 串行接口标准 目前 RS 232 是 PC 机与通信工业中应用最广泛的一种串行接口 RS 232 被定义为一 种在低速率串行通讯中增加通讯距离的单端标准 RS 232 采取不平衡传输方式 即所谓单 端通讯 图 1 收 发端的数据信号是相对于信号地 如从 DTE 设备发出的数据在使用 DB25 连接 器时是 2 脚相对 7 脚 信号地 的电平 DB25 各引脚定义参见图 1 典型的 RS 232 信号 在正负电平之间摆动 在发送数据时 发送端驱动器输出正电平在 5 15V 负电平在 5 15V 电平 当无数据传输时 线上为 TTL 从开始传送数据到结束 线上电平从 TTL 电平到 RS 232 电平再返回 TTL 电平 接收器典型的工作电平在 3 12V 与 3 12V 由 于发送电平与接收电平的差仅为 2V 至 3V 左右 所以其共模抑制能力差 再加上双绞线上 的分布电容 其传送距离最大为约 15 米 最高速率为 20kb s RS 232 是为点对点 即只 用一对收 发设备 通讯而设计的 其驱动器负载为 3 7k 所以 RS 232 适合本地设备 之间的通信 其有关电气参数参见表 1 规定 RS232 RS422 R485 工作方式 单端 差分 差分 节点数 1 收 1 发 1 发 10 收 1 发 32 收 最大传输电缆长度 50 英尺 400 英尺 400 英尺 最大传输速率 20Kb S 10Mb s 10Mb s 最大驱动输出电压 25V 0 25V 6V 7V 12V 驱动器输出信号电平 负载最小值 负载 5V 15V 2 0V 1 5V 驱动器输出信号电平 空载最大值 空载 25V 6V 6V 驱动器负载阻抗 3K 7K 100 54 摆率 最大值 30V s N A N A 接收器输入电压范围 15V 10V 10V 7V 12V 接收器输入门限 3V 200mV 200mV 接收器输入电阻 3K 7K 4K 最小 12K 驱动器共模电压 3V 3V 1V 3V 接收器共模电压 7V 7V 7V 12V 表 1 三 RS 422 与 RS 485 串行接口标准 1 平衡传输 RS 422 RS 485 与 RS 232 不一样 数据信号采用差分传输方式 也称作平衡传输 它使用一对双绞线 将其中一线定义为 A 另一线定义为 B 如图 2 图 2 通常情况下 发送驱动器 A B 之间的正电平在 2 6V 是一个逻辑状态 负电平 在 2 6V 是另一个逻辑状态 另有一个信号地 C 在 RS 485 中还有一 使能 端 而在 RS 422 中这是可用可不用的 使能 端是用于控制发送驱动器与传输线的切断与连接 当 使能 端起作用时 发送驱动器处于高阻状态 称作 第三态 即它是有别于逻辑 1 与 0 的第三态 接收器也作与发送端相对的规定 收 发端通过平衡双绞线将 AA 与 BB 对应相连 当在收端 AB 之间有大于 200mV 的电平时 输出正逻辑电平 小于 200mV 时 输出负逻 辑电平 接收器接收平衡线上的电平范围通常在 200mV 至 6V 之间 参见图 3 图 3 2 RS 422 电气规定 RS 422 标准全称是 平衡电压数字接口电路的电气特性 它定义了接口电路的特性 图 5 是典型的 RS 422 四线接口 实际上还有一根信号地线 共 5 根线 图 4 是其 DB9 连 接器引脚定义 由于接收器采用高输入阻抗和发送驱动器比 RS232 更强的驱动能力 故允 许在相同传输线上连接多个接收节点 最多可接 10 个节点 即一个主设备 Master 其 余为从设备 Salve 从设备之间不能通信 所以 RS 422 支持点对多的双向通信 接收 器输入阻抗为 4k 故发端最大负载能力是 10 4k 100 终接电阻 RS 422 四线接口由 于采用单独的发送和接收通道 因此不必控制数据方向 各装置之间任何必须的信号交换 均可以按软件方式 XON XOFF 握手 或硬件方式 一对单独的双绞线 图 4 图 5 RS 422 的最大传输距离为 4000 英尺 约 1219 米 最大传输速率为 10Mb s 其平 衡双绞线的长度与传输速率成反比 在 100kb s 速率以下 才可能达到最大传输距离 只 有在很短的距离下才能获得最高速率传输 一般 100 米长的双绞线上所能获得的最大传输 速率仅为 1Mb s RS 422 需要一终接电阻 要求其阻值约等于传输电缆的特性阻抗 在矩距离传输时 可不需终接电阻 即一般在 300 米以下不需终接电阻 终接电阻接在传输电缆的最远端 RS 422 有关电气参数见表 1 3 RS 485 电气规定 由于 RS 485 是从 RS 422 基础上发展而来的 所以 RS 485 许多电气规定与 RS 422 相仿 如都采用平衡传输方式 都需要在传输线上接终接电阻等 RS 485 可以采用二线与 四线方式 二线制可实现真正的多点双向通信 参见图 6 而采用四线连接时 与 RS 422 一样只能实现点对多的通信 即只能有一个主 Master 设备 其余为从设备 但它比 RS 422 有改进 无论四线还是二线连接方式总 线上可多接到 32 个设备 参见图 7 图 6 图 7 RS 485 与 RS 422 的不同还在于其共模输出电压是不同的 RS 485 是 7V 至 12V 之 间 而 RS 422 在 7V 至 7V 之间 RS 485 接收器最小输入阻抗为 12k 剑 鳵 S 422 是 4k 健 旧峡梢运礡 S 485 满足所有 RS 422 的规范 所以 RS 485 的驱动器可以用在 RS 422 网络中应用 RS 485 有关电气规定参见表 1 RS 485 与 RS 422 一样 其最大传输距离约为 1219 米 最大传输速率为 10Mb s 平 衡双绞线的长度与传输速率成反比 在 100kb s 速率以下 才可能使用规定最长的电缆长 度 只有在很短的距离下才能获得最高速率传输 一般 100 米长双绞线最大传输速率仅为 1Mb s RS 485 需要 2 个终接电阻 其阻值要求等于传输电缆的特性阻抗 在矩距离传输时可 不需终接电阻 即一般在 300 米以下不需终接电阻 终接电阻接在传输总线的两端 四 RS 422 与 RS 485 的网络安装注意要点 RS 422 可支持 10 个节点 RS 485 支持 32 个节点 因此多节点构成网络 网络拓扑 一般采用终端匹配的总线型结构 不支持环形或星形网络 在构建网络时 应注意如下几 点 1 采用一条双绞线电缆作总线 将各个节点串接起来 从总线到每个节点的引出线 长度应尽量短 以便使引出线中的反射信号对总线信号的影响最低 图 8 所示为实际应用 中常见的一些错误连接方式 a c e 和正确的连接方式 b d f a c e 这三种网 络连接尽管不正确 在短距离 低速率仍可能正常工作 但随着通信距离的延长或通信速 率的提高 其不良影响会越来越严重 主要原因是信号在各支路末端反射后与原信号叠加 会造成信号质量下降 2 应注意总线特性阻抗的连续性 在阻抗不连续点就会发生信号的反射 下列几种 情况易产生这种不连续性 总线的不同区段采用了不同电缆 或某一段总线上有过多收发 器紧靠在一起安装 再者是过长的分支线引出到总线 总之 应该提供一条单一 连续的信号通道作为总线 图 8 五 RS 422 与 RS 485 传输线上匹配的一些说明 对 RS 422 与 RS 485 总线网络一般要使用终接电阻进行匹配 但在短距离与低速率 下可以不用考虑终端匹配 那么在什么情况下不用考虑匹配呢 理论上 在每个接收数据 信号的中点进行采样时 只要反射信号在开始采样时衰减到足够低就可以不考虑匹配 但 这在实际上难以掌握 美国 MAXIM 公司有篇文章提到一条经验性的原则可以用来判断在 什么样的数据速率和电缆长度时需要进行匹配 当信号的转换时间 上升或下降时间 超 过电信号沿总线单向传输所需时间的 3 倍以上时就可以不加匹配 例如具有限斜率特性的 RS 485 接口 MAX483 输出信号的上升或下降时间最小为 250ns 典型双绞线上的信号传输 速率约为 0 2m ns 24AWG PVC 电缆 那么只要数据速率在 250kb s 以内 电缆长度不 超过 16 米 采用 MAX483 作为 RS 485 接口时就可以不加终端匹配 一般终端匹配采用终接电阻方法 前文已有提及 RS 422 在总线电缆的远端并接电 阻 RS 485 则应在总线电缆的开始和末端都需并接终接电阻 终接电阻一般在 RS 422 网 络中取 100 在 RS 485 网络中取 120 相当于电缆特性阻抗的电阻 因为大多数双绞线 电缆特性阻抗大约在 100 120 这种匹配方法简单有效 但有一个缺点 匹配电阻要消 耗较大功率 对于功耗限制比较严格的系统不太适合 另外一种比较省电的匹配方式是 RC 匹配 如图 9 利用一只电容 C 隔断直流成分可 以节省大部分功率 但电容 C 的取值是个难点 需要在功耗和匹配质量间进行折衷 还有一种采用二极管的匹配方法 如图 10 这种方案虽未实现真正的 匹配 但它 利用二极管的钳位作用能迅速削弱反射信号 达到改善信号质量的目的 节能效果显著 图 9 图 10 六 RS 422 与 RS 485 的接地问题 电子系统接地是很重要的 但常常被忽视 接地处理不当往往会导致电子系统不能 稳定工作甚至危及系统安全 RS 422 与 RS 485 传输网络的接地同样也是很重要的 因为 接地系统不合理会影响整个网络的稳定性 尤其是在工作环境比较恶劣和传输距离较远的 情况下 对于接地的要求更为严格 否则接口损坏率较高 很多情况下 连接 RS 422 RS 485 通信链路时只是简单地用一对双绞线将各个接口的 A B 端连接起来 而 忽略了信号地的连接 这种连接方法在许多场合是能正常工作的 但却埋下了很大的隐患 这有下面二个原因 1 共模干扰问题 正如前文已述 RS 422 与 RS 485 接口均采用差分方式传输信号方 式 并不需要相对于某个参照点来检测信号 系统只需检测两线之间的电位差就可以了 但人们往往忽视了收发器有一定的共模电压范围 如 RS 422 共模电压范围为 7 7V 而 RS 485 收发器共模电压范围为 7 12V 只有满足上述条件 整个网络才能正常工作 当 网络线路中共模电压超出此范围时就会影响通信的稳定可靠 甚至损坏接口 以图 11 为例 当发送驱动器 A 向接收器 B 发送数据时 发送驱动器 A 的输出共模电压为 VOS 由于两 个系统具有各自独立的接地系统 存在着地电位差 VGPD 那么 接收器输入端的共模电 压 VCM 就会达到 VCM VOS VGPD RS 422 与 RS 485 标准均规定 VOS 3V 但 VGPD 可能会有很大幅度 十几伏甚至数十伏 并可能伴有强干扰信号 致使接收器共模输入 VCM 超出正常范围 并在传输线路上产生干扰电流 轻则影响正常通信 重则损坏通信接 口电路 图 11 2 EMI 问题 发送驱动器输出信号中的共模部分需要一个返回通路 如没有一 个低阻的返回通道 信号地 就会以辐射的形式返回源端 整个总线就会像一个巨大的 天线向外辐射电磁波 由于上述原因 RS 422 RS 485 尽管采用差分平衡传输方式 但对整个 RS 422 或 RS 485 网络 必须有一条低阻的信号地 一条低阻的信号地将两个接口的工作地连接起来 使共模干扰电压 VGPD 被短路 这条信号地可以是额外的一条线 非屏蔽双绞线 或者 是屏蔽双绞线的屏蔽层 这是最通常的接地方法 值得注意的是 这种做法仅对高阻型共模干扰有效 由于干扰源内阻大 短接后不 会形成很大的接地环路电流 对于通信不会有很大影响 当共模干扰源内阻较低时 会在 接地线上形成较大的环路电流 影响正常通信 笔者认为 可以采取以下三种措施 1 如果干扰源内阻不是非常小 可以在接地线上加限流电阻以限制干扰电流 接地电阻的增加可能会使共模电压升高 但只要控制在适当的范围内就不会影响正常通信 2 采用浮地技术 隔断接地环路 这是较常用也是十分有效的一种方法 当共 模干扰内阻很小时上述方法已不能奏效 此时可以考虑将引入干扰的节点 例如处于恶劣 的工作环境的现场设备 浮置起来 也就是系统的电路地与机壳或大地隔离 这样就隔 断了接地环路 不会形成很大的环路电流 3 采用隔离接口 有些情况下 出于安全或其它方面的考虑 电路地必须与机 壳或大地相连 不能悬浮 这时可以采用隔离接口来隔断接地回路 但是仍然应该有一条 地线将隔离侧的公共端与其它接口的工作地相连 参见图 12 图 12 七 RS 422 与 RS 485 的网络失效保护 RS 422 与 RS 485 标准都规定了接收器门限为 200mV 这样规定能够提供比较高的 噪声抑制能力 如前文所述 当接收器 A 电平比 B 电平高 200mV 以上时 输出为正逻辑 反之 则输出为负逻辑 但由于第三态的存在 即在主机在发端发完一个信息数据后 将 总线置于第三态 即总线空闲时没有任何信号驱动总线 使 AB 之间的电压在 200 200mV 直至趋于 0V 这带来了一个问题 接收器输出状态不确定 如果接收机的 输出为 0V 网络中从机将把其解释为一个新的启动位 并试图读取后续字节 由于永远不 会有停止位 产生一个帧错误结果 不再有设备请求总线 网络陷于瘫痪状态 除上述所 述的总线空闲会造成两线电压差低于 200mV 的情况外 开路或短路时也会出现这种情况 故应采取一定的措施避免接收器处于不确定状态 图 13 通常是在总线上加偏置 当总线空闲或开路时 利用偏置电阻将总线偏置在一个确 定的状态 差分电压 200mV 如图 13 将 A 上拉到地 B 下拉到 5V 电阻的典型值 是 1k 具体数值随电缆的电容变化而变化 上述方法是比较经典的方法 但它仍然不能解决总线短路时的问题 有些厂家将接 收门限移到 200mV 50mV 可解决这个问题 例如 Maxim 公司的 MAX3080 系列 RS 485 接口 不仅省去了外部偏置电阻 而且解决了总线短路情况下的失效保护问题 八 RS 422 与 RS 485 的瞬态保护 前文提到的信号接地措施 只对低频率的共模干扰有保护作用 对于频率很高的瞬 态干扰就无能为力了 由于传输线对高频信号而言就是相当于电感 因此对于高频瞬态干 扰 接地线实际等同于开路 这样的瞬态干扰虽然持续时间短暂 但可能会有成百上千伏 的电压 实际应用环境下还是存在高频瞬态干扰的可能 一般在切换大功率感性负载如电机 变压器 继电器等或闪电过程中都会产生幅度很高的瞬态干扰 如果不加以适当防护就会 损坏 RS 422 或 RS 485 通信接口 对于这种瞬态干扰可以采用隔离或旁路的方法加以防护 1 隔离保护方法 这种方案实际上将瞬态高压转移到隔离接口中的电隔离层上 由 于隔离层的高绝缘电阻 不会产生损害性的浪涌电流 起到保护接口的作用 通常采用高 频变压器 光耦等元件实现接口的电气隔离 已有器件厂商将所有这些元件集成在一片 IC 中 使用起来非常简便 如 Maxim 公司的 MAX1480 MAX1490 隔离电压可达 2500V 这种方案的优点是可以承受高电压 持续时间较长的瞬态干扰 实现起来也比较容易 缺 点是成本较高 2 旁路保护方法 这种方案利用瞬态抑制元件 如 TVS MOV 气体放电管等 将危害性的瞬态能量旁路到大地 优点是成本较低 缺点是保护能力有限 只能保护一定 能量以内的瞬态干扰 持续时间不能很长 而且需要有一条良好的连接大地的通道 实现 起来比较困难 实际应用中是将上述两种方案结合起来灵活加以运用 如图 14 在这种方 法中 隔离接口对大幅度瞬态干扰进行隔离 旁路元件则保护隔离接口不被过高的瞬态电 压击穿 MODBUS 通讯协议及编程 ModBus 通讯协议分为 RTU 协议和 ASCII 协议 我公司的多种仪表都采用 ModBus RTU 通讯协议 如 CH2000 智能电力监测仪 CH2000M 电力参数采集模块 巡检表 数 显表 光柱数显表等 下面就 ModBus RTU 协议简要介绍如下 一 通讯协议 一 通讯传送方式 通讯传送分为独立的信息头 和发送的编码数据 以下的通讯传送方式定义也与 MODBUS RTU 通讯规约相兼容 编 码 8 位二进制 起始位 1 位 数据位 8 位 奇偶校验位 1 位 偶校验位 停止位 1 位 错误校检 CRC 冗余循环码 初始结构 4 字节的时间 地址码 1 字节 功能码 1 字节 数据区 N 字节 错误校检 16 位 CRC 码 结束结构 4 字节的时间 地址码 地址码为通讯传送的第一个字节 这个字节表明由用户设定地址码的从机将 接收由主机发送来的信息 并且每个从机都有具有唯一的地址码 并且响应回送均以各自 的地址码开始 主机发送的地址码表明将发送到的从机地址 而从机发送的地址码表明回 送的从机地址 功能码 通讯传送的第二个字节 ModBus 通讯规约定义功能号为 1 到 127 本仪表只 利用其中的一部分功能码 作为主机请求发送 通过功能码告诉从机执行什么动作 作为 从机响应 从机发送的功能码与从主机发送来的功能码一样 并表明从机已响应主机进行 操作 如果从机发送的功能码的最高位为 比如功能码大与此同时 127 则表明从机没有 响应操作或发送出错 数据区 数据区是根据不同的功能码而不同 数据区可以是实际数值 设置点 主机 发送给从机或从机发送给主机的地址 CRC 码 二字节的错误检测码 二 通讯规约 当通讯命令发送至仪器时 符合相应地址码的设备接通讯命令 并除去地址码 读取 信息 如果没有出错 则执行相应的任务 然后把执行结果返送给发送者 返送的信息中 包括地址码 执行动作的功能码 执行动作后结果的数据以及错误校验码 如果出错就不 发送任何信息 1 信息帧结构 地址码 功能码 数据区 错误校验码 8 位 8 位 N 8 位 16 位 地址码 地址码是信息帧的第一字节 8 位 从 0 到 255 这个字节表明由用户设置地 址的从机将接收由主机发送来的信息 每个从机都必须有唯一的地址码 并且只有符合地 址码的从机才能响应回送 当从机回送信息时 相当的地址码表明该信息来自于何处 功能码 主机发送的功能码告诉从机执行什么任务 表 1 1 列出的功能码都有具体的 含义及操作 代码 含义 操作 03 读取数据 读取当前寄存器内一个或多个二进制值 06 重置单一寄存器 把设置的二进制值写入单一寄存器 数据区 数据区包含需要从机执行什么动作或由从机采集的返送信息 这些信息可以 是数值 参考地址等等 例如 功能码告诉从机读取寄存器的值 则数据区必需包含要读 取寄存器的起始地址及读取长度 对于不同的从机 地址和数据信息都不相同 错误校验码 主机或从机可用校验码进行判别接收信息是否出错 有时 由于电子噪 声或其它一些干扰 信息在传输过程中会发生细微的变化 错误校验码保证了主机或从机 对在传送过程中出错的信息不起作用 这样增加了系统的安全和效率 错误校验采用 CRC 16 校验方法 注 信息帧的格式都基本相同 地址码 功能码 数据区和错误校验码 2 错误校验 冗余循环码 CRC 包含 2 个字节 即 16 位二进制 CRC 码由发送设备计算 放置 于发送信息的尾部 接收信息的设备再重新计算接收到信息的 CRC 码 比较计算得到的 CRC 码是否与接收到的相符 如果两者不相符 则表明出错 CRC 码的计算方法是 先预置 16 位寄存器全为 1 再逐步把每 8 位数据信息进行处理 在进行 CRC 码计算时只用 8 位数据位 起始位及停止位 如有奇偶校验位的话也包括奇偶 校验位 都不参与 CRC 码计算 在计算 CRC 码时 8 位数据与寄存器的数据相异或 得到的结果向低位移一字节 用 0 填补最高位 再检查最低位 如果最低位为 1 把寄存器的内容与预置数相异或 如 果最低位为 0 不进行异或运算 这个过程一直重复 8 次 第 8 次移位后 下一个 8 位再与现在寄存器的内容相相异或 这个过程与以上一样重复 8 次 当所有的数据信息处理完后 最后寄存器的内容即为 CRC 码值 CRC 码中的数据发送 接收时低字节在前 计算 CRC 码的步骤为 预置 16 位寄存器为十六进制 FFFF 即全为 1 称此寄存器为 CRC 寄存器 把第一个 8 位数据与 16 位 CRC 寄存器的低位相异或 把结果放于 CRC 寄存器 把寄存器的内容右移一位 朝低位 用 0 填补最高位 检查最低位 如果最低位为 0 重复第 3 步 再次移位 如果最低位为 1 CRC 寄存器与多项式 A001 1010 0000 0000 0001 进行异或 重复步骤 3 和 4 直到右移 8 次 这样整个 8 位数据全部进行了处理 重复步骤 2 到步骤 5 进行下一个 8 位数据的处理 最后得到的 CRC 寄存器即为 CRC 码 3 功能码 03 读取点和返回值 仪表采用 Modbus RTU 通讯规约 利用通讯命令 可以进行读取点 保持寄存器 或 返回值 输入寄存器 的操作 保持和输入寄存器都是 16 位 2 字节 值 并且高位在前 这样用于仪表的读取点和返回值都是 2 字节 一次最多可读取寄存器数是 60 由于一些可 编程控制器不用功能码 03 所以功能码 03 被用作读取点和返回值 从机响应的命令格式 是从机地址 功能码 数据区及 CRC 码 数据区中的寄存器数据都是每两个字节高字节在 前 4 功能码 06 单点保存 主机利用这条命令把单点数据保存到仪表的存储器 从机也用这个功能码向主机返送 信息 二 编程举例 下面是一个用 VC 编写的 ModBus RTU 通讯的例子 一 通讯口设置 DCB dcb hCom CreateFile COM1 GENERIC READ GENERIC WRITE 0 NULL OPEN EXISTING 0 NULL if hCom INVALID HANDLE VALUE MessageBox createfile error error BOOL error SetupComm hCom 1024 1024 if error MessageBox setupcomm error error GetCommState hCom if error MessageBox
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!