Rs232 rts cts как сделать положительное напряжение. COM-порт. Сопряжение устройств с ПК. Программирование. Синхронный режим взаимодействия DTE и DCE

Rs232 rts cts как сделать положительное напряжение. COM-порт. Сопряжение устройств с ПК. Программирование. Синхронный режим взаимодействия DTE и DCE

16.03.2019

У стандартного модемного интерфейса (rs232) кроме линий RxD и TxD есть еще куча разных, их называют “сигналами квитирования”. Я всегда путался в них — во всех этих RTS’ах, CTS’ах и прочих DSR’ах. В этой статье, я попробую систематизировать и кратко описать эти сигналы.

Итак, первое что стоит знать – интерфейс rs232 соединяет два типа устройств

    DTE (Data Terminal Equipment) – это обычно компьютер или заменяющее его устройство. Для простоты, дальше я DTE буду называть компьютер. На компьютер устанавливается разъем типа “папа”

    DCE (Data Circuit-terminating Equipment) – это обычно модем, или его заменяющее оборудование. Для простоты я буду называть DCE модемом. На DCE устанавливается разъем типа “мама”

Сигналы я буду описывать на примере 9-контактного разъема, так как он самый распространенный. Взглянем на него.

Как видно, контакты на разъемах перевернуты. Таким образом, прямой провод соединит контакты с одинаковыми номерами, тоесть, к примеру, контакту 2 на “папе” будет соответствовать контакт 2 на “маме”.

А вот и сводная табличка сигналов. Под названием вывода – номер его штырька в 9-контактном разъеме.

Передача данных компьютером, прием модемом TxD
3
RxD
2
Передача данных модемом, прием компьютером
Компьютер готов передавать данные, либо компьютер разрешает модему передавать данные RTS
7
CTS
8
Модем разрешает компьютеру передавать данные
DSR
6
Готовность модема к работе.
Готовность компьютера к работе. DTR
4
RI
9
Индикатор звонка
DCD
1
Индикатор наличия несущей. Устанавливается после соединения.
Земля SG
5
SG
5
Земля

Ну, и немного подробнее опишем каждый сигнал.

Я буду рассматривать сигналы обычных логических уровней – так, как они выглядят на выходах или входах микроконтроллера.

Сигналы в кабеле (после преобразователя уровня, к примеру max232) перевернуты и уровни сдвинуты. Так, логической 1 на выходе контроллера соответствуют уровни напряжения от –3 до –15 вольт, а логическому нулю – +3…+15 вольт.

TxD (Tramsmit Data)

Сразу скажу, что откуда в сокращении буква “x” – я не знаю.

По этой линии происходит передача данных от компьютера к модему. По умолчанию на ней — высокий уровень. Прием байта начинается по стартовому биту (а точнее, по переходу линии из высокого состояния в низкое). Стартовый бит всегда является логическим нулем.

После этого идет не обязательный бит четности (на картинке его нет). Бит четности дополняет количество единиц до четного (even) или нечетного (odd). К примеру, если в байте было 3 единицы и четность установлена как “even”, то бит четности будет равен 1, чтобы дополнить количество единиц до четырех – четного числа. Четность служит для проверки правильности передачи байта.

После бита четности идет один, один с половиной или два стоп-бита. Стоп бит используется, чтобы правильно отработался старт-бит (чтобы между байтами всегда был перепад из высокого уровня в низкий). Это бит всегда установлен в логическую 1.

К примеру, передача 0xEE будет выглядеть на линии UART’а так:

Параметры последовательного порта обычно пишут так – “9600, 8N1”. 9600 – это скорость передачи бит/с, 8 – количество бит данных в посылке, N – бит четности не используется (может быть E или O, если используется), 1 – один стоп бит.

