软件中的波特率限制以及与外部设备的串行通信

Baud rate limits in software and serial communication with an external device

我正在使用作为虚拟 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。在设备管理器中配置后,我正在与之通信的设备在设备管理器中显示为 'Ports (COM & LPT)' 下的 'USB Serial Port (COM4)'。

设备需要 1000000 的波特率和 2 个停止位才能成功通信(如果您需要更多信息,请告诉我)。据我所知,软件中设置的通过串口通信的波特率必须为 1000000 才能与我使用的外部设备相匹配。我认为我的问题可能需要解释当 USB 端口充当虚拟 COM 端口时串行通信的工作原理,因为我担心它与使用 'real' 串行端口的通信不同(如果可能的话)。 FTDI 驱动程序似乎非常灵活,所以我不明白为什么 Visual Basic 不能利用这种灵活性。在 Visual Basic 6 中不能设置 1000000 的波特率吗?如果不能的话,有什么方法可以克服这个限制吗?

波特率设置的VB6代码如下,其中'Port'是COM端口的地址,例如COM4、COM3:

MainForm.MSComm1.CommPort = Port
MainForm.MSComm1.Settings = "9600,N,8,1"

如果有人能帮助我理解串行通信在此设置下的工作原理,并且我能克服 Visual Basic 6 的限制,我将不胜感激。

看来你用的是MSComm32.ocx,不是直接用VB6
您可以为此设置的最大速度为 256,000 bps。

How to send to the serial port by using Mscomm32.ocx

The following baud rate values are valid: 110, 300, 600, 1200, 2400, 4800, 9600 (default), 14400, 19200, 28800, 38400, 56000, 57600, 115200, 128000, 256000.

如果你想要更快的速度,请直接使用 Win32 API 和以下库等

Serial port programming VB6 via Win32 API

Serial Port Communication

Serial port programming on Visual Basic with Windows API

grricks/vb6SerialAPI


或者,如果FTDI提供的库像上面的库一样通过Declare Function定义的,是否可以使用?

D2XX Programmer's Guide

6.9 FT_W32_SetCommState
Example

FT_HANDLE ftHandle; // setup by FT_W32_CreateFile 
FTDCB ftDCB; 

if (FT_W32_GetCommState(ftHandle,&ftDCB)) {
    // FT_W32_GetCommState ok, device state is in ftDCB
    ftDCB.BaudRate = 921600; // Change the baud rate
    if (FT_W32_SetCommState(ftHandle,&ftDCB))
        ; // FT_W32_SetCommState ok 
    else
        ; // FT_W32_SetCommState failed
}
else
    ; // FT_W32_GetCommState failed