文章目录
1 前言
Modbus TCP协议是一种广泛应用于工业自动化、楼宇自控、能源管理等领域的数据通信协议。它基于TCP/IP网络,将Modbus协议封装在TCP/IP协议栈中,使用以太网作为物理层,通过TCP连接来实现设备之间的通信。
W5100S/W5500是一款集成全硬件 TCP/IP 协议栈的嵌入式以太网控制器,同时也是一颗工业级以太网控制芯片。本教程将介绍W5100S/W5500以太网Modbus TCP应用的基本原理、使用步骤、应用实例以及注意事项,帮助读者更好地掌握这一技术。
2 简介
2 .1 什么是Modbus TCP?
Modbus TCP实质上是Modbus协议(或Modbus RTU)在以太网TCP/IP网络上的运行。像Modbus RTU一样,Modbus TCP也采用客户端/服务器原理,但在这种情况下,客户端(主设备)会启动来自服务器(从设备)的请求和响应。任何设备都可以成为客户端或服务器。
Modbus TCP不需要计算校验和,因为较低层已经提供了校验和保护。它使用10 Mbps的以太网标准来传输Modbus消息的整个结构。Modbus TCP协议提供了在单个网络中的许多设备之间的快速通信。

2.2 Modbus TCP指令介绍
Modbus TCP协议的数据帧可以分为两部分:MBAP和PDU。
MBAP(Modbus应用协议报文头):
事务处理标识:一个递增的数字,每次发送消息递增一下,尽量不重复,因为占用2个字节,所以范围是:0~65535。
协议标识:固定值0,表示Modbus TCP协议。
长度:等于后面字段的长度。
单元标识符:从机地址,也就是slave id。
PDU(协议数据单元):
功能码:Modbus规定了多个功能,每个功能都设定一个功能码。你要对从机做什么操作,那么就在这里设定好,从机读取到这个数据就知道要做什么。
数据:对于主机来说就是想要操作从机寄存器里的哪些数据。

Modbus TCP协议中定义了多种功能码,包括:
0x01:读线圈
0x05:写单个线圈
0x0F:写多个线圈
0x02:读离散量输入
0x04:读输入寄存器
0x03:读保持寄存器
0x06:写单个保持寄存器
0x10:写多个保持寄存器
每种功能码对应的操作和数据格式都有所不同。
例如,功能码0x01用于读取线圈,请求格式为“MBAP 功能码 起始地址H 起始地址L 数量H 数量L”
响应格式为“MBAP 功能码 数据长度 数据”。
2.3 请求数据过程
在典型的Modbus TCP通信过程中:
- Modbus TCP客户端(也称为主设备)向Modbus TCP服务器(也称为从设备)发送请求。这个请求包含功能码(指示要执行的操作类型),并且可能还包括数据地址和值,具体取决于功能码。
- 收到请求后,Modbus TCP服务器根据功能码处理它。例如,如果功能码指示读取操作,服务器将访问其内存中的指定数据地址,并准备相应的数据以进行响应。
- 然后,Modbus TCP服务器向客户端发送响应。这个响应包含功能码和请求的数据(对于读取操作)或对执行的操作的确认(对于写入操作)。
- Modbus TCP客户端接收到服务器的响应,并根据需要处理数据。

