matlabvb6serial-portusbbaud-rate

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


I am using a USB port port operating as a virtual COM port to achieve serial communication with an external device using MATLAB or Visual Basic 6. I am facing baud rate limitations depending on the software I use to communicate with the device. MATLAB (2018a) has no problems because it can set high baud rates. Visual Basic 6 on the other hand faces limitations on the baud rates that can be set in the software. In terms of solutions, I have looked into this to set a higher baud rate in Visual Basic 6: https://www.mev.co.uk/pages/Support/VB-Baud.html

The drivers for the virtual COM port are made by FTDI and can be found here: http://www.ftdichip.com/Drivers/VCP.htm . After configuration in the Device Manger, the device I am communicating with appears under 'Ports (COM & LPT)' as 'USB Serial Port (COM4)' in the Device Manager.

The device requires a baud rate of 1000000 and 2 stop bits for successful communication (if you need any more information, please let me know). As far as I am aware, the baud rate set in the software to communicate via the serial port has to be 1000000 to match that of the external device I am using. I think my problem might require a bit an explanation of how serial communication works when a USB port is acting as a virtual COM port because I worry that it differs from communication using a 'real' serial port, if possible. The FTDI driver appears to be very flexible so I do not understand why Visual Basic cannot tap into this flexibility. Is it impossible to set a baud rate of 1000000 in Visual Basic 6? If it is impossible, are there any methods to overcome this limitation?

The VB6 code for baud rate setting is found below, where 'Port' is the address of COM port e.g. COM4, COM3:

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

If anyone can help me understand how serial communication works in this setting and if I can overcome the constraints of Visual Basic 6, I would be very grateful.


Solution

  • It seems that you are using MSComm32.ocx, not VB6 directly.
    The maximum speed you can set for this is 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.

    If you want more speed, please use Win32 API directly with the following library etc.

    Serial port programming VB6 via Win32 API

    Serial Port Communication

    Serial port programming on Visual Basic with Windows API

    grricks/vb6SerialAPI


    Or, can it be used if the library provided by FTDI is defined by Declare Function like the above library?

    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