ソース:Modbus China Network(modbus.cn) -中国をリードするModbusCommunicationプロトコル技術コミュニティ
この記事:COMTool:Pythonのクロスプラットフォームシリアルデバッグソリューション·著者:modbus技術チーム·公開日2026- 0 7 - 0 1
COMTool(GitHub:Neutree/COMTool,LGPL-3.0)は、Python 3 + PyQt5で書かれたオープンソースのシリアルデバッグツールで、Windows、Linux、macOS、Raspberry Piをサポートしています。Modbusデバッグシナリオでは、真のプラットフォーム全体で一貫性のあるエクスペリエンス、プロトコルプラグインシステム(Pythonカスタムコーデック/Parse)、組み込みのリアルタイム波形チャート(センサーデータの可視化)の3つの差別化価値があります。この記事では、機能リストではなく、Modbusエンジニアの実際のニーズから直接始めて、COMToolが解決できる問題と、ATK-X COMやLLCOMよりも適しているいくつかのシナリオを説明します。キーワード:COMTool、クロスプラットフォームシリアルデバッグ、Pythonシリアルツール、Modbus 波形表示、プロトコルプラグイン。
Modbusのデバッグを行う人は、ほとんどの場合、Windowsで作業しています。SIEMENS、三菱、オムロンの設定ソフトウェアやプログラミングツールは基本的にWindowsのみを実行します。しかし、いくつかのシナリオでは、突然Windowsにシリアルアシスタントが必要ではないか、あるが経験が混乱していることがわかります。
シナリオ1:Mac Book Proをメイン開発マシンとして使用していますが、USBを485に接続し、Modbusセンサーを調整する必要があります。Windowsバージョンのツールを実行する仮想マシンを開きます。シリアルトランスポートレイテンシは3倍高く、時折フレームをドロップします。
シナリオ2:ゲートウェイがUbuntu Server 上で実行されており、シリアルに接続できるRaspberry Piは1台だけです。Raspberry Piデスクトップ環境で直接シリアルアシスタントを開きたい場合は、ほとんどのWindowsツールでは動作しません。
シナリオ3:temperatureセンサをチューニングしていて、Modbusが生のレジスタ値(16.8°Cの場合は168など)を返します。16進数の山ではなく、受信エリアに直接温度曲線を見る必要があります。
これら3つのシナリオがComToolの存在理由です。
COMToolは、Python 3 + PyQt5で書かれたGitHubオープンソースプロジェクト(Neutree/COMTool)、MITプロトコルです。GitHubには2,000以上のStarがあり、コアメンテナはNeutreeです。これは、最もフル機能のシリアルツールでもModbus専用ツールでもありませんが、クロスプラットフォームで最も徹底的に実行されているシリアルツールの中で、プラグインと可視化のための最も強力なものです。
Comtoolのクロスプラットフォームとは何か?
“理論的にはLinuxをサポートするが実際にはインストールできない”ツールとは異なり、COMToolはプラットフォームごとに個別のパッケージとインストールスキームを持っています。
Windows:GitHub Releasesから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-numpypip installします。
Raspberry Piについて完全なサポート。USB-485モジュールの接続、電源投入、COMToolのオン、選択/dev/ttyUSB0Windowsと同じOperationロジックです。
すべてのプラットフォームで一貫したエクスペリエンス:同じPyQt5インターフェイス、同じプラグインシステム、同じ設定ファイル形式。Windows 上でプロトコルプラグインを書いて、Raspberry PiのCOMToolプラグインディレクトリにコピーして直接読み込むことができます。
プロトコルプラグイン-COMTool Modbusデバッグの最も貴重な機能
2.1プロトコルプラグインが解決する問題
通常のシリアルアシスタントはこんな感じです16進数を送ります010300000001840A装備を戻す。01030201988432肉眼で応答のバイトの中に“0103”を探し、スレーブアドレスが正しいことを確認し、ジャンプしてデータバイトがどこにあるかを確認し、CRCを計算します。
COMToolのプロトコルプラグインを使用すると、送受信側のデータ処理ロジックを定義できます。送信前に“ユーザーフレンドリーな入力”(“temperatureセンサーの読み取り”など)をModbus RTUフレームに自動的に変換し、受信後に元の16進数フレームを自動的に“センサー値25.3°C”にParseします。16進数を見る必要はありません。
原理は簡単です。各プロトコルプラグインはPythonクラスで、2つのコアメソッドを実装する必要があります。encode()そして、decode()。
encode()ユーザー入力を送信する元のバイトに変換します。decode()受信した生のバイトをユーザーが読める表示形式に変換することです。
2.2 Modbusプロトコルプラグインの最も単純な例
以下のプラグインを使用すると、COMToolの“プロトコル”モードで“レジスタアドレス0番号4を読み取る”などの自然言語コマンドを発行し、自動的にModbus RTUフレームで送信できます。受信したバイナリ応答は、的に“スレーブ01 [168 2234 0 512]”と解釈されます。
class Plugin Plugin_Base
id = "mod_r"
name = "Modbus RTUパーサー"
version = "1.0"
# CRC16ルックアップテーブル(Modbus多項式0 xA 001)
_crc_table =なし
@classmethod
_
CLSの場合。crc_table
CLSに戻る。crc_table
テーブル=]
for i in range 256
CRC = I
for _ in 8
if crc 1
crc = crc1 ^ 0xA001
else nParticle
CRC = 1
table.append crc
CLS._。crc_table =テーブル
表に戻る
@classmethod
_crc16
テーブル= cls._ build_crc_table
crc = 0 x FFFF
for B in data
crc = crc8 ^table crc ^ b 0xFF]
CRCに戻る
def encode self-bytes
“”“ユーザー入力'リードレジスタアドレス0数4' →フレームに组み合わせる”"
text = self.sendEdit.toPlainText. st
単純な解決:固定スレーブアドレス0 x 0 1
スレーブ= 0 x 0 1
#デフォルトのリードホールドレジスタ(関数コード0 x 0 3)、開始アドレス0、Quantity 1
__count_= text. it
addr = int addr_str.replace 'アドレス'''
count = int count_str.replace 'Quantity'''
frame = bytes slave 0x03
(addr 8 0xFF addr 0xFF
count 8
crc = self._crc16
return frame + bytes crc 0xFF crc 8 0xFF]
def decode self data bytes-str
“受信したModbus応答フレーム→人間が読めるテキストをParseする”
if data 5
return f"データが短すぎます{len data}バイト]"
スレーブ=データ0]
func = data 1)
func = 0 x 80の場合
exc = data 2]
return f"例外]スレーブ{slave 02X}エラーコード{excc}"
byte_count = data2]
values =)
for i in range byte_count// 2
hi = data3 + i * 2]
lo = data 4 + i * 2]
values.append str hi<< 8| lo
return f"スレーブ駅{slave 02X}{''. join values}]"このPythonファイルをCOMToolのpluginディレクトリに置き、起動後に“Protocol”パネルでプラグインを選択します。その後、送信ボックスに書き込みます。リードレジスタアドレス0 Quantity4ポイント送信、実際に送信されるのは完全なModbus RTUクエリフレーム(CRCを含む)です。受信した16進バイトは自動的に駅から01 [1682234,0512]。

