Free Modbus Simulator(ModRSsim2)简介
Free Modbus Simulator(最新版本命名为 ModRSsim2)是一款 Windows 平台上的免费 Modbus RTU 和 TCP 从站(Slave/Server)模拟器,项目托管在 SourceForge:sourceforge.net/projects/modrssim2。
ModRSsim2 是原版 “Free Modbus Simulator” 的一个分支(fork)和扩展版本,由社区开发者维护。使用 Visual Studio C++ 2010 编写,完整源码开源。它在原版基础上增加了更多诊断功能和脚本支持。
功能特性
- 全地址空间模拟:支持四种 Modbus 数据类型(0xxxx 线圈、1xxxx 离散输入、3xxxx 输入寄存器、4xxxx 保持寄存器)的完整地址范围
- 多设备模拟:可同时模拟多个不同的 Device ID(Slave Address)
- 双协议:同时支持 Modbus RTU(串口)和 Modbus TCP(以太网)
- 流量捕获:完整的字节级通信捕获和日志记录,带人工可读的解码描述
- CSV 加载:从 CSV 文件批量加载寄存器初始值
- 脚本环境:支持测试脚本,自动化修改寄存器值
- HTML 自定义显示:可以使用 HTML 模板自定义数据显示界面
- 完整源码:C++ 源码可用,便于二次开发
下载与安装
# 从 SourceForge 下载
# https://sourceforge.net/projects/modrssim2/
# 直接下载最新版本的 EXE 安装包,运行安装即可
安装后启动 ModRSsim2,主界面提供以下操作区:
- 顶部菜单栏:配置、连接、脚本、日志等
- 左侧设备树:管理模拟的多个从站设备
- 中间数据区:显示和编辑寄存器/线圈的值
- 底部日志区:显示通信流量和解码信息
创建 TCP 从站
- 菜单栏点击 Connection → TCP/IP
- 设置监听端口(默认 502)
- 设置从站地址(Device ID):1
- 在数据区选择 Holding Registers (4xxxx) 标签页
- 直接在表格中填入想要返回的寄存器值
- 点击 Start 按钮启动模拟
用 Modbus Poll 或 Modpoll 连接 127.0.0.1:502 测试,即可读取到设定的值。
创建 RTU 串口从站
- 菜单栏点击 Connection → Serial (RTU)
- 选择串口号(如 COM3)
- 设置波特率(9600)、数据位(8)、校验位(None)、停止位(1)
- 设置从站地址
- 点击 Start 启动
⚠️ ModRSsim2 使用串口时,该串口会被独占。不要同时用其他软件打开同一个串口,否则会出现”端口被占用”错误。
通信日志与诊断
ModRSsim2 的通信日志功能非常详尽,对于调试 Modbus 通信问题非常有价值:
- 字节级捕获:显示原始的十六进制通信字节
- 解码描述:自动解析每帧的含义(如 “FC03: Read Holding Registers from address 0, count 10″)
- 时间戳:每条记录带有精确的时间戳
- 日志导出:可导出为文本文件进行分析
CSV 批量加载寄存器值
如果你需要模拟一个有几十上百个寄存器的设备,逐一手动填写值是不现实的。ModRSsim2 支持 CSV 文件批量导入:
# CSV 格式示例(holding_registers.csv)
Address,Value,Description
40001,1234,A相电压(mV)
40002,1198,B相电压(mV)
40003,1205,C相电压(mV)
40004,850,A相电流(mA x100)
40005,830,B相电流(mA x100)
40006,845,C相电流(mA x100)
40007,1020,频率(Hz x100)
40008,500,有功功率(W)
菜单 → File → Import CSV → 选择文件 → 导入完成。
ModRSsim2 vs 其他免费模拟器
| 工具 | 平台 | 特点 | 活跃度 |
|---|---|---|---|
| ModRSsim2 | Windows | 全地址空间、通信日志、CSV导入、开源 | 低 |
| ModbusPal | 跨平台(Java) | Python脚本动态生成数据 | 低 |
| Modbus Slave | Windows | 商业软件,功能最完善 | 活跃 |
| Unslave | 跨平台 | 现代 UI,仍在开发中 | 中 |
总结
ModRSsim2 是 Windows 平台上最实用的免费 Modbus 从站模拟器之一。它虽然没有 ModbusPal 那样的 Python 脚本动态数据能力,但在静态模拟场景(按照已知的数据表模拟一个固定的从站设备)中更加简单直接。特别是它的通信日志解码功能和 CSV 批量导入功能,非常适合在 Modbus 主站开发阶段进行联调测试。
发表回复