Получение из последовательного порта с помощью 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 снизит вероятность чрезмерного выполнения входного буфера.