Тарифы Услуги Сим-карты

Соединение через COM. Анатомия COM-порта

Иногда приходится решать задачу связи электронного устройства с компьютером, будь то просто обмен данными или удалённое управление. Эта статья описывает, как это можно реализовать, используя последовательный порт. Главным его преимуществом является то, что стандартный программный интерфейс Windows (API) позволяет производить непосредственное управление выходными линиями, давая прямой контроль над ними, и имеет функцию ожидания некоторого события, связанного с COM-портом. Также стандарт RS-232, по которому выполнены COM-порты, допускает подключение и отключение кабелей во время работы устройств (hot plug).

Описание

COM-порт (последовательный порт) – двунаправленный интерфейс, передающий данные в последовательном виде (бит за битом) по протоколу RS-232. Это довольно-таки распространённый протокол, применяемый для связи одного устройства (например, компьютера) с другими посредством проводов длиной до 30м. Уровни логических сигналов здесь отличаются от стандартных: уровень логической единицы – от +5 до +15В, уровень логического нуля – от -5 до -15В, что требует дополнительных преобразований схемы, но обеспечивает хорошую помехоустойчивость.

Рассмотрим 9-пинововый разъём (DB-9M). Ниже представлена его распиновка:

№ вывода Наименование Характер сигнала Сигнал
1 DCD Входной Data carrier detect
2 RxD Выходной Transmit data
3 TxD Входной Receive data
4 DTR Выходной Data terminal ready
5 GND - Ground
6 DSR Входной Data set ready
7 RTS Выходной Request to send
8 CTS Входной Clear to send
9 RI Входной Ring indicator

Больше всего нас будут интересовать пины 2 (передача данных),3 (приём данных) и 5 (земля). Это минимальный набор для возможности двухстороннего общения приборов.

Подробно останавливаться на описании протокола не буду. Для этого есть ГОСТ’ы и т.п. Поэтому мы пойдём дальше и поговорим о том, как же управлять этим зверем.

Применение

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

Ниже приведена схема её включения:


Думаю, трудностей быть не должно. Это один из вариантов использования этой микросхемы: передача данных с микроконтроллера на ЭВМ и наоборот. Передаваемый сигнал поступает на ножки Tx IN с одной стороны и на Rx IN с другой. Входные сигналы снимаются с Tx OUT и Rx OUT соответственно.

Программирование

Для начала поговорим о программировании портов на низком уровне. Так будет более правильно. Я очень много нервов потратил, разбираясь с этим интерфейсом, пока не начал вникать в принцип его работы на более низком уровне, нежели простая передача символов. Если будет понятно это, значит и с языками высокого уровня проблем не будет.

Ниже представлены адреса COM-портов, с которыми нам придётся работать:

Название порта Адрес IRQ
COM 1 3F8h 4
COM 2 2F8h 3
COM 3 3E8h 4
COM 4 2E8h 3

Они могут различаться. Установить значения можно в настройках BIOS’а. Это базовые адреса. От них же и будут зависеть адреса регистров, отвечающие за работу портов:

Адрес DLAB Чтение/Запись Аббревиатура Название регистра
+ 0 =0 Write Transmitter Holding Buffer
=0 Read Receiver Buffer
=1 Read/Write Divisor Latch Low Byte
+ 1 =0 Read/Write IER Interrupt Enable Register
=1 Read/Write Divisor Latch High Byte
+ 2 - Read IIR Interrupt Identification Register
- Write FCR FIFO Control Register
+ 3 - Read/Write LCR Line Control Register
+ 4 - Read/Write MCR Modem Control Register
+ 5 - Read LSR Line Status Register
+ 6 - Read MSR Modem Status Register
+ 7 - Read/Write Scratch Register

Первая колонка – адрес регистра относительно базового. Например, для COM1: адрес регистра LCR будет 3F8h+3=3FB. Вторая колонка – DLAB (Divisor Latch Access Bit) бит, определяющий разное назначение для одного и того же регистра.. Т.е. он позволяет оперировать 12-ю регистрами, используя всего 8 адресов. Например, если DLAB=1, то, обращаясь по адресу 3F8h, мы будем устанавливать значение младшего байта делителя частоты тактового генератора. Если же DLAB=0, то, обращаясь по тому же адресу, в этот регистр будет записан передаваемый или принятый байт.

“Нулевой” регистр

Ему соответствуют регистры приёма/передачи данных и установки коэффициента делителя частоты генератора. Как уже было сказано выше, если DLAB=0, то регистр используется для записи принимаемых/передаваемых данных, если же он равен 1, то устанавливается значение младшего байта делителя частоты тактового генератора. От значения этой частоты зависит скорость передачи данных. Старший байт делителя записывается в следующую ячейку памяти (т.е. для порта COM1 это будет 3F9h). Ниже приведена зависимость скорости передачи данных от коэффициента делителя:

Interrupt Enable Register (IER)

Если DLAB=0, то он используется как регистр управления прерываниями от асинхронного адаптера, если DLAB=1, то в нём задаётся старший байт делителя частоты тактового генератора.

Interrupt Identification Register (IIR)

Прерывание – это событие, при котором останавливается выполнение основной программы и начинается выполнение процедуры прерываний. Этот регистр определяет тип произошедшего прерывания.

Line Control Register (LCR)

Это управляющий регистр.

Бит 7 1 Divisor Latch Access Bit – задание скорости обмена данными
0 Обычнй режим (управление прерываниями, приём/передача данных)
Бит 6 Имитировать обрыв линии (посылает последовательность из нескольких нулей)
Биты 3 – 5 Бит 5 Бит 4 Бит 3 Выбор чётности
X X 0 No Parity
0 0 1 Odd Parity
0 1 1 Even Parity
1 0 1 High Parity (Sticky)
1 1 1 Low Parity (Sticky)
Бит 2 Кол-во стоп-битов
0 1 стоп-бит
1 2 стоп-бита при 6,7 или 8 бит данных или 1.5 стоп-бита при 5 битах данных.
Биты 0 And 1 Бит 1 Бит 0 Число битов данных
0 0 5 бит
0 1 6 бит
1 0 7 бит
1 1 8 бит

Проверка чётности подразумевает под собой передачу ещё одного бита – бита чётности. Его значение устанавливается таким образом, чтобы в пакете битов общее количество единиц (или нулей) было четно или нечетно, в зависимости от установки регистров порта. Этот бит служит для обнаружения ошибок, которые могут возникнуть при передаче данных из-за помех на линии. Приемное устройство заново вычисляет четность данных и сравнивает результат с принятым битом четности. Если четность не совпала, то считается, что данные переданы с ошибкой.

Стоп-бит означает окончание передачи данных.

Modem Control Register (MCR)

Регистр управления модемом.

Бит Значение
0 Линия DTR
1 Линия RTS.
2 Линия OUT1 (запасная)
3 Линия OUT2 (запасная)
4 Запуск диагностики при входе асинхронного адаптера, замкнутом на его выход.
5-7 Равны 0

Line Status Register (LSR)

Регистр, определяющий состояние линии.

Бит Значение
0 Данные получены и готовы для чтения, автоматически сбрасывается при чтении данных.
1 Ошибка переполнения. Был принят новый байт данных, а предыдущий ещё не был считан программой. Предыдущий байт потерен.
2 Ошибка чётности, сбрасывается после чтения состояния линии.
3 Ошибка синхронизации.
4 Обнаружен запрос на прерывание передачи "BREAK" – длинная строка нулей.
5 Регистр хранения передатчика пуст, в него можно записать новый байт для передачи.
6 Регистр сдвига передатчика пуст. Этот регистр получает данные из регистра хранения и преобразует их в последовательный вид для передачи.
7 Тайм-аут (устройство не связано с компьютером).

Modem Status Register (MSR)

Регистр состояния модема.

Ну вот и всё. Оперируя этими регистрами, можно напрямую общаться с COM-портом, управлять передачей и приёмом данных. Если вам не хочется возиться с памятью, можно воспользоваться уже готовыми компонентами для различных сред программирования: C++, VB, Delphi, Pascal и т.д. Они интуитивно понятны, поэтому, думаю, здесь не стоит заострять на них внимание.

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

Использование

Итак, перед тем как подробнее поговорить о том, что такое COM-порт, необходимо заглянуть в прошлое для понимания его значения. Буквально 15 лет назад использовался способ подключения устройств к компьютеру посредством специального стандартного разъема, расположенного на задней панели системного блока с применением специального сериального кабеля RS-232. У этого способа имеется множество недостатков. Такой кабель, по современным меркам, предоставляет крайне низкую скорость передачи данных - примерно сотню килобит в секунду. Помимо того, когда производилось физическое соединение разъемов, необходимо было осуществлять выключение оборудования, а сами они крепились друг к другу при помощи винтов, обеспечивающих надежность, при этом их размеры отличались немалой величиной.

Немного истории

COM-порт на тогдашних компьютерах традиционно носил номер 1 или 2, так как обычно их было не больше двух. Можно было установить дополнительные порты, если в этом возникала необходимость. Когда пользователем производилась настройка программного обеспечения, требовалось не перепутать и правильно установить именно тот, к которому обеспечивалось подключение нужного оборудования. Каждый COM-порт требовал правильной настройки скорости а также ряда иных загадочных параметров, о которых было известно только узкому кругу специалистов. Чтобы подключение аппаратуры было успешным, все необходимые параметры требовалось откуда-то узнать либо экспериментально подобрать, так как в этом случае отсутствовало какое-либо автоматическое конфигурирование. Помимо этого, подключение через COM-порт допускало соединение любого программного обеспечения с произвольным внешним оборудованием, даже совершенно несовместимым, из-за чего в процессе настроек и возникало огромное количество ошибок.

Современность

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

Это сопряжено с тем, что изначально практически любое оборудование, в том числе и GPS, было внешним, а его соединение с компьютером производилось посредством серийного кабеля, подключенного к одному из аппаратных портов. От пользователя в процессе настройки требовалось правильно подобрать номер порта и скорость трансляции данных по нему. В то время возник основной стандарт передачи данных от GPS-приемника к программе, который теперь называется NMEA-0183. Фактически данный стандарт предписывает всем разработчикам даже современнейшей аппаратуры и программного обеспечения обмениваться данными посредством COM-портов. И все это в условиях того, что на современных компьютерах, а также на КПК, уже давно главным является стандарт USB. А еще одна особенность состоит в том, что в последнее время GPS-приемники все чаще стали устанавливать непосредственно внутрь корпуса устройства, то есть между ним и основным девайсом вообще отсутствует какой-либо соединительный кабель.

Виртуальные КОМ-порты

Выход из положения был придуман, а именно разработаны «виртуальные» COM-порты. Получается, что внутреннее устройство КПК, к примеру, GPS-приемник, программно имитируется в виде COM-порта, при этом в аппаратном плане таковым не являясь. При этом программе, которая рассчитана на сопряжение посредством подобного стандарта, нет разницы, как он реализован. Тут допускается наличие виртуальной имитации, а не обязательное присутствие аппаратной реализации. Так и удается обеспечить совместимость GPS-программ старого образца с современным оборудованием.

Внесенные изменения

При этом управление COM-портом существенно не изменилось. Пользователь по старинке должен производить сложную настройку чуть ли не вручную. Однако современный COM-порт представляет собой уже не то громоздкое приспособление, размещавшееся на задней панели системного блока, а совсем иное устройство. И тут все дело в том, что с программной точки зрения все их реализации выглядят безлико, то есть нет разницы между виртуальными и реальными портами. Для программного обеспечения порты различаются только номерами, которые им присвоены производителями КПК на совершенно случайной основе. К примеру, приемник от ASUS обычно находится на COM5, а PocketLOOX 560 показывает приемник на COM8. Получается, что программа, которая желает получать от GPS-приемника данные, не имеет изначально никакой достоверной информации об условном номере, под которым фигурирует порт, прописанный соответствующим для приемника на данном КПК.

Как все это работает?

При том, что среди всех имеющихся COM-портов можно провести автоматический поиск подходящего, процедура такого опроса является довольно ненадежной и достаточно громоздкой. Связано это с тем, что устройства, отображаемые в системе в качестве COM-портов, могут быть довольно разнообразными и не иметь отношения к GPS, они могут совершенно непредсказуемо ответить на такой опрос. К примеру, на КПК бывают порты, сопряженные с внутренним сотовым модемом, с USB, с инфракрасным портом, а также с иными элементами. Обращение к ним программы, предназначенной для работы с конкретным приспособлением, может привести к совершенно непредсказуемой реакции, а также к различным сбоям в работе, что часто становится причиной зависания КПК. Именно поэтому попытка открыть COM-порт может привести к неожиданным ситуациям вплоть до включения Bluetooth или А могут быть и более непонятные случаи.

Работа COM-порта

Для COM-портов в качестве основы используется микросхема асинхронного универсального приемопередатчика. Эта микросхема существует в нескольких разновидностях: Intel 16550A, 16550, 16450, 8250. Для каждого COM-порта она содержит регистры приемника и передатчика данных, а также ряд управляющих регистров, к которым есть доступ через программы BIOS, Windows и MS DOS. У последних версий микросхемы имеется набор буферов для временного хранения передаваемых и получаемых данных. Благодаря такой возможности можно реже прерывать работу центрального процессора, а также согласовать скорость трансляции данных.

Основные параметры

Устройство COM-порта предполагает наличие таких характерных особенностей:

Базового адреса порта для ввода и вывода информации;

Номера аппаратного прерывания;

Размера одного блока информации;

Скорости, с которой передаются данные;

Режима детектирования честности;

Способа управления потоками информации;

Количества стоповых бит.

Как проверить COM-порт компьютера? На что обратить внимание?

Как уже было сказано ранее, этот тип порта представляет собой двунаправленный интерфейс для на битовом уровне последовательным способом. Отличительной характеристикой в сравнении с параллельным портом тут является передача данных бит за битом. Анатомия COM-порта такова, что на компьютере не он один использует последовательный способ передачи данных. Например, такие интерфейсы, как Ethernet или USB, тоже используют аналогичный принцип, но так сложилось исторически, что последовательным принято называть именно порт стандарта RS232.

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

В системе «Орион» интерфейс RS-232 используется для подключения пульта контроля и управления «С2000»/«С2000М» к СОМ-порту компьютера с установленным на нем АРМ «Орион»/«Орион Про».
В системах, допускающих работу под управлением АРМ «Орион»/«Орион Про» без резервирования пультом «С2000»/«С2000М» (например, в системах охранной сигнализации или контроля доступа), интерфейс RS-232 используется для подключения преобразователя интерфейса «С2000-ПИ» или «ПИ-ГР» к СОМ-порту компьютера. К преобразователю, в свою очередь, подключаются приборы системы «Орион» по интерфейсу RS-485. RS-232 имеет следующие ограничения: максимальная длина – 15 м и соединение только типа «точка-точка», т.е. непосредственно подключить несколько пультов к одному СОМ-порту нельзя.
В простейшем случае к компьютеру подключается только один пульт. Эта схема приведена на рис.

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

ВНИМАНИЕ! Во избежание гальванической связи между компьютером и приборами пульт, повторитель и приборы нельзя подключать к одному источнику питания. Питание на пульт и «С2000-ПИ» должно подаваться от отдельного источника.
Пульту должен быть присвоен сетевой адрес, и установлен режим «КОМПЬЮТЕР» для работы по интерфейсу RS-232.

С помощью преобразователей интерфейсов RS-232/RS-485 с автоматическим переключением приема/передачи (например, «С2000-ПИ») можно подключить несколько пультов к одному СОМ-порту компьютера. Один преобразователь следует подключить к СОМ-порту компьютера, остальные - к пультам по интерфейсу RS-232, а затем объединить преобразователи по интерфейсу RS-485 (см. схему на рис. 73). Кроме того, преобразователи обеспечат гальваническую изоляцию компьютера от пультов и приборов.
Для работы по интерфейсу RS-232 каждому пульту нужно задать уникальный сетевой адрес и режим «КОМПЬЮТЕР».
При использовании АРМ «Орион» к одному СОМ-порту можно подключить до 127 устройств. Либо это будет один пульт «С2000»/ «С2000М» и до 126 приборов, схема как на рисунках выше. Либо это будет несколько пультов с подключёнными приборами, как на рис.

