3.1.1 Интерфейсы RS-232С
Интерфейсы RS-232С, RS-422 и RS-485 разработаны Ассоциацией электронной промышленности (EIA - Electronics Industries Association) и Ассоциацией промышленности средств связи (TIA - Telecommunications Industry Associastion). EIA традиционно маркировала все свои стандарты префиксом "RS" (Рекомендованный стандарт).
Широко используемый последовательный интерфейс синхронной и асинхронной передачи данных, определяемый стандартом EIA RS-232C и рекомендациями V.24 CCITT, изначально создавался для связи компьютера с терминалом. В настоящее время используется в самых различных применениях.
Интерфейс RS-232C соединяет два устройства. Линия передачи первого устройства соединяется с линией приема второго и наоборот (полный дуплекс) Для управления соединенными устройствами используется программное подтверждение (введение в поток передаваемых данных соответствующих управляющих символов). Возможна организация аппаратного подтверждения путем организации дополнительных RS-232 линий для обеспечения функций определения статуса и управления.
В компьютере интерфейс RS-232C реализован в двух исполнениях – 9-ти контактном и 25 – контактном (рис.3.1а и рис.3.1б, соответственно).

Рис. 3.1. Варианты реализации разъемов RS-232С.
Таблица 3.1.

Интерфейс RS-232C предназначен для подключения к компьютеру стандартных внешних устройств (принтера, сканера, модема, мыши и др.), а также для связи компьютеров между собой. Основными преимуществами использования RS-232C по сравнению с Centronics являются возможность передачи на значительно большие расстояния и гораздо более простой соединительный кабель. В то же время работать с ним несколько сложнее. Данные в RS-232C передаются в последовательном коде побайтно. Каждый байт обрамляется стартовым и стоповыми битами. Данные могут передаваться как в одну, так и в другую сторону (дуплексный режим).
Назначения сигналов следующие:
FG – защитное заземление (экран).
TxD – данные, передаваемые компьютером в последовательном коде (логика отрицательная).
RxD – данные, принимаемые компьютером в последовательном коде (логика отрицательная).
RTS – сигнал запроса передачи. Активен во все время передачи.
CTS – сигнал сброса (очистки) для передачи. Активен во все время передачи. Говорит о готовности приемника.
DSR – готовность данных. Используется для задания режима модема.
SG – сигнальное заземление, нулевой провод.
DCD – обнаружение несущей данных (детектирование принимаемого сигнала).
DTR – готовность выходных данных.
RI – индикатор вызова. Говорит о приеме модемом сигнала вызова по телефонной сети.
Наиболее часто используются трех - или четырехпроводная связь (для двунаправленной передачи). Схема соединения для четырехпроводной линии связи показана на рисунке 3.2.

Рис.3.2. Схема 4-проводной линии связи для RS-232C
Для двухпроводной линии связи в случае только передачи из компьютера во внешнее устройство используются сигналы SG и TxD. Все 10 сигналов интерфейса задействуются только при соединении компьютера с модемом.
Формат передаваемых данных показан на рисунке 3.3. Собственно данные (5, 6, 7 или 8 бит) сопровождаются стартовым битом, битом четности и одним или двумя стоповыми битами. Получив стартовый бит, приемник выбирает из линии биты данных через определенные интервалы времени. Очень важно, чтобы тактовые частоты приемника и передатчика были одинаковыми (допустимое расхождение - не более 10%). Скорость передачи по RS-232C может выбираться из ряда: 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 бит/с.
Все сигналы RS-232C передаются специально выбранными уровнями, обеспечивающими высокую помехоустойчивость связи (рис.3.4.). Отметим, что данные передаются в инверсном коде (логической единице соответствует низкий уровень, логическому нулю - высокий уровень).

Рис.3.3 Формат данных RS-232C

