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

freefree技术Resources

这篇内容可直接阅读,适合用于基础学习和Search引流。

Modpoll Modbus DebuggingTools完全指南:命令行主站模拟器从入门到精通缩略图
🌐 This page is not yet available in English. Showing the Chinese version. Back to Chinese page.
本文目录
  1. 1. 什么是 Modpoll?
  2. 2. Modpoll 支持的Function
  3. 3. 安装 Modpoll
  4. 4. Windows 平台安装
  5. 5. Linux 平台安装
  6. 6. ARM / 嵌入式 Linux 安装
  7. 7. Modpoll 命令行参数详解
  8. 8. 常用实战命令
  9. 9. 1. Modbus TCP Read and hold register(FC03)
  10. 10. 2. Modbus RTU 串口通信
  11. 11. 3. 持续轮询模式(监控用)
  12. 12. 4. 读Coil status(FC01)
  13. 13. 5. 写入单register(FC06)
  14. 14. 6. 读取 32 位浮点数(Float)
  15. 15. 7. 批量写入多register(FC16)
  16. 16. 8. 读写组合Operation(FC23)
  17. 17. 集成到自动化测试脚本
  18. 18. Modpoll 与其他 Modbus Tools对比
  19. 19. Frequently Asked Questions排查指南
  20. 20. connect超时
  21. 21. 读取值全为零
  22. 22. RTU 模式返回异常/Error
  23. 23. 浮点数读数异常
  24. 24. 总结

什么是 Modpoll?

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

官方Downloadaddress:http://www.focus-sw.com/fieldtalk/modpoll.html

Modpoll 支持的Function

  • 传输模式:Modbus RTU(串口)和 Modbus TCP(以太网),同时支持通过 RTU-over-TCP 网关通信
  • function code覆盖:FC01(读线圈)、FC02(读离散输入)、FC03(读保持register)、FC04(读输入register)、FC05(写单线圈)、FC06(写单register)、FC15(写多线圈)、FC16(写多register)、FC23(读/写多register)
  • data format:支持 HEX、decimal无符号、decimal有符号、32 位浮点数(Float)等多种Display format
  • endianness配置:支持 Big-Endian 和 Little-Endian 两种endianness,适配不同厂商的 PLC 设备
  • 轮询模式:支持单次读取和连续轮询,可自由指定轮询间隔
  • 输出format:支持标准Text输出和hexadecimal raw 输出两种模式

安装 Modpoll

Windows 平台安装

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

Linux 平台安装

# Download 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
-aslave address(Slave ID)-a 1
-rstartregister/Coil address(协议address)-r 100
-c读取/写入的点数(Count)-c 20
-bBaud rate(RTU 模式)-b 9600
-pcheck digit(none / even / odd)-p none
-tdata type与Display format-t 4:hex
-1持续轮询模式-1
-o超时time(秒)-o 3
-0address从 0 开始(默认 PLC address从 1 开始)-0

常用实战命令

1. Modbus TCP Read and hold register(FC03)

从 IP address 192.168.1.100、端口 502 equipment,读取slave address 1 的保持register 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 毫秒轮询一次,infinite loop
modpoll -m tcp -a 1 -r 1 -c 20 -1 192.168.1.100 500

# 输出带time戳的轮询data
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. 读Coil status(FC01)

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

注意:-t 0 表示线圈Type,-t 1 表示离散输入,-t 3 表示输入register,-t 4 表示保持register。

5. 写入单register(FC06)

# 将协议address 0 的register value写入 1234
modpoll -m tcp -a 1 -r 1 192.168.1.100 1234

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

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

# 从address 0 开始读取 2 个register,按 float format显示
modpoll -m tcp -a 1 -r 1 -c 2 -t 4:float 192.168.1.100

7. 批量写入多register(FC16)

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

8. 读写组合Operation(FC23)

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

集成到自动化测试脚本

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

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

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

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

# 测试1: TCP connect性
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: Read and hold register FC03
echo "[TEST 2] function code FC03 - 读保持register"
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 Function正常"
    PASS=$((PASS+1))
else
    echo "  [FAIL] FC03 读取失败: $result"
    FAIL=$((FAIL+1))
fi

# 测试3: 写入保持register FC06
echo "[TEST 3] function code FC06 - 写单register"
# 先读current value
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 写入Function正常"
    PASS=$((PASS+1))
else
    echo "  [FAIL] FC06 写入失败: 预期9999, 实际$after"
    FAIL=$((FAIL+1))
fi

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

Modpoll 与其他 Modbus Tools对比

  • Modbus Poll:Windows GUI Tools,可视化Operation,适合手动debug。官网 www.modbustools.com
  • Modpoll:纯命令行Tools,跨平台,适合脚本自动化和远程部署,完全free。
  • pymodbus:Python 库,需要编程,灵活性最高,适合构建Customization测试框架。
  • QModMaster:Qt 写的跨平台 GUI Tools,开源free,Function较简单。

Frequently Asked Questions排查指南

connect超时

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

读取值全为零

可能原因:slave address -a 设置与实际设备不匹配;starting address -r 的 PLC address到协议address转换Error(如 PLC address 40001 对应协议address 0);该段register确实未被配置或未写入过data。

RTU 模式返回异常/Error

逐一Confirm:Baud rate(-b)、data bit(固定8位)、check digit(-p:none/even/odd)和stop bit是否与从站设备一致。RS-485 接线特别注意 A(+)/B(-)线序不能接反。建议先用示波器或逻辑分析仪观察总线上信号质量。

浮点数读数异常

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

总结

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

技术术语(共 10 个)—— 点击展开
Modbus RTU基于串行链路的Modbus协议,使用binaryCoding和CRC check
Modbus TCP基于以太网的Modbus协议变体,使用TCP/IP传输
function codeModbusfunction code指定读/写OperationType,如01读线圈、03读保持register
registerModbus register存储data单元,分线圈/离散输入/保持/输入register四类
PLC可编程逻辑控制器,Automation控制的核心设备
Baud rate串行通信每秒传输符号数,Modbus RTU常用9600/19200
网关协议转换设备,如 Modbus RTU ↔ Modbus TCP
串口计算机与外部设备进行串行通信的物理接口
线圈Modbus位可读写data,address从00001开始
保持registerModbus 16位可读写data,address从40001开始
来源/Tools信息 —— 点击展开
来源 Modbus Chinese Network(modbus.cn) —— China leadingModbus通信协议技术社区 Category Modbus DebuggingTools 字数 4102 字 · 阅读约 11 分钟 更新 2026-06-26 永久链接 https://www.modbus.cn/43927.html
Recommended Tool: Modbus Debug Assistant WeChat Mini Program
Modbus Chinese Network官方推出的Modbus DebuggingTools,支持 Modbus RTU/TCP 实时通信debug、register读写、线圈控制、data监控和message分析。 无需安装,微信Search「Modbus DebuggingAssistant」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
把这篇Resources用于真实项目?

进入Tools中心进行messageParse、CRC verification和设备debug,或Submit requirements获取选型与接入建议。

工程师member

把这篇文章变成可执行的debugResources

开通后可使用高级messageParse、Resources包Download、Code Example、工程案例和优先Technical Support,适合真实项目交付。

高级Tools不限次
Resources包与代码包
Complete Engineering Case Library
优先Technical Support入口

发表回复

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