Modbus以及上位机软件实际运用
Demo代码
Git代码示例:https://gitee.com/chenheze90/Learning01_Modbus
下载demo:https://gitee.com/chenheze90/Learning01_Modbus/repository/archive/master.zip
Modbus简介
Modbus是一种串行通讯协议,通常运用在电子设备之间的通讯上。在许多制造行业中应用极其广泛;进过多年的发展Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。
Modbus原本设计是针对PLC通讯问题而设计,目前Modbus协议主要用在串口、以太网和其他互联网协议的网络,基本上占大部分的Modbus是通过TCP或者485串口进行信息交互。
如下所示,Modbus是在应用层封装、解析、传递消息的。
协议版本
ModbusRTU
Modbus RTU是一种紧凑的,采用二进制表示数据的方式,使用串行通信(serial communication)方式。RTU格式后续的命令/数据带有循环冗余校验的校验和(CRC)。被配置为RTU变种的节点不会和设置为ASCII变种的节点通信,反之亦然。
ModbusASCII
Modbus ASCII是一种人类可读的,冗长的表示方式。使用串行通信(serial communication)方式。ASCII格式采用纵向冗余校验的校验和(LRC)。相比之下,RTU格式的协议较为常用。
Modbus/TCP
对于通过TCP/IP(例如以太网)的连接,存在多个Modbus/TCP变种,这种方式不需要校验和计算,目前较为广泛运用的是Modbus/TCP。
通讯简析
Modbus协议是一个master/slave(或者server/client)架构的协议,简单点理解就是主从结构。有且仅有一个节点是主节点,其他使用Modbus协议参与通信的节点是子节点。每一个子设备都有一个唯一的地址。在以太网上,任何一个设备都能发送一个Modbus命令,但是通常也只有一个主节点设备启动指令。
一个ModBus命令包含了打算执行的设备的Modbus地址。所有设备都会收到命令,但只有指定位置的设备会执行及回应指令(地址0例外,指定地址0的指令是广播指令,所有收到指令的设备都会运行,不过不回应指令)。所有的Modbus命令包含了检查码,以确定到达的命令没有被破坏。基本的ModBus命令能指令一个RTU改变它的寄存器的某个值,控制或者读取一个I/O端口,以及指挥设备回送一个或者多个其寄存器中的数据。
有许多modems和网关支持Modbus协议,因为Modbus协议很简单而且容易复制。它们当中一些为这个协议特别设计的。有使用有线、无线通信甚至短消息和GPRS的不同实现。不过设计者需要克服一些包括高延迟和时序的问题。
错误通讯
当主机传送的报文不符合格式、从机不支

文章介绍了Modbus通讯协议的基础知识,包括ModbusRTU、ASCII和TCP变种的特性,以及协议的主从架构和错误处理机制。此外,文中通过代码示例展示了如何使用Modbus/TCP进行数据交互,并提到了调试工具ModbusSlave。重点讲解了线圈、离散输入、保持寄存器和输入寄存器的概念,以及读写操作相关的功能码。
最低0.47元/天 解锁文章
521





