はじめに
2年前に作成したシリアル通信を使用するアプリケーションの改修をすることになった。その時より新しいPC(Windows 7 64bit)に変わっている。
最近のPCにはCOMポートが無くなってしまっているため、仮想シリアル(COM) ポートドライバで有名なフリーソフト「com0com」を使用する。
「com0com」は2つの仮想のCOMポートをクロスケーブルで接続したように見せかける仕組み(ループバック)となっているため、ポートが必要な分だけペアで作成する。
com0comのインストール
com0comのダウンロード
Windows 10の環境の場合
【2020/07/01追記】
2017/07/13にデジタル署名付きのcom0com-3.0.0.0-i386-and-x64-signed.zipが公開されたのでダウンロードする。
インストール後、デバイスマネージャを開いて、該当するドライバに警告が出ていないか確認してください。
警告が出ている場合は、ドライバの更新(Windows Update経由)※で署名済みの最新ドライバを入手することができます。(Microsoft Windows Hardware Compatibility Publisher署名に切り替わります)
※ドライバの更新は該当デバイスを右クリック→ドライバーの更新でWindowsUpdate経由で行うことができます。
※Windows 10 20H2でドライバーを更新したい場合はWindows Update上で操作する必要があります。
参考:
- 次のエディションではインストーラの実行のみで認識されました
- Windows 10 Home 20H2
- Windows 10 Pro 2004
- 次のエディションではドライバの更新が必要でした
- Windows 10 Pro/Home 1909
- 署名はWindows Compatible Products Listからcom0comと入力すると確認できます
【2019/06/04追記】
インストーラーの証明書を調べると、それは2018年1月まで有効
(中略)
com0com 2.2の署名入りインストーラを使うと、インストーラを起動したときに作者を信頼するポップアップが表示され、その後はすべてうまくいきます。
(中略)
PCが以前のリリースのWindowsからWindows 10バージョン1607にアップグレードされた場合、ドライバーは動作しますが、Windows 10バージョン1607以降の新規インストールでは、BIOSからセキュアブートをオフにする必要があります。ドライバーは2015年7月29日以降に署名されたため、最後の例外は適用されません。
Windows 10上でcom0comが動かない(Win 10、Win 10)
【2019/06/05追記】
64bit版については、com0com 2.2の署名入りインストーラでも駄目なようです。
Windows 10からの新規インストールが駄目ってことですね。
デジタル署名の強制は32bit版のWindows OSでは必須ではなく64bit版Windows OSではデジタル署名が必須になっています。ドライバ開発者はドライバのロゴ認証を取得する必要があり、10万円前後の費用がかかかります。64bit版のデジタル署名版を無料でいつまでも公開されると思わない方がいいのかも知れません。
com0comの代替として、Virtual Serial Ports Emulator(VSPE)がありますが、32bit用は無料ですが64bit用はライセンス料として$24.95となります。
テストモードが嫌なら、32bitのPCでcom0comを使用する選択肢しか残ってない。
Windows 7以降(64bit版)の環境の場合
【2018/01/20追記】
2017/07/13にデジタル署名付きのcom0com-3.0.0.0-i386-and-x64-signed.zipが公開されたのでダウンロードする。
com0comdダウンロード 3.0.0.0
Setup_com0com_v3.0.0.0_W7_x64_signed.exe (64bit版)とSetup_com0com_v3.0.0.0_W7_x86_signed.exe (32bit版)が同梱されているで、64bit版をインストールします。
以下の記載は、3.0.0.0版のデジタル署名付きがまだ公開されていなかった時の方法になります。
デジタル署名付きのcom0com-2.2.2.0-x64-fre-signed.zipをダウンロードする。
com0comdダウンロード 2.2.2.0
※テストモードで動かさなければならないのはデジタル署名が付いてないためなのでデジタル署名付きを使用する。
Windows 7以降(32bit版)の環境の場合
【2018/01/20追記】
2017/07/13にデジタル署名付きのcom0com-3.0.0.0-i386-and-x64-signed.zipが公開されました。
公式 com0comdダウンロード 3.0.0.0
Setup_com0com_v3.0.0.0_W7_x64_signed.exe (64bit版)とSetup_com0com_v3.0.0.0_W7_x86_signed.exe (32bit版)が同梱されているので、32bit版をインストールします。
以下の記載は、3.0.0.0版のデジタル署名付きがまだ公開されていなかった時の方法になります。
デジタル署名付きは無いため、com0com-3.0.0.0-i386-and-x64-unsigned.zipをダウンロードする。
公式 com0comdダウンロード 3.0.0.0
※デジタル署名付きのダウンロード先のリンクを貼っておきますが、ソース元は不明なので心配な方はお控え下さい。(64bit版もありまっす)
setup_com0com_W7_x86_signed.exe - powersdr-iq
同梱されていたReadMe.txt(英語)によると、64bit版Windowsで使用する場合は、Windowsをテストモードに切り替えておく必要があるようですが、32bit版Windowsでは、切り替える必要はありません。
com0comのドライバが未署名のため、インストール時に「ドライバーソフトウェアの発行元を検証できません」の警告が3回程表示されますが、「このドライバーソフトウェアをインストールします」をクリックして進めてください。
ポート名の変更
3.0.0.0のセットアップ画面の先頭に「use Ports Class」のチェックボックスが追加されています。これは空いているポートを自動で設定する機能です。
ASUS Vivotab note 8でGPSソフトが使えた話(無料カーナビ化に挑戦)
※以降の記事の画像は2.2.2.0版のセットアップ画面になります。
インストール直後ではCOMポートの名前が「CNCA0」と「CNCB0」になっているので、「COM11」と「COM12」などに変更します。
[スタート]→[すべてのプログラム]→[com0com]→[Setup]を起動します。
「CNCA0」と「CNCB0」の名前を「COM11」と「COM12」などに変更して「Apply」ボタンをクリックします。
上述のセットアップ画面で変更できるようになったのでコマンドプロンプトによる方法は不要となるのですが、念の為に提示しておきます。
[スタート]→[すべてのプログラム]→[com0com]→[Setup Command Prompt]を起動します。
[list]コマンドで現在のポート名が確認出来ます。
[change CNCA0 PortName=COM11]コマンドでポート名を変更出来ます。
[change CNCB0 PortName=COM12]コマンドでポート名を変更出来ます。
仮想シリアル(COMポート)ドライバ(ツール/ソフト) 設定方法/使用方法(使い方)
Enter 'help' to get info about usage of Setup for com0com.
command> list
CNCA0 PortName=-
CNCB0 PortName=-
command> change CNCA0 PortName=COM11
CNCA0 PortName=-
change CNCA0 PortName=COM11
Restarted CNCA0 com0com\port \Device\com0com10
CNCB0 PortName=-
ComDB: COM11 - logged as "in use"
command> change CNCB0 PortName=COM12
CNCA0 PortName=COM11
CNCB0 PortName=-
change CNCB0 PortName=COM12
ComDB: COM12 - logged as "in use"
command> list
CNCA0 PortName=COM11
CNCB0 PortName=COM12
command>
ポートの確認
デバイスマネージャーによる確認
[コントロールパネル] - [ハードウェアとサウンド] - [デバイスとプリンター]にある「デバイスマネージャー」を開きます。
「com0com0」が追加されて警告マークが付いていないことを確認します。
TeraTermによる確認
シリアル通信に使用できるターミナルソフト「TeraTerm」をダウンロードしてインストールする。
Tera Termのダウンロード
メニューから「設定」の「シリアルポート」を選択する。ポートに「COM11」と「COM12」が表示されていることを確認する。
送信内容の確認
「COM11」と「COM12」はクロスケーブルで接続したように見せかけるの方式となっているため、「COM11」で送信した値は「COM12」で受信される。
TeraTermにて「COM12」に接続すれば、アプリケーション側で「COM11」で送信した値がTeraTerm上の画面に表示される。
ポートの追加
[スタート]→[すべてのプログラム]→[com0com]→[Setup]を起動します。
「AddPair」ボタンをクリックしてポートを追加します。
追加したCOMポートの名前が「CNCA1」と「CNCB1」になっているので、「COM21」と「COM22」などに変更して「Apply」ボタンをクリックします。
最後に
「com0com」はとても便利ですが、所詮は仮想ですので最終的な確認は本物のシリアルポートがあるPCでやりましょう。