我在 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”显示所有端口都已关闭。
首先,VirtualBox 不会为您的主机创建串行端口。因此,您必须使用其他软件在主机上创建两个虚拟 COM 端口,并虚拟桥接这两个端口。然后使用一个端口连接到 Simulink,其他端口必须设置为 VM COM 端口使用此端口。
为了在 Windows 上创建虚拟 COM 端口,我将使用
com0com
伪造 RS232 串口。您可以使用任何您喜欢的软件。
安装com0com后,从
setuppg.exe
打开C:\Program Files (x86)\com0com
。
现在点击“应用”。现在您将桥接
COM9
和 COM10
(就像 COM9
和 COM10
内部连接一样)。
接下来我们需要将
COM9 port in Host
连接到 COM1 port in Guest OS
以打开 Oracle VM VirtualBox Manager
并打开所需虚拟机的设置。现在,选择串行端口并进行如下所示的设置,然后单击确定。
注意: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(访客)<--> Q地面控制台
VirtualBox 已经存在超过 15 年了,当然 Windows 的存在时间要长得多。如果仍然没有简单的方法通过 COM 端口进行连接,则意味着它永远无法工作。我的建议是,留下它。这将为您省去很多挫败感。