Получение из последовательного порта с помощью MScomm32.ocx в Visual FoxPro

В этой статье описываются два метода, которые можно использовать в Visual FoxPro для получения данных из последовательного порта с помощью элемента управления Mscomm32.ocx.

Исходная версия продукта: Visual FoxPro
Исходный номер базы знаний: 140525

Сводка

В этой статье приведены два метода, которые можно использовать для получения данных из последовательного порта с помощью элемента управления Mscomm32.ocx. Первый использует управляемый событиями метод и не требует опроса последовательного порта для проверка на наличие полученных символов. Этот метод обеспечивает максимальную гибкость и не требует обширного кода для предотвращения переполнения буфера. Второй метод требует периодического опроса входного буфера, чтобы проверка на наличие полученных символов. В этой статье описаны эти два метода и приведены примеры для каждого из них.

Дополнительная информация

Задайте следующие свойства независимо от того, какой метод вы используете:

  • CommPort property: задайте для этого числового свойства нужный порт связи. Допустимые значения: 1, 2, 3 или 4 в зависимости от доступных последовательных портов и конфигурации отдельного компьютера. Эти значения соответствуют Com1, Com2, Com3 и Com4 соответственно.

  • Settings property: задайте для этого свойства символа значение скорости передачи данных, четности, битов данных и стоп-битов, необходимых устройству, подключенном к последовательному порту. Это свойство представляет собой символьный список с разделителями-запятыми. Например, чтобы задать для последовательного порта значение 14 400 бод, четность четности, 7 битов данных и 1 стоп-бит, задайте для строки значение : 14400,E,7,1.

  • PortOpen property: задайте для этого логического свойства значение true, чтобы открыть связь с последовательным портом. Вы также можете проверка это свойство, чтобы определить, правильно ли открыт порт.

Способ 1. Получение на основе событий

Метод , управляемый событием OnComm , создает событие, когда во входном буфере ожидают символы. Кроме того, свойство CommEvent будет содержать число 2. OnComm Чтобы событие было активировано, необходимо задать Rthreshold для свойства значение, отличное от нуля (по умолчанию). Наиболее распространенным параметром Rthreshold для свойства является 1, что означает, что OnComm событие активируется, если во входном буфере ожидается не менее одного символа.

Например, можно поместить следующий код в OnComm событие, чтобы добавить полученные данные в свойство формы с именем mybuffer:

Procedure MyCom.OnComm
    IF This.CommEvent = 2
        ThisForm.mybuffer = ThisForm.mybuffer + This.Input
    ENDIF
ENDPROC

Способ 2. Опрос входного буфера

Для опроса входного буфера необходимо, чтобы программа периодически прекращала то, что она делает, и проверка, чтобы узнать, есть ли символы, ожидающие во входном буфере. При использовании этого метода оставьте Rthreshold для свойства значение 0 (значение по умолчанию) и проверка InBufferCount свойство, чтобы узнать, больше ли оно нуля, что указывает на наличие символов, ожидающих в буфере.

Примечание.

Использование такого метода, как проверка длины свойства Input, приводит к потере символов, так как после доступа к свойству Input буфер входных данных очищается. Вместо этого используйте свойство InBufferCount.

Если элемент управления Mscomm находится в форме и имеет имя MyCom и что имеется свойство формы с именем mybuffer, в следующем коде показано, как опрашивать ожидающие символы:

Procedure myform.myproc
    IF Thisform.MyCom.InBufferCount > 0
        Thisform.mybuffer = Thisform.mybuffer + Thisform.MyCom.Input
    ENDIF
ENDPROC

Код процедуры можно вызвать в методе таймера, чтобы упростить проверку символов с полуспадаными интервалами. Однако если ожидается получение больших объемов данных от последовательного порта, метод 1 снизит вероятность чрезмерного выполнения входного буфера.