Hyper-Vを使って、Windows10上に既存のWindows7PCの仮想環境を作り、仮想COMポートを使って双方向のシリアル通信を行う

はじめに
ここで紹介するのは、Windows10PCのCOMポートに接続した機器を、Windows7上のソフトで制御することを実現するために試したことです。
大まかな構造はこんな感じです。

メーカー製PCにプリインストールされているWindows7を他のPC上の仮想環境でゲストOSとして使うのはライセンス違反になる可能性があります。ご注意下さい。
使ったもの
(PC)
Windows10機
Fujitsu Lifebook
Windows10 Professional
CPU: Corei5-8265 1.60GHz/ RAM:16GB/ SSD(PCIe) 128GB
Windows7機
Lenovo Thinkpad
(ソフト)
Disk2vhd (仮想ハードディスクイメージを作成する)
https://docs.microsoft.com/ja-jp/previous-versions/ee656415(v=msdn.10)?redirectedfrom=MSDN
Virtual Serial Port Emulator 32bit (シリアル通信とTCP/IP通信を仲介する)
Virtual Serial Port Emulator 64bit (シリアル通信とTCP/IP通信を仲介する)
http://www.eterlogic.com/Downloads.html
(その他)
SANDISK USBメモリー128GB (オプショナル)
作業の大まかな流れ
1. Windows7PCにVirtual Serial Port Emulator(以下 VSPE) をインストールする
2. Windows7PCでDisk2vhdを使って、仮想ハードディスクイメージ(VHDX)を作成する
3. Windows10PCにVSPEをインストールする
4. Windows10PCでHyper-Vを有効にする
5. 2で作ったVHDXをWindows10PCに移す
6. Hyper-VマネージャーでWindows7PCを仮想マシンとして登録し、各種設定をする
7. Hyper-Vマネージャー上でWindows7PCを起動する
8. Windows10PCとWindows7PCの間で通信ができるようにする
9. Windows10PC、Windows7PCそれぞれでVSPEの設定をする
作業の詳細
1. Windows7PCにVirtual Serial Port Emulator(以下 VSPE) をインストールする
VSPEのインストーラー
http://www.eterlogic.com/Downloads.html
日本語のマニュアル
https://www.edcjp.jp/Tec-inf/Data/VP-manu.pdf
VSPE は仮想COMポートを作り、仮想COMポート同士で通信したり、物理COMポートを複数の仮想COMポートに分配したり、物理COMポートをEthernetにリダイレクトしたりできるソフトです。
ここでは、仮想スイッチを通じて外部とTCP/IPで通信し、内部とは仮想COMポートを通じてシリアルで通信する機能(TCP Client)を使います。
2. Windows7PCでDisk2vhdを使って、仮想ハードディスクイメージ(VHDX)を作成する
Disk2vhdのインストーラー
https://docs.microsoft.com/ja-jp/previous-versions/ee656415(v=msdn.10)?redirectedfrom=MSDN
設定は変更せず、そのままの状態で Create ボタンを押しました。

Space Required容量を合計すると約100GBになりますが、できあがったVHDXファイルは約54GBでした。

私のWindows7PCでは1時間程度かかりました。
3. Windows10PCにVSPEをインストールする
Windows10PC側のVSPEは、物理COMポートから出入りするデータをWindows7PC側のVSPEとTCP/IPでやりとりする役割(TCP Server)を担います。
4. Windows10PCでHyper-Vを有効にする
[コントロールパネル] - [プログラムと機能] - [Windowsの機能の有効化または無効化] で"Hyper-V"にチェックを入れます。

5. Windows7で作った仮想ハードディスクイメージ(VHDX)をWindows10PCに移す
Windows10PCの適当な場所にVHDXを移します。
(余談)
私のWindows10PCはディスクの容量が小さいので、USBメモリにVHDXファイルを保存し、
仮想マシンが必要な時だけUSBメモリをPCに挿して使っています。
USBメモリを選ぶ際、VHDXファイルのサイズ54GBを参考に、64GBのもの(使用可能な領域は57GB程度)を使いましたが、仮想マシンは完全に起動せず途中で止まってしまいました。
仮想マシン起動中にはキャッシュファイルのようなものがドライブに作成されるので、この分を考慮すると容量不足だったと推測します。その後、128GBのUSBメモリを使い、無事起動することができました。
6. Hyper-VマネージャーでWindows7PCを仮想マシンとして登録し、各種設定をする
Hyper-Vマネージャーを起動し、[操作] - [新規] - [仮想マシン]と進み、ダイアログに沿って
設定します。
[ネットワークの構成] では "Default Switch"を選択します。

[仮想ハードディスクの接続] では "既存の"を選択し、先ほど作った仮想ハードディスクイメージ(VHDX)を指定します。

7. Hyper-Vマネージャー上でWindows7PCを起動する
上の手順で作成した仮想マシンを選択し、"接続"ボタンを押すと、「仮想マシン接続」のウインドウが開きます。中央の起動ボタンを押すとWindows7PCが起動します。

[操作]パネルの"起動"を押してもWindows7PCは起動します。「接続」は起動した仮想マシンのデスクトップを閲覧・操作するビューアーのようなものですが、表示サイズの調整がうまくいかず、私の環境では動作も遅いため、後述する通りリモートデスクトップで操作しています。

8. Windows10PCとWindows7PCの間で通信ができるようにする
ここでは、リモートデスクトップ接続を使って、Widows10PCからWindows7PCを操作します。
まず、Windows7PCでコマンドプロンプトを開き、ipconfig コマンドを実行します。
すると、イーサネットアダプターが表示されます。「接続固有のDNSサフィックス」とあるところのIPv4 アドレスをメモします。私の環境では 172.17.66.29 になっています。

ちなみに、その下にあるデフォルトゲートウェイのアドレスは仮想スイッチのアドレスを指すようです。
これで、Windows10PCからリモートデスクトップで接続する準備ができました。
仮想マシンが起動してさえいれば、「リモートデスクトップ接続」を起動して先ほどのIPアドレスを入力すれば接続できます。

9. Windows10PC、Windows7PCそれぞれでVSPEの設定をする
「Windows10PCのCOMポートに接続されている機器を、Windows7PC上で走るソフトでシリアル通信を介して制御する」ことを想定しています。
したがって、Windows10PC側のVSPEはTCP/IP通信におけるサーバーの役割を、Windows7PC側のVSPEはクライアントの役割を果たすように設定します。
(Windows10PC側)
まず、コマンドプロンプトでipconfigコマンドを実行し、仮想スイッチのアドレスを調べます。

私の環境では 172.17.66.17 でした。
(Windows7PC側)
VSPEを起動し、Device Type は TCPServerを選択し、下図のように設定します。

Source Serial Portは実際に機器を接続する物理COMポートを選択します。(物理COMポートを使わない場合は、"Connector"から仮想COMポートを作成し、それで代用できます)
Source Serial Port 下のSettingsからシリアル通信の設定を行います。この設定はWindows10PCに接続されている機器側の通信設定、Windows7PCのVSPEの仮想COMポートの通信設定と一致していなければいけません。(次項の図を参照)
(Windows7PC側)
まず、Device Typeを "Connector" に設定した仮想COMポートを作成します。
次に、もう一つデバイスを追加し、Device Type "TCPServer"から下図のように設定します。

シリアル通信の設定