Заметьте, что количество передаваемых байт в секунду зависит не только от скорости передачи, но и от формата байта. К примеру, один байт в формате 8N1 занимает 10 бит (стартовый + 8 бит данных + стоповый), а в формате 8E1 уже 11бит – добавляется бит четности. Соответственно, байтовая скорость при битовой 9600бод станет 960байт/с в первом случае и 872.7байт/с во втором.

RxD (Receive Data)

Тоже самое, что и TxD, только хозяин этой линии – модем.

CTS (Clear To Send)

Рассмотрим такую ситуацию – компьютер отправляет модему большое количество данных на скорости 38400 бод, а модем подключен к другому модему на скорости 9600 бод.

Буфер внутри модема быстро заполняется, и, для того, чтобы он не переполнился, модем должен сообщить компьютеру “прекрати передачу!”. Для этого и служит линия CTS.

Активный уровень CTS – низкий. Тоесть, модем разрешает передачу данных, когда на ножке контроллера 0.

Пример из руководства по LPC17xx.

Как видно, компьютер передавал данные, пока на ножке был ноль. Когда появился высокий уровень, компьютер закончил передавать текущий байт и остановился.

RTS (Request To Send)

Вот с этой ножкой неразбериха. Проблема в том, что на месте этой ножки по стандарту могут быть два сигнала – RTS (номер цепи по стандарту — 105) и RTR (номер 133).

RTS (Ready To Send) – компьютер сигнализирует модему о том, что он сейчас будет передавать данные. Модем должен приготовиться и активировать CTS, после чего компьютер начинает передавать данные.

RTR (Ready To Receive) – компьютер сообщает модему о том, что он готов принимать данные. Это – аналог CTS, только со стороны компьютера.

Сейчас основная часть оборудования использует RTS как RTR! И даже аппаратное квитирование у LPC17xx, LPC2xxx, AT91SAM7 реализует именно механизм RTR.

Активный уровень как и у CTS – низкий.

Рассмотрим механизм подробнее на примере из руководства по LPC17xx

Сначала — сигнал RTS – низкий, принимаются байты.

Как только буфер приемника заполнился N символами, RTS переходит в высокое состояние, что запрещает модему передавать данные. Но, как видно, модем не успел среагировать на RTS и передал еще один байт, поэтому очень важно оставлять в буфере запас для как минимум одного байта.

DTR (Data Terminal Ready)

Сигнал от компьютера к модему, обозначающий, что компьютер включен и котов к работе с модемом. Активное состояние, как обычно, низкое. Тоесть, если на ножке контроллера 0, то модем должен подготовиться к подключению к линии. Если-же компьютер выставит на этой ножке логическую 1, то модем обязан отключиться от линии (положить трубку, к примеру)

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

DSR (Data Set Ready)

Сигнал от модема к компьютеру. Говорит о том, что модем включен, проинициализирован, и готов к общению с компьютером. До тех пор, пока этот сигнал не активен нет смысла передавать что-либо в модем. Модем готов, когда на ножке контроллера логический 0.

RI (Ring Indicator)

Сигнал от модема к компьютеру. Как не сложно догадаться, этот сигнал дергается, когда на модем звонят. Скорость переключения сигнала – маленькая, порядка секунд, сигнал довольно точно повторяет огибающую звонка (огибающую того, что вы слышите, когда звонит аналоговый телефон).

На практике, этот сигнал используется редко. Обычно программа просто ждет сообщения “RING” от модема.

Логический 0 на ножке контроллера значит, что идет вызов.

DCD (Data Carrier Detect)

Сигнал от модема к компьютеру. Сообщает компьютеру о том, что модем подключен к удаленному модему. Эта ножка – очень важна, так как дает возможность определить спонтанные отключения.

Логический 0 означает, что связь между модемами активна.

Теперь кратко про кабель

Теперь про кабель. Стандарт определяет максимальную емкость кабеля как 2.5нФ. Это, примерно, 25метров.

Однако, на практике, это ограничение игнорируют, так как целостность сигнала определяется не только емкостью но и скоростью. Вот максимальные длинны, используемые на практике для низких скоростей.

