软件用途
Modbus Studio 是一个用于 Modbus RTU / Modbus TCP 调试的桌面工具,主要用于:
- 作为 Client 连接真实设备并读取、写入点位。
- 作为 Server 模拟从站,供其他主站软件或设备读取、写入。
- 使用寄存器字典统一管理地址、名称、数据类型、倍率、单位、权限和备注。
- 保存工程文件,恢复 Client 数据、Server 数据、寄存器字典、连接配置和报文日志。
2. 为什么要做这个软件
在日常上位机、控制器、传感器和 PLC 调试中,很多工程师会使用 Modbus Poll 和 Modbus Slave 这类工具。它们很经典,也很稳定,但在实际项目交付和反复联调时,会遇到一些不方便的地方。
2.1 Modbus Poll 的常见问题
Modbus Poll 适合快速读取某一段寄存器,但它更偏“地址段调试”,不是“工程点位调试”。项目点位多了以后,常见问题包括:
- 点位含义需要额外查表,地址
40001到底是什么变量、单位是什么、倍率是多少,不在工具里形成统一上下文。 - 多种数据类型需要人工切换或手动换算,例如
UINT16、INT16、FLOAT_ABCD、倍率0.1等,容易算错。 - 每次调试不同设备时,都要重新配置功能码、起始地址、数量和显示格式。
- 读取和写入更关注原始寄存器,不够贴近“温度、压力、状态、设定值”这类工程变量。
- 工程资料、报文日志、点位说明通常散落在 Excel、截图、聊天记录和测试记录中,后续复现困难。
2.2 Modbus Slave 的常见问题
Modbus Slave 适合临时模拟从站,但它通常更关注四个数据区本身,而不是项目字典。实际模拟设备时会遇到:
- Server 模拟数据和 Client 读取点位往往需要分别配置,两个工具之间不能自然复用同一份点位表。
- 模拟保持寄存器、输入寄存器、线圈、离散输入时,点位名称、单位、倍率和备注不够直观。
- 外部主站写入后,虽然寄存器值变化了,但不容易直接看出对应的是哪个业务变量。
- 项目切换后,模拟数据、连接参数和点位说明不容易完整恢复。
- Client 调试和 Server 仿真分属两个工具,报文日志、工程配置和测试状态无法统一管理。
2.3 Modbus Studio 要解决什么
Modbus Studio 的目标不是简单复制 Modbus Poll 或 Modbus Slave,而是把常见 Modbus 调试过程整理成一个完整工程:
- 用一份“寄存器字典”同时驱动 Client 和 Server。
- Client 只读取字典里定义的点位,不读无关地址。
- Server 只模拟字典里定义的点位,不生成无意义的固定地址表。
- 每个点位都有地址、名称、数据类型、长度、读写权限、倍率、单位和备注。
- 原始 HEX 和工程解析值同时显示,写入解析值时自动反算为设备原始值。
- TCP / RTU Client、TCP / RTU Server、报文日志和工程管理放在同一个软件里。
- 工程文件可以保存连接配置、Client 数据、Server 数据、寄存器字典和报文日志,方便下次继续调试或交付给同事。
简单来说,Modbus Poll 和 Modbus Slave 更像“协议调试工具”,而 Modbus Studio 更想做成“项目调试工作台”。它让一次调试留下完整的工程上下文,而不是只留下几个临时地址和一堆零散截图。
3. 启动软件
Modbus Studio\Modbus Studio.exe4. 基本使用流程
推荐按以下顺序使用:
- 在“寄存器字典”中配置点位。
- 在“Client”中连接设备,软件会按字典自动循环读取。
- 如需模拟从站,在“Server”中按同一份字典配置数据并启动服务。
- 在“报文日志”中查看 TX/RX 原始报文和解析结果。
- 在“工程管理”中保存为
.mbs工程文件。
5. 寄存器字典
寄存器字典是软件的核心。Client 和 Server 都会根据字典中的地址和长度工作,不会读取或显示字典之外的点位。
5.1 字典字段说明
| 字段 | 说明 |
|---|---|
| 分组 | 用于分类点位,例如“温度传感器”“系统状态”。 |
| 地址 | Modbus 显示地址,例如40001。 |
| 名称 | 点位名称,例如“设定温度”。 |
| 数据类型 | 解析原始值时使用的数据格式。 |
| 长度 | 占用的 16 位寄存器数量,位区通常为 1。 |
| 读写权限 | R只读、W只写、RW读写。 |
| 比例因子 | 用于工程值换算。 |
| 单位 | 显示单位,例如℃、kPa、%。 |
| 备注 | 点位用途、范围或调试说明。 |
5.2 地址范围
| 地址范围 | Modbus 区域 | Client 行为 | Server 行为 |
|---|---|---|---|
00001-09999 | 线圈 Coil | 可读取,可写线圈 | 可模拟,可切换开关值 |
10001-19999 | 离散输入 Discrete Input | 可读取,只读 | 可模拟,只读区 |
30001-39999 | 输入寄存器 Input Register | 可读取,只读 | 可模拟寄存器值 |
40001-49999 | 保持寄存器 Holding Register | 可读取,可写寄存器 | 可模拟寄存器值 |
说明:界面中填写的是常见 Modbus 显示地址,协议报文会自动转换为零基地址。例如40001会转换为协议地址0。
5.3 数据类型
支持的数据类型:
UINT16INT16UINT32INT32FLOAT_ABCDFLOAT_CDABFLOAT_BADCFLOAT_DCBABCDBIT
选择数据类型后,软件会自动给出推荐长度,用户也可以手动修改。
5.4 比例因子
界面显示的解析值与设备原始值之间按比例因子换算:
解析值 = 原始值 × 比例因子 原始值 = 解析值 ÷ 比例因子示例:
| 原始值 | 比例因子 | 界面解析值 |
|---|---|---|
250 | 0.1 | 25 |
1234 | 0.01 | 12.34 |
写入“解析值”时,软件会自动反算为原始寄存器值再发送。
6. Client 使用
Client 页面用于连接真实 Modbus 设备。
6.1 连接 RTU 设备
- 在左侧“连接配置”选择协议类型为
Modbus RTU。 - 点击“刷新”获取串口列表。
- 选择端口、波特率、数据位、停止位、校验位和超时时间。
- 点击“连接 RTU”。
- 连接成功后,状态会显示为已连接。
6.2 连接 TCP 设备
- 在左侧“连接配置”选择协议类型为
Modbus TCP。 - 输入主机地址,例如
127.0.0.1。 - 输入端口,例如
502。 - 设置超时时间。
- 点击“连接 TCP”。
6.3 自动读取
Client 不再依赖手动输入功能码、起始地址和数量。连接成功后,软件会根据寄存器字典自动循环读取:
- 线圈区使用
01。 - 离散输入区使用
02。 - 保持寄存器区使用
03。 - 输入寄存器区使用
04。
可在顶部设置“循环周期”,单位为毫秒。
6.4 合并读取
“合并读取”开启后,软件会尝试把相邻或接近的字典点位合并为较少的读取请求,减少报文数量。
适合: