|ModBus RTU、ASCII、TCP,选哪种模式更好?

|ModBus RTU、ASCII、TCP,选哪种模式更好?

文章图片

|ModBus RTU、ASCII、TCP,选哪种模式更好?

文章图片

|ModBus RTU、ASCII、TCP,选哪种模式更好?

ModBus是一种通信协议 , 用于连接自动化设备(如PLC、温度控制器等)和计算机 。 它被广泛应用于工业控制系统 , 支持多种通信方式 , 包括ModBus RTU、ModBus ASCII和ModBus TCP等 。 本文将主要解释这三种通信方式的区别和应用场景 。

所有ModBus协议的基本结构无论变体如何 , 所有标准ModBus通信都遵循相同的消息传递结构 。 一切都围绕着将值存储在寄存器中然后读取它们 。 这里有几种数据类型在起作用 。
例如 , 离散输入可以存储为单个位 。 更广泛地说 , 输入寄存器存储基于 ModBus 的设备收集的值 。 将多个分立器件存储为单个位 , 而模拟值甚至 ASCII 字符可能存储在 8 位寄存器中(最低有效位为 0 位 , 最高有效位为 64 位) 。
不同类型的寄存器按用于轮询它们的功能代码进行分类 。 功能代码字段中的“1”用于“读取线圈”(检查控制继电器的状态) 。 “2”表示“读取离散输入”(检查离散输入的状态) 。 “3”是“读保持寄存器”(从多用途读/写寄存器收集数据) 。 ModBus 规范中还有更多 。 寄存器由其“起始地址”请求 , 起始地址是一个 16 位值 , 用于唯一标识设备中的每个寄存器 。 对RTU或其他设备的主控请求将始终引用要报告的所需寄存器 。

ModBus RTUModBus RTU(Remote Terminal Unit)是ModBus协议最常见的实现方式 , 采用二进制数据传输 , 具有较高的传输效率和稳定性 。 它使用串行通信 , 支持RS232和RS485两种接口 。 在RTU模式下 , 每个字节可以传输两位十六进制字符 。 比如0xAB会直接以十六进制0xAB(二进制10101011)进行发送 。 其消息帧格式由以下部分组成:
【|ModBus RTU、ASCII、TCP,选哪种模式更好?】
RTU模式采用16 位CRC校验 , 后续的命令/数据带有循环冗余校验的校验和 。 RTU模式比较常用 , 而ASCII一般很少用 。
ModBus TCPModBus TCP(Transmission Control Protocol)是ModBus协议的一种扩展 , 它使用TCP/IP协议进行通信 , 可以在局域网(LAN)和广域网(WAN)之间传输数据 。 ModBus TCP支持多种网络设备 , 包括计算机、服务器、交换机、路由器等 。 它适用于远程监控和控制 , 常用于工业网络和物联网应用 。 该协议的物理层、数据链路层、网络层、传输层都是基于TCP协议 , 它只是在应用层将ModBus协议封装进去 。 然后接收端将该TCP数据包拆包后 , 重新获得原始ModBus帧 , 然后按照ModBus协议规范进行解析 , 并将要返回的数据包重新封装到TCP协议中 , 发回至发送端 。 与串行通信的传输格式不同 , TCP模式去除了附加地址和校验 , 增加报文头 , 如下图所示 。

通过以太网传输时使用TCP模式 , 不使用校验 , 因为TCP协议是一个面向连接的可靠协议 。
ModBus RTU和ModBus TCP作为ModBus协议的两个主要变体 , 传统上 , ModBus RTU(需要将信息传送回ModBus主站或SCADA HMI的RTU)被许多不同类型的设备使用 。 ModBus RTU通常通过RS485串行发送 。 这种菊花链通信通道允许多个设备在主从配置中向单个HMI端口报告 。 每个从设备都能够通过向主设备发送流量来说话 。 这使得ModBus网络结构保持相当简单 。
ModBus ASCIIModBus ASCII(American Standard Code for Information Interchange)采用ASCII码传输文本信息 , 每个8Bit 字节都作为两个ASCII字符发送 。 相对ModBus RTU而言 , 它的传输效率较低 , 但具有更好的可读性 。 ModBus ASCII也使用串行通信 , 并支持RS232和RS485两种接口 , 适用于短距离通信 。 在ASCII模式下 , 每个8位的字节拆分为两个ASCII字符进行发送 , 消息帧以英文冒号“:”开始 , 以回车和换行(CRLF)符号结束 。 例如十六进制数0xAB , 会被分解成ASCII字符“A”和“B”进行发送 。