シリアルポートがない場合の試験方法についての提案

試験環境がない方のための解決策を提示いたします。


提案
===============
Null-modem(com0com)を使用した仮想シリアルポートでの試験を提案いたします。

事例
---------------------
組み込み機器等、対向機が存在しない環境において、試験を効率的に進める手順を案内いたします。
事前に試験ができるため、品質の高いプログラムにできることがあります。
対向機をシミュレーションするプログラムを書き、試験を実施することが可能になります。

動作環境
--------------
- Windows 10 (3.xを使用してください)
    - 有志により公式署名済みドライバを内包されています
- Windows 10より前

注意事項
--------------------
ペアとなるシリアルポートを開いていない場合、Writeが完了しません。
通常、シリアルポートは、非同期書き込みであるため、機器が接続されていなくても書き込まれます。
仮想シリアルポートでは対象のポートが開いていない場合はブロックされます。

免責
--------------------
本内容はWTFPL2で、無保証です。
ただし、com0comに由来する画面や文言はGPL2のようです。

手順
==============

ソフトウェアをダウンロード
---------------
https://sourceforge.net/projects/com0com/
2020/01/18時点でv3.0.0.0が最新の模様。

セットアップ
--------------
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12275/df981985-52bf-7bd0-d945-5ae487dea5a1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12275/9b902d95-b2b3-0381-9173-884a5212377c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12275/7d2d637a-d582-a9ba-f16c-7b1ec5cdd346.png)
※初期設定でペアを追加するかどうかの設定です。手順上、どちらか必ずチェックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12275/b431f07d-f5e4-fecb-793b-7cbd4565ca19.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12275/0e68e1b1-2601-adc7-9748-1c7a0a3a41c5.png)
※最大2回表示されますので、インストールしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12275/3c47a02d-59f6-4204-a3e5-cd859e6c2731.png)
※ひとまず、セットアップは完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12275/ed672aa3-a0eb-1430-f1d1-80064429bd8e.png)




セットアップ確認
-------------------
スタート![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12275/f5424e4a-bee9-387f-86c4-81d94035b6ab.png)で右クリックしてデバイスマネージャを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12275/c61b7852-2dd4-808b-3918-765720e135e4.png)
com0comのアイコンに警告マークが出ていないことを確認してください。
トラブルシューティング:
配布されているバージョンによっては警告が出ている状態となります。
対象のデバイスを右クリックし、ドライバの更新を実施してください。(なぜかWindows update経由で最新のドライバが入ります)

初期設定
----------------
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12275/8f93d84b-d3a9-64fe-191c-19c905941f38.png)
.NET Framework 3.5が必要のようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12275/38f2ed20-10de-5309-d2b1-fc0776413571.png)
このまま.NET 3.5をインストールするか、ソースコードを取得して.NET 4.5(VC++)でビルドしましょう(白目)。
[setupg.exe](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12275/37ecd939-7652-628a-eae7-fc44eccdab1f.png)　←.NET 4.5版、カスタムビルドなので、自己責任で。ファイル名は`setupg.exe`へ変更してセットアップディレクトリに配置してください。(SHA256: 752BAC7C40CE28F56C75C63DF07C2E51F4B1CA7BA097AE8833F9F2E2883E96BF)。

設定画面
--------------------
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12275/18cfd4fe-7693-4af8-2505-6d87db1ea6b7.png)

まずはボタンの説明:

|名称(英語)|説明               |ツールチップ(英語)|
|---------|------------------|-----------|
|Add Pair|ペアを追加|Add a new port pair with default parameters.|
|Remove|ペアを削除|Remove the selected port pair.|
|Reset|リセット|Reload the current parameters and redraw the form.|
|Apply|適用(青色の変更箇所を反映)|Apply the changed parameters (highlighted with blue color).|

各種チェックボックスの説明:

|名称(英語)|説明               |ツールチップ(英語)|
|---------|------------------|-----------|
|use Ports class|自動で番号を採用|Allow Ports class installer to set the real port name. The Ports class installer selects the COM port number and sets the real port name to COM<n>, where <n> is the selected port number. Thereafter you will be able to change port number.|
|emulate baud rate|速度をエミュレート**(推奨)**|Enable/disable baud rate emulation in the direction to the paired port.|
|enable buffer overrun|バッファオーバーランを受信可否|Enable/disable receive buffer overrun.|
|enable plug-in mode|ペア側が閉じているとき非表示|Enable/disable plug-in mode. The plug-in mode port is hidden and can't be open if the paired port is not open.|
|enable exclusive mode|ポートが使用中のとき非表示|Enable/disable exclusive mode. The exclusive mode port is hidden if it is open.|
|enable hidden mode|ポート一覧から非表示にする|Enable/disable hidden mode. The hidden mode port is hidden as it is possible for port enumerators.|

※上記設定で、`emulate baud rate`にチェックを入れることを推奨します。チェックがない場合、ボーレート以上のスピードで通信します。

下段の図:
~~なにこれ凄い。知らなかった。~~
One green pin can be wired to one red pin.
1つの緑のピンは1つの赤いピンへつなぐことができる。
One red pin can be wired to multiple green pins.
1つの赤いピンは複数の緑のピンへつなぐことができる。
Double click a green pin to add/remove inverter.
ダブルクリックすると反転回路を入れることができる。


|名称(英語)|説明               |ツールチップ(英語)|
|---------|------------------|-----------|
|RX |受信|RX - receive data.|
|TX |送信|TX - transmit data.|
|DTR|-|DTR - data terminal ready.|
|DSR|-|DSR - data set ready.|
|DCD|-|DCD - data carrier detect.|
|RTS|-|RTS - request to send.|
|CTS|-|CTS - clear to send.|
|RI ||RI - ring indicator.|
|OUT1||OUT1 - auxiliary output 1.|
|OUT2||OUT2 - auxiliary output 2.|
|OPEN||OPEN - logical ON if the port is open.|
|ON ||ON - logical ON.|


### tips

Teratermで仮想シリアルポートが表示されない場合：
名称がCOMnnとなっていない可能性があります。
`use Ports class`のチェックを入れる又は、COMnnとなるように名称を変更しましょう。


### 参考文献

- [仮想シリアル(COM) ポートドライバ「com0com」によるシリアル通信](https://qiita.com/yaju/items/e5818c99857883a59033) - Qiita