Рис.3.4 Уровни сигналов RS-232C на передающем и принимающем концах линии связи.
3.1.2 Интерфейсы RS-422 и RS-485
Интерфейс RS-232C обеспечивает сопряжение между узлами сети по принципу точка-точка. В промышленных сетях сбора технологической информации и управления технологическими объектами требуются многоточечные соединения. Для их реализации используются интерфейсы RS-422 и RS-485.
Стандарты RS-485 и RS-422 имеют много общего. RS-485, определяющий двунаправленную полудуплексную передачу данных, является единственным стандартом EIA/TIA, допускающим множественные приемники и драйверы в шинных конфигурациях. EIA/TIA-422, с другой стороны, определяет единственный однонаправленный драйвер с множественными приемниками. Элементы RS-485 обратно совместимы и взаимозаменяемы со своими двойниками из RS-422, однако драйверы RS-422 не должны использоваться в системах на основе RS-485, поскольку они не могут отказаться от управления шиной.
Дифференциальная передача сигнала в системах на основе RS-485 и RS-422 обеспечивает надежную передачу данных в присутствии шумов, а дифференциальные входы их приемников кроме того могут подавлять значительные синфазные напряжения. Однако для защиты от значительно больших уровней напряжений, которые обычно ассоциируются с электростатическим разрядом (ESD), необходимо принимать дополнительные меры.
3.1.3. Управление передачей
Управление передачей в интерфейсах RS-232C, RS-485 и RS-422 выполняется по одинаковым принципам и алгоритмам. Поэтому остановимся на рассмотрении управления обменом интерфейса RS-232C. Обмен по RS-232C осуществляется с помощью обращений к специально выделенным для этого портам COM1 (адреса 3F8h...3FFh, прерывание IRQ4), COM2 (адреса 2F8h...2FFh, прерывание IRQ3), COM3 (адреса 3F8h...3EFh, прерывание IRQ10), COM4 (адреса 2E8h...2EFh, прерывание IRQ11).
Каждый COM-порт (асинхронный адаптер в ЭВМ), реализующий RS-232С, управляется 10-ю внутренними регистрами. Обращение к регистрам производится по их адресам, называемыми портами ввода/вывода.
Регистры данных и скорости позволяют изменять скорость передачи данных в диапазоне от 110 бод до 115200 бод. С помощью управляющего регистра устанавливаются скорость передачи данных, контроль четности и длина передаваемых символов (5, 6, 7 и 8 бит). Старт передачи одиночного символа в канал связи и момент приема по линии связи входного символа определяется по изменению содержимого регистра состояния линий.
RS485 обеспечивает передачу данных со скоростью до 10 Мбит/с. Максимальная дальность зависит от скорости: при скорости 10 Мбит/с максимальная длина линии — 120 м, при скорости 100 кбит/с — 1200 м.
Количество устройств, подключаемых к одной линии интерфейса, зависит от типа примененных в устройстве приемопередатчиков. Один передатчик рассчитан на управление 32 стандартными приемниками. Выпускаются приемники со входным сопротивлением 1/2, 1/4, 1/8 от стандартного. При использовании таких приемников общее число устройств может быть увеличено соответственно: 64, 128 или 256.
Стандарт не нормирует формат информационных кадров и протокол обмена. Наиболее часто для передачи байтов данных используются те же фреймы, что и в интерфейсе RS232: стартовый бит, биты данных, бит паритета, стоповый бит.
Протоколы обмена в большинстве систем работают по принципу "ведущий" - "ведомый". Одно устройство на магистрали является ведущим (master) и инициирует обмен посылкой запросов подчиненным устройствам (slave), которые различаются логическими адресами.
Современные пользовательские ЭВМ в отличие от промышленных ЭВМ не комплектуются разъемами COM-порта. Поэтому при применении таких ЭВМ в промышленных сетях сбора и управления используется USB-интерфейс. Программирование USB-интерфейса выполняется такими же процедурами как в интерфейсах RS-232C, RS-485 и RS-422. Для перехода от USB-интерфейса к интерфейсам RS-485 и RS-422 используется специальный адаптер – преобразователь интерфейсов AC4 предназначенный для взаимного преобразования сигналов интерфейсов USB и RS485. АС4 позволяет подключать к промышленной информационной сети на базе RS485 персональный компьютер, имеющий USB-порт. Структура такой сети на примере съема значений температуры бетона и управления нагревом бетона при зимнем бетонировании показана на рис.3.5.

