Modpoll Modbus调试工具完全指南:命令行主站模拟器从入门到精通

本文目录
  1. 1. 什么是 Modpoll?
  2. 2. Modpoll 支持的功能
  3. 3. 安装 Modpoll
  4. 4. Windows 平台安装
  5. 5. Linux 平台安装
  6. 6. ARM / 嵌入式 Linux 安装
  7. 7. Modpoll 命令行参数详解
  8. 8. 常用实战命令
  9. 9. 1. Modbus TCP 读取保持寄存器(FC03)
  10. 10. 2. Modbus RTU 串口通信
  11. 11. 3. 持续轮询模式(监控用)
  12. 12. 4. 读线圈状态(FC01)
  13. 13. 5. 写入单寄存器(FC06)
  14. 14. 6. 读取 32 位浮点数(Float)
  15. 15. 7. 批量写入多寄存器(FC16)
  16. 16. 8. 读写组合操作(FC23)
  17. 17. 集成到自动化测试脚本
  18. 18. Modpoll 与其他 Modbus 工具对比
  19. 19. 常见问题排查指南
  20. 20. 连接超时
  21. 21. 读取值全为零
  22. 22. RTU 模式返回异常/错误
  23. 23. 浮点数读数异常
  24. 24. 总结

什么是 Modpoll?

Modpoll 是一款开源的命令行 Modbus 主站模拟器,由 proconX 公司基于其 FieldTalk™ 协议栈开发。它可以在 Windows、Linux、QNX 等操作系统上运行,是工程师进行 Modbus 设备调试、协议测试和批量数据采集时的利器。与带 GUI 的 Modbus Poll 不同,Modpoll 完全通过命令行参数控制,非常适合集成到自动化测试脚本和 CI/CD 流程中。

官方下载地址:http://www.focus-sw.com/fieldtalk/modpoll.html

Modpoll 支持的功能

  • 传输模式:Modbus RTU(串口)和 Modbus TCP(以太网),同时支持通过 RTU-over-TCP 网关通信
  • 功能码覆盖:FC01(读线圈)、FC02(读离散输入)、FC03(读保持寄存器)、FC04(读输入寄存器)、FC05(写单线圈)、FC06(写单寄存器)、FC15(写多线圈)、FC16(写多寄存器)、FC23(读/写多寄存器)
  • 数据格式:支持 HEX、十进制无符号、十进制有符号、32 位浮点数(Float)等多种显示格式
  • 字节序配置:支持 Big-Endian 和 Little-Endian 两种字节序,适配不同厂商的 PLC 设备
  • 轮询模式:支持单次读取和连续轮询,可自由指定轮询间隔
  • 输出格式:支持标准文本输出和十六进制 raw 输出两种模式

安装 Modpoll

Windows 平台安装

从官网下载 Windows 版本的 ZIP 压缩包,解压后即可获得 modpoll.exe 可执行文件。建议将解压目录添加到系统的 PATH 环境变量中,方便在任意目录下调用。Windows 10/11 用户也可以直接通过 WSL 使用 Linux 版本的 Modpoll。

Linux 平台安装

# 下载 Linux 版本(以 3.10 版本为例)
wget http://www.focus-sw.com/fieldtalk/modpoll-3.10-linux-x86_64.tar.gz

# 解压
tar -xzf modpoll-3.10-linux-x86_64.tar.gz

# 进入目录
cd modpoll-3.10-linux-x86_64

# 测试运行
./modpoll --version

# 可选:创建软链接方便全局调用
sudo ln -s $(pwd)/modpoll /usr/local/bin/modpoll

ARM / 嵌入式 Linux 安装

如果需要在树莓派等 ARM 设备上运行,可以从官网选择对应的 ARM 版本,或从源码交叉编译。proconX 提供了 armhf 和 aarch64 等架构的预编译包。

Modpoll 命令行参数详解

参数含义示例
-m传输模式(tcp / rtu / ascii)-m tcp
-a从站地址(Slave ID)-a 1
-r起始寄存器/线圈地址(协议地址)-r 100
-c读取/写入的点数(Count)-c 20
-b波特率(RTU 模式)-b 9600
-p校验位(none / even / odd)-p none
-t数据类型与显示格式-t 4:hex
-1持续轮询模式-1
-o超时时间(秒)-o 3
-0地址从 0 开始(默认 PLC 地址从 1 开始)-0

常用实战命令

1. Modbus TCP 读取保持寄存器(FC03)