Скорость (бод) Длинна экранированного кабеля, метры Длинна неэкранированного кабеля, метры
110 1500 300
300 1200 300
1200 900 150
2400 600 150
4800 150 75
9600 75 30

Стандарт

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

Рекомендация ITU-T V.24 (1980), а также её более поздняя редакция X.24 (1984) имеют название: «Перечень цепей стыка между Оконечным Оборудованием Данных и Оконечным Оборудованием Цепей Данных». Из названия следует, что протокол V.24 устанавливает процедуры взаимодействия на физическом уровне двух типов устройств — ООД и АКД.

  • Оконечное Оборудование Данных (ООД) или Data Terminal Equipment(DTE) в общем случае выполняет задачу представления данных пользователю и является в этом смысле оконечным устройством.
  • Оконечное Оборудование Цепей Данных (ОЦД) или Аппаратура Канала Данных (АКД) или Data Circuit-terminal Equipment(DCE) в общем случае выполняет задачу представления данных сети и является в этом смысле посредником.

Протокол V.24 определяет набор электрических сигналов, с помощью которых DTE и DCE устанавливают взаимодействие. Сигналы, которые формирует DTE, являются входными для DCE и наоборот. Всего в рекомендации определяется более 40 цепей стыка, однако, в промышленной реализации V.24 используются далеко не все рекомендованные сигналы.

Сигнал DTR «Присоединить АПД К линии»

Источником сигнала DTR (Data Terminal Ready) является устройство DTE. Назначение сигнала - представить DCE информацию о том, что аппаратура DTE готова к тому, чтобы начать процесс передачи данных.

Сигнал DSR «АПД готова»

Источником сигнала DSR (Data Set Ready) является устройство DCE. DSR формируется DCE в ответ на сигнал DTR, полученный от DTE. Назначение сигнала — представить DTE информацию о том, что аппаратура DCE готова к тому, чтобы участвовать в процессе передачи данных.

Сигнал RTS «Запрос передачи»

Источником сигнала RTS (Request To Send) является устройство DTE. Назначение сигнала — перевести DCE непосредственно в режим передачи данных.

Сигнал CTS «Готов к передаче»

Источником сигнала RTS (Clear To Send) является устройство DCE. CTS формируется DCE в ответ на сигнал RTS, полученный от DTE. Назначение сигнала — представить DTE информацию о том, что аппаратура DCE готова к тому, чтобы начать процесс непосредственной передачи данных.

Сигналы RTS и CTS используются для выполнения аппаратного управления темпом передачи данных. Следует различать скорость, с которой производится обмен данными между DCE и DTE и темп, с которым DCE работает с каналом передачи данных. В том случае, если DCE не справляется с выбранным DTE темпом передачи, это устройство должно перевести сигнал CTS в состояние «выключено». В ответ на это DTE протоколами верхних уровней приостанавливает процесс передачи данных до восстановления состояния сигнала CTS.

Сигнал LSD «Детектор принимаемого линейного сигнала данных»

Источником сигнала LSD (Line Signal Detect) является устройство DCE. Назначение данного сигнала — индикация наличия или отсутствия сигнала от удаленного конца передачи данных. Например, модем устанавливает этот сигнал (у модемов он обычно называется CD — Carrier Detect) в том случае, когда он установил соединение с удаленным модемом в соответствии со своим линейным протоколом.

Сигналы TXD и RXD «Передаваемые данные» и «Принимаемые данные»

Источником сигнала TXD (Transmit Data) является устройство DTE. Передача данных производится после получения от DCE подтверждения готовности к приему данных. Источником сигнала RXD (Receive Data) является устройство DCE. Достоверный прием данных в DTE производится после получения сигнала LSD от DCE.

Асинхронный режим взаимодействия DTE и DCE

