ModbusPoll是一款专业的Modbus主机仿真器工具,主要用于:
- 测试和调试Modbus从设备
- 监控Modbus设备数据
- 验证设备通信协议
- 故障诊断和排除
启动后会显示主界面,包含:
- 菜单栏:文件、连接、设置等
- 工具栏:常用功能快捷按钮
- 数据显示区域:寄存器数据表格
- 状态栏:连接状态和统计信息
串口连接(RTU/ASCII)
Connection → Connect 或点击工具栏连接图标
连接参数配置
以水处理机为例:
- Port: COM1
- Baud Rate: 9600
- Data Bits: 8
- Parity: None
- Stop Bits: 1
- Mode: RTU
- Response timeout: 1000ms
- Delay between polls: 100ms
集中供液设备网络连接:
- IP Address: 192.168.1.100
- Port: 502
- Unit ID: 1
- Response timeout: 3000ms
- Delay between polls: 500ms
温度监控:
- Slave ID: 1
- Function: 03 (Read Holding Registers)
- Address: 23 (0x0017)
- Quantity: 2
- Scan Rate: 1000ms
供液压力监控:
- Slave ID: 1
- Function: 03
- Address: 25 (0x0019)
- Quantity: 2
- Scan Rate: 500ms
液位状态监控:
- Slave ID: 1
- Function: 01 (Read Coils)
- Address: 0x0001
- Quantity: 16
- Scan Rate: 2000ms
电导率监控:
- Slave ID: 1
- Function: 03
- Address: 24 (0x0018)
- Quantity: 2
- Scan Rate: 1000ms
PH值监控:
- Slave ID: 1
- Function: 03
- Address: 29 (0x001D)
- Quantity: 2
- Scan Rate: 1000ms
根据水处理设备通信协议配置:
1. 温度参数(寄存器地址:0x0017)
- Function: 03
- Address: 23 (0x0017)
- Quantity: 2
- Data Format: Float (4字节)
2. 电导率参数(寄存器地址:0x0018)
- Function: 03
- Address: 24 (0x0018)
- Quantity: 2
- Data Format: Float
3. 供液压力参数(寄存器地址:0x0019-0x001A)
- Function: 03
- Address: 25 (0x0019)
- Quantity: 4
- Data Format: Float (供液一、供液二压力)
4. 液位参数(寄存器地址:0x001B-0x001C)
- Function: 03
- Address: 27 (0x001B)
- Quantity: 4
- Data Format: Float (储液、配液液位)
5. PH值参数(寄存器地址:0x001D)
- Function: 03
- Address: 29 (0x001D)
- Quantity: 2
- Data Format: Float
Setup → Read/Write Definition → Add Multiple
创建多个读取组:
- 组1:温度相关参数 (0x0017-0x0018)
- 组2:压力相关参数 (0x0019-0x001A)
- 组3:液位相关参数 (0x001B-0x001C)
- 组4:PH值参数 (0x001D)
- 组5:状态相关参数 (0x0001-0x0010)
重要:正确的字节序设置是数据正确显示的关键
配置步骤:
1. Display → Data Format → Advanced
2. 字节序选项:
```
□ Byte Swap - 字节交换
□ Word Swap - 字交换
四种组合对应不同字节序:
┌─────────────┬──────────┬────────────┐
│ 选项组合 │ 字节序 │ 示例 │
├─────────────┼──────────┼────────────┤
│ 无勾选 │ ABCD │ 42 0C CC CD │
│ Byte Swap │ BADC │ 0C 42 CD CC │
│ Word Swap │ CDAB │ CC CD 42 0C │
│ Both │ DCBA │ CD CC 0C 42 │
└─────────────┴──────────┴────────────┘
```
实际验证方法: 基于您的通信数据 CD CC 0C 42: 1. 尝试DCBA格式:CD CC 0C 42 → 35.2°C ✓ 2. 其他格式都会显示异常值 3. 因此您的设备使用DCBA字节序
配置建议:
- 水处理设备通常使用大端序(ABCD)
- PC-based设备通常使用小端序(DCBA)
- 根据实际数据验证选择正确格式
View菜单选项:
- Data View: 数据表格视图
- Register View: 寄存器视图
- Traffic View: 通信流量视图
- Error View: 错误日志视图
Setup → Alarm Setup
配置告警条件:
- 水温超限:> 40°C 或 < 35°C
- 供液压力异常:< 0.1MPa 或 > 0.5MPa
- 电导率异常:< 13.0 或 > 15.0 mS/cm
- 设备离线:通信超时 > 5秒
问题:无法连接到设备
解决方案:
- 检查串口/网络连接
- 确认波特率和通信参数
- 检查设备地址是否正确
- 验证电缆连接
问题:读取数据全为0或异常值
解决方案:
- 检查功能码是否正确
- 确认寄存器地址
- 检查数据格式设置
- 验证设备是否支持该功能
问题:频繁出现通信超时
解决方案:
- 增加Response Timeout时间
- 减少扫描频率
- 检查网络稳定性
- 确认设备负载情况
问题:数据显示格式不正确
解决方案:
- 检查字节序设置(大端/小端)
- 确认数据类型(整数/浮点)
- 调整数据位数设置
- 参考设备手册确认格式
问题:数据数值异常(过大或过小)
症状:
- 温度显示几千度或负值
- 压力显示异常大的数值
- 电导率显示不合理数值
解决步骤:
1. 查看Traffic View中的原始十六进制数据
2. 尝试不同字节序组合:
- Display → Data Format → Byte Swap
- Display → Data Format → Word Swap
3. 选择显示合理数值的组合
4. 验证多个参数确保设置正确
实例:
原始数据:CD CC 0C 42
- 默认(ABCD):异常值
- Byte swap(BADC):异常值
- Word swap(CDAB):异常值
- Byte+Word(DCBA):35.2°C ✓正确
Tools → Scripting
支持VB脚本自动化:
- 自动连接设备
- 批量数据处理
- 条件触发操作
- 报告生成
File → Export Data
支持多种格式:
- CSV文件
- Excel文件
- XML格式
- 自定义格式
可同时监控多个设备:
1. File → New Document
2. 配置不同设备参数
3. Window → Tile 平铺显示
4. 实现多设备集中监控
View → Trend View
功能特性:
- 实时趋势图表
- 历史数据回放
- 数据统计分析
- 异常点标记
# 水处理机与集中供液设备监控配置示例
设备信息:
设备型号: 水处理机+集中供液设备
通信方式: Modbus RTU/TCP
波特率: 9600
从站地址: 1
监控参数:
温度监控:
地址: 0x0017
单位: °C
告警: 35-40°C
电导率监控:
地址: 0x0018
单位: mS/cm
告警: 13.0-15.0
压力监控:
供液一: 0x0019
供液二: 0x001A
单位: MPa
告警: 0.1-0.5
液位监控:
储液: 0x001B
配液: 0x001C
单位: %
告警: 10-90%
PH值监控:
地址: 0x001D
单位: pH
告警: 6.5-7.5
扫描设置:
正常扫描: 1000ms
快速扫描: 500ms
慢速扫描: 2000ms
通信协议分析:
基于实际通信数据:
- 使用Modbus TCP协议
- 功能码03 (Read Holding Registers)
- 起始地址: 0x0017 (温度)
- 数据格式: 32位浮点数 (IEEE 754)
- 字节序分析:
* 原始数据: CD CC 0C 42
* 需要DCBA字节序 (Byte+Word Swap)
* 解析结果: 35.2°C
- 数据示例验证:
* CD CC 0C 42 (十六进制)
* → 0x420CCCCD (重排后)
* → 35.2000008 (IEEE 754浮点数)
* → 35.2°C (显示值)
配置要点:
- ModbusPoll设置: Display → Data Format
- 勾选: Byte Swap + Word Swap
- 数据类型: 32-bit Float
- 验证方法: 观察温度是否在合理范围(30-50°C)
' 水处理机与集中供液设备状态检查脚本
Sub CheckWaterTreatmentStatus()
Dim temp, pressure1, pressure2, conductivity, ph
' 读取温度 (地址23)
temp = mbPoll.ReadFloat(1, 3, 23)
' 读取压力 (地址25,26)
pressure1 = mbPoll.ReadFloat(1, 3, 25)
pressure2 = mbPoll.ReadFloat(1, 3, 26)
' 读取电导率 (地址24)
conductivity = mbPoll.ReadFloat(1, 3, 24)
' 读取PH值 (地址29)
ph = mbPoll.ReadFloat(1, 3, 29)
' 检查异常
If temp > 40 Or temp < 35 Then
MsgBox "水温异常: " & temp & "°C"
End If
If pressure1 < 0.1 Or pressure1 > 0.5 Then
MsgBox "供液一压力异常: " & pressure1 & "MPa"
End If
If conductivity < 13.0 Or conductivity > 15.0 Then
MsgBox "电导率异常: " & conductivity & "mS/cm"
End If
If ph < 6.5 Or ph > 7.5 Then
MsgBox "PH值异常: " & ph
End If
End Sub
01 - Read Coils (读取线圈状态)
02 - Read Discrete Inputs (读取离散输入)
03 - Read Holding Registers (读取保持寄存器)
04 - Read Input Registers (读取输入寄存器)
05 - Write Single Coil (写单个线圈)
06 - Write Single Register (写单个寄存器)
15 - Write Multiple Coils (写多个线圈)
16 - Write Multiple Registers (写多个寄存器)
1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200
基于实际通信数据的地址映射:
温度:0x0017 (十进制23)
电导率:0x0018 (十进制24)
供液一压力:0x0019 (十进制25)
供液二压力:0x001A (十进制26)
储液液位:0x001B (十进制27)
配液液位:0x001C (十进制28)
PH值:0x001D (十进制29)
状态类:0x0001-0x0010
控制类:0x0020-0x0030
字节序(Byte Order)是指多字节数据在内存中的存储顺序,主要有两种:
大端序(Big Endian):
- 高位字节存储在低地址
- 符合人类阅读习惯
- 网络传输标准字节序
小端序(Little Endian):
- 低位字节存储在低地址
- 多数x86处理器采用
- Intel架构默认字节序
以32位浮点数 35.2°C 为例:
IEEE 754 浮点数表示:0x420C_CCCD
大端序存储:
地址 内容
0x1000 0x42 (最高位字节)
0x1001 0x0C
0x1002 0xCC
0x1003 0xCD (最低位字节)
小端序存储:
地址 内容
0x1000 0xCD (最低位字节)
0x1001 0xCC
0x1002 0x0C
0x1003 0x42 (最高位字节)
方法1:通过通信数据分析 从commdata.txt看到的数据:CD CC 0C 42 1. 将这4个字节按不同字节序解释: - 大端序:0x42_0C_CCCD = 35.2 (合理的温度值) - 小端序:0xCDCC_0C42 = 非常大的数值(不合理) 2. 结论:设备使用大端序
方法2:查看设备手册 设备技术文档通常会说明: - "网络字节序" = 大端序 - "主机字节序" = 通常是小端序 - "Intel格式" = 小端序 - "Motorola格式" = 大端序
方法3:ModbusPoll中的验证 在ModbusPoll中测试: 1. Setup → Data Format → Byte Swap 2. 观察数据是否合理: - 温度应该在0-100°C范围 - 压力应该在0-10MPa范围 - 电导率应该在10-20mS/cm范围 3. 选择显示正确数值的字节序
配置路径:Display → Data Format
选项说明:
```
□ Byte swap - 交换字节序
□ Word swap - 交换字顺序
□ Dword swap - 交换双字顺序
组合设置对应不同格式:
- 无勾选:ABCD (大端序)
- Byte swap:BADC
- Word swap:CDAB
- Byte+Word swap:DCBA (小端序)
```
案例1:温度读取异常 问题:读取温度显示为几千度 原因:字节序设置错误 解决:勾选"Byte swap"调整字节序
案例2:压力值显示异常 读取数据:12 34 56 78 大端序解释:0x12345678 = 305,419,896 (异常) 小端序解释:0x78563412 = 2,018,915,346 (异常) 需要Word swap:0x34127856 = 873,756,758 (仍异常) 正确设置:Byte+Word swap = 0x78563412转换为浮点数
步骤1:记录原始数据 使用Traffic View查看原始十六进制数据 例如:42 0C CC CD
步骤2:手动计算验证 使用在线IEEE 754转换器: - 输入:420CCCCD - 输出:35.2000008... - 验证是否为合理数值
步骤3:ModbusPoll中测试 依次尝试四种字节序组合: 1. ABCD - 原始顺序 2. BADC - Byte swap 3. CDAB - Word swap 4. DCBA - Byte+Word swap 选择显示合理数值的设置
大端序设备:
- 施耐德PLC
- 西门子S7系列
- ABB设备
- 大多数网络设备
小端序设备:
- 三菱PLC
- 欧姆龙PLC
- PC-based控制器
- Intel架构设备
本教程基于ModbusPoll v7.0.0版本编写,适用于水处理机与集中供液设备参数监控系统。如有问题请参考官方文档或联系技术支持。