COMTool:优雅高效的跨プラットフォームシリアルデバッグアシスタント

会員限定会員限定

该内容已接入现有会員/有料系统,解锁后可完全な情報を見る或添付ファイルのダウンロード。

COMTool:优雅高效的跨プラットフォームシリアルデバッグアシスタント

Source: Modbus Chinese Network(modbus.cn) —— China leadingModbuscommunication protocol technical community

本記事:COMTool:Python 系的跨プラットフォームシリアルポートデバッグ方案 · Author:modbus Technical Team · 发布于 2026-07-01

摘要:COMTool(GitHub: Neutree/COMTool,LGPL-3.0)是用 Python 3 + PyQt5 写的开源シリアルポートデバッグ工具,サポート Windows、Linux、macOS 和Raspberry Piについて。对 Modbus デバッグ场景来说,它有三个差异化价值:真正的全プラットフォーム一致性体验、协议插件系统(Python 自定义编解码/Parse)、内置实时波形图表(センサーはデータ可视化)。本記事不铺功能清单,直接从 Modbus エンジニア的实际需求出发,告诉你 COMTool 能解決哪些問題、在哪几个场景下比 ATK-XCOM 和 LLCOM 更适合。关键词:COMTool、跨プラットフォームシリアルポートデバッグ、Python シリアルポート工具、Modbus 波形表示、协议插件。


搞 Modbus デバッグ的人,大多数时候趴在 Windows 上干活——毕竟 SIEMENS、三菱、オムロン的组态ソフトウェア和プログラミング工具基本只跑 Windows。但有那么几个场景,你会突然发现自己需要的シリアルアシスタント在 Windows 上根本ない,或者有了但体验一塌糊涂:

场景一:你用的是 MacBook Pro 作为主力开发机,但 USB 转 485 插上去,要调一个 Modbus Sensors。打开虚拟机跑 Windows 版本的工具——シリアルポート透传延迟高三倍,偶尔丢フレーム。

场景二:你的ゲートウェイ跑在 Ubuntu Server 上,现场只有一台Raspberry Piについて可以插シリアルポート。你想直接在Raspberry Piについて桌面环境上开个シリアルアシスタント抓データ——绝主に。 Windows 工具直接没法用。

场景三:你在调一个温湿度センサー,Modbus 戻る的是オリジナルのレジスタ値(比如 168 代表 16.8°C),你需要在受信区直接看到温度曲线而非一堆十六进制数字。

这三个场景,就是 COMTool 存在的理由。

COMTool 是 GitHub オープンソースプロジェクト(Neutree/COMTool),MIT Protocol,用 Python 3 + PyQt5 写的。GitHub 上有 2000+ Star,核心维护者是 Neutree。它ではない功能最全的シリアルポート工具,也ではない Modbus 专用工具——但它是目前跨プラットフォーム做得最彻底的シリアルポート工具中,插件和可视化能力最强的一个。


一、COMTool 的跨プラットフォーム到底「跨」了哪些

不像某些工具「理论サポート Linux 但实际装不起来」,COMTool 对每个プラットフォーム都有独立的パッキング和インストール方案:

Windows:从 GitHub Releases Download zip 包解压直接运行 comtool.exe。也可以経由 Scoop(Windows 包管理器)インストール:scoop bucket add Nightly ... && scoop install comtool

macOS:dmg インストール包直接インストール。因为是 Python + PyQt5 写的,系统自带 Python 3 即可。注意首次打开时因为未签名,需要在「系统偏好設定→セキュリティ性与隐私」中允许运行。もし想多开窗口,终端执行 open -n /Application/comtool.app

Linux:这是 COMTool 的优势场。Ubuntu 系有预编译二进制,Arch 系可以从 AUR インストール(yay -S python-comtool)。也可以用 pip 从源码インストール:pip install comtool。Raspberry Piについて需要先装依赖 sudo apt install git python3-pyqt5 python3-numpy,再 pip install。

Raspberry Pi:完全サポート。插上 USB 转 485 モジュール、通电、open COMTool、选 /dev/ttyUSB0——和 Windows 上一样的操作逻辑。

すべてのプラットフォーム上体验一致:同一个 PyQt5 界面、同一个插件系统、同一个設定文件格式。你可以在 Windows 上写好协议插件,拷贝到Raspberry Piについて的 COMTool 插件目录下直接加载。


二、协议插件 —— COMTool 对 Modbus デバッグ最有价值的功能

2.1 协议插件解決什么問題

普通的シリアルアシスタント是这样的:你发十六进制 010300000001840A,デバイス回 01030201988432,你用肉眼在回应的バイト里找「0103」、駅住所の確認是对的、跳过去看データバイト在哪、再手計算してください CRC。

COMTool 的协议插件(Protocol Plugin)可以让你定义收发两端的データの処理逻辑:送信前把「用户友好的入力」(比如「读温度センサー」)自动转成 Modbus RTU フレーム;受信后把元の十六进制フレーム自动解析为「センサーは值: 25.3°C」。全程必要なし。手看十六进制。

原理很简单。每个协议插件是一个 Python 类,必须実装2つ核心方法:encode()decode()

encode() 的作用是把用户入力转成要送信的元のバイト。decode() 的作用是把受信到的元のバイト转成用户可读的表示格式。

2.2 一个最简的 Modbus protocol插件サンプル

以下插件让你在 COMTool 的「Protocol」モード下,发「读レジスタ address0 Quantity4」这样的自然语言命令,自动拼成 Modbus RTU フレーム送信。受信到的二进制レスポンス自动解析为「slave01: [168, 2234, 0, 512]」。

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:
        """用户入力 '读レジスタ address0 Quantity4' → 拼成 Modbus RTU フレーム"""
        text = self.sendEdit.toPlainText().strip()
        # 简化解析:固定駅からの住所 0x01
        slave = 0x01
        # デフォルトリードホールドレジスタ(function code 0x03),starting address 0,Quantity 1
        _, addr_str, count_str = text.split()
        addr = int(addr_str.replace('address', ''))
        count = int(count_str.replace('Quantity', ''))
        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)} byte]"
        slave = data[0]
        func = data[1]
        if func >= 0x80:
            exc = data[2]
            return f"[異常] slave{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{slave:02X}: [{', '.join(values)}]"

把这个 Python 文件放到 COMTool 的插件目录,启动后在「Protocol」面板選択这个插件。之后你在送信框里写 读レジスタ address0 Quantity4,点送信,实际发出去的是完全的 Modbus RTU 查询フレーム(含 CRC)。受信到的十六进制バイト会自动变成 slave01: [168, 2234, 0, 512]

n
COMTool:优雅高效的跨プラットフォームシリアルデバッグアシスタントイラスト
n nn

2.3 更复杂的场景:自定义チェック、自定义フレーム形式

Modbus protocol插件只是一个例子。COMTool 的协议插件的真正价值在于処理那些「市面上ない任何工具サポート的私合意がある。」:

  • 某国产サーモスタット戻る AA BB CC DD EE FF GG HH——前四byteは温度(BCD 码),后四byteは湿度。写个 decode() 解析成 temperature: 23.5°C, 湿度: 67.2%
  • CustomizationVerification:ではない標準 CRC16 而是 CRC8/XOR/某厂商自己的魔改チェック,写个 Python 函数Got it.

encode()decode() 可以调任何 Python 库——你可以 parse JSON、查字典翻译エラー·コード、甚至调 numpy 做データ滤波。这是 C# 或 C++ 写的シリアルポート工具做不到的灵活性。


三、波形/图表 —— 把 Modbus レジスタの値变成实时曲线

3.1 サポート两种データ格式

COMTool 内置的 Graph 插件可以从シリアルポートデータ中提取坐标并绘制实时曲线。サポート两种格式:

ASCII format(おすすめ,人可读):

$曲线名称,X坐标,Y坐标,checksumn

例子:你的センサーは单片机每隔 200ms 发 $temp,1.0,25.3n,COMTool 就会在「temp」曲线上画点 (1.0, 25.3)。带チェック和版:$temp,1.0,25.3,179n——チェック和是すべての字段的 ASCII 码累加取低 8 位。

二进制格式(高效,适合高速采集):协议長さ更短,每秒可传上千个点。具体格式见 COMTool 官方ドキュメント。

n
COMTool:优雅高效的跨プラットフォームシリアルデバッグアシスタントイラスト1
n nn

3.2 Modbus センサーはデータ可视化的实际做法

假设你有一个 Modbus Temperature & Humidity Sensor(slave address 01),戻るレジスタ 40001(temperature,単位 0.1°C)和 40002(湿度,単位 0.1%)。你想在 COMTool 里看到温度和湿度的实时曲线。

用一个中间脚本做桥接:Python 脚本経由 pyserial 读 Modbus Response → 解析出温度/湿度 → 按 COMTool 的 ASCII 波形格式出力到バーチャルシリアルポート → COMTool 的 Graph 插件直接表示曲线。

或者更直接的方案:用 COMTool 的协议插件做解析,decode() 函数的出力直接格式化为 $temp,{timestamp},{value}n + $humi,{timestamp},{value}n,在 Graph 插件里就能看到两条实时曲线。

多图表サポート:可以同时追加温度、湿度、露点温度三条曲线,各自不同颜色。

3.3 C 语言端代码

もしセンサーは是 STM32/ESP32 自己写的固件,在单片机侧出力 COMTool 兼容的波形データ:

// send 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);