При использовании этого режима DCE и DTE либо жестко устанавливают одинаковую скорость обмена данными, либо одна из сторон (обычно это DCE) подбирает соответствующее значение скорости автоматически из установленного набора в ходе обмена данными с DTE. Данные в асинхронном режиме передаются информационной группой (от 6 до 8 бит). Информационная группа может сопровождаться битом контроля (дополнение до четного или нечетного числа единиц всей группы). Формат информационной группы также должен быть предварительно согласован. О начале информационной группы сигнализирует прием стартового бита — переход принимаемого сигнала в «0». После получения стартового бита приемник запускает свой внутренний генератор, с помощью которого производится синхронизация принимаемых данных по времени. Информационная группа завершается передачей стопового бита, который обычно занимает 1,5 или две информационных позиции.

Сигналы TXC и RXC «Синхронизация элементов передаваемого и принимаемого сигнала»

Источником сигналов TXС (Transmit Clock) и RXC (Receive Clock) является устройство DCE. Переход сигнала TXС или RXC из состояния «включен» в состояние «выключен» соответствует середине информационной позиции соответствующего сигнала обмена (TXD или RXD). Сигналы TXC и RXC формируются устройством DCE в непрерывном режиме с момента включения питания и могут использоваться для синхронизации информационного обмена.

Синхронный режим взаимодействия DTE и DCE

Синхронный режим информационного обмена используется в тех случаях, когда необходимо обеспечить устойчивое, надежное и высокоскоростное взаимодействие DCE и DTE. В данном режиме аппаратура DTE принимает и передает данные на синхронизации DCE. В синхронном режиме управление потоком не используется, и поэтому, сигналы RTS и CTS в данном случае не оказывают влияние на темп информационного обмена. Темп обмена при синхронном взаимодействии определяется DCE-источниками данных для обоих направлений передачи. Синхронное взаимодействие по протоколу V.24 может быть реализовано, например, с использованием синхронных интерфейсов RS-232-C. Стандарт RS-232-C определяет необходимое подмножество управляющих сигналов для реализации данного взаимодействия со скоростями до 128 Кбит/с.

Сигналы TRXC «Синхронизация элементов передаваемого сигнала»

Источником сигналов TRXC (Transmit Signal Element Timing) является устройство DTE. Этот сигнал может быть использован в тех случаях, когда источником синхронизирующих импульсов является аппаратура DTE. Переход сигнала TRXC из состояния «включен» в состояние «выключен» соответствует середине информационной позиции сигнала TXD.

Симметричные и несимметричные цепи

Сигнальное напряжение обычной, несимметричной цепи формируется относительно общего сигнального провода. Диапазоны изменения сигнальных напряжений интерфейса EIA-232 приведены в таблице:

Диапазон от − 3 до + 3 Вольт образует зону изменения сигнала.

При передаче по кабелю, который соединяет DCE и DTE информационный сигнал подвергается воздействию помех и искажается из-за несогласованности параметров линии и генератора. Это может затруднить или сделать невозможным его правильное распознавание приемником. Поэтому даже при использовании синхронного режима обмена скорость передачи сигналов через физические интерфейсы не может превышать сотни килобит в секунду. Для того чтобы преодолеть это ограничения для соединения DCE и DTE применяют специальные симметричные цепи.

Диапазоны изменения сигнальных напряжений между сигнальными проводами пары U ab для интерфейса, который использует сбалансированные сигналы (EIA-422) приведены в таблице:

Современные последовательные высокоскоростные интерфейсы используют сбалансированные цепи для передачи как отдельных, так и всех информационных сигналов. В качестве примера можно рассмотреть интерфейс, который построен в соответствии со стандартом V.35.

Добавить в:

В последнее время последовательный способ передачи данных вытесняет параллельный.
За примерами далеко ходить не надо: появление шин USB и SATA говорит само за себя.
И действительно, параллельную шину трудно масштабировать (удлинить шлейф, увеличить частоту тактирования шины), неудивительно, что технологии поворачиваются к параллельным шинам задней частью.

