文章目录
- [Modbus Slave 使用教程:快速搭建模拟从站进行测试与开发](#Modbus Slave 使用教程:快速搭建模拟从站进行测试与开发)
-
- [步骤详解:搭建 Modbus Slave](#步骤详解:搭建 Modbus Slave)
-
- [1. 安装与启动](#1. 安装与启动)
- [2. 配置从站连接 (Connection Setup)](#2. 配置从站连接 (Connection Setup))
- [3. 定义从站数据 (设置寄存器/线圈映射)](#3. 定义从站数据 (设置寄存器/线圈映射))
- [4. 设置初始值与变化模式 (可选但重要)](#4. 设置初始值与变化模式 (可选但重要))
- [5. 连接 Master 进行测试](#5. 连接 Master 进行测试)
- 高级功能与技巧
- 常见问题与解决 (FAQ)
Modbus Slave 使用教程:快速搭建模拟从站进行测试与开发
所需工具
- Modbus Slave 软件: 本文以 Windows 环境下常用的 Modbus Slave 软件 (由
modbusdriver.com
提供,有免费试用版) 为例进行演示。其他优秀工具包括:qModMaster
(开源, 跨平台)Simply Modbus Slave
(免费软件)CAS Modbus Scanner
(免费)MThings
(国产优秀工具)- 基于 Python 的
pymodbus
库 (编程实现)
- Modbus Master 软件/设备: 用于连接和测试你的 Slave,例如:
- Modbus Poll (同厂)
- qModMaster (也可作 Master)
- 真实 PLC 或 HMI
- 自己编写的 Master 端程序
软件下载: https://pan.baidu.com/s/1KTsBqZd7nG3XAb_54I0f5Q 提取码: 1111
步骤详解:搭建 Modbus Slave
1. 安装与启动
- 从官方网站或可靠来源下载并安装 Modbus Slave 软件。
- 启动软件。Modbus Slave 界面包含菜单栏、工具栏、主显示区域(寄存器/线圈值列表)、连接状态栏等。
2. 配置从站连接 (Connection Setup)
连接
- 菜单操作:
Connection
->Connect...
(或工具栏上的连接图标)。
- 关键配置项:
- Connection Type (连接类型): 选择
Modbus RTU over TCP/IP
(常用,模拟串口转以太网设备或直接 TCP 设备) 或Modbus TCP/IP
(纯以太网)。Modbus RTU
(真实串口) 或Modbus ASCII
较少用于纯软件模拟。 - Slave ID (从站地址): 设置你的模拟从站的逻辑地址 (1-247)。例如,设为
1
。 - TCP/IP Settings (TCP/IP 设置):
- IP Address (IP 地址): 如果是
Modbus TCP/IP
,通常选择0.0.0.0
(监听本机所有网卡) 或127.0.0.1
(仅限本机访问)。如果是Modbus RTU over TCP/IP
(模拟串口服务器),IP 也是本机地址。 - Port (端口): Modbus TCP 标准端口是
502
。保持默认或自定义一个端口 (确保防火墙允许)。
- IP Address (IP 地址): 如果是
- Serial Port Settings (串口设置 - 如果选 RTU/ASCII): 选择虚拟串口对 (如
com2<->com3
需要配合虚拟串口软件创建) 或真实串口 (需连接线缆)。 - Timeouts (超时): 可保持默认。
- Connection Type (连接类型): 选择
- 确认: 点击
OK
或Connect
。状态栏应显示Connected
或类似信息,表示 Slave 已在指定端口上监听。
3. 定义从站数据 (设置寄存器/线圈映射)
-
Modbus Slave 的核心是模拟数据。你需要定义模拟从站拥有哪些寄存器和线圈。
-
菜单操作:
Setup
->Slave Definition...
(或功能键F8
)。 -
关键配置项:
- Slave ID: 确认或修改当前配置连接的 Slave ID (需与步骤 2 一致)。
- Function (功能码区域): 软件通常按功能码区域组织数据:
01 (Read Coils)
: 定义可读写的 线圈 (Coils) 状态 (0
/1
)。设置 起始地址 (如0
) 和 数量 (如10
)。02 (Read Discrete Inputs)
: 定义只读的 离散输入 (Discrete Inputs) 状态 (0
/1
)。设置起始地址和数量 (如 0, 10)。03 (Read Holding Registers)
: 定义可读写的 保持寄存器 (Holding Registers) (16-bit 整数)。设置起始地址 (如0
) 和数量 (如10
)。04 (Read Input Registers)
: 定义只读的 输入寄存器 (Input Registers) (16-bit 整数)。设置起始地址 (如0
) 和数量 (如10
)。 提示:Holding 和 Input 寄存器地址空间是独立的,可以都从 0 开始。
- 数据类型 :
Signed/Unsigned INT (16-bit)
Signed/Unsigned LONG (32-bit)
(占用 2 个连续寄存器, 需注意字节序ABCD
或DCBA
)FLOAT (32-bit)
(同样占用 2 个连续寄存器, 需注意字节序ABCD
或DCBA
)String
(ASCII 字符串,占用多个连续寄存器)
-
确认: 点击
OK
。主界面会显示你定义的线圈和寄存器列表,通常地址、值、数据类型(如果指定)等列。
4. 设置初始值与变化模式 (可选但重要)
- 手动设置初始值:
- 在寄存器/线圈列表的
Value
列中直接双击单元格输入初始值。 - 线圈:输入
0
(OFF) 或1
(ON)。 - 寄存器:输入十进制数值 (如
1234
), 十六进制 (如0x04D2
),或根据定义的数据类型输入浮点数等。
- 在寄存器/线圈列表的
- 自动变化 (Auto Increment / Random / Formula): 为了模拟动态数据:
- 选中一个或多个寄存器/线圈。
- 菜单操作:
Setup
->Initialization
或右键菜单中找到类似选项。 - 常用模式:
Manual
: 手动修改。Random
: 在设定范围内随机变化。Increment
: 每次请求或按时间间隔递增 (可设置步长、上限、下限)。Decrement
: 递减。Zero
: 始终为 0。Formula
: 使用公式计算值 (高级功能)。
- 设置变化参数 (变化速率、范围等)。
5. 连接 Master 进行测试
- 启动你的 Modbus Master 软件 (如 Modbus Poll) 或设备/程序。
- 在 Master 软件中配置连接:
- Connection Type: 与 Slave 设置匹配 (
Modbus TCP/IP
或Modbus RTU over TCP/IP
)。 - IP Address: 填写运行 Slave 软件的电脑的 真实 IP 地址 (如果 Master 在另一台机器) 或
127.0.0.1
(如果 Master 和 Slave 在同一台机器)。 - Port:
502
(或 Slave 设置的自定义端口)。 - Slave ID: 设置为 Slave 中定义的 ID (如
1
)。
- Connection Type: 与 Slave 设置匹配 (
- 在 Master 软件中设置要读取/写入的 数据区域 (Function) 和 地址范围 (Address),确保覆盖 Slave 定义的范围 (如 Holding Registers 0-9)。
- 连接 Master。如果一切配置正确:
- Master 应能成功连接到 Slave。
- Master 的界面应显示从 Slave 读取到的初始值或动态变化的值。
- 测试读操作: 在 Master 上执行读命令 (如 Read Holding Registers),检查返回的数据是否与 Slave 界面显示一致。
- 测试写操作:
- 在 Master 上尝试写入一个线圈 (Function 05 或 15) 或一个保持寄存器 (Function 06 或 16)。
- 观察 Slave 软件界面上对应的线圈或寄存器的值 是否立即更新 为你写入的值。这是验证写功能是否正常的关键!
- 如果 Slave 设置了自动变化,观察 Master 读取到的值是否按预期变化。
高级功能与技巧
- 多从站模拟: 大多数 Slave 软件允许在同一软件实例中创建和运行 多个 Slave ID。这对于测试网关或需要与多个设备通信的 Master 非常有用。在连接或定义设置中查找添加新 Slave 的选项。
- 数据记录 (Logging):
Setup
->Communication
->Log
(或类似路径)。- 启用日志记录,选择记录内容 (发送/接收的原始报文、解析后的读写操作)。
- 指定日志文件路径。这对于 调试通信故障、分析协议交互 至关重要!
- 响应延迟 (Delay): 模拟真实设备的响应时间。在连接设置或 Slave 定义中查找
Response Delay
选项,设置毫秒级的延迟。 - 错误注入 (Error Simulation): 高级工具允许模拟从站返回错误响应码 (Exception Codes),测试 Master 的容错处理能力。查找
Exceptions
或Error Simulation
设置。 - 导入/导出定义: 将精心配置好的 Slave 定义 (寄存器映射、初始值、变化规则) 保存为文件 (
*.sdf
或其他格式),方便下次快速加载或分享给团队。 - 视图定制: 调整显示的列、数据格式 (十进制/十六进制/浮点)、颜色等,提高可读性。
常见问题与解决 (FAQ)
- Master 连接不上 Slave:
- 检查 IP 和端口: 确保 Master 连接的 IP 是 Slave 所在机器的正确 IP (
127.0.0.1
仅限本机),端口号与 Slave 监听端口一致 (502
或自定义)。 - 检查防火墙: 关闭 Windows 防火墙或添加允许
502
端口 (TCP) 的入站规则。 - 检查 Slave ID: Master 和 Slave 配置的 Slave ID 必须相同。
- 检查连接类型: Master 和 Slave 必须使用相同的连接类型 (TCP/IP, RTU over TCP)。
- 看日志 启用 Slave 的通信日志,看是否有连接请求进来,是否有错误信息。
- 检查 IP 和端口: 确保 Master 连接的 IP 是 Slave 所在机器的正确 IP (
- Master 能连上但读不到数据/数据全为零:
- 检查功能码和地址: 确保 Master 请求的功能码 (
03
读 Holding,04
读 Input) 和地址范围 完全匹配 Slave 中定义的数据区域和起始地址。 - 检查 Slave 定义: 确认在 Slave 中正确定义了 Master 请求的寄存器/线圈区域,并且设置了非零的初始值或启用了自动变化。
- 看日志! 查看 Slave 日志,确认它收到了读请求,并且返回了预期的数据。检查返回的数据是否正确。
- 检查功能码和地址: 确保 Master 请求的功能码 (
- Master 写入后 Slave 值不更新:
- 检查功能码: Master 写线圈必须用
05
(写单个) 或15
(写多个),写保持寄存器必须用06
(写单个) 或16
(写多个)。写 Input 寄存器 (04
) 是不允许的! - 检查地址: Master 写入的地址必须在 Slave 定义的对应可写区域 (Coils 或 Holding Registers) 范围内。
- 看日志! 查看 Slave 日志,确认它收到了写请求,并且请求的地址和值是正确的。检查 Slave 是否成功处理了写请求。
- 检查功能码: Master 写线圈必须用
- 数据格式不对 (如浮点数显示乱码):
- 检查字节序: 32-bit 数据 (LONG, FLOAT) 由两个 16-bit 寄存器组成。Master 和 Slave 对这两个寄存器的 顺序 (Byte Order / Word Order) 定义必须一致!常见的有
ABCD
(Big-Endian),BADC
(Big-Endian Byte Swap),CDAB
(Little-Endian Byte Swap),DCBA
(Little-Endian)。在 Master 和 Slave 中调整字节序设置直到匹配。
- 检查字节序: 32-bit 数据 (LONG, FLOAT) 由两个 16-bit 寄存器组成。Master 和 Slave 对这两个寄存器的 顺序 (Byte Order / Word Order) 定义必须一致!常见的有