Помимо двух настоящих извращений - хоккея на траве и балета на льду, существует и третье - диалап через ip-телефонию.
После предварительной настройки переменных, COM порт открывается как обычный файл. Так же пример показывает, как очищать буфер COM порта и читать из него.
var
PortSpec : array[0..255] of char;
PortNo : Word;
success : Boolean;
error:integer;
begin
FillChar(PortSpec,Sizeof(PortSpec),#0);
StrPCopy(PortSpec,'Com1:19200,n,8,1');
PortSpec[3]:=Char(Ord(PortSpec[3])+Ord(PortNo));
ifnot BuildCommDCB(PortSpec,Mode) thenbegin//какая-то ошибка...
Exit;
end;
PortSpec[5]:=#0; { 'Com1:' }
Mode.Flags:=EV_RXCHAR + EV_EVENT2; { $1001 }
Com := CreateFile(PortSpec,GENERIC_READ or GENERIC_WRITE,
0, { comm устройство открывается с эксклюзивным доступом }nil, { нет security битов }
OPEN_EXISTING, { comm устройства должны использовать OPEN_EXISTING }
0, { not overlapped I/O }
0 { hTemplate должен быть NULL для comm устройств }
);
if Com = INVALID_HANDLE_VALUE then
Error := GetLastError;
Success := GetCommState(Com,Mode);
ifnot Success then // Обработчик ошибки.beginend;
Mode.BaudRate := 19200;
Mode.ByteSize := 8;
Mode.Parity := NOPARITY;
Mode.StopBits := ONESTOPBIT;//нужен был для перезаписи в NT
Success := SetCommState(Com, Mode);
ifnot Success then// Обработчик ошибки.beginend;
end;
Переменная "com" типа dword.
Вы так же можете очистить буффер COM порта
PurgeComm(Com, PURGE_RXCLEAR or PURGE_TXCLEAR);
И прочитать из него
function ReadCh(var Ch: Byte): dword;
var
n: dword;
begin
Readfile(Com, ch, 1, result, nil);
end;
Программный код на языке Delphi для чтения из порта COM с помощью функции ReadFile. Вот подробное описание того, что код делает:
Инициализация
Программа определяет несколько переменных: PortSpec, PortNo, success и error.
Она initializes PortSpec с дефолтным значением и устанавливает PortNo в 0.
Она настраивает флаг для обработки ошибок (Error) и initializes его в 0.
Настройка порта COM
Программа настраивает порт COM, заполняя массив параметрами порта (имя порта, скорость передачи, размер байта, парность и стоп-биты).
Она использует функцию BuildCommDCB для создания блока управления коммуникацией (CCB) из конфигурационного массива.
Она устанавливает флаг режима (Mode) для обработки событий (EV_RXCHAR + EV_EVENT2).
Создание порта COM
Программа создает handle порта COM с помощью функции CreateFile, указывая имя порта, доступ к чтению/записи и другие параметры.
Обработка ошибок
Если создание порта COM fails, программа получает код ошибки с помощью функции GetLastError.
Она настраивает флаг успеха (Success) и проверяет, была ли успешно получена информация о состоянии порта с помощью функции GetCommState.
Настройка параметров порта
Программа настраивает скорость передачи, размер байта, парность и стоп-биты для порта COM.
Она пытается настроить эти параметры с помощью функции SetCommState, проверяя ошибки по пути.
Очищение буфера
Программа использует функцию PurgeComm для очистки приемного (RXCLEAR) и передачи (TXCLEAR) буферов на порте COM.
Чтение из порта COM
Программа определяет функцию ReadCh, которая читает один байт из порта COM с помощью функции ReadFile.
Функция принимает единственный аргумент Ch, который является переменной типа byte.
Функция возвращает целочисленное значение, представляющее количество прочитанных байтов.
Данная статья рассказывает о способах чтения из модема через IP-телефония с использованием языка программирования Pascal.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.