SerialTool と他のソフトウェアの比較
説明と比較表
なぜこのページがあるのか?
このページにたどり着いたということは、おそらくアプリケーションで使用するシリアルポート、つまり COM ポート向けに、どのソフトウェアを選ぶべきか迷っているのではないでしょうか。
そして、なぜシリアルポート用ソフトウェアの比較表があるのか、とも思われたかもしれません。答えはシンプルです。SerialTool の開発側としては、シリアルポートと通信するためのソフトウェアの中で、SerialTool が最も高度なツールの 1 つであり、有名で広く使われている他のソフトと比較しても十分に競争力があることを、きっと実感していただけると考えているからです。
SerialTool の歴史
まず最初にお伝えしたいのは、SerialTool が、RS-232 がまだ多くの PC やノート PC に物理ポートとして搭載されていた時代から続く、日常的かつ集中的なシリアルポート利用の「10 年以上の経験」から生まれたということです。その後、よく知られた USB-シリアル変換器に置き換えられるようになりました。
シリアルポート用のソフトウェアでは、「RS-422 や RS-485 にも対応」と強調されていることがよくあります。
ここでハッキリさせておきたいのは、RS232、RS422、RS423、RS485 は本質的にすべて物理レイヤのプロトコルであるという点です。これらは、あらゆる機器で利用されるシリアル通信プロトコル/インターフェースです。シリアルインターフェースは、電子機器や組み込みシステムで広く使われており、多くの場合、リモートデバイスからのデータ収集や、遠隔制御のために用いられます。PC、マイコン、あるいは TTL レベルのシリアル通信であっても、信号の送信方法が変わるだけで、本質的には同じシリアル通信です。これらはすべて、通信変換チップによって RS232、RS422、RS423、RS485 の信号へ変換されます。
なぜこの説明が必要なのでしょうか? シリアルポートや COM ポートと通信できるソフトウェアであれば、物理レイヤ固有の距離や速度の制約はあるものの、RS-232/RS-422/RS-485 すべてに対応できるからです。
「SerialTool は RS-485 で使えますか?」という質問に対しての答えは「はい」です。他のシリアルポートソフトと同様に使用できます。
「RS-422 や RS-485 に対応」と強くアピールするソフトウェアに惑わされないでください。それらは本来、どのシリアルソフトでも扱えるものです。
Windows / Linux / macOS 対応マルチプラットフォーム シリアルソフト
前述のような昔から、SerialTool のプライベート版が社内向けツールとして開発されてきました。これは、組み込み開発環境での「日々のニーズ」をすべて取り込むことを目的としたものです。組み込みの現場では、一般的な Windows だけでなく、Linux や、近年では macOS を使うことも多くなっています。
SerialTool はマルチプラットフォームフレームワークで開発されており、シリアルポート接続のルーチンは、SerialTool が提供されている 3 つの OS それぞれに対して、ネイティブ関数を用いて実装されています。
安定はしているものの、シリアルポートが持つすべてのパラメータを柔軟かつ完全に制御できない「汎用ライブラリ」は使用していません。そのため、特定の IDE が提供するライブラリでは到達できないレベルまで扱えるように、ソースコードを一から記述しました。この努力は、SerialTool が備える豊富な機能と高い性能として大きな成果をもたらしています。
SerialTool は誰のためのツールか?
「このソフトはプロ向けだけに作られているのでは?」と思われるかもしれません。
答えは「いいえ」です。SerialTool はあらゆる用途に適しています。趣味や教育、研究用途での Arduino ボードとのシンプルな通信例から、複数のシリアル接続を同時に扱い、それらすべてを同時に監視しながら、シリアルトラフィックを信頼性高く・長時間・柔軟にログ取りする必要がある複雑なシステムに至るまで、幅広く対応できます。
こうした数多くの理由から、SerialTool は 2009 年以降、Duolabs のラボで社内ツールとして開発されてきました。当時は「SerialTalk」という名前でした。ここからは、シリアルポートを使うときによく直面するニーズについて、プロ用途とホビー用途の両面から、もう少し詳しく見ていきます。
SerialTool をユニークにしているものは?
まず第一に、SerialTool は現時点で、1 つのアプリケーション起動内で複数の シリアルポート を同時に扱うことができる唯一のソフトウェアです。そのため、各シリアルポート/COM ポートには、アプリケーション内部で固有の割り当てが必要になります。つまり、1 つのアプリケーション内で複数のシリアルポートを平行して操作でき、各ポートに連番を割り当てつつ、複数の機能を構成し、複数のソフトを起動する必要なく運用できます。
この機能を内部で正しく処理するのは非常に複雑であり、SerialTool に実装するために多くの開発時間が費やされました。ここからは、バイトをシリアルポートに送信するという、より基本的な部分に話を移します。
シリアルポートへのデータ送信(ASCII / 16 進モード)
最も一般的な 2 つの方法は、ASCII 文字列、あるいは 16 進数で表現したバイト列を送信する方法です。SerialTool は、これら両方のモードで、効率的かつ直感的に、そして素早くバイトを送ることができます。
また、CR = キャリッジリターン(\r、16 進数で 0x0D、10 進数で 13)や、LF = ラインフィード(\n、16 進数 0x0A、10 進数 10)、あるいはその両方といった、終端バイト列を自動で付加して送信することも可能です。
CRC を用いた自動補完
特に産業用途においては、送信データの末尾に CRC(巡回冗長検査)を付加する必要があるケースが多くあります。CRC は送信しようとしているバイト列を元に計算されるチェックサムの一種であり、受信側がデータが正しく届いたかどうかを検証するための「制御バイト」として機能します。MODBUS のような通信プロトコルでは CRC が必須となることが多いです。SerialTool では、ペイロード末尾に付加できる CRC 多項式 を非常に多くの種類から選択できます。
Quick Buffer の活用
実際のペイロード送信は、Quick Buffer と呼ばれるクイック送信パネルを通じて行います。これは、複雑なオプションやウィンドウを開くことなく、すぐにバイトを送信できるよう設計されたものです。ASCII バイトの送信は、一般的な通信ターミナルと同じように、キーボードから直接文字を入力する形でも行えます。なお現時点の SerialTool は、典型的なターミナル(例:VT100)が持つすべての機能を提供しているわけではありません。あくまでも、アプリケーションとしての主役を「シリアルポート管理」に置いているからです。とはいえ、現在搭載されているターミナルモードは、今後の開発で拡張され VT100 エンコーディング に対応する可能性もあります。
Q: 受信したバイトや送信したバイトは、どのように表示されますか?
多くのソフトウェアは、ターミナル画面を備えており、TeraTerm のような従来型ターミナルと同様に、バイトを表示しながら送受信することができます。SerialTool も先ほど述べたように、ハイブリッドなターミナルモードを提供しています。
Q: では、16 進数のバイトはどう扱われますか?
ここが少し難しいところです。16 進数で表現されるバイトは、必ずしも ASCII 文字として表示可能とは限らず、表示不能な文字になったり、実際のターミナルでは「異常な」動作を引き起こしたりする場合があります。たとえば、従来のターミナルでは、キーボードの DEL キーに対応するバイトを受信すると、直前に表示された文字が削除されてしまいます。しかし、リモートから送られてきたデータ列をそのまま検査したい場合、そのバイトはパケットの一部として残っていてほしいはずです。
SerialTool は、この問題を 2 つの方法で解決しています。1 つめは、従来型の ターミナル画面を備え、送受信バイトを「純粋な ASCII」「印字可能な ASCII のみ」「さまざまなフォーマットの 16 進数表示」など、複数のモードで表示できるようにしていることです。詳しくは こちら を参照してください。
もし従来のターミナルモードを使わないのであれば、SerialTool には専用の 16 進ターミナルモードがあります。
16 進ターミナルモードでは、1 つ 1 つのバイト、あるいはバイト列が、エディタ形式のテーブルに表示され、受信/送信されたペイロードを、素早く・直感的に・正確に確認することができます。
Q: 「バイト」や「バイトパケット」とは具体的に何を指しますか?
シリアルポートから 1 つのバイトを受信(あるいは送信)した後、一定時間が経過すると、その通信は 1 パケットとして完結したとみなすことができます。この場合、1 バイトだけを含むパケットということになります。
Q: パケット同士の間隔をどのように測定すればよいですか?
一般的には、オシロスコープやロジックアナライザといった測定器を使い、パケット間の時間間隔を観測します。しかし、たとえこれらの機器を持っていたとしても、毎回ケーブルを引き出してビットレベルのタイミングを見るのは、必ずしも現実的ではありません。リモート機器がどの周期でバイトやパケットを送ってくるかを知るだけなら、もっと手軽な方法が欲しいところです。
SerialTool では、単一バイトが到着してからの経過時間を精密に計測できるほか、「何ミリ秒以上バイトが途切れたら 1 パケットとみなす」といった設定も可能です。
さらに、最後に受信/送信したパケットからの経過時間を記録・監視する機能も備えています。
Q: シリアルポートに送るバッファを何度もコピペしているうちに、誤って編集してしまったりバイトを消してしまったりしたことはありませんか?
多くの人が経験する典型的な問題です。SerialTool では、Quick Buffers の考え方に基づき、事前にバッファを登録しておき、必要なときにすぐ呼び出して送信できるようにしています。バッファの内容はいつでも編集可能で、素早くかつ確実な送信が行えます。
長時間作業していると、どうしてもヒューマンエラーは起こりがちですが、SerialTool がそれを防ぐ助けになります。Multiple Buffers 機能を使えば、ASCII・16 進のどちらの形式でも、必要なバッファを常に手元に置いておくことができます。
シリアルデータをファイルにログ保存
ここまでで「十分では?」と思う方もいるかもしれません。事実、多くのソフトウェアは、これらの機能の一部だけを提供しています。しかし、組み込みの世界で仕事をしている方や、大量のデータを送受信するホビー用途に取り組んでいる方であれば、「もう一歩先」が必要であることに気づくはずです。
データ量が多くなると、受信データや送信データを保存し、通信の流れやプロトコルを後から解析したくなります。場合によっては、リバースエンジニアリングのためにプロトコルを解析したいこともあるでしょう。SerialTool では、シリアルデータのログをファイルに保存し、後から整理・分析することができます。これにより、特定のシリアルポートを通過した実際のデータを正確に把握できます。ログはテキスト形式で閲覧することも、バイナリファイルとして保存することも可能です。
例えば、USB-シリアルアダプタを送受信ラインに接続し、リモートデバイスへのファームウェア書き込みを監視している場合、2 つの機器間でやり取りされているトラフィックをパッシブに観察できます。ファームウェアダウンロードのようなケースでは、そのデータストリーム全体をファイルとして保存し、あとで詳しく解析できるのは非常に大きな利点です。
シリアルフィルタとアラーム機能
特定の関心のあるパケットだけを抽出し、その内容を詳しく調べたいケースもあるでしょう。
本文執筆時点で、特定のパケットをフィルタリングし、それに応じてアラームを発生させる機能を備えた商用ソフトは、ほとんど存在していません。SerialTool では、1 本または複数のシリアルポートを流れる受信トラフィックを解析し、あらかじめ定義されたパケットまたは単純なバイト列(ASCII でも 16 進でも可)を検出した際にアラームを発生させることができます。SerialTool はこれらのパケットにフィルタを適用し、受信中のストリーム内で表示したりブロックしたりすることができます。また、特定のパケットやバイト列だけを別ファイルに保存することも可能です。これらの機能は、SerialTool が備える Alarms 機能によって実現されています。
シリアルポートデータをサーバーやクラウドへ送信
SerialTool には、多くの商用ソフトでは未対応、あるいはごく一部しか対応していない機能があります。それが「シリアルトラフィックをネットワーク経由で送信できる」という点です。SerialTool の Network Packet Sender を使用すれば、受信/送信を含む双方向トラフィックを TCP または UDP プロトコルでサーバーへ送ることができます。IPv4 と IPv6 の両方に対応しています。
Q: クラウドにデータを送ることはできますか?
もちろん可能です。SerialTool の Network Packet Sender を使えば、クラウドサーバーに対して GET/POST リクエストを送り、シリアルデータをより高度に解析・フィルタ・保存できます。
プロ用途の例としては、Linux を搭載した小型 PC に SerialTool をインストールし、それをリモートマシンに接続して、すべてのトラフィックをクラウド側のバックエンドに転送する、といった使い方が考えられます。ネイティブなクラウド機能を持たない産業機器であっても、シリアルポート経由のデータをクラウドへ送信することで、遠隔監視が可能になります。また、センサーからのデータを直接クラウドへ送ることで、複雑な通信プロトコルの実装を行わずに済む場合もあります。
また、シリアルポートトラフィックを外部ソフトウェアにつなぎ込み、リアルタイム解析を行う必要があるケースもあるでしょう。SerialTool は、すべてのシリアルトラフィックを外部の専用ソフトで解析できるように提供することも可能です。
この機能をテストするために、SerialTool 側では小さな php スクリプト を用意しており、Network Packet Sender のページから確認できます。
ファイルをシリアルポートへ送信
SerialTool では、ファイル(大容量ファイルを含む)を直接シリアルポートへ送信することができます。テキストファイルかバイナリファイルかは問いません。SerialTool がファイルを自動的にバイトパケットへ分割し、指定した間隔で送信します。
自動応答
Q: 例えば Arduino で作った独自シリアルプロトコルをテストしたい場合に、わざわざ応答用の別デバイスを用意せず、パケット送信に対して決まったレスポンスを返したいことがあります。このようなときはどうすれば良いですか?
こうした場合も、SerialTool が役に立ちます。AutoAnswer モードを使えば、特定のペイロードを受信したときに、あらかじめ設定したペイロードで自動応答するよう指示できます。複雑なスクリプトを書いたり、扱いの難しいプログラミング言語を使ったりする必要はありません。SerialTool は、この機能を素早く・実用的で・直感的な形で提供します。
ここまでで SerialTool に搭載されている機能の多くを紹介しましたが、まだすべてではありません。実際には、まだまだ多くの機能があり、それらを 1 つ 1 つここに書き出してしまうと、実際に試していただく楽しみを奪ってしまうかもしれません。SerialTool の開発チームは、皆さまのニーズやバグ報告、機能改善のご要望に常に耳を傾けています。ここで紹介した機能の一部は、SerialTool の PRO 版でのみ利用可能な場合があります。FREE 版と PRO 版でどの機能が利用できるかについては、随時 changelog をご確認ください。
PRO 版と FREE 版の違い
FREE 版では、SerialTool の基本機能に加えて、PRO 版 機能の一部を試用することができます。
PRO 版では、FREE 版に存在するいくつかの制限が解除されます。
- 保存できる設定プロファイルの数
- 保存できるバイトバッファの数
- 登録できるアラームの数
- 保存できるログの数
- 保存できるマクロの数
- 同時に利用可能なシリアルポートの数
- 将来的に追加される PRO 専用機能や改善
PRO 版の購入方法については、ライセンスページをご覧ください。