Последовательные интерфейсы

На сегодня существует великое множество различных интерфейсов последовательной передачи данных.
Кроме уже упомянутых USB и SATA еще можно вспомнить как минимум два широко известных стандарта RS-232 и MIDI (он же и GamePort).
Объединяет их все то же - последовательная передача каждого бита информации, или Serial Interface.
Преимуществ у подобных интерфейсов великое множество, и самое главное из них - малое количество соединительных проводов, а следовательно, меньшая цена.

Передача данных

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

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

Асинхронная передача подразумевает использование специальных битов, маркирующих начало и конец данных – стартового (логический ноль) и стопового (логическая единица) бита.
Также возможно использование специального бита четности, который определяет четное или нечетное количество передаваемых единичных битов (в зависимости от принятого соглашения).
На принимающей стороне проводится анализ этого бита, и если бит четности не соответствует количеству единичных битов, то пакет данных пересылается снова.

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

Ну, если бы все компьютерные технологии были просты, то любая домохозяйка давно бы уже лепила параллельно с пельменями новые протоколы …
Попробуем взглянуть на процесс по-другому.
Данные передаются пакетами, примерно как IP пакеты, вместе с данными идут и информационные биты, количество этих битов может варьироваться от 2 до 3 с половиной.
С половиной?!
Да, ты не ослышался, именно с половиной!

Стоповый бит, а вернее передаваемый сигнал соответствующий стоповому биту, может иметь длительность большую, чем сигнал соответствующий биту-единице, но меньшую чем для двух битов.
Так вот, пакет всегда начинается со стартового бита, который всегда имеет значение ноль, после чего идут биты данных, потом бит четности, а потом и стоповый бит, всегда равный единице.
Потом через некоторый произвольный промежуток времени поход битов на Москву продолжается.

Такой способ передачи подразумевает, что приемник и передатчик должны работать с одной скоростью (ну, или почти с одной), иначе пришедшие биты данных приемник будет либо не успевать обрабатывать, либо принимать старый бит за новый.
Для того чтобы этого избежать, каждый бит стробируется, то есть посылается синхронно со специальным сигналом - «стробом», формируемым внутри прибора.
Существует ряд определенных скоростей работы асинхронных устройств - 50, 75, 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19 200, 38 400, 57 600 и 115 200 бит в секунду.

Ты наверняка слышал, что в качестве единицы измерения скорости передачи данных используется «бод» - частота изменения состояния линии, и эта величина будет совпадать со скоростью передачи данных только в случае если сигнал может иметь одно из двух значений.
Если же в одном изменении сигнала закодировано несколько бит (а это встречается у многих модемов), скорость передачи и частота изменения линии будут совершенно различными величинами.

Теперь пару слов о загадочном термине «пакет данных».
Под пакетом в данном случае понимается набор битов, передаваемых между стартовым и стоповым битами.
Их число может изменяться от пяти до восьми.
Можно задаться вопросом, почему именно пять-восемь бит?
Почему бы не передать сразу, скажем, килобайт данных внутри пакета?

Ответ очевиден: передавая маленькие пакеты данных, мы пусть и проигрываем, отправляя с ними три служебных бита (от 50 до 30 процентов данных), зато если при передаче пакет будет испорчен, мы легко узнаем это (помнишь про бит четности?) и быстро передадим его снова.
А вот в килобайте данных ошибку обнаружить будет уже трудно, и передавать его будет гораздо сложнее.

В качестве примера асинхронного последовательного устройства передачи данных можно привести COM-порт компьютера, любимый модем с дизайном от Труссарди и мышь, подключаемую к этому же порту, которую недалекие секретарши почему-то все время стараются засунуть в PS/2.
Работают все эти устройства по интерфейсу RS-232, вернее по асинхронной его части, поскольку в стандарте описана и синхронная передача данных.

