LoveRead.info » Книги » Разная литература » Интернет-журнал "Домашняя лаборатория", 2007 №8 - Журнал «Домашняя лаборатория»

Интернет-журнал "Домашняя лаборатория", 2007 №8 - Журнал «Домашняя лаборатория»

Книгу Интернет-журнал "Домашняя лаборатория", 2007 №8 - Журнал «Домашняя лаборатория» читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

137 0 18:00, 15-09-2023

Книга Интернет-журнал "Домашняя лаборатория", 2007 №8 - Журнал «Домашняя лаборатория» читать онлайн бесплатно без регистрации

Большой и увлекательный, научно-прикладной и образовательный, но некоммерческий интернет-журнал, созданный группой энтузиастов. Интернет-журнал содержит материалы, найденные в Интернет или написанные для Интернет. Основная тематика статей — то, что можно сделать самому, от садовых поделок до сверхпроводников, но есть и просто полезные материалы.

    1 ... 318 319 320 321 322 323 324 325 326 ... 463
    Перейти на страницу:
    поле должно содержать одно из следующих значений:

    • EVENPARITY — Дополнение до четности

    • MARKPARITY — Бит четности всегда 1

    • NOPARITY — Бит четности отсутствует

    • ODDPARITY — Дополнение до нечетности

    • SPACEPARITY — Бит четности всегда 0

    ∙ StopBits

    Задает количество стоповых бит. Поле может принимать следующие значения:

    • ONESTOPBIT — Один стоповый бит

    • ONE5STOPBIT — Полтора стоповых бита

    • TWOSTOPBIT — Два стоповых бита

    ∙ XonChar

    Задает символ XON используемый как для приема, так и для передачи.

    ∙ XoffChar

    Задает символ XOFF используемый как для приема, так и для передачи.

    ∙ ErrorChar

    Задает символ, использующийся для замены символов с ошибочной четностью.

    ∙ EofChar

    Задает символ, использующийся для сигнализации о конце данных.

    ∙ EvtChar

    Задает символ, использующийся для сигнализации о событии.

    ∙ wReserved1

    Зарезервировано и не используется.

    Так как поля структуры DCB используются для конфигурирования микросхем портов, на них накладываются некоторые ограничения. Размер байта должен быть 5, 6, 7 или 8 бит. Комбинация из пяти битного байта и двух стоповых бит является недопустимой. Так же как и комбинация из шести, семи или восьми битного байта и полутора стоповых бит.

    Функция BuildCommDCB

    Только что рассмотренная нами структура DCB самая большая из всех, использующихся для настройки последовательных портов. Но она и самая важная. Заполнение всех полей этой структуры может вызвать затруднения, так как надо очень четко представлять, как работает последовательный порт. Поэтому ручную установку полей можно порекомендовать опытным программистам. Если же Вы чувствуете себя не очень уверено, воспользуйтесь функцией BuildCommDCB, которая позволяет заполнить поля структуры DCB на основе строки, по синтаксису аналогичной строке команды mode. Вот как выглядит прототип этой функции:

    BOOL BuildCommDCB(LPCTSTR lpDef, LPDCB lpDCB);

    Как видно, функция очень проста и имеет всего два параметра:

    ∙ lpDef

    Указатель на строку с конфигурационной информацией в формате команды mode. Например, следующая строка задает скорость 1200, без четности, 8 бит данных и 1 стоповый бит.

    baud=1200 parity=N data=8 stop=l

    ∙ lpDCB

    Указатель на заполняемую структуру DCB. При этом структура должна быть уже создана и заполнена нулями, кроме поля DCBlength, которое должно содержать корректное значение. Возможно так же использование уже заполненной структуры DCB, например полученной вызовом одной из функций чтения параметров порта.

    В случае успешного завершения функция BuildCommDCB возвращает не нулевое значение. В случае ошибки возвращается 0.

    Обычно функция BuldCommDCB изменяет только явно перечисленные в строке lpDef поля. Однако существуют два исключения из этого правила:

    • При задании скорости обмена 110 бит в секунду автоматически устанавливается формат обмена с двумя стоповыми битами. Это сделано для совместимости с командой mode из MS-DOS или Windows NT.

    • По умолчанию запрещается программное (XON/XOFF) и аппаратное управление потоком. Вы должны вручную заполнить требуемые поля DCB если требуется управление потоком.

    Функция BuilCommDCB поддерживает как новый, так и старый форматы командной строки mode. Однако, Вы не можете смешивать эти форматы в одной строке.

    Новый формат строки позволяет явно задавать значения для полей DCB отвечающих за управление потоком. При использовании старого формата существуют следующие соглашения:

    — Для строк вида 9600,n,8,1 (не заканчивающихся символами х или р):

    • flnX, fOutX,fOutXDsrFlow, fOutXCtsFlow устанавливаются в FALSE

    • fDtrControl устанавливается в DTR_CONTROL_ENABLE

    • fRtsControl устанавливается в RTS_CONTROL_ENABLE

    — Для строк вида 9600,n,8,1,х (заканчивающихся символом х):

    • flnX, fOutX устанавливаются в TRUE

    • fOutXDsrFlow,fOutXCtsFlow устанавливаются в FALSE

    • fDtrControl устанавливается в DTR_CONTROL_ENABLE

    • fRtsControl устанавливается в RTS_CONTROL_ENABLE

    — Для строк вида 9600,n,8,1,р (заканчивающихся символом р):

    • flnX, fOutX устанавливаются в FALSE

    • fOutXDsrFlow,fOutXCtsFlow устанавливаются TRUE

    • fDtrControl устанавливается в DTR_CONTROL_HANDSHAKE

    • fRtsControl устанавливается в RTS_CONTROL_HANDSHAKE

    Следует заметить, что функция BuildCommDCB только заполняет поля DCB указанными значениями. Это подготовительный шаг к конфигурированию порта, но не само конфигурирование, которое выполняется рассматриваемыми далее функциями. Поэтому Вы можете вызвать BuildCommDCB для общего заполнения структуры DCB, затем изменить значения не устраивающих Вас полей, и после этого вызывать функцию конфигурирования порта.

    Функция GetCommState

    Заполнить DCB можно еще одним способом. Вызовом функции GetCommState. Эта функция заполняет DCB информацией о текущем состоянии устройства, точнее о его настройках. Вот как она выглядит:

    BOOL GetCommState(

          HANDLE hFile,

          LPDCB lpDCB

    );

    Функция очень проста и имеет всего два параметра:

    ∙ hFile

    Описатель открытого файла коммуникационного порта. Этот описатель возвращается функцией CreateFile. Следовательно, прежде чем получить параметры порта, Вы должны его открыть. Для функции BuildCommDCB это не требовалось.

    ∙ lpDCB

    Указатель на DCB. Для DCB должен быть выделен блок памяти.

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

    Функция SetCommState

    Заполнив DCB можно приступать к собственно конфигурированию порта. Это делается с помощью функции SetCommState:

    BOOL SetCommState(

          HANDLE hFile,

          LPDCB lpDCB

    );

    Эта функция имеет точно такие же параметры, как GetCommState. Различается только направление передачи информации. GetCommState считывает информацию из внутренних управляющих структур и регистров порта, а SetCommState наоборот заносит ее. Следует быть осторожным при вызове функции SetCommState, поскольку она изменит параметры даже в том случае, если очереди приема/передачи не пусты, что может вызвать искажение потока передаваемых или принимаемых данных.

    Еще одна тонкость этой функции заключается в том, что она завершится с ошибкой, если поля XonChar и XoffChar в DCB содержат одинаковые значения.

    Как всегда, в случае успешного завершения возвращается отличное от нуля значение, а в случае ошибки — нуль.

    Структура COMMTIMEOUTS

    Следующей важной управляющей структурой является COMMTIMEOUTS. Она определяет параметры временных задержек при приеме и передаче. Значения, задаваемые полями этой структуры, оказывают большое влияние на работу функций чтения/записи.

    typedef struct _COMMTIMEOUTS {{

         DWORD ReadlntervalTimeout;

         DWORD ReadTotalTimeoutMultiplier;

         DWORD ReadTotalTimeoutConstant;

         DWORD WriteTotalTimeoutMultiplier;

         DWORD WriteTotalTimeoutConstant;

    } COMMTIMEOUTS,*LPCOMMTIMEOUTS;

    Поля структуры COMMTIMEOUTS имеют следующие значения:

    ∙ ReadlntervalTimeout

    Максимальное время, в миллисекундах, допустимое между двумя последовательными символами, считываемыми с коммуникационной линии. Во время операции чтения временной период начинает отсчитываться с момента приема первого символа. Если интервал между двумя последовательными символами превысит заданное значение, операция чтения завершается и все данные, накопленные в буфере, передаются в программу. Нулевое значение данного поля означает, что данный тайм-аут не используется. Значение MAXDWORD, вместе с нулевыми значениями полей ReadTotalTimeoutConstant и ReadTotalTimeoutMultiplier, означает немедленный возврат из операции чтения с передачей уже принятого символа, даже

    1 ... 318 319 320 321 322 323 324 325 326 ... 463
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


    Уважаемые читатели, слушатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

    • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
    • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
    • 3. Просьба отказаться от нецензурной лексики.
    • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

    Надеемся на Ваше понимание и благоразумие. С уважением, администратор LoveRead.info.


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Валентина Валентина04 июль 13:25 Большое спасибо за интересную тему.  Сюжет заманчиввй,интересный. Жду продолжения ... Лекарь Фамильяров. Том 7 - Александр Лиманский
    2. Наталья По Наталья По01 июль 10:12 Ужасный перевод:(... Аркадия - Эрин Дум
    3. Вика Вика29 июнь 21:56 Какая хрень с первых строк.  У ребенка в 14 месяце не может быть черепно мозговой травмы при падании с дивана ... Вернуть семью любой ценой - Чарли Ви
    Все комметарии
    Новинки бесплатной онлайн библиотеки