这样固件端不用做任何 GUI 开发,直接シリアルポート出力,COMTool 就能画图。


四、ATK-XCOM / LLCOM / COMTool —— 三者的ポジショニング差在哪

对比维度ATK-XCOM V3.0LLCOMCOMTool
开发方正点原子(商用)chenxuuu(个人开源)Neutree(个人开源)
License無料闭源Apache 2.0LGPL-3.0
プラットフォームWindowsWindowsWin + Mac + Linux + Raspberry Pi
技术栈C# / .NETC# / .NET + xluaPython 3 / PyQt5
Script/插件✅ Lua 5.3✅ Python 插件
内置 Modbus CRC✅ 协议传输モード❌(需 Lua 手写)❌(需 Python 插件)
实时波形/图表✅ Graph 插件
TCP/UDP
SSH クライアント側は
多条送信管理✅ 4页×10条✅ 10页不限条数✅ 自定义按钮
インストール难度解压即用解压即用pip install 或解压

选型路线图:

  • 你在 Windows 上调 Modbus RTU,需要日常收发+check → ATK-XCOM。协议传输モード内置 CRC16,多条送信管理成熟,零学习成本。
  • 你在 Windows 上需要写脚本做自動化测试、多协议联调 → LLCOM。Lua 脚本引擎可以処理任何自動化逻辑,xlua 能调 C# 原生接口。
  • 你用 Mac 或 Linux 做开发,或需要センサーはデータ可视化 → COMTool。唯一的全プラットフォーム方案,协议插件在 Modbus 自定义解析上无替代品,波形图表对物理量デバッグ是刚需。
  • 同一个项目中多用 → 三个配合。ATK-XCOM 做日常 Modbus 收发和チェック,LLCOM 做批量自動化ポーリング,COMTool 做センサーは波形モニタリング。

五、COMTool 的其他 Modbus 相关用途

5.1 TCP/UDP debug Modbus TCP

COMTool 的网络デバッグモードサポート TCP クライアント側は/サーバー側。。调 Modbus TCP デバイス时,在 TCP クライアント側はモード下连デバイス的 IP:502 ポート,send Modbus TCP フレーム(MBAP 头 + PDU),和シリアルポートデバッグ一样的操作体验。受信区同样サポート协议插件解析。

5.2 SSH 终端 + シリアルポートデバッグ一体

当你的デバッグ对象是一台 Linux 工控机(比如Raspberry Piについて上跑着 Modbus マスター程序),你可以同时开2つ COMTool 窗口:一个连 SSH ログイン工控机看日志和发命令,一个连シリアルポート看 Modbus Communication。同一个软件里完成,不用在 Putty 和シリアルアシスタント之间切来切去。

5.3 設定文件跨机器迁移

COMTool 的シリアルパラメータ、送信历史、插件設定すべて保存在本地設定文件中。你在办公室的 Windows 上配好的すべての东西,把設定文件拷到现场的Raspberry Piについて上——包括你写的协议插件——直接加载,一秒恢复完全的デバッグ环境。


六、インストール COMTool 并开始 Modbus debug

6.1 Windows(最简单)

从 https://github.com/Neutree/COMTool/releases 最新のダウンロード .zip 文件,解压后双击 comtool.exe。

6.2 macOS

从 Releases Download .dmg インストール。或从 PyPI:pip install comtool,然后在终端入力 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

# Raspberry Pi - 额外一步:当前用户加入 dialout 组
sudo usermod -a -G dialout $USER
sudo reboot

6.4 验证シリアル通信

插上 USB 转 485 モジュール,在 COMTool 左侧面板選択シリアルポート番号:

  • Windows:COM3 等
  • macOS/Linux:/dev/tty.usbserial 或 /dev/ttyUSB0

Baud rate、data bit、チェックビット按デバイス参数設定。click「open」。在送信区入力 Modbus テストフレーム、切换到十六进制モード、点送信。


COMTool ではない最好的 Modbus debugging tool——ATK-XCOM 的 CRC 内置チェック和多条送信更针对 Modbus。COMTool 也ではない最灵活的脚本工具——LLCOM 的 Lua 协程和 xlua C# 调用能力更强大。但 COMTool 是唯一一个可以在 Mac、Linux、Raspberry Piについて上都能丝滑运行,同时允许你用 Python 定制协议解析、还能把センサーはデータ变成实时曲线的东西。

这就是它的生态位:跨プラットフォーム + Python 可定制 + 可视化。三者单独看都有替代品,但三者放一个工具里,目前ない第二个。

本站提供 COMTool 的国内网盘下载和中文使用チュートリアル,会員可無料ダウンロードすべてデバッグツール合集。一个シリアルアシスタント解決不了的场景,三个シリアルアシスタント总能解決。

有問題再聊。

Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC verification and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

Your email address will not be published. Required fields are marked *.