При этом общее количество и пультов, и приборов не должно превышать 127. В такой системе все приборы и пульты должны иметь уникальные сетевые адреса от 1 до 127, т.е. адреса приборов, подключенных к разным пультам, не должны пересекаться.
При использовании АРМ «Орион Про» к каждому COM-порту можно подключить либо до 127 приборов (приборы подключаются через преобразователи интерфейсов «ПИ-ГР», «С2000-ПИ» или «C2000 USB»), либо до 127 пультов «С2000» или «С2000М». К каждому пульту при этом можно подключить до 127 приборов. При организации системы по второму варианту компьютер опрашивает не приборы, а пульты. Пульты, в свою очередь, опрашивают подключённые к ним приборы. Каждому пульту должен быть задан сетевой адрес (от 1 до 127). Адресация приборов в системе имеет 3 уровня (номер COM-порта, адрес пульта, адрес прибора), поэтому адреса приборов, подключённых к разным пультам, могут пересекаться, как и адреса пультов, подключённых к разным COM-портам компьютера. Максимальное количество устройств, подключаемых к одному компьютеру с «Оперативной задачей Орион Про», на сегодняшний день составляет 1024.
Как уже было сказано, такая схема применяется в случае, если к COM-порту нужно подключить несколько устройств. На текущий момент АРМ «Орион» поддерживает только один СОМ-порт. АРМ «Орион Про» поддерживает до 20 физических СОМ-портов и до 127 виртуальных СОМ-портов. При использовании АРМ «Орион Про» каждый пульт можно подключать к своему COM-порту (используя схему с гальванической изоляцией или без).

В настоящее время не все компьютеры имеют СОМ-порт. Для решения задачи подключения приборов системы «Орион» к компьютеру с АРМ можно применить USB-COM преобразователи, например, «USB-RS485», а также PCI-плату расширения портов. Основные достоинства данных PCI-плат:

  • возможность использовать до 8 COM-портов;
  • поддержка интерфейса RS-232/RS-485.

Специалистами компании «Болид» была протестирована плата расширения COM-портов MOXA CP 118U. Она позволяет подключать приборы по интерфейсу RS-485 напрямую к ПК с АРМ «Орион Про» (без использования преобразователя интерфейса), а также подключать несколько пультов (каждый к своему СОМ-порту).

Подключение приборов к компьютеру через пульты «С2000»/«С2000М» позволяет б|ольшую часть функций управления приборами переложить с АРМ на пульты. Здесь важно учитывать, что каждый пульт может управлять только подключёнными к нему приборами, поэтому взаимодействие приборов, подключённых к разным пультам, возможно только через АРМ. При неисправности компьютера каждый пульт будет управлять подключёнными к нему приборами в соответствие с запрограммированной в нем базой данных. То есть система распадается на несколько независимых подсистем.

Полученные от приборов сообщения сохраняются в кольцевом энергонезависимом буфере пультов, объем которого составляет 8000 событий (для «С2000М» вер.3.0х). При восстановлении работы компьютера эти сообщения будут вычитаны АРМ.

Допустим, в системе используется несколько приборов «С2000-КДЛ», релейных блоков «С2000-СП1», клавиатур «С2000-К» и блоков индикации «С2000-БИ». Причём из-за ограниченного размера базы данных пульта требуется использовать несколько пультов «С2000»/«С2000М». Каждый пульт организует взаимодействие только подключённых к нему приборов. В частности, он позволит отображать на блоках индикации состояния своих разделов, управлять этими разделами с клавиатур и с самого пульта, автоматически управлять релейными выходами своих блоков «С2000-СП1» от своих разделов. Взаимодействие приборов, подключённых к разным пультам, возможно только через АРМ. При отключении компьютера с работающим на нем АРМ эта связь нарушается. Поэтому если требуется, например, организовать релейный выход, который должен отрабатывать состояние всех шлейфов сигнализации системы, и этот выход должен работать при отключении компьютера, лучше его организовать путём монтажного объединения выходов каждой подсистемы (параллельного или последовательного, в зависимости от требуемой тактики работы выхода).

