- 1. 什么是 Modpoll?
- 2. Modpoll 支持的Funktion
- 3. 安装 Modpoll
- 4. Windows 平台安装
- 5. Linux 平台安装
- 6. ARM / Eingebettet Linux 安装
- 7. Modpoll Befehl行Parameter详解
- 8. 常用实战Befehl
- 9. 1. Modbus TCP Lesen und halten Register(FC03)
- 10. 2. Modbus RTU Serielle Kommunikation
- 11. 3. 持续轮询模式(监控用)
- 12. 4. Lesen Sie den Zustand(FC01)
- 13. 5. 写入单Register.(FC06)
- 14. 6. Lesen 32 位浮点数(Float)
- 15. 7. 批Quantität写入多Register.(FC16)
- 16. 8. 读写组合Operationen(FC23)
- 17. 集成zu自动化测试Drehbuch
- 18. Modpoll 与其他 Modbus Werkzeuge对比
- 19. Häufige Fragen排查指南
- 20. Verbindung超时
- 21. Lesen值全为零
- 22. RTU 模式返回异常/Fehler.
- 23. 浮点数读数异常
- 24. 总结
什么是 Modpoll?
Modpoll 是一款开源的Befehl行 Modbus Hauptstation模拟器,由 proconX Unternehmen基于其 FieldTalk™ Vereinbarung栈开发。它可以在 Windows、Linux、QNX 等OperationenDas System上Betrieb,是工程师进行 Modbus AusrüstungTests、Vereinbarung测试和批QuantitätDatenerfassung时的利器。与带 GUI 的 Modbus Poll 不同,Modpoll 完全通过Befehl行Parameter控制,非常适合集成zu自动化测试Drehbuch和 CI/CD 流程中。
官方DownloadAdresse:http://www.focus-sw.com/fieldtalk/modpoll.html
Modpoll 支持的Funktion
- 传输模式:Modbus RTU(Die Serie)和 Modbus TCP(Ethernet),同时支持通过 RTU-over-TCP 网关Kommunikation
- Funktionscode覆盖:FC01(读线圈)、FC02(Lesen Sie getrennte Eingabe)、FC03(Lesen Sie das Register)、FC04(Eingangsregister lesen)、FC05(写单线圈)、FC06(写单Register.)、FC15(写多线圈)、FC16(写多Register.)、FC23(读/写多Register.)
- Datenformate:支持 HEX、Das Dekimalsystem无符Nr.、Das Dekimalsystem有符Nr.、32 位浮点数(Float)等多种Format zeigen
- Befehlseite配置:支持 Big-Endian 和 Little-Endian 两种Befehlseite,适配不同厂商的 PLC Ausrüstung
- 轮询模式:支持单次Lesen和连续轮询,可自由指定轮询间隔
- 输出Das Format:支持标准Text输出和16. System raw 输出两种模式
安装 Modpoll
Windows 平台安装
从官网Download Windows 版本的 ZIP 压缩包,解压后即可获得 modpoll.exe 可执行文件。建议将解压目录添加zuDas System的 PATH 环境变Quantität中,方便在任意目录下调用。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
# 测试Betrieb
./modpoll --version
# 可选:创建软链接方便全局调用
sudo ln -s $(pwd)/modpoll /usr/local/bin/modpoll
ARM / Eingebettet Linux 安装
如果需要在Raspberry Pi等 ARM Ausrüstung上Betrieb,可以从官网Auswahl对应的 ARM 版本,或从Quellencode交叉编译。proconX 提供了 armhf 和 aarch64 等架构的预编译包。
Modpoll Befehl行Parameter详解
| Parameter | 含义 | Beispiel |
|---|---|---|
-m | 传输模式(tcp / rtu / ascii) | -m tcp |
-a | von der Station Adresse(Slave ID) | -a 1 |
-r | AnfangRegister./Schleife Adresse(VereinbarungAdresse) | -r 100 |
-c | Lesen/写入的点数(Count) | -c 20 |
-b | Porter Rate(RTU 模式) | -b 9600 |
-p | Prüfstand.(none / even / odd) | -p none |
-t | Datentyp与Format zeigen | -t 4:hex |
-1 | 持续轮询模式 | -1 |
-o | 超时Zeit(秒) | -o 3 |
-0 | Adresse从 0 开始(默认 PLC Adresse从 1 开始) | -0 |
常用实战Befehl
1. Modbus TCP Lesen und halten Register(FC03)
从 IP Adresse 192.168.1.100、端口 502 Die Ausrüstung,Lesenvon der Station Adresse 1 的保持Register. 0-9(共 10 个):
modpoll -m tcp -a 1 -r 1 -c 10 192.168.1.100
输出Beispiel:
-- Polling slave 1...
[1]: 1234
[2]: 5678
[3]: 0
[4]: 100
2. Modbus RTU Serielle Kommunikation
# 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 毫秒轮询一次,Unendlicher Kreislauf
modpoll -m tcp -a 1 -r 1 -c 20 -1 192.168.1.100 500
# 输出带Zeit戳的轮询Daten
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. Lesen Sie den Zustand(FC01)
# LesenAdresse 0 开始的 8 个线圈
modpoll -m tcp -a 1 -r 1 -c 8 -t 0 192.168.1.100
注意:-t 0 表示线圈Typus,-t 1 表示离散输入,-t 3 表示输入Register.,-t 4 表示保持Register.。
5. 写入单Register.(FC06)
# 将VereinbarungAdresse 0 的Registerwert写入 1234
modpoll -m tcp -a 1 -r 1 192.168.1.100 1234
6. Lesen 32 位浮点数(Float)
很多工业仪表(如Temperatur变送器、流Quantität计)使用两个连续的 16 位保持Register.存储一个 IEEE 754 32 位浮点数:
# 从Adresse 0 开始Lesen 2 ein Register.,按 float Das Format显示
modpoll -m tcp -a 1 -r 1 -c 2 -t 4:float 192.168.1.100
7. 批Quantität写入多Register.(FC16)
# 从VereinbarungAdresse 0 开始,依次写入 100, 200, 300, 400
modpoll -m tcp -a 1 -r 1 192.168.1.100 100 200 300 400
8. 读写组合Operationen(FC23)
# LesenAdresse 0-4(5ein Register.),同时将Adresse 10-11 写入 99, 88
modpoll -m tcp -a 1 -r 1 -c 5 -w 11 -q 2 192.168.1.100 99 88
集成zu自动化测试Drehbuch
Modpoll 的Befehl行Eigenschaften使其成为自动化测试的理想Auswahl。以下是一个vollständigDie Ausrüstung验收测试Drehbuch:
#!/bin/bash
# Modbus AusrüstungRegister.读写验收测试
# 用法: ./modbus_test.sh <AusrüstungIP>
DEVICE_IP=${1:-"192.168.1.100"}
PASS=0
FAIL=0
echo "=== Modbus Ausrüstung验收测试 ==="
echo "目标Ausrüstung: $DEVICE_IP"
echo ""
# 测试1: TCP Verbindung性
echo "[TEST 1] Der TCP-Port 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: Lesen und halten Register FC03
echo "[TEST 2] Funktionscode FC03 - Lesen Sie das 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 Funktion正常"
PASS=$((PASS+1))
else
echo " [FAIL] FC03 Lesen gescheitert: $result"
FAIL=$((FAIL+1))
fi
# 测试3: 写入保持Register. FC06
echo "[TEST 3] Funktionscode FC06 - 写单Register."
# 先读Der aktuelle Wert
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 写入Funktion正常"
PASS=$((PASS+1))
else
echo " [FAIL] FC06 写入失败: 预期9999, 实际$after"
FAIL=$((FAIL+1))
fi
echo ""
echo "=== 测试Ergebnis: $PASS 通过, $FAIL 失败 ==="
Modpoll 与其他 Modbus Werkzeuge对比
- Modbus Poll:Windows GUI Werkzeuge,可视化Operationen,适合手动Tests。官网 www.modbustools.com。
- Modpoll:纯Befehl行Werkzeuge,跨平台,适合Drehbuch自动化和Fern entfernt部署,完全kostenlos。
- pymodbus:Python 库,需要编程,灵活性最高,适合构建Custom definiert测试框架。
- QModMaster:Qt 写的跨平台 GUI Werkzeuge,开源kostenlos,Funktion较简单。
Häufige Fragen排查指南
Verbindung超时
首先用 ping Bestätigen网络层连通。对于 Modbus TCP,默认使用 502 端口,用 telnet 192.168.1.100 502 测试。如果Verbindung立即断开(而非超时),说明Der Server拒绝Verbindung,可能端口未开放。如果一直等待无Antwort,可能是防火墙拦截。
Lesen值全为零
可能原因:von der Station Adresse -a 设置与实际Ausrüstung不匹配;Ausgang Adresse -r 的 PLC AdressezuVereinbarungAdresse转换Fehler.(如 PLC Adresse 40001 对应VereinbarungAdresse 0);该段Register.确实未被配置或未写入过Daten。
RTU 模式返回异常/Fehler.
逐一Bestätigen:Porter Rate(-b)、Datenplatz(固定8位)、Prüfstand.(-p:none/even/odd)和Stoppen Sie Platz是否与Von der StationAusrüstung一致。RS-485 接线特别注意 A(+)/B(-)线序不能接反。建议先用示波器或逻辑Unterteilung析仪观察总线上信Nr.质Quantität。
浮点数读数异常
32 位浮点数涉及两个 16 位Register.的排列顺序(Befehlseite/字序)。不同厂商可能使用 ABCD、CDAB、BADC、DCBA 等不同顺序。Modpoll 默认使用 Big-Endian 浮点Das Format。如果读数明显异常(如 NaN 或Anzahl级完全不对),尝试用 modpoll -t 4:hex 先看原始16. System值,手动BerechnungBestätigenBefehlseite后再调整配置。
总结
Modpoll 是 Das Modbus-ProtokollDebugging-Tools链中不可或缺的”瑞士军刀”。它的最大优势在于轻Quantität、跨平台、Befehl行驱动,可以无缝融入 Shell Drehbuch、Python 测试框架和 CI/CD 流水线。无论是Eingebettet工程师验证单片机 Modbus Von der Station、自动化工程师Tests PLC Kommunikation配置,还是 QA 工程师编写自动化的 Modbus Ausrüstung验收测试,掌握 Modpoll 都能显著提高工作效率。
Antwort veröffentlichen