Вот мы и добрались до COM порта. Но с ним все не так просто как с LPT, и его полноценное использование потребует значительно больших усилий. Главной загвоздкой является и его главное преимущество - передача данных в последовательном виде. Если в LPT байт данных передается по 8-ми линиям по биту на каждую, и состояние каждой линии можно было легко посмотреть, то в COM порту байт данных передается бит за битом по одной линии (относительно земли, конечно) и посмотреть что там передается с помощью одних светодиодов не удастся. Для этого нужно специальное устройство - преобразователь потока последовательных данных в парраллельный, т.н. USART (Universal Synchronous/Asynchronous Receiver Transmitter). Например, он есть в составе материнской платы компьютера, снабженного COM портом, в любом более мение серьезном микроконтроллере.


Надеюсь, вы еще пали духом в освоении COM порта. Все не так уж и мрачно. Некоторые результаты можно получить и без USART. Сформулируем задачу, которую реализуем на начальном этапе работы с COM портом:


"Хочу что бы к компьютеру через COM порт подключался светодиод. Запускаю программу. Далаю какое-то действие в этой программе, светодиод загорается, делаю другое - светодиод тухнет."


Задача довольно специфичная (с учетом того, что USART не используется) и является чистой "самопальщиной", но вполне реализуема и работоспособна. Давайте приступим к ее реализации.


1. COM порт

Опять берем системный блок вашего ПК и смотрим в тыловую часть. Примечаем там 9-ти штырьковй разъем - это и есть COM порт. Реально их может быть неколько (до 4-х). На моем ПК установлено два COM порта (см. фото).


2. Удлинитель COM порта


3. Аппаратная часть

С аппаратной частью нам тоже придется "повозиться", в том смысле что она будет сложнее чем с первым устройством для LPT порта. Дело в том что протокол RS-232 по которому идет обмен данными в COM порту, имеет несколько отличное соотношение логическое состояние - напряжение. Если обычно это логический 0 0 В, логическая 1 +5 В, то в RS-232 это соотношение следующее: логический 0 +12 В, логическая 1 -12 В.

И например, получив -12 В не сразу понятно что с этим напряжением делать. Обычно проводят преобразование уровней RS-232 в ТТЛ (0, 5 В). Самый простой вариант - стабилитроны. Но я предлагаю сделать этот преобразователь на специальной микросхеме. Называется она MAX232.

Теперь давайте посмотрим, а какие сигналы из COM порта мы можем посмотреть на светодиодах? В действительности, в COM порту есть аж 6 независимых линий, представляющих интерес для разработчика устройств сопряжения. Две из них пока для нас недоступны - линии по передаче последовательных данных. А вот оставшиеся 4 предназначены для управления и индикации процесса передачи данных и мы сможем "передалать" их под свои нужды. Две из них предназначены для управления со стороны внешнего устройства и мы их пока трогать не будем, а вот последние две оставшиеся линии мы сейчас и поиспользуем. Они называются:

  • RTS - Запрос на передачу. Линия взаимодействия, которая показывает, что компьютер готов к приему данных.
  • DTR - Компьютер готов. Линия взаимодействия, которая показывает, что компьютер включен и готов к связи.

Сейчас мы немного передалаем их назначение, и светодиоды, подключенные к ним будут либо тухнуть либо загораться, в зависимости от действий в нашей собственной программе.

Итак, давайте соберем схему, которая позволит нам проводить задуманные действия.

А вот ее практичекая реализация. Я думаю вы меня простите, что я сделал ее в таком стремном макетном варианте, ибо делать плату для такой "высоко продуктивной" схемы не хочется.


4. Программная часть

Тут все попроще. Давайте создадим Windows приложение в Microsoft Visual C++ 6.0 на основе MFC для управления двумя линиями взаимодействия COM порта. Для этого создаем новый проект MFC и указываем ему имя, например, TestCOM . Далее выбираем вариант построения на основе диалога.

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