Рис.3.5. Структурная схема промышленной сети на RS485
Программа управления информационным каналом в сети на ПК выполняет «первичные» (управляющие) функции, а на вычислительных устройствах в технологической цепи «вторичные» (управляемые) функции. Информация от управляющей машины называется командами, а от управляемых – ответами.
ПК (управляющая) управляет звеном передачи данных (каналом). Эта станция передает кадры команд вторичным станциям и получает кадры ответа от этих станций. Если канал является многоточечным, главная станция отвечает за поддержку отдельного сеанса связи с каждой станцией, подключенной к каналу.
Вторичные станции (управляемые) работают как зависимые по отношению к первичной станции (ведущей). Они реагирует на команды, получаемые от первичной станции, в виде ответов и поддерживают только один сеанс, а именно только с первичной станцией.
3.2.1 Упpавление инфоpмационным каналом в BSC
Родоначальниками большинства канальных протоколов в различных сетях стали байт-ориентированный протокол BSC и бит-ориентированный протокол HDLC. Особенно популярны разновидности HDLC. К таким протоколам можно отнести канальные протоколы XМodem для модемной связи, протоколы IEEE 802.Х, протокол LAPB для сетей Х.25 и др.
Байт-ориентированный протокол BSC (Binary Synchronous Communication) разработан фирмой IBM в середине 60-х годов. Протокол BSC – кодозависимый протокол, то есть использует для управления обменом набор управляющих символов. Каждый переданный символ анализируется на приемной стороне, чтобы определить, является ли он управляющим символом или относится к массиву данных.
Управляющие символы, применяемые в BSC, представлены кодом ASCII. Приведем основные из управляющих символов и их код в HEX-коде:
SYN(код 16h) – синхронизирующий символ
SOH(код 01h) – начало заголовка пакета
STX(код 02h) – начало текста
ETX(код 034) – конец текста
ETB(код 17h) – конец передачи блока (заголовка)
ENQ(код 05h) – запрос
ACK(код 06h) – подтверждение
NAK(15h) – отрицательная квитанция (переспрос)
EOT(04h) – конец сеанса связи
Протокол обеспечивает передачу двух типов кадров: управляющих и информационных. В управляющих кадрах передаются управляющие и служебные символы, в информационных - сообщения (отдельные пакеты, последовательность пакетов).
Работа протокола BSC осуществляется в три фазы:
Протокол требует на каждый переданный кадр посылки квитанции(символ ACK или NAK) о результате его приема. Кадры, переданные с ошибкой, передаются повторно. Протокол определяет максимальное число повторных передач.
Передача последующего кадра возможна только тогда, когда получена положительная квитанция на прием предыдущего. Это существенно ограничивает быстродействие протокола и предъявляет высокие требования к качеству канала связи.
Так как при синхронной передаче нет стоповых и стартовых битов, отделяющих байты друг от друга, синхронизация достигается за счет того, что передатчик добавляет два или более управляющих символа, называемых символами SYN, перед каждым блоком символов. В коде ASCII символ SYN имеет двоичное значение 0010110, это несимметричное относительно начала символа значение позволяет легко разграничивать отдельные символы SYN при их последовательном приеме. Символы SYN выполняют две функции: во-первых, они обеспечивают приемнику побитную синхронизацию, во-вторых, как только битовая синхронизация достигается, они позволяют приемнику начать распознавание границ символов SYN. После того как приемник начал отделять один символ от другого, можно задавать границы начала кадра с помощью другого специального символа. Обычно в символьных протоколах для этих целей используется символ STX (Start of TeXt, ASCII 0000010). Другой символ отмечает окончание кадра – ЕТХ (End of TeXt, ASCII 0000011).
Режимы прозрачности
Способ выделения начала и конца кадра по специальным символам работает корректно только в том случае, если внутри кадра нет символов коды которых соответствуют кодам управляющих символов, например, STX и ЕТХ. Появление внутри кадра символа ETX может привести к ложному определению конца кадра. Например, при передаче с компьютера на компьютер программы, данные внутри кадра могут быть любые. Для устранения подобных ложных определений протокол BSC может работать в двух режимах - непрозрачном, в котором некоторые специальные символы внутри кадра запрещались, и прозрачном, в котором разрешалась передачи внутри кадра любых символов, в том числе и ЕТХ. Прозрачность достигалась за счет того, что перед управляющими символами всегда вставляется символ DLE (Data Link Escape). Такая процедура называется байтстаффингом (stuffing – заполнять). Символ DLE должен был предварять служебный символ. В случае если в поле данных кадра встречался символ с кодом DLE , то передатчик удваивал символ DLE, то есть порождал последовательность DLE DLE. Приемник, встретив подряд два символа DLE DLE, всегда удалял первый, но оставшийся DLE уже не рассматривал как начало управляющей последовательности. То есть, если в передаваемых данных встречалась последовательность DLE ЕТХ, она переделывалась передатчиком в DLE DLE ЕТХ, а на приемной стороне после исключения одного DLE ЕТХ оставшиеся символы DLE ЕТХ считались просто пользовательскими данными.
Запрос на обмен осуществляется посылкой последовательности DLE SOH. Получив положительную квитанцию DLE ACK, передающая сторона начинает передачу кадров. Сначала передается управляющий кадр, имеющий формат, показанный на рис.3.6а, затем после приема положительной квитанции DLE ACK передается кадр данных (рис.3.6б).

Рис.3.6. Форматы кадров BSC
Если данные передаются группой кадров, каждый из них завершается последовательностью DLE ЕТB, а последний последовательностью DLE ЕТХ. Байты BCC1 и BCC2 являются байтами контрольной суммы. Для завершения сеанса связи передается последовательность DLE EOT.
Пример процедуры передачи сообщения между двумя ЭВМ по протоколу BSC представлен на рис.3.7.

Рис.3.7. Процедура передачи сообщения
Самым распространенным в мире в промышленных сетях является протокол Modbus RTU и сеть Modbus. Популярность протокола в настоящее время объясняется, прежде всего, совместимостью с большим количеством оборудования, которое имеет встроенный протокол Modbus. Кроме того, Modbus обладает высокой достоверностью передачи данных, связанную с применением надежного метода контроля ошибок. Modbus позволяет унифицировать команды обмена благодаря стандартизации номеров (адресов) регистров и функций их чтения-записи.
Основным недостатком Modbus является сетевой обмен по типу "ведущий/ведомый", что не позволяет ведомым устройствам передавать данные по мере их появления и поэтому требует интенсивного опроса ведомых устройств ведущим.
Стандарт Modbus устанавливает последовательный протокол обмена данными между одним ведущим (контроллером или компьютером) и несколькими ведомыми (обычно модулями ввода-вывода) устройствами. Ведущее устройство выполняет роль клиента (т.е. выдает запрос серверу), а ведомое выполняет роль сервера (поставляет данные в ответ на запрос).
Протокол Modbus имеет два режима передачи: режим RTU (Remote Terminal Unit – «удаленное терминальное устройство») и режим ASCII. Стандарт предусматривает, что режим RTU в протоколе Modbus должен присутствовать обязательно, а режим ASCII является опционным. Пользователь может выбирать необходимый ему режим, но все модули, включенные в сеть Modbus, должны иметь один и тот же режим передачи.
Распространенность протокола Modbus RTU объясняется, прежде всего, совместимостью с большим количеством популярного в России оборудования, которое уже имеет протокол Modbus RTU. Кроме того, он имеет высокую достоверностью передачи данных, которая обусловлена применением надежного метода контроля ошибок передачи. Протокол позволяет унифицировать команды обмена благодаря стандартизации номеров (адресов) регистров и функций их чтения-записи. Режим RTU имеет также большую информационную пропускную способность, чем режим ASCII при той же скорости передачи битов.
Стандарт Modbus предусматривает применение физического интерфейса RS485 или RS232.
Модель OSI протокола Modbus содержит три уровня: физический, канальный и прикладной.
Табл.2.2. Модель OSI для Modbus
|
Номер уровня |
Название уровня |
Реализация |
|
7 |
Прикладной |
MODBUS Application Protocol |
|
6 |
Уровень представления |
Нет |
|
5 |
Сеансовый |
Нет |
|
4 |
Транспортный |
Нет |
|
3 |
Сетевой |
Нет |
|
2 |
Канальный |
Протокол "Ведущий.ведомый" |
|
1 |
Физический |
RS485 или RS232 |
Протокол Modbus предполагает, что только одно ведущее устройство (контроллер) и до 247 ведомых (модулей ввода-вывода) могут быть объединены в промышленную сеть. Обмен данными всегда инициируется ведущим устройством. Ведомые устройства никогда не начинают передачу данных, пока не получат запрос от ведущего. Ведомые устройства также не могут обмениваться данными друг с другом. Поэтому в любой момент времени в сети Modbus может происходить только один акт обмена. Адреса с 1 по 247 являются адресами протокола устройств в сети. Адреса с 248 по 255 являются зарезервированными. В сети не должно быть устройств с одинаковыми адресами.
В протоколе Modbus RTU сообщение начинает восприниматься как новое после паузы (тишины) на шине длительностью не менее 3,5 символов (14 бит), т.е. величина паузы в секундах будет различной в зависимости от скорости передачи. Формат кадра показан на рисунке 2.9.