При подключении к АРМ нескольких подсистем следует использовать пульты «С2000М», так как при использовании пультов «С2000» будут следующие ограничения:

  1. Невозможно организовать централизованный контроль доступа;
  2. Управлять взятием/снятием с охраны разделов с клавиатур «С2000-К» и блока «С2000-4», прибора «С2000-КДЛ» и т.п. можно только в рамках одной подсистемы на пульте «С2000». Это означает, что с какой-либо клавиатуры «С2000-К» можно управлять взятием/снятием с охраны разделов того пульта, к которому подключена клавиатура. Управление с этой клавиатуры приборами, подключёнными к другим пультам, невозможно. Из оперативной задачи АРМ можно управлять взятием/снятием с охраны разделов всех подсистем. При использовании пульта «С2000М» первое ограничение снимается. Что касается второго, то можно управлять взятием/снятием с охраны разделов одной подсистемы с помощью всех приборов другой подсистемы, за исключением клавиатур «С2000-К». Например, используя считыватели устройств «С2000-4», «С2000-2», «С2000-КДЛ». Также можно управлять взятием/снятием с охраны разделов одной подсистемы с пульта «С2000М» другой подсистемы. Клавиатуры «С2000-К» так же, как и в первом случае, работают только в рамках своей подсистемы.

Помимо схемы, представленной на предыдущем рисунке, подключить несколько пультов «С2000М» к компьютеру с АРМ можно при помощи ЛВС и преобразователей «С2000-Ethernet».

Основными достоинствами ЛВС являются:

  • повсеместное использование сетей Ethernet;
  • высокая помехозащищенность;

Также при использовании «С2000-Ethernet» возможно объединение приборов ИСО «Орион» через глобальную сеть Internet используя VPN туннель.

Для трансляции по указной схеме необходима устойчивая связь между VPN шлюзами (зависит от характеристик выделенных каналов Internet).

В «С2000-Ethernet» имеется поддержка прямой передачи данных по ЛВС, т.е. на стороне ПК с АРМ используется только сеть Ethernet, а ПО формирует один виртуальный COM-порт для группы удаленных «C2000-Ethernet» (см. рис.). При этом повышается быстродействие и упрощается монтаж системы, т.к. на стороне АРМ нет необходимости использовать COM-порт.

Обращаем Ваше внимание на то, что развёрнутые протоколы испытаний устройств передачи данных по различным каналам связи, о которых дальше будет идти речь, с необходимыми настройками можно найти на сайте сайт в разделе «Техническая поддержка»/ «Рекомендации по применению».

Ещё одним вариантом подключения пульта «С2000М» к компьютеру с АРМ является использование волоконно-оптической линии связи и преобразователей «RS-FX-MM» (для многомодовых ВОЛС), «RS-FX-SM40» (для одномодовых ВОЛС).

Основные достоинства ВОЛС:

  • высокая помехозащищенность;
  • искро-взрывобезопасность;
  • высокая скорость передачи данных.

Компания «Болид» поставляет сертифицированные в соответствии с преобразователи информационных интерфейсов ИСО «Орион» в ВОЛС, которые могут применяться в том числе в системах АПС и пожарной автоматики. Максимальная длина передачи данных для преобразователя «RS-FX-MM» составляет 2 км, для преобразователя «RS-FX-SM40» - 40 км.

Организовать связь сетевого контроллера (компьютера с установленным АРМ «Орион»/ «Орион Про» или пульта «С2000»/«С2000М») с удаленными приборами ИСО «Орион» можно также с помощью стандартного цифрового канала связи в потоке Е1.

Основными достоинствами цифровых каналов связи являются:

  • высокая помехоустойчивость;
  • высокая степень защиты передаваемой информации;
  • высокая скорость передачи данных;
  • слабая зависимость качества передачи от длины линии связи.

Специалистами компании «Болид» была проверена работа системы «Орион» с применением мультиплексоров «ГМ-2» фирмы «Зелакс» для передачи сообщений по цифровому каналу связи в потоке Е1.