2.4 Modbus TCP协议优点
MODBUS TCP协议的优点包括:
- 灵活的网络拓扑结构:MODBUS TCP基于以太网通信,因此其网络拓扑结构更为灵活。从串行链路上一主多从的构造,演变为多客户端/多服务器端的构造模型。
- 易于寻址:使用MODBUS TCP,主站设备(客户端)可以通过IP地址找到MODBUS从设备(服务器),并通过MODBUS网关连接到另一个MODBUS RTU网络。
- 主从模式:MODBUS协议的工作原理是基于主从模式。在一个网络中,MODBUS协议通过主设备(客户端)和从设备(服务器)之间的请求-应答机制来交换信息。这种模式使得通信过程清晰且易于理解。
- 开放性:MODBUS是一种开放的协议,这意味着它可以被任何厂商的设备所支持,从而提高了设备间的互操作性。
- 简单性:MODBUS协议简单易懂,易于实现和维护。
- 高效性:MODBUS TCP协议在TCP/IP网络上运行,利用了TCP/IP协议的优点,如高效的数据传输、错误检测和修复等。
2.5 Modbus TCP应用场景
Modbus TCP协议的应用场景广泛,以下是一些主要的领域:
- 工业自动化:Modbus TCP协议在工业自动化领域被广泛应用,特别是在智能制造和工业物联网中。它允许设备之间进行可靠的通信,以实现生产过程的自动化和控制。
- 楼宇自动化:在楼宇自动化领域,Modbus TCP协议可以用于连接楼宇设备(如温度控制器、照明系统、安全系统等)以实现节能和舒适的室内环境。
- 能源管理:在能源管理领域,Modbus TCP协议可以用于监测和控制系统中的能源使用。通过连接能源测量设备和控制系统,可以实现实时能源监测和优化控制,降低能源消耗并提高能源效率。
- 过程控制:在过程控制领域,Modbus TCP协议可以用于连接传感器和执行器,以实现实时监控和控制。它可以应用于各种工业过程,如化工、制药、食品加工等。
- 智能家居:在智能家居领域,Modbus TCP协议可以用于连接智能家居设备(如智能灯泡、智能插座、智能安防等)以实现家庭自动化和智能控制。
3 WIZnet以太网芯片
WIZnet 主流硬件协议栈以太网芯片参数对比
| Model | Embedded Core | Host I/F | TX/RX Buffer | HW Socket | Network Performance |
|---|---|---|---|---|---|
| W5100S | TCP/IPv4, MAC & PHY | 8bit BUS, SPI | 16KB | 4 | Max.25Mbps |
| W6100 | TCP/IPv4/IPv6, MAC & PHY | 8bit BUS, Fast SPI | 32KB | 8 | Max.25Mbps |
| W5500 | TCP/IPv4, MAC & PHY | Fast SPI | 32KB | 8 | Max 15Mbps |
- W5100S/W6100 支持 8bit数据总线接口,网络传输速度会优于W5500。
- W6100 支持IPV6,与W5100S 硬件兼容,若已使用W5100S的用户需要支持IPv6,可以Pin to Pin兼容。
- W5500 拥有比 W5100S更多的 Socket数量以及发送与接收缓存。
4 Modbus TCP示例概述以及使用
4.1 流程图
程序的运行框图如下所示:

4.2 准备工作核心
软件
- Visual Studio Code
- WIZnet UartTool
- Modbus Poll
硬件
- W5100S IO模块 + RP2040 树莓派Pico开发板 或者 WIZnet W5100S-EVB-Pico开发板
- Micro USB 接口的数据线
- TTL 转 USB
- 网线
4.3 连接方式
-
通过数据线连接PC的USB口(主要用于烧录程序,也可以虚拟出串口使用)
-
通过TTL串口转USB,连接UART0 的默认引脚:
- RP2040 GPIO0(UART0 TX) <----> USB_TTL_RX
- RP2040 GPIO1(UART0 RX) <----> USB_TTL_TX
-
使用模块连接RP2040 进行接线时
- RP2040 GPIO16 <----> W5100S MISO
- RP2040 GPIO17 <----> W5100S CS
- RP2040 GPIO18 <----> W5100S SCK
- RP2040 GPIO19 <----> W5100S MOSI
- RP2040 GPIO20 <----> W5100S RST
-
通过PC和设备都通过网线连接路由器LAN口
4.4 主要代码概述
我们使用的是WIZnet官方的ioLibrary_Driver库。该库支持的协议丰富,操作简单,芯片在硬件上集成了TCP/IP协议栈,该库又封装好了TCP/IP层之上的协议,我们只需简单调用相应函数即可完成协议的应用。
第一步:在modbus_tcp.c文件中引用对应的库文件。
第二步:宏定义常量和定义全局变量。
第三步:定义两个函数,包括一个1秒定时器回调函数(用于处理DHCP超时处理),一个设置网络地址函数。
第四步:主函数首先是对串口和SPI进行初始化以及链路检测。然后是设置W5100S的网络地址,首先使用DHCP的方式进行获取,失败后使用预设的静态IP地址。然后将LED GPIO的初始化。最后则是在主循环里面跑Modbus TCP状态机程序。
第五步:在状态机中,首先是打开一个TCP Server模式的socket,然后等待客户端连接。在连接成功之后,会等待客户端的请求信息,接收到请求信息之后,会对包内容解析并作出响应的操作以及回复。
/* main function */
int main

本文介绍了ModbusTCP协议在工业自动化中的应用,特别是W5100S/W5500芯片的使用。详细讲解了协议原理、请求过程、优点、应用场景,以及如何通过示例代码实现ModbusTCP通信,包括注意事项和相关资源链接。
最低0.47元/天 解锁文章
3873

被折叠的 条评论
为什么被折叠?



