VirtualBox 中主机和来宾之间通过 COM 端口连接
Connection through COM port between host and guest in VirtualBox
我在 VirtualBox Ubuntu (16.04) 上 运行 某个应用程序,而 VirtualBox 在 Windows 10(主机)上 运行。
在 Simulink 中(运行 在我的主机上),我有一个模拟,在最后阶段,我收集了一些值。我想通过串行连接以特定波特率将这些值输出到 VirtualBox 上的 运行 应用程序(即 QGroundControl 站)。
所以我的问题的第一部分 - VirtualBox:
在VirtualBox中,我开启了串口,并选择了端口模式的主机管道,如图:
图中可以看到用的是COM6,我用的是COM1和COM2。我得到了相同的结果。
我不太习惯使用 VirtualBox,所以我真的不知道这是否意味着我现在已经在我的主机和来宾之间创建了连接,或者我是否仍然需要以任何方式激活或连接它们?
我的问题的第二部分 - Simulink:
在 Simulink 中,我想使用串行发送输出我的值(因为我认为这是最简单的方法?如果有更好的方法,请告诉我),但如果我想 select一个端口,没有显示任何端口,如您所见:
我需要在 VirtualBox/Simulink 中 do/change 什么才能显示我的 COM 端口?
最后一部分 - 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() 命令打开我的端口之一,我收到此消息:
Error using serial/fopen
Open failed: Port: COM1 is not available. No ports are available.
Use INSTRFIND to determine if other instrument objects are connected to the requested device.
Using "INSTRFIND" shows that all ports are closed.
首先,VirtualBox 不会为您的主机创建串口。因此,您必须使用其他软件在主机上创建两个虚拟 COM 端口,并虚拟桥接这两个端口。然后使用一个端口连接到 Simulink,其他端口必须设置为 VM COM 端口使用此端口。
为了在 Windows 上创建虚拟 COM 端口,我将使用 com0com
来自
Faking an RS232 Serial Port。你可以使用任何你喜欢的软件。
安装 com0com 后,从 C:\Program Files (x86)\com0com
打开 setuppg.exe
。
现在点击应用。现在您将 COM9
和 COM10
桥接(就像 COM9
和 COM10
是内部连接的)。
接下来我们需要将 COM9 port in Host
连接到 COM1 port in Guest OS
以打开 Oracle VM VirtualBox Manager
并打开所需虚拟机的设置。现在,select 串行端口 和设置如下所示,然后单击确定。
NOTE: Windows provides legacy names only for COM ports 1 through to 9. For all other COM ports you must use the full device naming convention under Windows. So if you decide to use COM10
instead of COM9
, using COM10
at Path/Address
won't work. Instead you have to use \.\COM10
.
现在启动您的虚拟机,您的端口已准备就绪。现在端口将显示在 Simulink 中并连接到 COM10
在这种情况下,在虚拟机中,将您的 QGroundControl station
连接到 COM1
.
Simulink <--> COM10 (Host)
COM10 (Host) <--> COM9 (Host) >> Connected using com0com
COM9 (Host) <--> COM1 (Guest) >> Connected by Oracle VM VirtualBox
COM1 (Guest) <--> QGroundControl station
我在 VirtualBox Ubuntu (16.04) 上 运行 某个应用程序,而 VirtualBox 在 Windows 10(主机)上 运行。
在 Simulink 中(运行 在我的主机上),我有一个模拟,在最后阶段,我收集了一些值。我想通过串行连接以特定波特率将这些值输出到 VirtualBox 上的 运行 应用程序(即 QGroundControl 站)。
所以我的问题的第一部分 - VirtualBox:
在VirtualBox中,我开启了串口,并选择了端口模式的主机管道,如图:
图中可以看到用的是COM6,我用的是COM1和COM2。我得到了相同的结果。
我不太习惯使用 VirtualBox,所以我真的不知道这是否意味着我现在已经在我的主机和来宾之间创建了连接,或者我是否仍然需要以任何方式激活或连接它们?
我的问题的第二部分 - Simulink:
在 Simulink 中,我想使用串行发送输出我的值(因为我认为这是最简单的方法?如果有更好的方法,请告诉我),但如果我想 select一个端口,没有显示任何端口,如您所见:
我需要在 VirtualBox/Simulink 中 do/change 什么才能显示我的 COM 端口?
最后一部分 - 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() 命令打开我的端口之一,我收到此消息:
Error using serial/fopen
Open failed: Port: COM1 is not available. No ports are available.
Use INSTRFIND to determine if other instrument objects are connected to the requested device.
Using "INSTRFIND" shows that all ports are closed.
首先,VirtualBox 不会为您的主机创建串口。因此,您必须使用其他软件在主机上创建两个虚拟 COM 端口,并虚拟桥接这两个端口。然后使用一个端口连接到 Simulink,其他端口必须设置为 VM COM 端口使用此端口。
为了在 Windows 上创建虚拟 COM 端口,我将使用 com0com
来自
Faking an RS232 Serial Port。你可以使用任何你喜欢的软件。
安装 com0com 后,从 C:\Program Files (x86)\com0com
打开 setuppg.exe
。
现在点击应用。现在您将 COM9
和 COM10
桥接(就像 COM9
和 COM10
是内部连接的)。
接下来我们需要将 COM9 port in Host
连接到 COM1 port in Guest OS
以打开 Oracle VM VirtualBox Manager
并打开所需虚拟机的设置。现在,select 串行端口 和设置如下所示,然后单击确定。
NOTE: Windows provides legacy names only for COM ports 1 through to 9. For all other COM ports you must use the full device naming convention under Windows. So if you decide to use
COM10
instead ofCOM9
, usingCOM10
atPath/Address
won't work. Instead you have to use\.\COM10
.
现在启动您的虚拟机,您的端口已准备就绪。现在端口将显示在 Simulink 中并连接到 COM10
在这种情况下,在虚拟机中,将您的 QGroundControl station
连接到 COM1
.
Simulink <--> COM10 (Host)
COM10 (Host) <--> COM9 (Host) >> Connected using com0com
COM9 (Host) <--> COM1 (Guest) >> Connected by Oracle VM VirtualBox
COM1 (Guest) <--> QGroundControl station