Рис.3.8. Формат кадра протокола Modbus RTU
Поле «Адрес» всегда содержит только адрес ведомого устройства, даже в ответах на команду, посланную ведущим устройством. Благодаря этому ведущее устройство знает, от какого модуля пришел ответ.
Поле «Код функции» говорит модулю о том, какое действие нужно выполнить. Примеры кодов функций протокола Modbus RTU:
• чтение дискретного вывода – 0x01
• чтение дискретного ввода – 0x02
• чтение аналогового вывода – 0x03
• чтение аналогового ввода – 0x04
• запись дискретного вывода – 0x05
• запись аналогового вывода – 0x06
• запись нескольких дискретных выводов – 0x0F
• запись нескольких аналоговых выводов – 0x10.
Подробный список команд можно посмотреть в формате pdf в [https://ipc2u.ru/articles/prostye-resheniya/modbus-rtu/ Просто о Modbus RTU с подробным описанием и примерами].
Поле «Данные» может содержать произвольное количество байт. В нем может содержаться информация о параметрах, используемых в запросах контроллера или ответах модуля.
Например, если код функции указывает, что необходимо считать данные из группы регистров устройства ввода (код функции 03 hex), то поле данных содержит адрес начального регистра и количество регистров. Если ведущее устройство посылает команду записи данных в группу регистров (код функции 10 hex), то поле данных должно содержать адрес начального регистра, количество регистров, количество байтов данных и данные для записи в регистр. Конкретное содержание поля данных устанавливается стандартом для каждой функции отдельно.
Поле «Контрольная сумма» содержит контрольную сумму длиной 2 байта. Контрольная сумма — некоторое значение, рассчитанное по набору данных путём применения определённого алгоритма и используемое для проверки целостности данных при их передаче или хранении.
В протоколе Modbus RTU используется алгоритм вычисления контрольной суммы CRC16.
CRC (Cyclic Redundancy Code – «Циклический избыточный код») – алгоритм расчёта контрольной суммы для передаваемого сообщения, основанный на полиномиальной арифметике.
Основная идея алгоритма CRC состоит в том, что сообщение рассматривается как одно последовательное двоичное число, которое умножается на Х16 (сдвигается влево на 16 бит), а затем делится на Х16+Х15+Х2+1, выражаемое как двоичное число (11000000000000101). Целая часть результата игнорируется, а 16-ти битный остаток (предварительно инициализированный единицами для предотвращения случая, когда все сообщение состоит из нулей) добавляется к сообщению (старшим битом вперед) как два байта контрольной суммы. Полученное сообщение, включающее CRC, затем в приемнике делится на тот же полином (Х16+Х15+Х2+1). Если ошибок не было, остаток от деления должен получится нулевым.
В 1980 году фирмы DEC, Intel и Xerox совместно разработали и опубликовали стандарт Ethernet версии II для сети, построенной на основе коаксиального кабеля, который стал последней версией фирменного стандарта Ethernet.
Все виды стандартов Ethernet (в том числе Fast Ethernet и Gigabit Ethernet) основаны на одном и том же методе использования разделяемой среды передачи данных – методе CSMA/CD (множественный доступ с проверкой несущей и обнаружением коллизий). Этот метод применяется исключительно в сетях с логической общей шиной (к которым относятся и радиосети, породившие этот метод).
Метод доступа CSMA/CD предполагает для передающей станции выполнения следующего алгоритма:
1. Если среда свободна, станция сразу же начинает передачу или ожидает в течение фиксированного интервал времени T. Интервал T обычно берется равным максимальному времени распространения сигнала из конца в конец;
2. Если среда занята, станция продолжает прослушивание до тех пор, пока среда не освободится, затем переходит к шагу 1;
3. Если в момент начала передачи станция обнаруживает, что другая станция тоже начала передачу, она задерживает передачу на случайный интервал времени. По окончании задержки станция возвращается к шагу 1
4. После окончания передачи кадра станция обязана выдержать технологическую паузу (Inter Packet Gap) в 9.6 мкс. Эта пауза, называемая также межкадровым интервалом, нужна для приведения сетевых адаптеров в исходное состояние, а также для предотвращения монопольного захвата среды одной станцией.
Кадры, передаваемые станцией, поступают на все узлы локальной сети, но только тот, кому они адресованы, принимает эти кадры и посылает подтверждение.
Стандарт IEEE 802.3 был разработан на основе кадра Ethernet, изменив ряд его характеристик. Стандарт IEEE 802.3 во многом совпадает со своим предшественником, но некоторые различия все же имеются. В частности, в стандарте IEEE 802.3 различаются уровни MAC и LLC. В оригинальном Ethernet оба эти уровня объединены в единый канальный уровень. Согласно стандарту IEEE 802, кадр технологии Ethernet – это кадр, формируемый уровнем MAC, в который должен вкладываться кадр уровня LLC. Форматы базового кадра Ethernet и пакета стандарта IEEE 802.3 показаны на рисунке 3.9а и 3.9а, соответственно:

Рис. 3.9. Формат кадра Ethernet и кадра IEEE 802.3
Поля кадра Ethernet имеют следующие характеристики.
Преамбула. Размер 8 байт. Используется для синхронизации кадра. Преамбула всегда содержит код 10101010 c чередованием единиц и нулей в первых 7-ми байтах и код 10101011 в последнем байте.
Адрес назначения (DA, destination address). Размер 6 байт. Содержит MAC-адрес станции узла ЛВС, которому предназначено сообщение. Если старший 7-ой бит в первом байте равен 0 , то первые три байта задают адрес группы, а следующие 3 байта задают локальный адрес в группе. Если же старший 7-ой бит, равен 1, то кадр адресуется всем машинам какой-либо группе. Если все биты первого байта адреса, равны 1, то кадр адресуется всем машинам всех групп и называется широковещательным адресом (broadcast).
Адрес источника(SA, source address). Размер 6 байт. Указывает MAC-адрес станции, которая посылает кадр.
Тип. Размер 2 байта. Идентифицирует тип протокола более высокого уровня. Это позволяет, множеству протоколов высокого уровня разделят ЛВС без того, чтобы вникать в содержимое пакетов друг друга. Приведем значения в шестнадцатеричной системе этого поля для некоторых распространенных сетевых протоколов: 0x0800 для IP, 0x0806 для ARP, 0x809B для AppleTalk, 0x0600 для XNS, и 0x8137 для IPX/SPX.
Данные. Это поле может иметь длину от 46 до 1500 байт и содержит данные, составляющие сообщение.
CRC – контрольная последовательность размером в 4 байта. Содержит остаток избыточной циклической суммы (cyclic redundancy checksum), вычислительный с помощью полиномов типа CRC-32.
Если не учитывать преамбулу, то видно, что сообщение Ethernet имеет длину от 64 до 1518 байт. Минимальная длина данных равна 46 байт.
В стандарте IEEE 802.3 в отличие от оригинального Ethernet выделен байт признака начала кадра с кодом 10101011.
Поле Тип заменено на поле Длина. Для кадра IEEE 802.3 в этом поле содержится выраженный в байтах размер следующего поля - поля данных (LLC Data). Если эта цифра приводит к общей длине кадра меньше 64 байт, то за полем LLC Data добавляется поле Pad. Для протокола более высокого уровня не возникает путаницы с определением типа кадра, так как для кадра IEEE 802.3 значение этого поля не может быть больше 1500 (0x05DC).
Данные (LLC Data) – поле данных, которое обрабатывается подуровнем LLC.
Набивка(Pad) – в это поле вставляются пустые символы для доведения длины пакета до минимально допустимой величины.
Длина пакета Ethernet и IEEE 802.3 находится в диапазоне от 64 до 1518 байт. Однако в стандарте IEEE 802.3 имеется возможность передачи данных длиной менее 46 байт, т.к. на канальном уровне пакет автоматически дополняется до нужного размера.