Это более новый, хотя тоже уже отмирающий способ. Так же, как LPTпоследовательныеCOMпорты тоже уже применяются все реже и безусловно в скором времени они выдут из употребления. Работать сCOMпортом значительно сложнее, чем сLPT. СтандартныйCOMпорт имеет гораздо меньше выводов. И прямое управление возможно лишь некоторыми из них. Использовать их не имеет смысла. Лучше тогда уж воспользоваться более богатым в этом смысле портомLPT. Передача информации вCOMпорте происходит всего по двум линиям. Это линияRxD(прием данных), и линияTxD(передача данных). Для передачи данных используется специальный протокол, который называетсяRS232. Большинство современных микроконтроллеров имеют встроенный интерфейс, совместимый сRS232. Это облегчает подключение. Однако есть одна трудность. Полноценный протоколRS232 предусматривает свой собственный стандарт уровней выходных и входных сигналов. Сигнал на выходеTxDCOM-порта принимает два значения: логическая единица - плюс 12В, логический ноль - минус 12В. Такой размах принят для уменьшения влияния помех. Такой же сигнал нужно подавать и на входRxD. Последовательный канал микроконтроллера поддерживает другие значения уровней сигнала. Там сигнал используются стандартные логические уровни. Логический ноль - 0В. Логическая единица – примерно +5В. Поэтому для связиCOMпорта и микроконтроллера необходимо согласовать уровни сигналов. Для этого обычно применяется специальная микросхема фирмыMAXIM. Это микросхема называетсяMAX232A. Это очень удобная в использовании микросхема. Она требует лишь одного напряжения питания: +5В. Внутри микросхема содержит два преобразователя, которые используются для получения необходимых для работы напряжений +12В и -12В.

3. Подключение при помощи usb порта

Несомненно, это самый перспективный способ подключения. В то же время и самый сложный с точки зрения программной реализации. USBпорт был специально разработан, как универсальный последовательный порт для подключения всех видов внешних периферийных устройств. При помощи этого порта к компьютеру могут подключаться внешние накопители на жестких дисках и на Флэш-памяти, джойстики, мышки, звуковые системы,WEB-камеры,MP3 плееры и даже внешниеTV-тюнеры. Действующий в настоящее время стандартUSBверсии 2.0 поддерживает передачу данных со скоростью от 1.5 Мбит/сек до 480 Мбит/сек. Сложность реализации этого способа состоит в том, что протоколUSB– это серьезный многоуровневый протокол передачи информации. Самый низкий уровень этого протокола определяет правила касающиеся формирования импульсов: длительность, размах, способ кодирования данных, методы синхронизации, методы проверки ошибок. На низком уровне так же определяется, как биты складываются в байты. Следующий, более высокий уровень касается передачи самих данных. Ведь передаются не просто байты. Из этих байтов складываются команды протоколаUSB. ПротоколUSBвысокого уровня – это набор команд, позволяющих опрашивать подключенные к порту внешние устройства, запрашивать у этих устройств информацию об их типе, названии, изготовителе, поддерживаемых режимах работы. Если вы работали сUSB, то наверно заметили, что при подключении кUSBнакопителя на жестком диске компьютер тот час же обнаружит его и в списке дисков появится еще один диск. При отключении накопителя от порта он тут же исчезнет из списка. При подключении звукового устройства, в списке звуковых устройств появится новое устройство. Так же происходит и при подключении фотоаппарата, сканера, джойстика и т.п. Все эти типы устройств портUSBраспознает автоматически потому, что в списке стандартных командUSBпротокола есть команды, позволяющие все это идентифицировать. Поэтому, устройство, подключаемое к компьютеру поUSBпорту должно уметь поддерживать весь этот протокол. Оно должно правильно отвечать на все запросы компьютера.

Но это не единственная проблема. Более серьезная проблема – слишком высокая скорость работы USBинтерфейса. Это так же накладывает определенные ограничения и дополнительные требования. Для подключения микроконтроллера к компьютеру по каналуUSBсуществует три способа. Рассмотрим их по порядку.

Вот мы и добрались до 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