从 IP 地址 192.168.1.100、端口 502 的设备,读取从站地址 1 的保持寄存器 0-9(共 10 个):

modpoll -m tcp -a 1 -r 1 -c 10 192.168.1.100

输出示例:

-- Polling slave 1...
[1]: 1234
[2]: 5678
[3]: 0
[4]: 100

2. Modbus RTU 串口通信

# Linux 平台(/dev/ttyUSB0)
modpoll -m rtu -a 1 -r 1 -c 10 -b 9600 -p none /dev/ttyUSB0

# Windows 平台(COM3)
modpoll -m rtu -a 1 -r 1 -c 10 -b 9600 -p none COM3

3. 持续轮询模式(监控用)

# 每 500 毫秒轮询一次,无限循环
modpoll -m tcp -a 1 -r 1 -c 20 -1 192.168.1.100 500

# 输出带时间戳的轮询数据
modpoll -m tcp -a 1 -r 1 -c 5 -1 192.168.1.100 1000 | while read line; do
    echo "$(date '+%H:%M:%S') $line"
done

4. 读线圈状态(FC01)

# 读取地址 0 开始的 8 个线圈
modpoll -m tcp -a 1 -r 1 -c 8 -t 0 192.168.1.100

注意:-t 0 表示线圈类型,-t 1 表示离散输入,-t 3 表示输入寄存器,-t 4 表示保持寄存器。

5. 写入单寄存器(FC06)

# 将协议地址 0 的寄存器值写入 1234
modpoll -m tcp -a 1 -r 1 192.168.1.100 1234

6. 读取 32 位浮点数(Float)

很多工业仪表(如温度变送器、流量计)使用两个连续的 16 位保持寄存器存储一个 IEEE 754 32 位浮点数:

# 从地址 0 开始读取 2 个寄存器,按 float 格式显示
modpoll -m tcp -a 1 -r 1 -c 2 -t 4:float 192.168.1.100

7. 批量写入多寄存器(FC16)

# 从协议地址 0 开始,依次写入 100, 200, 300, 400
modpoll -m tcp -a 1 -r 1 192.168.1.100 100 200 300 400

8. 读写组合操作(FC23)

# 读取地址 0-4(5个寄存器),同时将地址 10-11 写入 99, 88
modpoll -m tcp -a 1 -r 1 -c 5 -w 11 -q 2 192.168.1.100 99 88

集成到自动化测试脚本

Modpoll 的命令行特性使其成为自动化测试的理想选择。以下是一个完整的设备验收测试脚本:

#!/bin/bash
# Modbus 设备寄存器读写验收测试
# 用法: ./modbus_test.sh <设备IP>

DEVICE_IP=${1:-"192.168.1.100"}
PASS=0
FAIL=0

echo "=== Modbus 设备验收测试 ==="
echo "目标设备: $DEVICE_IP"
echo ""

# 测试1: TCP 连接性
echo "[TEST 1] TCP 端口 502 连通性"
if timeout 3 bash -c "echo > /dev/tcp/$DEVICE_IP/502" 2>/dev/null; then
    echo "  [PASS] 端口 502 可达"
    PASS=$((PASS+1))
else
    echo "  [FAIL] 端口 502 不可达"
    FAIL=$((FAIL+1))
fi

# 测试2: 读取保持寄存器 FC03
echo "[TEST 2] 功能码 FC03 - 读保持寄存器"
result=$(modpoll -m tcp -a 1 -r 1 -c 5 -o 1 $DEVICE_IP 2>&1)
if echo "$result" | grep -qE '[[0-9]+]:'; then
    echo "  [PASS] FC03 功能正常"
    PASS=$((PASS+1))
else
    echo "  [FAIL] FC03 读取失败: $result"
    FAIL=$((FAIL+1))
fi

# 测试3: 写入保持寄存器 FC06
echo "[TEST 3] 功能码 FC06 - 写单寄存器"
# 先读当前值
before=$(modpoll -m tcp -a 1 -r 1 -c 1 -o 1 $DEVICE_IP 2>&1 | grep -oP '(? /dev/null 2>&1
# 验证写入
after=$(modpoll -m tcp -a 1 -r 1 -c 1 -o 1 $DEVICE_IP 2>&1 | grep -oP '(? /dev/null 2>&1
if [ "$after" = "9999" ]; then
    echo "  [PASS] FC06 写入功能正常"
    PASS=$((PASS+1))
else
    echo "  [FAIL] FC06 写入失败: 预期9999, 实际$after"
    FAIL=$((FAIL+1))
fi

echo ""
echo "=== 测试结果: $PASS 通过, $FAIL 失败 ==="

Modpoll 与其他 Modbus 工具对比

  • Modbus Poll:Windows GUI 工具,可视化操作,适合手动调试。官网 www.modbustools.com
  • Modpoll:纯命令行工具,跨平台,适合脚本自动化和远程部署,完全免费。
  • pymodbus:Python 库,需要编程,灵活性最高,适合构建自定义测试框架。
  • QModMaster:Qt 写的跨平台 GUI 工具,开源免费,功能较简单。

常见问题排查指南

连接超时

首先用 ping 确认网络层连通。对于 Modbus TCP,默认使用 502 端口,用 telnet 192.168.1.100 502 测试。如果连接立即断开(而非超时),说明服务器拒绝连接,可能端口未开放。如果一直等待无响应,可能是防火墙拦截。

读取值全为零

可能原因:从站地址 -a 设置与实际设备不匹配;起始地址 -r 的 PLC 地址到协议地址转换错误(如 PLC 地址 40001 对应协议地址 0);该段寄存器确实未被配置或未写入过数据。

RTU 模式返回异常/错误

逐一确认:波特率(-b)、数据位(固定8位)、校验位(-p:none/even/odd)和停止位是否与从站设备一致。RS-485 接线特别注意 A(+)/B(-)线序不能接反。建议先用示波器或逻辑分析仪观察总线上信号质量。

浮点数读数异常

32 位浮点数涉及两个 16 位寄存器的排列顺序(字节序/字序)。不同厂商可能使用 ABCD、CDAB、BADC、DCBA 等不同顺序。Modpoll 默认使用 Big-Endian 浮点格式。如果读数明显异常(如 NaN 或数量级完全不对),尝试用 modpoll -t 4:hex 先看原始十六进制值,手动计算确认字节序后再调整配置。

总结

Modpoll 是 Modbus 协议调试工具链中不可或缺的”瑞士军刀”。它的最大优势在于轻量、跨平台、命令行驱动,可以无缝融入 Shell 脚本、Python 测试框架和 CI/CD 流水线。无论是嵌入式工程师验证单片机 Modbus 从站、自动化工程师调试 PLC 通信配置,还是 QA 工程师编写自动化的 Modbus 设备验收测试,掌握 Modpoll 都能显著提高工作效率。

技术术语(共 10 个)—— 点击展开
Modbus RTU基于串行链路的Modbus协议,使用二进制编码和CRC校验
Modbus TCP基于以太网的Modbus协议变体,使用TCP/IP传输
功能码Modbus功能码指定读/写操作类型,如01读线圈、03读保持寄存器
寄存器Modbus 寄存器存储数据单元,分线圈/离散输入/保持/输入寄存器四类
PLC可编程逻辑控制器,工业自动化控制的核心设备
波特率串行通信每秒传输符号数,Modbus RTU常用9600/19200
网关协议转换设备,如 Modbus RTU ↔ Modbus TCP
串口计算机与外部设备进行串行通信的物理接口
线圈Modbus位可读写数据,地址从00001开始
保持寄存器Modbus 16位可读写数据,地址从40001开始
来源/工具信息 —— 点击展开
来源 Modbus中文网(modbus.cn) —— 国内领先的Modbus通信协议技术社区 分类 Modbus调试工具 字数 4102 字 · 阅读约 11 分钟 更新 2026-06-26 永久链接 https://www.modbus.cn/modpoll-modbus%e8%b0%83%e8%af%95%e5%b7%a5%e5%85%b7%e5%ae%8c%e5%85%a8%e6%8c%87%e5%8d%97%ef%bc%9a%e5%91%bd%e4%bb%a4%e8%a1%8c%e4%b8%bb%e7%ab%99%e6%a8%a1%e6%8b%9f%e5%99%a8%e4%bb%8e%e5%85%a5%e9%97%a8/
推荐工具:Modbus调试助手 微信小程序
Modbus中文网官方推出的Modbus调试工具,支持 Modbus RTU/TCP 实时通信调试、寄存器读写、线圈控制、数据监控和报文分析。 无需安装,微信搜索「Modbus调试助手」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
把这篇资料用于真实项目?

进入工具中心进行报文解析、CRC 校验和设备调试,或提交需求获取选型与接入建议。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注