Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Новости ИТ Программы Книги Games   Обои   Экспорт RSS E-Books
 
Поиск по сайту

TOP-10 программ
Symantec Norton Ghost 9.0
Partition Magic 8.0.2 Pro
Xilisoft 3GP Video Converter v3.1.7.0616b
Norton AntiVirus 2005
Xilisoft 3GP Video Converter v2.1.52.831b
Антивирус Касперского Personal 5.0.303 beta 2
RAR Password Cracker 4.12
ABBYY PDF Transformer v1.00.820
MP3 To Ringtone Gold v3.02
Mobtime Cell Phone Manager v5.3.1
 
Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
 
 

   Программирование -> Delphi / Pascal -> Работа с Com портом под Windows


Работа с Com портом под Windows

Введение

Однажды в студеную зимнюю пору: Итак в отличие от DOS Win 9x,NT имеет другую идеологию работы с аппаратурой. Если в нашем уважаемом старичке DOS драйвер мог быть написан на asm с прямым доступом к портам, то в Win все немного сложнее. Почему ? Win, в отличие от DOS многозадазадачна, поэтому позволять каждому приложению напрямую менять настройки аппаратуры  нельзя, т.к при этом одна задача может не знать об изменении состояния аппаратуры другой задачей. В принципе в Win 9x можно пользоваться in in - out 378h, однако по вышеизложенной причине это нежелательно. Для написания программ, работающих с аппаратурой в Win используется API(интерфейс прикладных программ). Данный интерфейс позволяет использовать системные сервисы Win из прикладухи. Реализация API при этом возлагается на драйверы. Для написания драйверов используется Win Driver Developer Kit (DDK)(для каждой Win95, 98,NT есть свой DDK). Кроме непосредственно API можно использовать IOCTL коды (этот способ получил распространение еще в DOS), однако это выходит за рамки данной статьи.

Работа с аппаратурой под Win.

Win API стандартизирует работу с оборудованием. Для получения доступа к аппаратуре используется следующая последовательность шагов:'

1.    Получить Handler устройства вызовом CreateFile с именем устройства. Более подробно см Windows SDK Help.

2.    Для управления устройством вызывать функции API для данного устройства, либо посылать IOCTL(input - otput control) последнее через DeviceIOCtl(подробно см Windows SDK Help).

3.    Закрыть устройство CloseHandle(Handler);

Последовательный порт под Win

  • Открытие порта:
  • Var 
      FHandle: Thandle;
    
    FHandle := CreateFile(
      PChar(ComString),
      GENERIC_READ or GENERIC_WRITE,
      0,
      nil,
      OPEN_EXISTING,
      FILE_FLAG_OVERLAPPED,
      0);
    

    Параметр 1: Имя порта - 'COM1', итд

    Параметр 2: режим открытия GENERIC_READ - чтение, GENERIC_WRITE - запись

    Параметр 3: режим разделения ресуртса. Примечание: 0 - неразделяемый (именно так описано открытие последовательного порта в WIN SDK, другие режимы не проверял).

    Параметр 4: Режим безопасности. Имеет смысл в Windows NT, Windows 9x игнорирует его.

    Параметр 5: Способ открытия. Для порта - OPEN_EXISTING - открыть, когда устройство реально существует.

    Параметр6: режим наложения операций - FILE_FLAG_OVERLAPPED - разрешение таких операций. При этом операции чтения - записи, требующие значительного времени, выполняются фоново по отношению к основному потоку программы.

    Параметр7: шаблон файла, для последовательного порта - всегда 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, я попробую вдохновиться на дальнейший труд. Любые замечания и исправления приветствуются по e-mail: mgoblin@mail.ru

    Внимание! Запрещается перепечатка данной статьи или ее части без согласования с автором. Если вы хотите разместить эту статью на своем сайте или издать в печатном виде, свяжитесь с автором.
    Автор статьи:  Михаил Голованов
    Источник:  www.delphimaster.ru


     
    Популярные книги

    Системное администрирование на 100 % (+CD)

    Подробнее

    Дизайн помещений и интерьеров в 3ds max 7 (+CD)

    Подробнее

    Самоучитель Macromedia Flash 5

    Подробнее

     

     
    Новости ИТ
    01.12.2008  Buffalo выпустил миниатюрные USB-накопители
    01.12.2008  VENTO TA-U1 - стильный корпус представлен Asus
    01.12.2008  Fujitsu-Siemens выпускает в продажу внешний ускоритель для ноутбуков
    01.12.2008  Оригинальные чехлы для ноутбуков от Choiix
    01.12.2008  Опубликован код драйвера для беспроводных карт Atheros
    01.12.2008  Лучший блог 2008
    01.12.2008  Linux запустили на Apple iPhone
    01.12.2008  LG KC780
    01.12.2008  MSI дополнит линейку Wind-нетбуков двумя моделями
    01.12.2008  Nikon D3X - 24,5 млн пикселей для профессионалов
    01.12.2008  Киловаттник HIPER M1000 с КПД выше 85%
    01.12.2008  AMD впервые снизила цены линейки Radeon HD 4800
    01.12.2008  Чистильщики: Wise Registry Cleaner v.3.8.2
    01.12.2008  Антивирусы: RemoveIT Pro v4 SE (30.11.2008)
    01.12.2008  Корпус ASUS Vento TA-U1 можно поставить вместо новогодней ёлки
    01.12.2008  Диагностика: PC Wizard 2008 v.1.871
    01.12.2008  Диагностика: NextSensor v.2.7.6.0 Build 1130
    01.12.2008  Тестовые приложения: PassMark BurnInTest v.6.0 Build 1000 Beta 15
    01.12.2008  Неофициальные драйверы для модемов Motorola
    01.12.2008  Драйверы и утилиты для сетевых хранилищ D-Link
     
    Полезно

     
    Copyright © CompDoc.Ru
    При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.
     
    Rambler's Top100