Исходники
Статьи
Языки программирования
.NET Delphi Visual C++ Borland C++ Builder C/С++ и C# Базы Данных MySQL MSSQL Oracle PostgreSQL Interbase VisualFoxPro Веб-Мастеру PHP HTML Perl Java JavaScript Протоколы AJAX Технология Ajax Освоение Ajax Сети Беспроводные сети Локальные сети Сети хранения данных TCP/IP xDSL ATM Операционные системы Windows Linux Wap Книги и учебники
Скрипты
Магазин программиста
|
Работа с аппаратурой под WindowsWin API стандартизирует работу с оборудованием. Для получения доступа к аппаратуре используется следующая последовательность шагов:
Последовательный порт под WinОткрытие порта:Var FHandle: Thandle; FHandle := CreateFile( PChar(ComString), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
В случае нормального открытия порта FHandle - дескриптор порта, при неудаче содержит значение INVALID_HANDLE_VALUE. Закрытие порта:Закрытие порта выполняется вызовом CloseHandle(FHandle). Настройка параметров передачи (скорость, кол-во бит, стоп биты) Структура данных о настройках порта (device control block) DCB содержит информацию о настройках порта. Поля структуры: DWORD DCBlength; // sizeof(DCB) DWORD BaudRate // Скорость передачи (baud rate). Есть стандартный набор // скоростей: все константы скоростей выглядят как CBR_<число>. // Пример CBR_9600, CBR_115200. Flags DWORD fBinary: // режим проверки символа Eof - включение данного режима Windows // не поддерживает ( по крайней мере сейчас). Маска $01 DWORD fParity: //Контроль четности Маска $02 - включение контроля четности DWORD fOutxCtsFlow: // Маска $04 - Включение контроля сигнала CTS при выводе байтов. DWORD fOutxDsrFlow: // Маска $08 - Включение контроля сигнала DSR при выводе байтов. DWORD fDtrControl: // Маска $30 - Тип контроля сигнала DTR: значения DTR_CONTROL_DISABLE деактивация сигнала. DTR_CONTROL_ENABLE конкретное значение сигнала можно задавать через вызов EscapeCommFunction. DTR_CONTROL_HANDSHAKE Автоматическое управление сигналом. DWORD fDsrSensitivity: // Маска $40 - Включение контроля сигнала DSR. DWORD fTXContinueOnXoff:1; // XOFF continues Tx DWORD fOutX: // Маска $100. Включение режима работы по XON XOFF при передаче DWORD fInX: // Маска $200 -//- при приеме DWORD fErrorChar: // Маска $400. Разрешение замещения при ошибочном приеме // (несовпадение четности) принятого байта на член структуры ErrorChar. DWORD fNull: // Маска $800 enable null stripping - пропускать при приеме символы NULL DWORD fRtsControl: // Маска $3000. Тип контроля: RTS_CONTROL_DISABLE RTS_CONTROL_ENABLE RTS_CONTROL_HANDSHAKE Аналогично сигналу DTR RTS_CONTROL_TOGGLE - Высокий уровень пока, есть данные для передачи. DWORD fAbortOnError // Маска $4000. Прекращение операций // чтения - записи при возникновении ошибок DWORD fDummy2:17; // Не используются Другие данные структуры WORD wReserved; // Не используется WORD XonLim; // минимальное число байт в приемном буфере до отправки символа XON WORD XoffLim; // максимальное число байт в приемном буфере до отправки символа XOFF BYTE ByteSize; // количество бит в байте от 4 до 8 BYTE Parity; // 0-4=no,odd,even,mark,space бит паритета, BYTE StopBits; // 0,1,2 = 1, 1.5, 2 - стоп биты, // 1,5 используются только при 5 битах в посылке для мелкосхемы 8250. ONESTOPBIT 1 stop bit ONE5STOPBITS 1.5 stop bits TWOSTOPBITS 2 stop bits char XonChar; // Tx and Rx XON символ char XoffChar; // Tx and Rx XOFF символ char ErrorChar; // Символ, которым заменяется ошибочно принятый байт char EofChar; // end of input character char EvtChar; // received event character WORD wReserved1; // Не используется Delphi имеет оболочку для DCB - TDCB. Получить текущую конфигурацию порта можно функцией GetCommState(Fhandle:Handle; fDCB:TDCB). Установить соответственно SetCommDCB. После установки параметров порта. Читать и писать можно через ReadFile и WriteFile. ЗаключениеВ данной заметке приведена лишь небольшая часть сведений о работе с последовательным портом. Если хоть кому-нибудь это интересно и нужно напишите мне на mgoblin@mail.ru, я попробую вдохновиться на дальнейший труд. |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Рейтинги
|