web-dev-qa-db-ja.com

VirtualBoxのホストとゲスト間のCOMポートを介した接続

VirtualBoxがWindows10(ホスト)で実行されているときに、VirtualBoxのUbuntu(16.04)で特定のアプリケーションを実行しています。

Simulink(ホスト上で実行)では、最終段階でいくつかの値を収集するシミュレーションがあります。これらの値を、VirtualBoxで実行されているアプリケーション(QGroundControlステーション)に特定のボーレートでシリアル接続を介して出力したいと思います。

それで私の質問の最初の部分-VirtualBox:

VirtualBoxで、次のように、シリアルポートを有効にし、ポートモードでホストパイプを選択しました。

Enter image description here

写真ではCOM6が使用されていることがわかりますが、代わりにCOM1とCOM2を使用しました。どちらも同じ結果になりました。

私はVirtualBoxでの作業にそれほど慣れていないので、これがホストとゲストの間に接続を作成したことを意味するのか、それとも何らかの方法でそれらをアクティブ化または接続する必要があるのか​​、本当にわかりません。

私の質問の2番目の部分-Simulink:

Simulinkでは、シリアル送信を使用して値を出力したいのですが(これが最も簡単な方法だと思いますか?もっと良い方法がある場合は教えてください)、ポートを選択したい場合は、次のようにポートが表示されません。あなたはで見ることができます:

Enter image description here

COMポートを表示するには、VirtualBox/Simulinkで何をする/変更する必要がありますか?

最後の部分-MATLAB:

Simulinkでは、COMポートが表示されなかったためです。 MATLABで使用可能なポートを確認したかったのですが、明らかにすべてのポートが閉じています。

>> info = instrhwinfo('serial')

info =

  HardwareInfo with properties:

     AvailableSerialPorts: {0x1 cell}
           JarFileVersion: 'Version 3.8'
    ObjectConstructorName: {0x1 cell}
              SerialPorts: {0x1 cell}

Access to your hardware may be provided by a support package. Go to the Support Package Installer to learn more.

Fopen()コマンドを使用してポートの1つを開こうとすると、次のメッセージが表示されます。

シリアル/ fopenの使用中にエラーが発生しました
オープンに失敗しました:ポート:COM1は使用できません。使用可能なポートはありません。
INSTRFINDを使用して、他の計測器オブジェクトが要求されたデバイスに接続されているかどうかを判別します。
「INSTRFIND」を使用すると、すべてのポートが閉じていることが示されます。

5
Lis

まず第一に、VirtualBoxはホスト用のシリアルポートを作成しません。したがって、他のソフトウェアを使用してホスト上に2つの仮想COMポートを作成し、これら2つのポートを仮想的にブリッジする必要があります。次に、1つのポートを使用してSimulinkに接続し、他のポートはVM COMポートがこのポートを使用するように設定する必要があります。

Windowsで仮想COMポートを作成するには、RS232シリアルポートの偽造から_com0com_を使用します。好きなソフトウェアを使用できます。

Com0comをインストールした後、C:\Program Files (x86)\com0comから_setuppg.exe_を開きます。

Enter image description here

次に、[適用]をクリックします。これで、_COM9_と_COM10_がブリッジされます(_COM9_と_COM10_が内部で接続されているようなものです)。

次に、_COM9 port in Host_を_COM1 port in Guest OS_に接続して_Oracle VM VirtualBox Manager_を開き、必要な仮想マシンの設定を開く必要があります。次に、シリアルポートを選択し、以下のように設定して、[OK]をクリックします。

Enter image description here

注:Windowsは、COMポート1〜9にのみレガシー名を提供します。他のすべてのCOMポートについては、Windowsでの完全なデバイス命名規則を使用する必要があります。したがって、_COM10_の代わりに_COM9_を使用することにした場合、_COM10_で_Path/Address_を使用しても機能しません。代わりに、_\\.\COM10_を使用する必要があります。

これで仮想マシンが起動し、ポートの準備が整いました。これで、ポートがSimulinkに表示され、このシナリオでは_COM10_に接続し、仮想マシンで_QGroundControl station_を_COM1_に接続します。

Simulink <-> COM10(ホスト)

COM10(ホスト)<-> COM9(ホスト)>> com0comを使用して接続

COM9(ホスト)<-> COM1(ゲスト)>> Oracleによって接続VM VirtualBox

COM1(ゲスト)<-> QGroundControlステーション

7
Rijul Sudhir