与外部设备进行软件和串行通信时的波特率限制

时间:2019-05-02 10:43:36

标签: matlab vb6 serial-port usb baud-rate

我正在使用USB端口端口作为虚拟COM端口,以实现使用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的限制,我将不胜感激。

1 个答案:

答案 0 :(得分:5)

似乎您正在使用MSComm32.ocx,而不是直接使用VB6。
您可以为此设置的最大速度为256,000 bps。

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

  

以下波特率值有效:110、300、600、1200、2400、4800、9600(默认),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
  示例

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