【发布时间】:2019-05-02 10:43:35
【问题描述】:
我正在使用作为虚拟 COM 端口运行的 USB 端口,以通过 MATLAB 或 Visual Basic 6 实现与外部设备的串行通信。根据我用于与设备通信的软件,我面临波特率限制。 MATLAB(2018a)没有问题,因为它可以设置高波特率。另一方面,Visual Basic 6 面临可在软件中设置的波特率的限制。在解决方案方面,我已经研究了如何在 Visual Basic 6 中设置更高的波特率:https://www.mev.co.uk/pages/Support/VB-Baud.html
虚拟 COM 端口的驱动程序由 FTDI 制作,可在此处找到:http://www.ftdichip.com/Drivers/VCP.htm。在设备管理器中配置后,我正在与之通信的设备在设备管理器中的“端口(COM 和 LPT)”下显示为“USB 串行端口(COM4)”。
该设备需要 1000000 的波特率和 2 个停止位才能成功通信(如果您需要更多信息,请告诉我)。据我所知,软件中设置的通过串口通信的波特率必须为 1000000 才能匹配我正在使用的外部设备的波特率。我认为我的问题可能需要解释一下当 USB 端口充当虚拟 COM 端口时串行通信的工作原理,因为我担心如果可能的话,它与使用“真实”串行端口的通信不同。 FTDI 驱动程序似乎非常灵活,所以我不明白为什么 Visual Basic 不能利用这种灵活性。在 Visual Basic 6 中是否无法设置 1000000 的波特率?如果不可能,有什么方法可以克服这个限制吗?
波特率设置的 VB6 代码如下所示,其中“端口”是 COM 端口的地址,例如COM4、COM3:
MainForm.MSComm1.CommPort = Port
MainForm.MSComm1.Settings = "9600,N,8,1"
如果有人能帮助我了解串行通信在此设置中的工作原理,并且如果我能克服 Visual Basic 6 的限制,我将不胜感激。
【问题讨论】:
-
您可以编辑您的问题以包含 VB6 代码的相关 sn-ps 吗?另外,波特率的限制是如何表现出来的——你是不是遇到了错误?
-
@DaveInCaz 感谢您的回复。我已经为你编辑了。没有错误。相反,设备上 1 到 100 之间的值保持不变。
-
那么,如果你使用 "9600,N,8,1" 那么你可以发送/接收数据好吗?如果您使用 "1000000,N,8,1" 会发生什么不同?
-
我认为您应该能够使用 Windows API(特别是
SetCommState)和 FTDI 驱动程序在 Windows 上获得任意波特率。我想我自己以前也做过。但只是为了仔细检查,您应该阅读 FTDI 芯片的数据表以查看它支持的波特率。您忽略了告诉我们您正在使用什么 USB 转串口适配器或者它上面有什么 FTDI 芯片,所以我自己无法进行检查。 -
@DavidGrayson 我们没有使用 USB 转串口适配器。我们正在使用连接到 VCP 的 USB 电缆;这在 MATLAB 中工作得很好。文档说明波特率最高可达 3,000,000。
标签: matlab vb6 serial-port usb baud-rate