1. 工具简介
Modpoll
是一个基于命令行的 Modbus 主机模拟器和测试工具,广泛用于调试 Modbus 设备。它支持多种通信协议(ASCII、RTU、TCP、UDP)和数据类型,可以在 Windows、Linux 和基于 ARM 的设备(如 Raspberry Pi)上运行。
-
开发基础:使用 FieldTalk™ Modbus 驱动程序。
-
适用场景
:
- 测试 Modbus 从站设备。
- 调试 Modbus 通信协议。
- 模拟 Modbus 主站功能。
2. 支持的操作系统
- Windows(支持 x86 和 x64 架构)。
- Linux(支持 x86、x86_64、ARM32 和 ARM64 架构)。
- ARM 平台(如 Raspberry Pi 和 BeagleBoard)。
3. 系统要求
- Windows:支持 Windows 7 及更高版本。
- Linux:支持主要的 Linux 发行版(如 Ubuntu、Debian、CentOS 等)。
- 网络或串口:需连接 Modbus 从站设备,支持 TCP/IP 或串口(RS-232/RS-485)通信。
4. 安装步骤
4.1 Windows 安装
-
下载
modpoll
ZIP 文件:modpoll-3.15.zip。 -
解压 ZIP 文件到任意目录(如
C:\modpoll
)。 -
打开命令提示符(
cmd
),切换到解压目录下的
win
文件夹:
cd C:\modpoll\win
-
测试是否安装成功:
modpoll -h
如果显示帮助信息,则说明安装成功。
4.2 Linux 安装
-
下载
modpoll
的 TAR 压缩包:modpoll-3.15.tgz。 -
在终端运行以下命令解压文件:
tar xzf modpoll-3.15.tgz
-
解压后会生成一个包含多种架构的二进制文件的文件夹。将适合当前系统架构的文件路径添加到环境变量:
export PATH=$PWD/modpoll/linux_arm-eabihf:$PATH
(此处以 ARM 平台为例,具体路径请根据实际情况修改)。
-
测试是否安装成功:
modpoll -h
如果显示帮助信息,则说明安装成功。
4.3 可选步骤:添加到全局路径
为了方便运行,可以将 modpoll
添加到系统路径:
-
Windows:将解压目录(如
C:\modpoll\win
)添加到环境变量Path
中。 -
Linux
:将
modpoll
文件移动到
/usr/local/bin
或其他系统路径:
sudo mv modpoll /usr/local/bin/
5. 使用方法
5.1 基本语法
modpoll [选项] SERIALPORT|HOST [WRITEVALUES...]
-
SERIALPORT
:串口名称,适用于 Modbus ASCII 或 Modbus RTU 协议。
- Windows:
COM1
,COM2
… - Linux:
/dev/ttyS0
,/dev/ttyS1
…
- Windows:
-
HOST:主机名或 IP 地址,适用于 Modbus TCP 协议。
-
WRITEVALUES:要写入的值列表。如果未指定,默认执行读取操作。
5.2 常用选项
通信协议
-m ascii
:Modbus ASCII 协议。-m rtu
:Modbus RTU 协议(默认)。-m tcp
:Modbus TCP 协议。-m udp
:Modbus UDP 协议。
从站地址
-a #
:指定从站地址(串口范围 1-247,TCP 范围 0-255,默认值为 1)。
寄存器设置
-
-r #
:起始寄存器地址(范围 1-65536,默认值为 1)。 -
-c #
:读取的寄存器数量(范围 1-125,默认值为 1)。 -
-t #
:数据类型:
0
:线圈(FC1)。1
:离散输入(FC2)。3
:输入寄存器(FC4)。4
:保持寄存器(FC3,默认)。
串口设置
-b #
:波特率(如 9600、19200,默认值为 19200)。-d #
:数据位(ASCII 协议为 7 或 8,RTU 为 8)。-s #
:停止位(1 或 2,默认值为 1)。-p none
:无校验。-p even
:偶校验(默认)。-p odd
:奇校验。
TCP 设置
-p #
:IP 协议端口号(默认值为 502)。
5.3 示例
1. 获取帮助信息
modpoll -h
2. Modbus RTU 示例
通过 Modbus RTU 从地址为 3 的从站连续读取 10 个保持寄存器,起始寄存器为 500:
modpoll -b 9600 -p none -m rtu -a 3 -r 500 -c 10 COM1
3. Modbus TCP 示例
从 IP 地址为 10.0.0.100 的设备读取 5 个浮点值,起始寄存器为 100:
modpoll -t 4:float -r 100 -c 5 -1 10.0.0.100
4. 写入操作示例
-
写多个寄存器(功能码 16):
modpoll -r 1201 10.0.0.100 1234
-
写单个寄存器(功能码 6):
modpoll -r 1201 -c 1 10.0.0.100 1234
5. 读取保持寄存器(Modbus TCP)
modpoll -m tcp -a 1 -r 100 -c 5 192.168.0.10
说明:
- 使用 Modbus TCP 协议。
- 从 Modbus 地址为
1
的设备读取保持寄存器(功能码 03)。 - 起始寄存器地址为
100
,读取5
个寄存器。 - 目标设备的 IP 地址为
192.168.0.10
。
6. 读取线圈状态(Modbus RTU)
modpoll -m rtu -p /dev/ttyUSB0 -b 9600 -a 2 -1 -r 10
说明:
- 使用 Modbus RTU 协议。
- 串口设备为
/dev/ttyUSB0
,波特率为9600
。 - 从 Modbus 地址为
2
的设备读取线圈状态(功能码 01)。 - 起始寄存器地址为
10
,读取 1 个寄存器。
7. 写单个保持寄存器
modpoll -m tcp -a 1 -r 200 -t 3:int -1 192.168.0.10
说明:
- 使用 Modbus TCP 协议。
- 向 Modbus 地址为
1
的设备的保持寄存器(功能码 06)写入值。 - 寄存器地址为
200
,数据类型为整数
。 - 目标设备的 IP 地址为
192.168.0.10
。
8. 读取离散输入(功能码 02)
modpoll -m rtu -p COM1 -b 19200 -a 3 -2 -r 20 -c 8
说明:
- 使用 Modbus RTU 协议。
- 串口为
COM1
,波特率为19200
。 - 从 Modbus 地址为
3
的设备读取离散输入(功能码 02)。 - 起始地址为
20
,读取8
个输入。
9. 写多个保持寄存器
modpoll -m rtu -p /dev/ttyUSB1 -b 115200 -a 4 -r 300 -t 3:int -c 3 --value 100 200 300
说明:
- 使用 Modbus RTU 协议。
- 向地址为
4
的设备写入多个保持寄存器。 - 起始地址为
300
,写入的值为100, 200, 300
。 - 波特率为
115200
。
6. 常见问题解决
1. “找不到命令”错误
- 检查
modpoll
是否添加到系统路径。 - 确认文件是否具有执行权限(Linux/macOS)。
2. 权限不足
-
在 Linux/macOS 上运行命令时,尝试使用
sudo
:
sudo modpoll ...
3. 无法连接设备
- 确保 Modbus 从站设备地址、波特率等配置正确。
- 检查串口或网络连接是否正常。
通过以上内容,您可以快速掌握 modpoll
的安装和使用方法,用于调试和测试 Modbus 设备。
调试与注意事项
-
串口配置
:
- 确保波特率、数据位、停止位、奇偶校验与设备一致。
- 使用
-p
指定串口设备。
-
功能码匹配
:
- 功能码
01
: 读取线圈状态。 - 功能码
02
: 读取离散输入。 - 功能码
03
: 读取保持寄存器。 - 功能码
04
: 读取输入寄存器。 - 功能码
05/06
: 写单个线圈或寄存器。 - 功能码
15/16
: 写多个线圈或寄存器。
- 功能码
-
寄存器地址
:
- Modbus 寄存器地址从
1
开始,但有些工具从0
开始计数。确认工具与设备的地址偏移。
- Modbus 寄存器地址从
-
权限问题
:
- 在 Linux 中,确保用户有访问串口的权限,必要时使用
sudo
。
- 在 Linux 中,确保用户有访问串口的权限,必要时使用
通过上述教学,你可以使用 modpoll
测试和调试 Modbus 设备,快速验证通信是否正常。