Ограничения скорости передачи в программном обеспечении и последовательной связи с внешним устройством - PullRequest
2 голосов
/ 02 мая 2019

Я использую порт 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 не может использовать эту гибкость. Нельзя ли установить скорость передачи 1000000 в Visual Basic 6? Если это невозможно, есть ли способы преодолеть это ограничение?

Код VB6 для настройки скорости передачи приведен ниже, где «Порт» - это адрес COM-порта, например, COM4, ​​COM3:

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

Если кто-нибудь может помочь мне понять, как работает последовательная связь в этом режиме, и если я смогу преодолеть ограничения Visual Basic 6, я был бы очень признателен.

1 Ответ

5 голосов
/ 02 мая 2019

Похоже, что вы используете MSComm32.ocx, а не VB6 напрямую.
Максимальная скорость, которую вы можете установить для этого, составляет 256 000 бит / с.

Как отправить на последовательный порт с помощью Mscomm32.ocx

Допустимы следующие значения скорости передачи: 110, 300, 600, 1200, 2400, 4800, 9600 (по умолчанию), 14400, 19200, 28800, 38400, 56000, 57600, 115200, 128000, 256000.

Если вы хотите больше скорости, используйте Win32 API напрямую со следующей библиотекойи т.д.

Программирование последовательного порта VB6 через Win32 API

Связь через последовательный порт

Программирование последовательного порта в VisualБазовое с Windows API

grricks / vb6SerialAPI


Или, может ли оно использоваться, если библиотека, предоставляемая FTDI, определена в объявлении функции, каквыше библиотеки?

Руководство программиста D2XX

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
...