Как узнать, есть ли в приёмном буфере RS232 данные
Телепрограмма на сегодня:
4.00 РОWЕRхностные явления.
4.05 Winсиканский сериал - "Lоаding in рrоgrеss" 10-11 проценты.
8.30 Игра на мониторе - "Угадай меLОАDию" Yеs,Nо,Саnсеl.
9.00 Программа "Доброе утро, Мustdай".
9.30 "Сам себе Панель Мiсrоsоft Оffiсе".
10.00 Веселые SТАRТы.
11.00 Мультик "Кто сказал БИЗИ?".
11.10 "Соnnесt с первого взгляда".
11.30 "Утренняя почта" с Г. Олдедом.
12.00 NоСаrriеrчко.
12.30 Аdоbе МозгоЕb. В перерывах СкринSаvеrы.
14.00 Самая криминальная программа на мониторе: "Недопустимая операция. Закрыть. Сведения.".
14.30 Юмор на мониторе - клуб "Белый Rеsеt".
15.00-19.00 Профилактические работы. Сериал "SсаnDisk".
19.45 Для самых маленьких - "Unаblе Еrrоr, малыши!".
20.00 Документальные данные о реестре "ИеRАRхическая поDLLость".
20.30 Юмористический мониторожурнал - "Назло DirесtХ".
22.00 Ночной сеанс - "Установка и удаление программ". В главной роли UnInstаll Windоws'98.
23.00 Как это было. "Windоws 3.11" 1990 год.
00.00 Контра, Альт, Дель.
При помощи функции ClearCommError можно узнать, сколько байт данных находится в буфере приёма (и буфере передачи) последовательного интерфейса.
Код-сниппет написан на языке Pascal и предназначен для проверки наличия данных в буфере приема интерфейса серийной коммуникации (RS232) с помощью функции ClearCommError.
Описание кода:
Процедура DataInBuffer принимает два параметра: Handle, представляющий.handle порта, и две переменные InQueue и OutQueue для хранения результатов.
Внутри процедуры она проверяет успешность выполнения функции ClearCommError присваивая ее возвращаемое значение переменной e. Если функция выполняется успешно, то продолжает с следующими шагами; иначе, устанавливает оба InQueue и OutQueue в 0.
Функция ClearCommError принимает три параметра: Handle, код ошибки (e) и указатель на структуру TComStat, содержащую информацию о состоянии порта серийной коммуникации.
Если функция выполняется успешно, то извлекает значения cbInQue (число байтов в буфере приема) и cbOutQue (число байтов в буфере передачи) из структуры TComStat и присваивает их InQueue и OutQueue, соответственно.
Цель этой процедуры, вероятно, заключается в определении наличия входящих данных для обработки в интерфейсе серийной коммуникации. Если InQueue больше 0, то это указывает на то, что есть байты в буфере приема; иначе, он пуст или не доступен.
Альтернативный подход:
Вместо использования функции ClearCommError, можно использовать функцию GetCommModemStatus для получения информации о состоянии порта серийной коммуникации. Функция возвращает структуру, содержащую различные флаги и значения, указывающие на текущее состояние интерфейса серийной коммуникации.
Можно модифицировать процедуру для использования GetCommModemStatus следующим образом:
procedureDataInBuffer(Handle:THandle;varInQueue,OutQueue:integer);varModemStat:TModemStat;beginifGetCommModemStatus(Handle,@ModemStat)thenbeginif(ModemStat.msRcvLineStat<>RCVDS0)then// Проверка наличия входящих данныхInQueue:=ModemStat.cbInQue;// Обновление InQueue с числом байтов в буфере приемаOutQueue:=ModemStat.cbOutQue;// Обновление OutQueue с числом байтов в буфере передачиendelsebeginInQueue:=0;OutQueue:=0;end;end;
Этот подход предоставляет больше гибкости и позволяет проверять конкретные условия, связанные со статусом интерфейса серийной коммуникации.
Для определения наличия данных в приёмном буфере RS232 можно использовать функцию ClearCommError, которая возвращает количество байт данных в буфере.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.