2.3より复雑なシーンカスタム検证、カスタムフレーム形式
Modbusプロトコルプラグインはその一例です。COMToolのプロトコルプラグインの真の価値は、“市場でサポートされていないプロプライエタリなプロトコル”を扱うことです。
- 国産サーモスタットの帰還
AA BB CC DD EE FF GG HH最初の4バイトはtemperature(BCDコード)、次の4バイトは湿度です。何か書く。decode()Parseするとtemperature23.5°C、湿度67.2%。 - カスタムチェック:標準的なCRC16ではなく、CRC8/XOR/ベンダー独自のマジックチェック、Python関数を書いて処理します。
encode()そして、decode()任意のPythonライブラリをチューニングできます-JSONのparse、辞書の翻訳エラーコードのチューニング、さらにはチューニングもできます。numpyデータをフィルタリングする。これは、C#やC++で書かれたシリアルツールにはない柔軟性です。
波形/グラフ-Modbusレジスタ値をリアルタイム曲線に変換する
3.1 2つのデータ形式をサポート
COMTool内蔵のGraphプラグインは、シリアルデータから座標を抽出し、リアルタイム曲線を描画します。2種類のフォーマットをサポート:
ASCII形式(推奨、読みやすい):
$カーブ名、X座標、Y座標、チェックサムn例:200msごとにセンサを送信します。$temp,1.0,25.3nCOMToolは、temp曲線上に点1.0、25.3を描画します。Checksum Editionより:$temp,1.0,25.3,179nチェックサムは、すべてのフィールドのASCIIコードの下位8ビットの合計です。
バイナリ形式(効率的、高速取得に適しています):プロトコル長が短く、毎秒数千ポイントを送信できます。詳細はCOMToolの公式ドキュメントを参照。
n
3.2 Modbusセンサーデータ可視化の実践
Modbus温度湿度センサ(ステーションアドレス01から)があり、レジスタ40001(temperature、単位0.1°C)と40002(湿度、単位0.1%)を返すとします。COMToolでtemperatureと湿度のリアルタイム曲線を表示したいです。
中間スクリプトを使用してブリッジを行います。PythonスクリプトはPyserial経由でModbusレスポンスを読み取り、temperature/湿度をParseし、COMToolのASCII 波形形式で仮想シリアルポートに出力し、COMToolのGraphプラグインは曲線を直接表示します。
または、より直接的なソリューション:COMToolのプロトコルプラグインを使用してParseします。decode()関数の出力は、次のように直接フォーマットされます。$temp,{timestamp},{value}n+$humi,{timestamp},{value}nGraphプラグインでは、2つのリアルタイム曲線が表示されます。
マルチチャートサポート:temperature、湿度、露点温度の3つの曲線、それぞれ異なる色を同時に追加することができます。
3.3 C言語のエンドコード
センサがSTM 32/ESP32独自に記述されたファームウェアの場合、MCU側でCOMTool準拠の波形データを出力します。
//ASCII波形データ(チェックサムを含む)を送信する
int plot_pack_ascii * buff int buff_size
const * ve_name float x float y
{
sum = 0;
int len = snprintf buff buff_size "$% s %. 1f %. 1f"
curve_name、x、y;
for int i = 1; i; i +++= buff i];<[
len += snprintf buff + len buff_size-len " % dn" sum 0xFF;&
レンに戻ります
}
//センサー読み取りループで呼び出される
char buf 128];[
int = plot_pack_ascii buf of buf "
time_ms/1000.0 temperature/10.0;
uart_send_bbuf;このように、ファームウェア側はGUI開発、直接シリアルポート出力を行う必要はなく、COMToolは描画できます。
ATK-X COM/ LLCOM /COMTool-3つの位置決めの違いは何ですか?
| 次元の比較 | ATK-XCOM V3.0 | LLCOM | COMTool |
|---|---|---|---|
| 開発者たち | アトミック(商業用) | Chenxuuu(個人オープンソース) | Neutree(オープンソース) |
| ライセンスは | 無料クローズドソース | Apache 2.0 | LGPL-3.0 |
| プラットフォームは | Windows | Windows | Win + Mac + Linux + Raspberry Pi |
| テクノロジースタック | C# / .NET | C# / .NET + xlua | Python 3 / PyQt5 |
| スクリプト/Plugin | ❌ | ✅ Lua 5.3 | ■ Pythonのプラグイン |
| 内蔵Modbus CRC | ■プロトコル転送モード | (Luaの手书きが必要) | ❌(需 Python 插件) |
| リアルタイム波形/グラフ | ❌ | ❌ | Graphプラグイン |
| TCP/UDP | ❌ | ✅ | ✅ |
| SSHクライアント | ❌ | ❌ | ✅ |
| 複数の送信管理 | 4ページ×10記事 | ·10ページ無制限 | ■ボタンの定義 |
| インストールの難しさ | 解凍して使用 | 解凍して使用 | pip installまたは解凍 |
ロードマップの選択:
- WindowsでModbus RTUをアップグレードすると、毎日の送受信と検証が必要になります。ATK-X COMの略。プロトコル転送モード内蔵CRC16、マルチ送信管理成熟、ゼロ学習コスト。
- Windowsで自動テスト、マルチプロトコルチューニングのスクリプトを書く必要があります。略称はLLCOM。Luaスクリプトエンジンはあらゆる自動化ロジックを処理でき、xluaはC#ネイティブインターフェイスをチューニングできます。
- MacまたはLinuxで開発するか、センサーデータの可視化が必要です。COMTOOLです。唯一のフルプラットフォームソリューションであり、プロトコルプラグインはModbusカスタムParseに代わるものではなく、物理量デバッグには波形チャートが必要です。
- 同じプロジェクトで多くのことを3つのコラボレーションATK-X COMは毎日のModbus送受信と検証を行い、LLCOMはバッチ自動ポーリングを行い、COMToolはセンサ波形監視を行います。
COMToolのその他のModbus関連の用途
5.1 TCP/UDP Modbus TCPのデバッグ
COMToolのネットワークデバッグモードは、TCPクライアント/サーバをサポートしています。Modbus TCP設備を調整する時、TCPクライアントモードで設備のIP − 502ポートに接続し、Modbus TCPフレーム(MBAPヘッダ+ PDU)を送信し、シリアルポートデバッグと同じ操作体験をする。受信エリアはプロトコルプラグイン解決もサポートします。
5.2 SSHターミナル+シリアルデバッグ
デバッグ対象がLinux産業用コンピュータ(Raspberry Pi上でModbusマスタープログラムを実行しているなど)の場合、2つのCOMToolウィンドウを同時に開くことができます。1つはSSHログインしてログとコマンドを表示し、もう1つはシリアルポートでModbus Communicationを表示します。Puttyとシリアルアシスタントの間で切断することなく、同じソフトウェアで行います。
5.3マシン間でのプロファイルの移行
COMToolのシリアルパラメータ、送信履歴、プラグイン設定はすべてローカル設定ファイルに保存されます。オフィスのWindowsでセットアップしたものはすべて、設定ファイルをライブのRaspberry Piにコピーして、作成したプロトコルプラグインを含めて、直接ロードし、完全なデバッグ環境を1秒で復元します。
COMToolのインストールとModbusデバッグの開始
6.1 Windows(最も簡単)
https://github.com/Neutree/COMTool/releasesから最新の.zipファイルをダウンロードし、解凍してcomtool.exeをダブルクリックします。
6.2 macOS
Releasesから.dmgインストールをダウンロードする。PyPIから:pip install comtoolターミナルに入力します。comtool。
6.3 Linux /Raspberry Pi
# Ubuntu/Debian
sudo apt install python 3-pyqt 5 python 3-numpy python 3-pip-y
pip install comtool
comtoolの
#アーチ#
yay-S python-comtool
#Raspberry Pi-追加ステップ:現在のユーザーがDialoutグループに参加する
sudo usermod-a-G dialout $USER
sudo rebootです。6.4シリアルCommunicationの確認
USB 485モジュールを接続し、COMToolの左側のパネルでシリアル番号を選択します。
- Windows:COM3など
- macOS/Linux:/dev/tty.usbserialまたは/dev/ttyUSB 0
ボーレート、データビット、検証ビットはデバイスパラメータごとに設定します。“開く”をクリックします送信エリアにModbusテストフレームを入力し、16進モードに切り替え、ポイント送信します。
COMToolは最高のModbusデバッグツールではありません。ATK-X COMのCRC内蔵チェックサムマルチ送信はModbus専用です。COMToolは最も柔軟なスクリプトツールでもありません。LLCOMのLuaコルーチンとxlua C#呼び出しはより強力です。しかし、COMToolはMac、Linux、Raspberry Pi上で動作する唯一のものであり、PythonのカスタムプロトコルでParseし、センサーデータをリアルタイムの曲線に変換することができます。
クロスプラットフォーム+ Pythonカスタマイズ可能+視覚化:これがニッチです。3つは別々に見ることができますが、3つは1つのツールに入れられ、2つ目はありません。
当サイトはCOMToolの国内ネットディスクダウンロードと中国語の使用チュートリアルを提供し、メンバーは無料ですべてのデバッグツールをダウンロードできます。1つのシリアルアシスタントでは解決できないシナリオ、3つのシリアルアシスタントはいつでも解決できます。
再び話す問題がある。
Leave a Reply