Class CTestCOMDlg: public CDialog { // Construction public: CTestCOMDlg(CWnd* pParent = NULL); // standard constructor HANDLE hFile;

Чтобы наша программа могла упрявлять линиями COM порта, его надо сначала открыть. Напишем код, ответственный за открытие порта при загрузке программы.

HFile = CreateFile("COM2", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0,NULL); if(hFile==INVALID_HANDLE_VALUE) { MessageBox("Не удалось открыть порт!", "Ошибка", MB_ICONERROR); } else { MessageBox("Порт успешно открыт", "Ok", MB_OK); }

С помощью стандарной функции Win API CreateFile() открываем COM-порт COM2 . Далее проверяем успешность открытия с выводом информационного сообщения. Вот тут надо сделать важное замечание: COM2 - это в моем компьютере, а на Вашем компьютере Вы могли подключить его к другому COM порту. Соответственно, его имя нужно изменить на то, кокай порт Вы используете. Посмотреть, какие номера портов присутствуют на Вашем компьютере, можно так: Пуск -> Настройка -> Панель управления -> Система -> Оборудование -> Диспетчер устройств -> Порты (COM и LPT) .

В итоге, функция CTestCOMDlg::OnInitDialog() , расположенная в файле TestCOMDlg.cpp , класса нашего диалога должна принять вид:

BOOL CTestCOMDlg::OnInitDialog() { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application"s main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here hFile = CreateFile("COM2", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0,NULL); if(hFile==INVALID_HANDLE_VALUE) { MessageBox("Не удалось открыть порт!", "Оштбка", MB_ICONERROR); } else { MessageBox("Порт успешно открыт", "Ok", MB_OK); } return TRUE; // return TRUE unless you set the focus to a control }

Теперь добавим обработчики кнопок управления линиями. Я дал им соответствующие имена: функция, которая устанавливает еденицу на линии DTR - OnDTR1(), 0 - OnDTR0(). Для линии RTS соответственно аналогичным образом. Напомню, что обработчик создается при двойном щелчке на кнопке. В итоге, эти четыре функции должны принять вид:

Void CTestCOMDlg::OnDTR1() { // TODO: Add your control notification handler code here EscapeCommFunction(hFile, 6); } void CTestCOMDlg::OnDTR0() { // TODO: Add your control notification handler code here EscapeCommFunction(hFile, 5); } void CTestCOMDlg::OnRTS1() { // TODO: Add your control notification handler code here EscapeCommFunction(hFile, 4); } void CTestCOMDlg::OnRTS0() { // TODO: Add your control notification handler code here EscapeCommFunction(hFile, 3); }

Поясню немного как они работают. Как видно, внитри себя они содержат вызов одной и той же Win API функции EscapeCommFunction() с двумя параметрами. Первый из них - это хэндл (HANDLE) на открытый порт, второй - специальный код действия, соответствующий необходимому состоянию линии.

Все, комилируем, запускаем. Если все хорошо, должны увидеть сообщение об успешном открытии порта. Далее, нажатием соответствующих кнопок мигаем светодиодами, подключенными к COM порту.

© Иванов Дмитрий
Декабрь 2006

Сигналы и контакты интерфейса RS232
Разъем 9-ти
пиновый #
Разъем 25
пиновый #
Обозначение Полное наименование Направление Что значит
Передача данных (Transmit Data) Передача данных от компьютера
Прием данных (Receive Data) Прием данных компьютером
Запрос на передачу (Request to Send)
Готовность передачи (Clear to Send) Аппаратный контроль передачи данных типа RTS/CTS
Готовность источника данных (Data Set Ready) Я готов для обмена данными
Готовность приемника данных (Data Terminal Ready) Я готов для обмена данными
Наличие несущей (Carrier Detect) Один модем соединен с другим
Сигнал вызова (Ring Indicator) Звонок (вызов) на телефонной линии
Земля

Замечание: DCD иногда маркируется как CD

Сигналы могут иметь другое значение

Только 3 контакта из 9 имеют строго определенное значение: передача, прием и земля. Это аппаратные линии и вы не можете повлиять изменить из предназначение. Но все другие сигнальные линии управляются программно и могут быть (или подразумевается что могут) в большинстве своем другого назначения. Однако они могут прнимать только два состояния: высокое (установленное) (+12 вольт) и низкое (сброшенное) (-12 вольт). Установленное состояние это "включено" и сброшенное состояние это "выключено". Для примера, Advanced Serial Port Monitor (или точнее пользователь программы) может управлять сигналом DTR, в аппаратная часть в свою очередь подает на него напряжение 12 вольт с той или иной полярностью. Модем (или другое устройство) которое принимает сигнал DTR может интерпретировать его по-разному. В одном случае модем (в зависимости от модели и прошивки) может может занять телефонную линию если сигнал DTR сброшен. В другом случае модем проигнорировать сигнал DTR в сброшенном состоянии.

Это применимо ко всем 6-ти сигнальным линиям. Аппаратная часть только посылает и принимает эти сигналы, но действие зависит (если оно вообще есть) от программы (например, Advanced Serial Port Monitor) и конфигурации того оборудоввания, которое вы подключаете к последовательному порту.

Кабельные соединения между последовательными портами

Работа по последовательному интерфейсу имеет свои преимущества. Одна из причин это то, что все сигналы однонаправленные. Если контакт 2 отправляет данные (и не позволяет принимать другие сигналы) то очевидно, что нельзя подсоединить к контакту 2 контакт того же типа. Если вы все же сделаете это, то вы не смоежет не отсылать, ни принимать сигналы по этой линии. Есть два разных способа соединения устройств. Один из них подразумевает соединение двух устройств разного типа, когда контакт №2 одного отсылает данные на контакт №2 второго (который принимает этот сигнал). Это путь, когда вы соединяете компьютер (DTE) и модем (DCE). Также существует второй путь в котором устройства могут быть одного типа: соедините контакт отправки данных №2 с контактом №3, принимающим данные устройства того же типа. Это путь, когда можно соединять два компьютера (DTE-в-DTE). Тип кабеля, использумый в этом случае называется null-modem cable (нуль-модемный кабель) поскольку он соединяет два компьютера без использования модемов. Нуль-модемный также иногда называют перевернутым кабелем, т.к. провода между контактами 2 иd 3 идут наоборот. Пример выше приведен для контактов 25-ти контактного разъема, но также соответственно можно использовать и 9-ти контактный разъем.

Контроль передачи данных типа RTS/CTS и DTR/DSR

Это так называемый "аппаратный" контроль передачи данных. Контроль передачи данных был раскрыт более подробно на другой странице в разедлее "Контроль передачи данных" , однако контакты и сигналы не были описаны. Advanced Serial Port Monitor поддерживает RTS/CTS и DTR/DSR типы аппаратного контроля передачи данных. Только RTS/CTS тип контроля предачи данных будет рассмотрен здесь, поскольку DTR/DSR тип контроля передачи данных функционирует по тому же принципу. Для того, чтобы активировать RTS/CTS контроль передачи данных необходимо только выбрать эту опцию в настройках Advanced Serial Port Monitor .

Итак, если DTE устройство (такое как компьютер) хочет прекратить передачу данных, оно сбрасывает состояние сигнала RTS. Сброшенный сигнал"Запрос на передачу (Request to Send)" (-12 вольт) означает "не посылать запросы ко мне" (прекратить передачу). Когда компьютер готов для принятия очередного блока данных он устанавливает сигнал RTS (+12 вольт) и поток данных возобновляется. Сигналы контроля передачи данных всегда посылаются в противоположном направлении от потока данных контроль которых они осуществляют. DCE устройства (модемы) работают по тому же принципу, только посылают сигнал на контакте CTS. Поэтому тип контроля передачи даных RTS/CTS использует 2 линии (провода).



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows