7

我在 VirtualBox 的 Ubuntu(16.04)上运行某个应用程序,而 VirtualBox 在 Windows 10(主机)上运行。

在 Simulink(在我的主机上运行)中,我有一个模拟,在最后阶段,我收集了一些值。我想通过串行连接以一定的波特率将这些值输出到在 VirtualBox 上运行的应用程序(即 QGroundControl 站)。

所以我的问题的第一部分 - VirtualBox:

在VirtualBox中,我启用了串口,并在端口模式下选择了一个主机管道,如图:

在此处输入图像描述

在图片中你可以看到使用了 COM6,但我使用了 COM1 和 COM2。我得到了相同的结果。

我不太习惯使用 VirtualBox,所以我真的不知道这是否意味着我现在已经在主机和来宾之间建立了连接,或者我是否仍然需要以任何方式激活或连接它们?

我的问题的第二部分 - Simulink:

在 Simulink 中,我想使用串行发送输出我的值(因为我认为这是最简单的方法?如果有更好的方法,请告诉我),但是如果我想选择一个端口,则不显示任何端口,如你可以看到:

在此处输入图像描述

我需要在 VirtualBox/Simulink 中做什么/更改才能显示我的 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() 命令打开我的端口之一,我会收到以下消息:

使用串行/fopen
打开失败:端口:COM1 不可用。没有可用的端口。
使用 INSTRFIND 确定其他仪器对象是否连接到请求的设备。
使用“INSTRFIND”表示所有端口都已关闭。

4

1 回答 1

13

首先,VirtualBox 不会为您的主机创建串行端口。因此,您必须使用其他软件在主机上创建两个虚拟 COM 端口,并虚拟桥接这两个端口。然后使用一个端口连接到 Simulink,其他必须设置为 VM COM 端口使用该端口。

为了在 Windows 上创建一个虚拟 COM 端口,我将使用com0comFaking an RS232 Serial Port。你可以使用任何你喜欢的软件。

安装 com0com 后,setuppg.exeC:\Program Files (x86)\com0com.

在此处输入图像描述

现在点击应用。现在您将拥有COM9COM10桥接(就像COM9并且COM10在内部连接)。

接下来,我们需要连接COM9 port in HostCOM1 port in Guest OS该打开Oracle VM VirtualBox Manager并打开所需虚拟机的设置。现在,选择串行端口和设置,如下所示,然后单击确定。

在此处输入图像描述

注意:Windows 仅为 COM 端口 1 到 9 提供旧名称。对于所有其他 COM 端口,您必须使用 Windows 下的完整设备命名约定。因此,如果您决定使用COM10而不是COM9,使用COM10atPath/Address将不起作用。相反,您必须使用\\.\COM10.

现在启动您的虚拟机,您的端口已准备就绪。现在端口将显示在 Simulink 中并COM10在此场景中连接到,在虚拟机中,连接QGroundControl stationCOM1.

Simulink <--> COM10(主机)

COM10 (Host) <--> COM9 (Host) >> 使用 com0com 连接

COM9 (Host) <--> COM1 (Guest) >> 通过 Oracle VM VirtualBox 连接

COM1 (Guest) <--> QGroundControl 站

于 2016-06-10T09:10:19.657 回答