Quelle: Modbus Chinesisches Netzwerk (modbus.cn) - führende Modbus Kommunikationsprotokoll Technologie-Community in China
Dieser Artikel: COMTool: Cross-Plattform - Serial-Port - Debugging-System der Python-Familie · Autor: Modbus-Technikteam · Veröffentlicht am 2026 - 07 - 01
COMTool (GitHub: Neutree / COMTool, LGPL - 3.0) ist ein Open-Source - serielles Debugger-Tool, das in Python 3 + PyQt5 geschrieben wurde und Windows, Linux, macOS und Raspberry Pi unterstützt. Für Modbus-Debugging - Szenarien bietet es drei differenzierende Werte: eine echte Plattform-weit konsistente Erfahrung, ein Protokoll-Plug - in-System (Python benutzerdefiniertes Codec / Parsing) und integrierte Echtzeit-Wellenform - Diagramme (Sensor-Daten - Visualisierung). Dieser Artikel geht direkt von den tatsächlichen Bedürfnissen der Modbus-Ingenieure aus und zeigt Ihnen, welche Probleme COMTool lösen kann und in welchen Szenarien es besser als ATK-XCOM und LLCOM eignet. Schlagwörter: COMTool, Plattformübergreifende Serielle Debugging, Python-Serial - Port-Tools, Modbus-Waveform - Anzeige, Protokoll-Plug - in.
Modbus-Debugger arbeiten meistens unter Windows - schließlich läuft die Konfigurationssoftware und die Programmierungstools von Siemens, Mitsubishi und Omron nur unter Windows. Aber es gibt so ein paar Szenarien, in denen Sie plötzlich feststellen, dass Sie einen seriellen Assistenten benötigen, der unter Windows überhaupt nicht ist oder hat, aber die Erfahrung ist ein Durcheinander:
Szenario 1: Sie verwenden ein MacBook Pro als Hauptentwickler, aber ein USB-Schalter 485 ist angeschlossen, um einen Modbus-Sensor anzupassen.Öffnen Sie die virtuelle Maschine, um die Windows-Version des Tools zu laufen - Serielle Ports haben dreimal höhere Latenzübertragungen und gelegentlich Frames verlieren.
Szenario 2: Ihr Gateway läuft auf einem Ubuntu-Server und es gibt nur einen Raspberry Pi, der an den seriellen Anschluss angeschlossen werden kann. Sie möchten einen seriellen Assistenten direkt auf dem Raspberry Pi-Desktop öffnen, um Daten zu erfassen - die meisten Windows-Tools funktionieren einfach nicht.
Szenario 3: Sie tun einen Temperatur-Feuchtigkeit - Sensor, Modbus gibt den ursprünglichen Registerwert zurück (z. B. 168 für 16,8 ° C), und Sie müssen die Temperaturkurve direkt im Empfangsbereich sehen, anstatt einen Haufen Hexadezimalzahlen.
Diese drei Szenarien sind der Existenzgrund von COMTool.
COMTool ist ein GitHub-Open - Source-Projekt (Neutree / COMTool), mit dem MIT-Protokoll, geschrieben in Python 3 + PyQt5. Es gibt 2000 + Stars auf GitHub, und der Kern-Moderator ist Neutree. Es ist nicht das umfassendste serielle Port-Tool, noch ist es ein Modbus-Tool - aber es ist eines der umfassendsten seriellen Port-Tools, die derzeit über die Plattform hinweg mit Plug-ins und Visualisierung verfügbar sind.
Welche Plattform „überschreitet" COMTOOL?
Im Gegensatz zu einigen Tools, die Linux theoretisch unterstützen, aber nicht wirklich installiert werden können, hat COMTool für jede Plattform ein separates Paket und Installationsprogramm:
Windows: Laden Sie das zip-Paket von GitHub Releases, entpacken Sie es und laufen Sie comtool.exe direkt aus. Installation kann auch direkt über Scoop (Windows-Paket - Manager):scoop bucket add Nightly ... && scoop install comtool。
macOS: dmg Installationspaket installiert werden. Da es mit Python + PyQt5 geschrieben ist, ist das System mit Python 3 ausgeliefert. Hinweis: Da es beim ersten Öffnen nicht signiert ist, muss es in "Systemeinstellungen → Sicherheit und Privatsphäre" aktiviert werden. Wenn Sie mehr Fenster öffnen möchten, führt das Terminalopen -n /Application/comtool.app。
Linuxaus: Dies ist der Vorteil von COMTool. Ubuntu verfügt über vorkompilierte Binärdateien, und Arch kann von AUR installiert werden (yay -S python-comtool). Sie können auch mit pip aus dem Quellcode installieren:pip install comtool. Raspberry Pi muss zuerst abhängig sein.sudo apt install git python3-pyqt5 python3-numpyPip installieren.
Raspberry Pi: Vollständige Unterstützung. Schließen Sie das USB-to - 485 - Modul ein, schalten Sie den Strom ein, öffnen Sie COMTool und wählen Sie/dev/ttyUSB0Gleiche Logik wie bei Windows.
Das Erlebnis ist auf allen Plattformen gleich: dieselbe PyQt5 - Schnittstelle, dasselbe Plug-in - System, dasselbe Profilformat. Sie können ein Protokoll-Plug - in unter Windows schreiben und direkt in das COMTool-Plug - in-Verzeichnis Ihres Raspberry Pi kopieren.
II. Protokoll-Plug - in - COMTool - die wertvollste Funktion für Modbus-Debugging
2.1 Protokoll-Plug - in Welche Probleme lösen
Normaler serieller Anschluss-Assistenten sind wie folgt: Sie senden Hexadezimal010300000001840A, Gerät zurück01030201988432Suchen Sie mit bloßem Auge „0103" im Antwort-Byte, überprüfen Sie, ob die Adresse der Station korrekt ist, springen Sie hin, wo sich das Daten-Byte befindet, und zählen Sie erneut die CRC.
Das Protokoll-Plug - in von COMTool ermöglicht es Ihnen, die Datenverarbeitungslogik auf beiden Seiten zu definieren: "Benutzerfreundliche Eingabe" (z. B. "Temperatur-Sensor - Lesung") wird vor dem Senden automatisch in Modbus-RTU - Frames konvertiert, und nach dem Empfang wird der ursprüngliche Hexadezimal-Frame automatisch in "Sensor-Wert: 25.3 ° C" aufgelöst. Sie benötigen keine 16 - prozentige Ansicht.
Das Prinzip ist einfach. Jedes Protokoll-Plug - in ist eine Python-Klasse, die zwei Kernmethoden implementieren muss:encode() 和 decode()。
encode()Die Funktion ist es, die Benutzer-Eingabe in das ursprüngliche Byte zu übertragen, das gesendet werden soll.decode()Die Funktion ist es, die erhaltenen ursprünglichen Bytes in ein benutzerlesbares Anzeigeformat zu konvertieren.
2.2 Ein Beispiel für das einfachste Modbus-Protokoll - Plugin
Das folgende Plugin ermöglicht es Ihnen, im COMTool "Protocol" - Modus einen Befehl in natürlicher Sprache wie "Lese Register Adresse 0 Quantity 4" auszugeben, um automatisch Modbus-RTU - Frames zu senden. Die empfangene binäre Antwort wird automatisch als "Slave 01: [168, 2234, 0, 512]" aufgelöst.
class Plugin(Plugin_Base):
id = "modbus_rtu"
name = "Modbus RTU 解析器"
version = "1.0"
# CRC16 查表(Modbus 多项式 0xA001)
_crc_table = None
@classmethod
def _build_crc_table(cls):
if cls._crc_table:
return cls._crc_table
table = []
for i in range(256):
crc = i
for _ in range(8):
if crc & 1:
crc = (crc >> 1) ^ 0xA001
else:
crc >>= 1
table.append(crc)
cls._crc_table = table
return table
@classmethod
def _crc16(cls, data: bytes) -> int:
table = cls._build_crc_table()
crc = 0xFFFF
for b in data:
crc = (crc >> 8) ^ table[(crc ^ b) & 0xFF]
return crc
def encode(self) -> bytes:
"""用户输入 '读寄存器 地址0 数量4' → 拼成 Modbus RTU 帧"""
text = self.sendEdit.toPlainText().strip()
# 简化解析:固定从站地址 0x01
slave = 0x01
# 默认读保持寄存器(功能码 0x03),起始地址 0,数量 1
_, addr_str, count_str = text.split()
addr = int(addr_str.replace('地址', ''))
count = int(count_str.replace('数量', ''))
frame = bytes([slave, 0x03,
(addr >> 8) & 0xFF, addr & 0xFF,
(count >> 8) & 0xFF, count & 0xFF])
crc = self._crc16(frame)
return frame + bytes([crc & 0xFF, (crc >> 8) & 0xFF])
def decode(self, data: bytes) -> str:
"""收到的 Modbus 响应帧 → 解析为人可读的文本"""
if len(data) < 5:
return f"[数据过短: {len(data)} 字节]"
slave = data[0]
func = data[1]
if func >= 0x80:
exc = data[2]
return f"[异常] 从站{slave:02X} 错误码: {exc}"
byte_count = data[2]
values = []
for i in range(byte_count // 2):
hi = data[3 + i * 2]
lo = data[4 + i * 2]
values.append(str((hi << 8) | lo))
return f"从站{slave:02X}: [{', '.join(values)}]"Legen Sie diese Python-Datei in das Plug-in - Verzeichnis von COMTool und wählen Sie das Plug-in im "Protokoll" - Panel aus. Danach schreiben Sie读寄存器 地址0 数量4in das Senden-Box und klicken auf Senden, und es wird tatsächlich ein vollständiges Modbus RTU-Abfrage - Frame (einschließlich CRC) gesendet. Die empfangenen Hexadezimal-Bytes werden automatisch zu einem komplexeren Szenario von从站01: [168, 2234, 0, 512]。
n
2.3: Benutzerdefinierte Überprüfung, Benutzerdefiniertes Frame-Format
Modbus-Protokoll - Plug-in ist nur ein Beispiel. Der wirkliche Wert des Protokoll-Plugins von COMTool liegt darin, "private Protokolle zu behandeln, die von keinem Werkzeug auf dem Markt unterstützt werden":
- Ein heimischer Temperaturregulator gibt
AA BB CC DD EE FF GG HHzurück - die ersten vier Bytes sind Temperatur (BCD-Code), die letzten vier Bytes sind Feuchtigkeit. Schreiben Siedecode()und analysieren Sie die温度: 23.5°C, 湿度: 67.2%。 - benutzerdefinierte Überprüfung: nicht Standard CRC16, sondern CRC8 / XOR / eine eigene magische Überprüfung des Herstellers, schreiben Sie eine Python-Funktion.
encode() 和 decode()kann jede Python-Bibliothek tun - Sie können JSON parsen, Wörterbuchübersetzungsfehler überprüfen und sogarnumpyDaten filtern. Dies ist eine Flexibilität, die mit seriellen Port-Tools in C # oder C + + geschrieben nicht möglich ist.
3. Wellenform / Diagramm - Modbus-Registerwerte in Echtzeitkurven umwandeln
3.1 Unterstützt zwei Datenformate
Das integrierte Graph-Plug - in COMTool kann Koordinaten aus seriellen Daten extrahieren und Echtzeitkurven zeichnen. Unterstützt zwei Formate:
ASCII-Format(empfohlen, menschlich lesbar):
$曲线名称,X坐标,Y坐标,校验和nBeispiel: Ihr Sensor sendet alle 200ms$temp,1.0,25.3nCOMTool zeichnet Punkte (1.0, 25.3) auf der "temp" - Kurve. Prüfen und Versionen:$temp,1.0,25.3,179n- - Die Prüfsumme ist die Summe des ASCII-Codes für alle Felder, die 8 Bits niedrig ist.
Binärformat(effizient, geeignet für Hochgeschwindigkeitserfassung): Protokolllänge kürzer und kann bis zu tausend Punkte pro Sekunde übertragen. Das Format wird in der offiziellen COMTool-Dokumentation erläutert.
n
3.2 Modbus-Sensor - Daten-Visualisierung Praxis
Angenommen, Sie haben einen Modbus-Temperatur - Feuchte-Sensor (von der Station-Adresse 01), die die Register 40001 (Temperatur, Einheit 0,1 ° C) und 40002 (Feuchte, Einheit 0,1%) zurückgeben. Sie möchten eine Echtzeitkurve von Temperatur und Feuchtigkeit in COMTool sehen.
Überbrückung mit einem Zwischen-Skript: Das Python-Skript liest die Modbus-Antwort per pyserial → Temperatur / Feuchtigkeit analysiert → Ausgabe des ASCII-Wellenformformformats von COMTool an den virtuellen seriellen Anschluss → Graph-Plug - in von COMTool zeigt direkt die Kurve an.
oder einfachere Lösung: Verwenden Sie das COMTool-Protokoll - Plug-In,decode()Die Ausgabe der Funktion wird direkt formatiert als$temp,{timestamp},{value}n + $humi,{timestamp},{value}nformatiert, sodass zwei Echtzeitkurven im Graph-Plug - in angezeigt werden können.
Multi-Charts - Unterstützung: Sie können gleichzeitig drei Kurven von Temperatur, Feuchtigkeit und Taupunkttemperatur hinzufügen, jeweils in verschiedenen Farben.
3.3 C-Sprachencode
Wenn der Sensor ist STM32 / ESP32 selbst geschriebene Firmware, COMTool-kompatible Wellenformdaten auf der Seite des MCU-Ausgangs:
// 发送 ASCII 格式波形数据(含校验和)
int plot_pack_ascii(char *buff, int buff_size,
const char *curve_name, float x, float y)
{
int sum = 0;
int len = snprintf(buff, buff_size, "$%s,%.1f,%.1f",
curve_name, x, y);
for (int i = 1; i < len; i++) sum += buff[i];
len += snprintf(buff + len, buff_size - len, ",%dn", sum & 0xFF);
return len;
}
// 在传感器读取循环中调用
char buf[128];
int len = plot_pack_ascii(buf, sizeof(buf), "temp",
time_ms / 1000.0, temperature / 10.0);
uart_send_bytes(buf, len);Auf diese Weise muss die Firmware-Seite keine GUI-Entwicklung durchführen, der direkte serielle Ausgang kann COMTool Zeichnen.
ATK-XCOM / LLCOM / COMTool - was ist der Unterschied zwischen den drei
| Dimension im Vergleich | ATK-XCOM V3.0 | LLCOM | COMTool |
|---|---|---|---|
| Entwickler | Positive Point Atom (Commercial) | chenxuuu (Personal Open Source) | Neutree (Personal Open Source) |
| Lizenz | Kostenlose Closed Source | Apache 2.0 | LGPL - 3.0 |
| Plattform | Windows | Windows | Win + Mac + Linux + Raspberry Pi |
| Technologiestack | C # /. NET | C # /. NET + xlua | Python 3 / PyQt5 |
| Skripts / Plug-ins | ❌ | ✅ Lua 5.3 | ✅ Python-Plug - in |
| Integriertes Modbus CRC | ✅ Protokollübertragungsmodus | (Lua Handschrift erforderlich) | ✨ (Python-Plug - in erforderlich) |
| Echtzeit-Wellenform / Diagramm | ❌ | ❌ | Graph-Plug - in |
| TCP/UDP | ❌ | ✅ | ✅ |
| SSH-Client | ❌ | ❌ | ✅ |
| Multiple Send Management | ✅ 4 Seiten × 10 Seiten | ✅ 10 Seiten unbegrenzt | ✅ Benutzerdefinierte Schaltfläche |
| Installationsschwierigkeit | Entpacken für die Verwendung | Entpacken für die Verwendung | Pip Installieren oder Deinstallieren |
Options-Roadmap:
- Sie müssen die Modbus RTU in Windows aufsteigen und tägliche Übertragung + Verification→ ATK-XCOM. Protokollübertragungsmodus CRC16 integriert, mehrere Senden-Management ausgereift, null Lernkosten.
- Sie müssen unter Windows Skripte für automatisierte Tests schreiben, Multi-Protocol - Intermodulation→ LLCOM. Die Lua-Skripting - Engine kann jede automatisierte Logik verarbeiten, und xlua kann die native C # - Schnittstelle tun.
- Sie entwickeln auf einem Mac oder Linux oder benötigen eine Visualisierung von Sensordaten→ COMTool. Die einzige Plattform-Over - Szenario, Protokoll-Plug - In gibt es keinen Ersatz für die benutzerdefinierte Analyse von Modbus, Wellenform-Diagramm für physikalische Größen Debugging ist nur erforderlich.
- Mehrfach im selben ProjektDrei Kooperationen. ATK-XCOM übernimmt tägliche Modbus-Sendung und - Überprüfung, LLCOM übernimmt automatische Polling-Volumen und COMTool überwacht die Sensor-Wellenform.
V. Weitere Modbus-bezogene Anwendungen von COMTool
5.1 TCP / UDP Debugging Modbus TCP
COMTool unterstützt den Netzwerkdebugging-Modus für TCP-Client / Server. Wenn Sie ein Modbus-TCP - Gerät tun, verbinden Sie den IP: 502 - Port des Geräts im TCP-Client - Modus und senden Sie ein Modbus-TCP - Frame (MBAP-Header + PDU), wie das Debugging des seriellen Portes. Der Empfangsbereich unterstützt auch die Auflösung von Protokoll-Plugins.
5.2 SSH-Terminal + Serial-Port - Debugger integriert
Wenn Ihr Debuggerobjekt ein Linux-Industrial - Controller ist (z. B. Modbus-Host - Programm läuft auf Raspberry Pi), können Sie gleichzeitig zwei COMTool-Fenster öffnen: ein SSH-Login - PC-Login - Protokoll und Befehle, ein serieller Port-Modbus - Kommunikation zu sehen. Es ist in derselben Software erledigt, ohne zwischen Putty und dem seriellen Port-Assistenten zu schneiden.
5.3 Konfigurationsdateien über Maschinen hinweg
Die seriellen Portparameter von COMTool, die Sendenvergangenheit und die Plug-in - Konfiguration werden alle in der lokalen Konfigurationsdatei gespeichert. Alles, was Sie auf Ihrem Windows-Büro ausgerüstet haben, stecken Sie die Konfigurationsdateien auf Ihren Raspberry Pi vor Ort - einschließlich des Protokoll-Plugins, das Sie geschrieben haben - laden Sie direkt und stellen Sie die vollständige Debugging-Umgebung in einer Sekunde wieder her.
6. Installieren Sie COMTool und starten Sie die Modbus-Debugging
6.1 Windows (die einfachste)
vonhttps://github.com/Neutree/COMTool/releasesLaden Sie die neu este . zip - D atei her unter und ö ff nen Sie sie und dop pel kli cken Sie auf com to ol . exe .
6.2 macOS
Laden Sie die Installation mit. dmg von Releases herunter. oder von PyPI:pip install comtoolund dann im Terminal eingeben.comtool。
6.3 Linux / Raspberry Pi
# Ubuntu/Debian
sudo apt install python3-pyqt5 python3-numpy python3-pip -y
pip install comtool
comtool
# Arch
yay -S python-comtool
# 树莓派 - 额外一步:当前用户加入 dialout 组
sudo usermod -a -G dialout $USER
sudo reboot6.4 Verifizieren Sie die serielle Anschlusskommunikation
Schließen Sie das USB-in - 485 - Modul an und wählen Sie die Seriennummer im linken COMTool-Panel aus:
- Windows: COM3 usw.
- macOS / Linux:/dev/tty.usbserial oder /dev/ttyUSB0
Die Baudrate, die Datenbits und die Verifizierungsbits werden nach den Geräteparametern festgelegt. Klicken Sie auf „Öffnen". Geben Sie den Modbus-Testrahmen in den Sendenbereich ein, wechseln Sie in den Hexadezimalmodus und senden Sie den Punkt.
COMTool ist nicht das beste Modbus-Debugger - ATK-XCOMs integrierte CRC-Checksumme - Multiple-Sendings sind eher für Modbus geeignet. COMTool ist auch nicht das flexibelste Skript-Tool - LLCOMs Lua-Kooperations - und xlua-C # - Aufrufe sind leistungsfähiger. Aber COMTool ist das einzige, das auf Mac, Linux und Raspberry Pi läuft und es Ihnen erlaubt, ein benutzerdefiniertes Python-Protokoll zu analysieren und Sensordaten in Echtzeit-Kurven zu verwandeln.
Das ist seine Nische: Plattformübergreifend + Python-Anpassbarkeit + Visualisierung. Es gibt alle drei Alternativen, aber alle drei sind in einem Werkzeug, es gibt derzeit kein zweites.
Diese Website bietet COMTool inländische Disk-Download und Chinesisch-Nutzen - Tutorials, Mitglieder können kostenlos herunterladen alle Debugging-Tools Sammlung. Eine Szenario, die nicht durch einen seriellen Assistenten gelöst werden kann, können immer drei Serienassistenten gelöst werden.
Probleme noch mal reden.
Antwort veröffentlichen