Was ist Modpoll?
Modpoll ist ein Open-Source - Kommandozeilen-Modbus - Host-Simulator, der von proconX entwickelt wurde, basierend auf dem FieldTalk TM - Protokollstack. Es kann auf Betriebssystemen wie Windows, Linux, QNX und anderen ausgeführt werden und ist ein scharfes Werkzeug für Ingenieure, die Modbus-Geräte debuggen, Protokolltests und Massendatenerfassung durchführen. Im Gegensatz zu Modbus Poll mit GUI wird Modpoll vollständig über Befehlszeilenparameter gesteuert und eignet sich hervorragend für die Integration in automatisierte Testscripts und CI / CD-Prozesse.
Offizielle Download-Adresse:http://www.focus-sw.com/fieldtalk/modpoll.html
Modpoll unterstützte Funktionen
- ÜbertragungsmodellModbus RTU (serieles Port) und Modbus TCP (Ethernet) mit Unterstützung für die Kommunikation über RTU-over - TCP-Gateways
- Funktionscode abgedecktFC01 (Lese-Spule), FC02 (Lese-diskreter Eingang), FC03 (Lese-Halt - Register), FC04 (Lese-Eingang - Register), FC05 (Schreib-Ein - Spule), FC06 (Schreib-Ein - Register), FC15 (Schreib-Multi - Spule), FC16 (Schreib-Multi - Register), FC23 (Lese / Schreib-Multi - Register)
- Datenformate: Unterstützt eine Vielzahl von Anzeigenformaten wie HEX, Dezimal ohne Zeichen, Dezimal mit Zeichen, 32 - Bit Gleitkommazahlen (Float)
- Byte-Sequenz - Konfiguration: Unterstützt Big-Endian und Little-Endian zwei Arten von Byte-Sequenz, passen sich an die SPS-Geräte verschiedener Hersteller
- Polling-Modus: Unterstützt einmaliges Lesen und kontinuierliches Polling, kann frei angeben Polling-Intervall
- AusgabeformatUnterstützt Standard-Text - Ausgabe und Hex-Raw - Ausgabe
Installation Modpoll
Windows-Plattform Installation
Laden Sie die Windows-Version des ZIP-Komprimierungspakets von der offiziellen Website, nach dem Entpacken erhalten Sie die ausführbare Dateimodpoll.exe. Es wird empfohlen, das dekomprimierte Verzeichnis der PATH-Umgebungsvariable des Systems hinzuzufügen, um es in einem beliebigen Verzeichnis zu rufen. Windows 10 / 11 - Benutzer können die Linux-Version von Modpoll auch direkt über WSL verwenden.
Linux-Plattform - Installation
# 下载 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/modpollARM / Embedded Linux-Installation
Wenn Sie auf ARM-Geräten wie Raspberry Pi laufen möchten, können Sie die entsprechende ARM-Version von der Webseite auswählen oder aus dem Quellcode cross-compilieren. ProconX bietet vorkompilierte Pakete für Architekturen wie armhf und aarch64.
Modpoll-Befehlszeilen - Parameter
| Parameter | Bedeutungen | Beispiel |
|---|---|---|
-m | Übertragungsmodus (tcp / rtu / ascii) | -m tcp |
-a | Station-Adresse (Slave-ID) | -a 1 |
-r | Startregister / Spule-Adresse (Protokoll-Adresse) | -r 100 |
-c | Anzahl der gelesenen / geschriebenen Punkte (Count) | -c 20 |
-b | Baudrate (RTU-Modus) | -b 9600 |
-p | Checkbits (nicht / even / odd) | -p none |
-t | Datentyp und Anzeigeformat | -t 4:hex |
-1 | Kontinuierlicher Polling-Modus | -1 |
-o | Timeout (sec) | -o 3 |
-0 | Adresse beginnt mit 0 (Standard-SPS - Adresse beginnt mit 1) | -0 |
Häufige Live-Befehle
1. Modbus TCP-Lese - und Halte-Register (FC03)
Lesen Sie von einem Gerät mit IP-Adresse 192.168.1.100, Port 502 das Hold Register 0 - 9 von 10 für die Slave-Station - Adresse 1:
modpoll -m tcp -a 1 -r 1 -c 10 192.168.1.100Ausgabe Beispiel:
-- Polling slave 1...
[1]: 1234
[2]: 5678
[3]: 0
[4]: 1002. 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 COM33. Kontinuierlicher Polling-Modus (zu Überwachung)
# 每 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"
done4. Leses-Spule - Zustand (FC01)
# 读取地址 0 开始的 8 个线圈
modpoll -m tcp -a 1 -r 1 -c 8 -t 0 192.168.1.100Hinweis:-t 0bezeichnet den Spule-Typ,-t 1den diskreten Eingang,-t 3Eingangsregister,-t 4stellt ein Register für Eingabe und
5. Schreiben in einziges Register (FC06)
# 将协议地址 0 的寄存器值写入 1234
modpoll -m tcp -a 1 -r 1 192.168.1.100 12346. Lesen einer 32 - Bit-Float - Nummer
Viele Industriegeräte (z. B. Temperatursender, Durchflussmesser) verwenden zwei aufeinander folgende 16 - Bit-Haltregister, um eine 32 - Bit-Float - Nummer nach IEEE 754 zu speichern:
# 从地址 0 开始读取 2 个寄存器,按 float 格式显示
modpoll -m tcp -a 1 -r 1 -c 2 -t 4:float 192.168.1.1007. Massen-Schreiben in mehreren Registern (FC16)
# 从协议地址 0 开始,依次写入 100, 200, 300, 400
modpoll -m tcp -a 1 -r 1 192.168.1.100 100 200 300 4008. Lese - und Schreibkombinationsoperationen (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 88Integration in automatisierte Testskripte
Die Befehlszeilen-Eigenschaften von Modpoll machen es ideal für automatisierte Tests. Hier ist ein vollständiges Skript für die Geräteakzeptanz:
#!/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 im Vergleich zu anderen Modbus-Tools
- Modbus Poll: Windows-GUI - Tools, visuelle Bedienung, geeignet für manuelles Debugging. Offizielle Websitewww.modbustools.com。
- Modpoll: reines Befehlszeilen-Tool, plattformübergreifend, für Skript-Automatisierung und Remote-Bereitstellung, völlig kostenlos.
- pymodbus: Python-Bibliothek, die Programmierung erfordert, maximale Flexibilität und eignet sich zum Erstellen benutzerdefinierter Testframeworks.
- QModMaster: Qt ist ein Plattformübergreifendes GUI-Tool, Open-Source - kostenlos und einfach zu bedienen.
Häufig gestellte Probleme
Verbindungszeitüberschreiten
Zuerst wird die Netzwerkschichtverbindung mitpingbestätigt. Für Modbus TCP wird standardmäßig der Port 502 verwendet, der mittelnet 192.168.1.100 502Testen. Wenn die Verbindung sofort getrennt wird (anstatt Zeitüberschreiten), hat der Server die Verbindung abgelehnt und der Port ist möglicherweise nicht geöffnet. Wenn Sie auf keine Antwort warten, kann es eine Firewall sein, die blockiert.
Lesenwert ist Null.
Mögliche Ursache: Von der Station Adresse-aentspricht nicht dem tatsächlichen Gerät; Fehler bei der Konvertierung der PLC-Adresse in die Protokoll-Adresse der Startadresse-r(z. B. PLC-Adresse 40001 entspricht der Protokoll-Adresse 0); Das Register ist nicht konfiguriert oder keine Daten geschrieben.
RTU-Modus gibt Ausnahme / Fehler zurück
Überprüfen Sie, ob die Baudrate (- b), die Datenbits (feste 8 Bits), die Checkbits (- p: none/even/odd) und die Stopbits mit dem Slave-Gerät übereinstimmen. Bei RS - 485 - Kabelverbindung muss man besonders darauf achten, dass die A (+) / B (-) - Kabelsequenz nicht umgekehrt verbunden werden kann. Es wird empfohlen, die Signalqualität auf dem Bus zuerst mit einem Oszilloskop oder einem Logikanalysator zu beobachten.
Fließkomma-Leseannahme
32 - Bit-Fließkomma - Zahlen beziehen sich auf die Anordnung der beiden 16 - Bit-Register (Byte-Reihenfolge / Wort-Reihenfolge). Verschiedene Hersteller verwenden möglicherweise unterschiedliche Reihenfolge wie ABCD, CDAB, BADC, DCBA. Modpoll verwendet standardmäßig das Big-Endian - Gleitkomma-Format. Wenn die Messwerte eindeutig abnormal sind (z. B. NaN oder Größenordnung völlig falsch), versuchen Sie, den ursprünglichen Hexadezimalwert mitmodpoll -t 4:hexzu betrachten, die Bestätigung der Bytefolge manuell berechnen und die Konfiguration anpassen.
Zusammenfassung
Modpoll ist ein unverzichtbares „Schweizerisches Messer" in der Debugger-Toolkette des Modbus-Protokolls. Sein größter Vorteil ist sein leichtes, plattformübergreifendes, Befehlszeilenbetrieb und die nahtlose Integration in Shell-Skripte, Python-Testframeworks und CI / CD-Pipelines. Egal, ob ein eingebetteter Ingenieur die Modbus-Sklavenstation für einen MCU validiert, ein Automatisierungsingenieur die PLC-Kommunikationskonfiguration debuggt oder ein QA-Ingenieur einen automatisierten Modbus-Gerätenabnahmetest schreibt, die Beherrschung von Modpoll kann die Produktivität erheblich steigern.
Antwort veröffentlichen