Начальная

Windows Commander

Far
WinNavigator
Frigate
Norton Commander
WinNC
Dos Navigator
Servant Salamander
Turbo Browser

Winamp, Skins, Plugins
Необходимые Утилиты
Текстовые редакторы
Юмор

File managers and best utilites

Введение в протокол Modbus. Реферат протокол modbus


Реферат modbus-tcp

скачать

Реферат на тему:

План:

    Введение
  • 1 История
  • 2 Стандарт MODBUS
    • 2.1 Специфическая терминология
    • 2.2 Состав стандарта
    • 2.3 Достоинства стандарта
    • 2.4 Недостатки стандарта
  • 3 Введение
  • 4 Категории кодов функций
  • 5 Модель данных
  • 6 Стандартные функции протокола Modbus
    • 6.1 Чтение данных
    • 6.2 Запись одного значения
    • 6.3 Запись нескольких значений
  • 7 Контроль ошибок в протоколе Modbus RTU
    • 7.1 RTU фрейм
    • 7.2 Логические ошибки
      • 7.2.1 Стандартные коды ошибок
  • Примечания
  • 10 Утилиты

Введение

Modbus — открытый коммуникационный протокол, основанный на архитектуре «клиент-сервер». Широко применяется в промышленности для организации связи между электронными устройствами. Может использовать для передачи данных через последовательные линии связи RS-485, RS-422, RS-232, а также сети TCP/IP (Modbus TCP).

Не следует путать MODBUS и MODBUS Plus. MODBUS Plus - проприетарный протокол принадлежащий Schneider Electric. Физический уровень уникальный, похож на Ethernet 10BASE-T, полудуплекс по одной витой паре, скорость 1Мбит/с. Транспортный протокол - HDLC, поверх которого специфицировано расширение для передачи MODBUS PDU.

1. История

Modbus был разработан компанией Modicon (в настоящее время принадлежит Schneider Electric) для использования в её контроллерах с программируемой логикой. Впервые спецификация протокола была опубликована в 1979 году.[1] Это был открытый стандарт, описывающий формат сообщений и способы их передачи в сети состоящей из различных электронных устройств.

Первоначально контроллеры MODICON использовали последовательный интерфейс RS-232.[1] Позднее стал применяться интерфейс RS-485, так как он обеспечивает более высокую надёжность, позволяет использовать более длинные линии связи и подключать к одной линии несколько устройств.

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

2. Стандарт MODBUS

В настоящее время развитием Modbus занимается некоммерческая организация Modbus-IDA[2].

2.1. Специфическая терминология

  • PDU (Protocol Data Unit) - общая для всех физических уровней часть пакета MODBUS. Включает в себя код функции и данные пакета.
  • ADU (Application Data Unit) - полный пакет MODBUS. Включает в себя специфичную для физического уровня часть пакета и PDU.

MODBUS специфицирует 4 типа данных:

  • Discrete Inputs - однобитовый тип, доступен только на чтение.
  • Coils - однобитовый тип, доступен на чтение и на запись.
  • Input Registers - 16-битовый беззнаковый тип, доступен только на чтение.
  • Holding Registers - 16-битовый беззнаковый тип, доступен на чтение и на запись.

2.2. Состав стандарта

Стандарты MODBUS состоят из 3 частей:

  • Документ Modbus Application Protocol содержит спецификацию прикладного уровня сетевой модели OSI:
    • Элементарный пакет протокола, так называемый PDU (Protocol Data Unit), он един для всех физических уровней. PDU упаковывается в индивидуальный для каждого транспорта application data unit (ADU).
    • Коды функций и состав PDU для каждого кода.
  • Документ Modbus over serial line содержит спецификацию канального и физического уровней сетевой модели OSI для физических уровней RS485 и RS232. В принципе может использоваться любой физический уровень основанный на асинхронном приемопередатчике.
  • Документ MODBUS Messaging on TCP/IP Implementation Guide содержит спецификацию ADU для транспорта через TCP/IP стек.

2.3. Достоинства стандарта

Основные достоинства стандарта - открытость и массовость. Огромное количество датчиков и исполнительных устройств выпущено промышленностью. Практически все промышленные системы контроля и управления имеют программные драйвера для работы с MODBUS сетями.

2.4. Недостатки стандарта

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

  • Стандарт специфицирует метод передачи только двух типов данных. Отсутствие четкого указания в стандарте привело к тому что с другими типами данных сторонние производители МОДБАС-решений поступали по своему усмотрению. Разброд де-факто в этом вопросе не позволил впоследствии сделать уточнения в официальном документе: это вызвало бы всплеск недовольства производителей и возможную войну форматов.
  • Стандарт не позволяет никакой оперативной сигнализации от конечного устройства к мастеру в случае необходимости (прерывания). Нужно ждать своей очереди в опросе. Это существенно ограничивает применимость МОДБАС-решений в системах управления реального времени.
  • Стандарт не позволяет конечным устройствам обмениваться фиксированными данными друг с другом без участия мастера. Это существенно ограничивает применимость МОДБАС-решений в системах регулирования реального времени.

3. Введение

Контроллеры на шине Modbus взаимодействуют, используя клиент-серверную модель, основанную на транзакциях, состоящих из запроса и ответа.

Обычно в сети есть только один клиент, так называемое, «главное» (англ. master) устройство, и несколько серверов — «подчиненных» (slaves) устройств. Главное устройство инициирует транзакции (передаёт запросы). Главный может адресоваться индивидуально к подчиненному или инициировать передачу широковещательного сообщения для всех подчиненных устройств. Подчиненное устройство отвечает на запрос, адресованный именно ему. При получении широковещательного запроса ответ не формируется.

Спецификация Modbus описывает структуру запросов и ответов. Их основа — элементарный пакет протокола, так называемый PDU (Protocol Data Unit). Структура PDU не зависит от типа линии связи и включает в себя код функции и поле данных. Код функции кодируется однобайтовым полем и может принимать значения в диапазоне 1…127. Диапазон значений 128…255 зарезервирован для кодов ошибок. Поле данных может быть переменной длины. Размер пакета PDU ограничен 253 байтами.

Modbus PDU номер функции данные
1 байт N < 253 (байт)

Для передачи пакета по физическим линиям связи PDU помещается в другой пакет, содержащий дополнительные поля. Этот пакет носит название ADU (Application Data Unit). Формат ADU зависит от типа линии связи.

Существуют три основных реализации протокола Modbus, две для передачи данных по последовательным линиям связи, как медным EIA/TIA-232-E (RS-232), EIA-422, EIA/TIA-485-A (RS-485), так и оптическим и радио:

  • Modbus ASCII — для обмена используются только ASCII символы. Для проверки целостности используется алгоритм en:Longitudinal redundancy check. Сообщение разделяется на столбцы с помощью символа «:» и заканчивается символами новой строки CR/LF.
  • Modbus RTU

и для передачи данных по сетям Ethernet поверх TCP/IP:

Общая структура ADU следующая (в зависимости от реализации, некоторые из полей могут отсутствовать):

адрес ведомого устройства номер функции данные блок обнаружения ошибок

где

  • адрес ведомого устройства — адрес подчинённого устройства, к которому адресован запрос. Ведомые устройства отвечают только на запросы, поступившие в их адрес. Ответ также начинается с адреса отвечающего ведомого устройства, который может изменяться от 1 до 247. Адрес 0 используется для широковещательной передачи, его распознаёт каждое устройство, адреса в диапазоне 248…255 — зарезервированы;
  • номер функции — это следующее однобайтное поле кадра. Оно говорит ведомому устройству, какие данные или выполнение какого действия требует от него ведущее устройство;
  • данные — поле содержит информацию, необходимую ведомому устройству для выполнения заданной мастером функции или содержит данные, передаваемые ведомым устройством в ответ на запрос ведущего. Длина и формат поля зависит от номера функции;
  • блок обнаружения ошибок — контрольная сумма для проверки отсутствия ошибок в кадре.

Максимальный размер ADU для последовательных сетей RS232/RS485 — 256 байт, для сетей TCP — 260 байт.

Для Modbus TCP ADU выглядит следующим образом:

ид транзакции ид протокола длина пакета адрес ведомого устройства код функции данные

где

  • ид транзакции — два байта, обычно нули
  • ид протокола — два байта, нули
  • длина пакета — два байта, старший затем младший, длина следующей за этим полем части пакета
  • адрес ведомого устройства — адрес подчинённого устройства, к которому адресован запрос. Обычно игнорируется, если соединение установлено с конкретным устройством. Может использоваться, если соединение установлено с бриджем, который выводит нас, например, в сеть RS485.

Поле контрольной суммы в Modbus TCP отсутствует.

4. Категории кодов функций

В действующей в настоящее время спецификации протокола определяются три категории кодов функций:

Стандартные команды  Их описание должно быть опубликовано и утверждено Modbus-IDA. Эта категория включает в себя как уже определенные, так и свободные в настоящее время коды. Пользовательские команды  Два диапазона кодов (от 65 до 72 и от 100 до 110), для которых пользователь может реализовать произвольную функцию. При этом не гарантируется, что какое-то другое устройство не будет использовать тот же самый код для выполнения другой функции. Зарезервированные  В эту категорию входят коды функций, не являющиеся стандартными, но уже используемые в устройствах, производимых различными компаниями. Это коды 9, 10, 13, 14, 41, 42, 90, 91, 125, 126 и 127.

5. Модель данных

Одно из типичных применений протокола — чтение и запись данных в регистры контроллеров. Спецификация протокола определяет четыре таблицы данных:

Таблица Тип элемента Тип доступа Дискретные входы (Discrete Inputs) Регистры флагов (Coils) Регистры ввода (Input Registers) Регистры хранения (Holding Registers)
один бит только чтение
один бит чтение и запись
16-битное слово только чтение
16-битное слово чтение и запись

Доступ к элементам в каждой таблице осуществляется с помощью 16-битного адреса, первой ячейке соответствует адрес 0. Таким образом, каждая таблица может содержать до 65536 элементов. Спецификация не определяет, что физически должны представлять собой элементы таблиц и по каким внутренним адресам устройства они должны быть доступны. Например, допустимо организовать перекрывающиеся таблицы, В этом случае команды работающие с дискретными данными и с 16-битными регистрами будут фактически обращаться к одним и тем же данным.

Следует отметить, что со способом адресации данных связана определённая путаница. Modbus был первоначально разработан для контроллеров Modicon. В этих контроллерах для каждой из таблиц использовалась специальная нумерация. Например, первому регистру ввода соответствовал номер ячейки 30001, а первому регистру хранения — 40001. Таким образом, регистру хранения с адресом 107 в команде Modbus соответствовал регистр № 40108 контроллера. Хотя такое соответствие адресов больше не является частью стандарта, некоторые программные пакеты могут автоматически «корректировать» вводимые пользователем адреса, например, вычитая 40001 из адреса регистра хранения.

6. Стандартные функции протокола Modbus

PDU запроса и ответа для стандартных функций номерфункции запрос/ответ 1 (0x01) 2 (0x02) 3 (0x03) 4 (0x04) 5 (0x05) 6 (0x06) 15 (0x0F) 16 (0x10)
A1 A0 Q1 Q0
N D (N байт)
A1 A0 Q1 Q0
N D (N байт)
A1 A0 Q1 Q0
N D (N байт)
A1 A0 Q1 Q0
N D (N байт)
A1 A0 D1 D0
A1 A0 D1 D0
A1 A0 D1 D0
A1 A0 D1 D0
A1 A0 Q1 Q0 N D (N байт)
A1 A0 Q1 Q0
A1 A0 Q1 Q0 N D (N байт)
A1 A0 Q1 Q0
  • A1 и A0 — адрес элемента,
  • Q1 и Q0 — количество элементов,
  • N — количество байт данных
  • D — данные

6.1. Чтение данных

Для чтения значений из перечисленных выше таблиц данных используются функции с кодами 1—4 (шестнадцатеричные значения 0x01—0x04):

  • 1 (0x01) — чтение значений из нескольких регистров флагов (Read Coil Status)
  • 2 (0x02) — чтение значений из нескольких дискретных входов (Read Discrete Inputs)
  • 4 (0x04) — чтение значений из нескольких регистров хранения (Read Holding Registers)
  • 3 (0x03) — чтение значений из нескольких регистров ввода (Read Input Registers)

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

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

Значения регистров хранения и регистров ввода передаются начиная с указанного адреса, по два байта на регистр, старший байт каждого регистра передаётся первым:

байт 1 байт 2 байт 3 байт 4 … байт N-1 байт N
RA,1 RA,0 RA+1,1 RA+1,0 RA+Q-1,1 RA+Q-1,0

Значения флагов и дискретных входов передаются в упакованном виде: по одному биту на флаг. Единица означает включённое состояние, ноль — выключенное. Значения запрошенных флагов заполняют сначала первый байт, начиная с младшего бита, затем следующие байты, также от младшего бита к старшим. Младший бит первого байта данных содержит значение флага, указанного в поле «адрес». Если запрошено количество флагов, не кратное восьми, то значения лишних битов заполняются нулями:

байт 1 … байт N
FA+7 FA+6 FA+5 FA+4 FA+3 FA+2 FA+1 FA 0 0 FA+Q-1 FA+Q-2

6.2. Запись одного значения

  • 5 (0x05) — запись значения одного флага (Force Single Coil)
  • 6 (0x06) — запись значения в один регистр хранения (Preset Single Register)

Команда состоит из адреса элемента (2 байта) и устанавливаемого значения (2 байта).

Для регистра хранения значение является просто 16-битным словом.

Для флагов значение 0xFF00 означает включённое состояние, 0x0000 — выключенное, другие значения недопустимы.

Если команда выполнена успешно, ведомое устройство возвращает копию запроса.

6.3. Запись нескольких значений

  • 15 (0x0F) — запись значений в несколько регистров флагов (Force Multiple Coils)
  • 16 (0x10) — запись значений в несколько регистров хранения (Preset Multiple Registers)

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

Ответ состоит из начального адреса и количества изменённых элементов.

Ниже приведён пример команды ведущего устройства и ответа ведомого (для Modbus RTU).

Направление передачи 00 адрес подчиненного устройства 01 номер функции 02 Адрес ст. байт 03 Адрес мл. байт 04 Количество флагов ст. байт 05 Количество флагов мл. байт 06 Количество байт данных 07 Данные (значения для флагов биты 0-7) 08 Данные (значения для флагов биты 8-15) 09 CRC мл. байт 0A CRC ст. байт

Master→Slave

0x01

0x0F

0x00

0x13

0x00

0x0A

0x02

0xCD

0x01

0x72

0xCB

Направление передачи 00 адрес подчиненного устройства 01 номер функции 02 Адрес ст. байт 03 Адрес мл. байт 04 Количество флагов ст. байт 05 Количество флагов мл. байт 05 CRC мл. байт 06 CRC ст. байт

Slave→Master

0x01

0x0F

0x00

0x13

0x00

0x0A

0x24

0x09

7. Контроль ошибок в протоколе Modbus RTU

Во время обмена данными могут возникать ошибки двух типов:

  • ошибки, связанные с искажениями при передаче данных;
  • логические ошибки.

Ошибки первого типа обнаруживаются при помощи фреймов символов, контроля чётности и циклической контрольной суммы CRC-16-IBM (используется число-полином = 0xA001). При этом младший байт передается первым, в отличие от байтов адреса и значения регистра в PDU

7.1. RTU фрейм

В RTU режиме сообщение должно начинаться и заканчиваться интервалом тишины — временем передачи не менее 3,5 символов при данной скорости в сети. Первым полем затем передаётся адрес устройства.

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

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

Таким образом, новое сообщение должно начинаться не раньше 3,5 интервала, так как в этом случае устанавливается ошибка.

Немного об интервалах (речь идёт о Serial Modbus RTU): при скорости 9600 и 11 битах в кадре (стартовый бит + 8 бит данных + бит контроля чётности + стоп-бит): 3.5 * 11 / 9600 = 0,00401041(6), то есть более 4 мс; 1.5 * 11 / 9600 = 0,00171875, то есть более 1 мс. Для скоростей более 19200 бод допускается использовать интервалы 1,75 и 0,75 мс соответственно.

7.2. Логические ошибки

Для сообщений об ошибках второго типа протокол Modbus RTU предусматривает, что устройства могут отсылать ответы, свидетельствующие об ошибочной ситуации. Признаком того, что ответ содержит сообщение об ошибке, является установленный старший бит кода команды. Пример кадра при выявлении ошибки ведомым устройством, в ответ на запрос приведён в (Таблица 2-1).

1. Если Slave принимает корректный запрос и может его нормально обработать, то возвращает нормальный ответ.

2. Если Slave не принимает какого-либо значения, никакого ответа не отправляется. Master диагностирует ошибку по тайм-ауту.

3. Если Slave принимает запрос, но обнаруживает ошибку (parity, LRC, or CRC), никакого ответа не отправляется. Master диагностирует ошибку по тайм-ауту.

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

Таблица 2-1. Кадр ответа (Slave→Master) при возникновении ошибки modbus RTU Направление передачи адрес подчинённого устройства номер функции данные (или код ошибки) CRC

Запрос (Master→Slave)

0x01

0x77

0xDD

0xC7 0xA9

Ответ (Slave→Master)

0x01

0xF7

0xEE

0xE6 0x7C
7.2.1. Стандартные коды ошибок
  • 01 — Принятый код функции не может быть обработан на подчиненном.
  • 02 — Адрес данных, указанный в запросе, не доступен данному подчиненному.
  • 03 — Величина, содержащаяся в поле данных запроса, является недопустимой величиной для подчиненного.
  • 04 — Невосстанавливаемая ошибка имела место, пока подчиненный пытался выполнить затребованное действие.
  • 05 — Подчиненный принял запрос и обрабатывает его, но это требует много времени. Этот ответ предохраняет главного от генерации ошибки тайм-аута.
  • 06 — Подчиненный занят обработкой команды. Главный должен повторить сообщение позже, когда подчиненный освободится.
  • 07 — Подчиненный не может выполнить программную функцию, принятую в запросе. Этот код возвращается для неудачного программного запроса, использующего функции с номерами 13 или 14. Главный должен запросить диагностическую информацию или информацию об ошибках с подчиненного.
  • 08 — Подчиненный пытается читать расширенную память, но обнаружил ошибку паритета. Главный может повторить запрос, но обычно в таких случаях требуется ремонт.

Примечания

  1. ↑ 12 Modbus interface tutorial - www.lammertbies.nl/comm/info/modbus.html
  2. About Modbus-IDA - www.modbus.org/about_us.php

wreferat.baza-referat.ru

Протокол Modbus: структура сообщения

Рейтинг@Mail.ru

Структура сообщения протокола Modbus имеет следующий вид:

где:

  1. адрес ведомого устройства – это адрес устройства, которому адресовано данное сообщение протокола Modbus. Устройства отвечают только на те сообщения, которые адресованы именно им. Ответ начинается с адреса ведомого устройства. Адрес изменяется в пределах 1…247. Адрес 0 в сообщении протокола Modbus зарезервирован под широковещательные сообщения, 248..255 – зарезервированные адреса.
  2. номер функции – 1 байт данных.
  3. данные – это поле содержит информацию о функции, которую нужно выполнить, либо данные, которые ведомое устройство посылает мастеру протокола Modbus.
  4. блок обнаружения ошибок (CRC) – контрольная сумма, которая вычисляется со всех предыдущих байт путем алгоритма циклического сдвига и побитового исключения.

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

Рассмотрим основные стандартные функции протокола Modbus по их кодам (в десятичном и шестнадцатеричном формате):• 1 (0х01) – чтение нескольких дискретных выходов• 2 (0х02) — чтение нескольких дискретных входов• 3 (0х03) — чтение нескольких промежуточных регистров или аналоговых выходов• 4 (0х04) – чтение нескольких аналоговых входовЕсли, например, количество дискретных входов, которые сформированы в запросе, не кратно восьми, то количество байт значений округляется в большую сторону и, соответственно, для получения, например, значений 15 дискретных входов, это количество будет равно двум байтам.Перед данными сообщения Modbus передается один байт, значение которого — количество байт данных.• 5 (0x05) — запись значения одного дискретного выхода• 6 (0x06) — запись значения одного аналогового выхода или регистраКоманда Modbus состоит из адреса и собственно значения (2 байта). Нормальный ответ – повтор запроса протокола Modbus.• 15 (0x0F) — запись значений в нескольких дискретных выходов• 16 (0x10) — запись значений нескольких аналоговых выходов или регистровОтвет состоит из начального адреса регистра и количества измененных значений.Пример запроса/ответа протокола Modbus:

Ошибки при передаче делятся на 2 типа – искажение при передаче и логические. Искажение отслеживается по времени «тишины». Нормальное время между сообщениями – время, необходимое на передачу 3,5 символов. Если во время передачи сообщения протокола Modbus возникла пауза длинной более 1,5 символа, пакет отбрасывается.

Логические ошибки протокола Modbus возникают, если slave не может принять сообщение вообще, либо принимает его, но выдает ошибку. В таком случае ошибка диагностируется по тайм-ауту. Slave принимает запрос, но не может его обработать (к примеру, обращение к несуществующему адресу) – в таком случае отсылается сообщение об ошибке.

Пример сообщения Modbus об ошибке на запрос:

Стандартные коды ошибок протокола Modbus:• 01 —Функция не может быть обработана на slave.• 02 — Несуществующий адрес данных.• 03 — Значение в поле данных для запроса, является недопустимым для salve.• 04 — Произошла необратимая ошибка, пока slave пытался выполнить действие.• 05 — Slave принял запрос и начал обрабатывать его, но на это потребуется время. Этот код предохраняет master от выдачи ошибки тайм-аута.• 06 — Slave занят обработкой команды.Master должен повторить посылку сообщения позже, когда slave будет свободен.• 07 —Slave не может выполнить функцию из запроса. Master должен послать запрос об диагностической информации или получить информацию об ошибках со slave.• 08 — Slave пытается считать область памяти, но при этом обнаружена ошибка паритета. Master может повторить запрос, но обычно в таких случаях требуется ремонт.

Структура кадра Modbus TCP:

где:• ID транзакции — два байта• ID протокола — два байта (четыре нуля)• длина пакета — два байта, размер последующих полей сообщения• адрес ведомого устройства — адрес slave, которому адресован запрос протокола Modbus.Особенность протокола Modbus TCP – отсутствие контрольной суммы, так как на транспортном уровне протокола TCP происходит проверка CRC. Поэтому проверка контрольной суммы в формате RTU не имеет смысла.

Tags Modbus

 

autoworks.com.ua

Введение в протокол Modbus - PDF

Транскрипт

ОБЗОР/ПРОМЫШЛЕННЫЕ СЕТИ Джордж Томас Введение в протокол Modbus Часть 1 В статье даётся описание протокола Modbus: режимы ASCII и RTU, формат и структурирование сообщений, таблица распределения

1 ОБЗОР/ПРОМЫШЛЕННЫЕ СЕТИ Джордж Томас Введение в протокол Modbus Часть 1 В статье даётся описание протокола Modbus: режимы ASCII и RTU, формат и структурирование сообщений, таблица распределения регистров и коды функций. 52 Настоящий материал является первой из двух статей, посвящённых Modbus, в которой рассматривается сам протокол. Вторая статья будет посвящена двум реализациям Modbus Serial и Modbus TCP, благодаря которым Modbus продолжает оставаться столь популярным протоколом. Что общего между технологиями ARCNET, Ethernet и Modbus? Все они были разработаны в 70-х годах прошлого века и до сих пор широко используются. Конечно, с течением времени они развивались, но основы их функционирования остались неизменными. Ведь от добра добра не ищут. Между этими тремя технологиями имеется одно основополагающее различие. И ARCNET, и Ethernet представляют собой каналы передачи данных и стандарты физического уровня без протокола, в то время как Modbus является протоколом, который может работать на нескольких типах каналов связи и физических уровнях. Задуманный первоначально как интерфейс «точка-точка» между собственными устройствами компании Modicon, данный протокол нашел применение в многоточечных и равноранговых сетях, таких как TCP/IP. Теперь область применения этого протокола уже не ограничивается оборудованием фирмы Modicon. Печатается с разрешения Contemporary Controls, Copyright: 2008 Contemporary Control Systems, Inc. КОММУНИКАЦИОННЫЙ ПРОТОКОЛ MODICON Modbus был предложен в 1979 году компанией Modicon лидером тогда только зарождавшегося рынка программируемых логических контроллеров (ПЛК). Он должен был служить протоколом реализации внутренних коммуникаций «точка-точка» между ПЛК Modicon и панелью программирования, предназначенной для ввода программ в этот ПЛК. После ряда поглощений Modicon сейчас входит в состав компании AEG Schneider Automation, которой принадлежат бренды Modicon, Square D и Telemecanique. Могло бы сложиться впечатление, что протокол Modbus давно забыт, но это не так, вы и сейчас найдете его в заголовках на сайте Modbus-IDA modbus.org. Протокол продолжает процветать, так как он достаточно прост для понимания и многие инженеры получили первый опыт работы именно с протоколом Modbus. Кроме того, он построен по принципу открытой системы, и пользоваться им можно бесплатно. Далее, область применения этого протокола не ограничивается только промышленной автоматизацией. Modbus можно встретить и во многих других областях, включая системы автоматизации зданий. Литературу по протоколу Modbus, в том числе руководство Modicon Modbus Reference Guide, выпущенное в июне 1996 г., можно найти на сайте Modbus-IDA. Если вы обратитесь к исходным текстам документации по Modbus, то заметите множество упоминаний продукции компании Modicon. Только позднее группа Modbus-IDA разработала общие стандарты, призванные облегчить внедрение данного протокола. Кроме упомянутого руководства, были выпущены еще три: Modbus Application Protocol Specification, Modbus over Serial Line Specification and Implementation Guide и Modbus Messaging on TCP/IP Implementation Guide. Все эти документы можно получить бесплатно. Протокол Modbus предназначен для использования в сетевых структурах нескольких разновидностей, в том числе в разработанной компанией Modicon одноранговой сети Modbus Plus. Прежде чем перейти к описанию более современных реализаций, которым будет посвящена вторая статья, рассмотрим сам протокол. ПЕРВОНАЧАЛЬНАЯ РЕАЛИЗАЦИЯ ПРОТОКОЛА КОМПАНИЕЙ MODICON Интересно заметить, что первоначально компания Modicon не применяла протокол Modbus в многоточечных сетях, но вместо этого использовала соединения «точка-точка» с ПЛК по интерфейсу EIA-232C (RS-232C). Modbus представляет собой протокол, построенный по принципу master-slave (ведущий-ведомый). Следует отметить, что термины «master» и «slave» употребляются до сих пор. Modbus допускает

2 наличие в структуре только одного ведущего устройства и от 1 до 247 ведомых. В качестве ведомого устройства обычно выступает ПЛК Modicon с интерфейсом EIA-232C. Роль ведущего устройства обычно играет либо панель программирования, либо главный компьютер. Следовательно, если одному главному компьютеру необходимо обмениваться информацией с четырьмя ПЛК, то нужно, чтобы этот компьютер располагал четырьмя последовательными портами. Это приводит к необходимости иметь систему с топологией звезды. Допустимая длина интерфейсного кабеля EIA-232C сравнительно невелика, поэтому если надо обеспечить связь на большие расстояния, то требуются модемы. Многоточечные сети с 2-проводными и 4-проводными интерфейсами EIA-485 (RS-485) появились значительно позднее. По правилам протокола Modbus передача сообщения может инициироваться только ведущим устройством, ведомые этого делать не могут. Поэтому если ведомое устройство отмечает такое событие, как «остановились насосы подачи воды в систему охлаждения атомного реактора», то оно не может проинформировать об этом ведущее устройство до тех пор, пока ведущее не пришлет ему запрос о том, как идут дела. Идеология протокола такова, что ведущему устройству адрес не присваивается, а ведомые пронумерованы от 1 до 247. Адрес «0» зарезервирован в качестве адреса широковещательной передачи сообщений, предназначенных всем ведомым устройствам. Такое сообщение получают все ведомые устройства, но ответ на него не предусмотрен. Адрес устройства Код функции Контрольная сумма Рис. 1. Упрощённый формат сообщения в протоколе Modbus ОБМЕН СООБЩЕНИЯМИ ПО ПРИНЦИПУ «ЗАПРОС-ОТВЕТ» Сообщения-команды, исходящие от ведущего устройства, именуются запросами, а ответные сообщения, присылаемые ведомым устройством, ответами. Формат сообщения на рис. 1 показывает упрощенную структуру как запросов, так и ответов. Ведущее устройство не имеет адреса вообще, поэтому в поле адреса всегда указывается номер ведомого устройства. Если это запрос, то он направляется ведомому устройству с указанным адресом. Если сообщение является ответом, то оно поступает от ведомого устройства с проставленным в этом поле адресом. Сообщение-запрос всегда содержит тот или иной код функции, например, код 03 это функция «Чтение регистров хранения». В этом случае ведущее устройство должно указать диапазон номеров подлежащих считыванию регистров. Ведомое устройство отвечает на такой запрос сообщением, содержащим запрошенные данные, с учётом указанного в запросе диапазона регистров. Формат сообщения одинаков для всех кодов функций, но содержимое поля данных, естественно, для разных кодов будет различным. В последнем поле каждого сообщения помещается код ошибки, формируемый устройством-отправителем, так что устройство-получатель может проверить целостность пришедшего сообщения. Описанный сценарий предполагает успешный обмен «запрос-ответ». Если же ведомое устройство хочет сообщить об ошибке или об исключительной ситуации (исключении), то оно модифицирует поле кода функции, устанавливая в старший значащий разряд кода значение «1». В поле данных помещается информация, описывающая исключение. Но и при этом ведущее устройство может выделить тот код функции, который оно посылало ведомому устройству в своем запросе. Следует отметить, что ведущее устройство может перейти к отправке следующего запроса тому же самому или другому ведомому устройству только по завершении предыдущего цикла «запрос-ответ». Это отличает данный протокол от других, таких как DeviceNet, которые могут отправлять команду, предназначенную сразу нескольким ведомым устройствам, и затем переходить в режим ожидания ответов. При этом никакого определённого порядка очерёдности ответов не существует. В протокол Modbus возможность широковещательной передачи запросов по нескольким адресам не заложена, поэтому имеет место определённая потеря времени, так как при каждом запросе со стороны ведущего устройства ведомое устройство должно не только получить сам запрос, но также его обработать и на него ответить, и после этого ведущее устройство может перейти к следующему циклу обмена. РЕЖИМЫ ASCII И RTU До сих пор всё просто, но дальше идут определённые сложности, поскольку протокол Modbus рассчитан на два режима последовательной передачи данных. Один именуется ASCII (American Standard Code for Information Interchange), а второй режимом RTU (Remote Terminal Unit). Термин RTU ведет происхождение от SCADA-систем (Supervisor Control and Data Acqusition), в которых ведущее устройство, именуемое CTU (Central Terminal Unit), обменивается информацией с несколькими удалёнными устройствами (RTU), находящимися от него на определённых расстояниях. Такая конфигурация подобна первоначальной реализации Modicon, где одно CTU обменивалось информацией с несколькими RTU в системах с топологией «звезда». Применение режимов ASCII и RTU никак не связано с топологией, но для каждого режима определена структура кадров сообщений и их синхронизация. В процессе передачи по каналам последовательной связи оба режима предусматривают асинхронную передачу, при которой имеется заранее определённая структура кадра и символы пересылаются последовательно по одному в каждый момент. Рисунок 2 иллюстрирует отправку символа при использовании асинхронной последовательной передачи данных. Каждый символ передаётся как последовательность битов, причем время, затрачиваемое на передачу одного бита, обратно пропорционально скорости передачи данных (бод). Например, при скорости 9600 бод время передачи 1 бита равно 104,1 мкс. Когда информация не передаётся, говорят о Стартовый бит Бит чётности Стоповый бит Стартовый бит Стоповый бит Стоповый бит Стартовый бит Бит чётности Стоповый бит Стартовый бит Стоповый бит Стоповый бит Рис. 2. Структура кадра для 7-битового режима ASCII и 8-битового режима RTU с битом чётности или без него 53

3 54 маркерном (marking) состоянии линии связи. Противоположное ему состояние именуется заполненным (spacing). Когда линия переходит в заполненное состояние для побитовой передачи данных, каждому символу предшествует стартовый бит, а в конце идёт один стоповый бит или больше, после этого линия возвращается в маркерное состояние. В промежутке между стартовым и стоповым битами осуществляется передача 7 (режим ASCII) или 8 (режим RTU) битов, составляющих символ, причём первым посылается младший бит (LSB). После символа идёт либо бит чётности, либо еще один стоповый бит. При этом пользователь имеет возможность выбирать один из трёх вариантов: контроль на чётность, или на нечётность, либо отсутствие контроля. В режиме ASCII передача одного символа требует передачи 10 битов, а в режиме RTU 11. При асинхронной связи символы могут пересылаться либо вплотную, либо с временным интервалом между ними. Последовательности символов, образующих сообщения, имеют различные структуры в зависимости от режима ASCII или RTU. СТРУКТУРА КАДРА СООБЩЕНИЯ В РЕЖИМЕ ASCII Семибитовый код ASCII был разработан в начале 60-х годов прошлого века как универсальный код для отображения символов английского языка для телетайпов, таких как, например, Teletype Model ASR-33. Когда на смену электромеханическим телетайпам стали приходить устройства с мониторами на ЭЛТ, стандарт ASCII был сохранён, что облегчило процесс перехода на новую технику. ASCII является принятым в США стандартом для представления символов английского языка и управляющих символов, например, CR (возврат каретки) и LF (перевод строки). Наименования этих символов сохранились со времён электромеханических телетайпов. Причиной того, что перед символом LF всегда передаётся символ CR, была необходимость дать время каретке телетайпа переместиться из конца в начало строки. Команда LF предназначалась для перемещения бумаги по вертикали, но поскольку данная операция занимает меньше времени, чем перемещение каретки, то она посылается в последовательности второй. Электромеханический телетайп не имел буфера данных, поэтому если Начало Адрес устройства Код функции вместо последовательности CRLF была передана последовательность LFCR, то печать могла начаться с середины строки, а не с её левого края, поскольку возможна ситуация, что каретка не успела вернуться в начало строки до момента получения очередного подлежащего печати символа. Последовательность команд CRLF была очень важной, когда речь шла о телетайпах, работавших на скорости 10 символов/с, но когда на смену им пришли ЭЛТ-терминалы, ситуация изменилась. Для протокола Modbus в режиме ASCII последовательность CRLF сейчас просто указывает на конец кадра. Преимуществом данного режима является то, что если в качестве ведомого устройства включить ЭЛТ-терминал, то можно увидеть на экране понятный человеку отлично отформатированный код, который послан ведущим устройством на экран ЭЛТ-терминала. На рис. 3 показана структура сообщения Modbus в режиме ASCII. Его начало обозначается символом «:», а конец последовательностью CRLF (два символа ASCII). Любой символ ASCII представляется 7 битами. Все остальные символы во всех остальных полях фрейма должны быть либо цифрами от 0 до 9, либо буквами от A до F, так как предполагается, что данные представляются в шестнадцатеричном формате, но отображаются в виде символов ASCII. Например, код функции 03 будет отображаться двумя ASCII-символами «0» и «3». То же самое относится и к содержимому поля данных. Одним из преимуществ режима ASCII является то, что он не предъявляет особо жёстких требований к синхронизации. Допускается временной промежуток между символами до 1 с только по истечении его генерируется сообщение о превышении лимита времени. Так что квалифицированная машинистка может имитировать работу ведущего устройства, печатая на экране ЭЛТ-терминала строку символов, передаваемую ведомому устройству, и наблюдая на экране ответное сообщение последнего. СТРУКТУРА КАДРА СООБЩЕНИЯ В РЕЖИМЕ RTU При работе в режиме RTU синхронизация имеет более важное значение, чем в режиме ASCII. В этом варианте специальный начальный символ отсутствует. Вместо этого кадр сообщения начинается с маркерного интервала, длительность которого равна времени передачи четырёх символов. После истечения этого интервала передаётся адрес устройства, затем код функции и собственно данные. Имеются и другие отличия от кадра сообщения в режиме ASCII, как это показано на рис. 4. Вместо контрольной суммы LRC (Longitudinal Redundancy Check продольный контроль по избыточности) в режиме RTU используется контрольная сумма CRC (Cyclic Redundancy Контрольная сумма (LRC) 1 символ (:) 2 символа 2 символа n символов 2 символа Рис. 3. Структура кадра сообщения Modbus ASCII Начало Интервал, равный времени передачи 4 символов Адрес устройства Код функции Рис. 4. Структура кадра сообщения Modbus RTU Конец 2 символа (CRLF) Check циклический контроль по избыточности). Конец кадра отмечается маркерным интервалом, равным времени передачи четырёх символов. RTU-сообщения должны посылаться в виде непрерывного потока, и появление значительного временного «зазора» между смежными символами рассматривается как прерывание в передаче сообщения. В отличие от режима ASCII сообщения в режиме RTU не поддаются считыванию человеком. Однако сообщения в этом режиме весьма компактны и более эффективны с точки зрения их передачи. Поэтому режим RTU является более популярным. ТАБЛИЦА РАСПРЕДЕЛЕНИЯ РЕГИСТРОВ MODBUS Прежде чем перейти к рассмотрению кодов функций, необходимо описать таблицу распределения регистров Modbus, показанную на рис. 5, 8 бит 8 бит n 8 бит 16 бит Контрольная сумма CRC Конец Интервал, равный времени передачи 4 символов

4 56 Адреса регистров Описание Дискретные выходы (чтение/запись) Дискретные входы (чтение) 16-битовые аналоговые входы (чтение) Регистры хранения (чтение/запись) Рис. 5. Таблица распределения регистров Modbus поскольку коды некоторых функций привязаны к конкретным диапазонам регистров. Первые по времени создания ПЛК имели дело, главным образом, с дискретными входными и дискретными выходными сигналами. При этом каждый дискретный вход и дискретный выход представлен в таблице распределения регистров 1 битом. Для ПЛК компании Modicon дискретные выходы начинаются с адреса (ячейки) 00001, а дискретные входы с адреса Каждому из них требуется 1 бит памяти. Содержимое входных регистров (в терминологии первых контроллеров они именовались contacts) можно только читать, в то время как содержимое выходных регистров (в терминологии первых ПЛК они именовались coils) можно и читать, и записывать. По мере увеличения сложности ПЛК появились средства работы с аналоговыми входами-выходами и средства выполнения вычислений. Регистры аналоговых входов и выходов являются 16-разрядными. Их адреса начинаются с это адрес первого аналогового входа (только чтение, например, для ввода сигналов от барабанных переключателей). С адреса начинается диапазон универсальных регистров (чтение и запись), которые могут служить также и аналоговыми выходами. В зависимости от фирмы-изготовителя ПЛК эти регистры могут быть внутренними регистрами, аналоговыми входами, аналоговыми выходами и даже дискретными входами и выходами. Однако не все функциональные коды работают с адресами этих регистров. КОДЫ ФУНКЦИЙ Коды функций определены в документации Modicon Modbus Reference Guide и Modbus Application Protocol Specification. Поскольку в этих документах имеются разночтения по наименованиям функций и количеству функциональных кодов, то рекомендуется пользоваться вторым из них. Несмотря на то что кодам функций отведён диапазон от 1 до 127, в качестве предназначенных для общего пользования кодов определены примерно 20 кодов. В этот же диапазон входят коды, назначение которых определяется каждым отдельным пользователем. Следует иметь в виду, что многие Modbus-устройства поддерживают только небольшие подмножества имеющихся кодов. Чтобы понять, как происходит работа с входами-выходами, мы рассмотрим только те функциональные коды, которые обеспечивают доступ к однобитовым и 16-битовым данным. Перечень рассматриваемых кодов приведён на рис. 6. Как видно из рис. 6, одноразрядные коды функций относятся к дискретным входам и выходам, а 16-разрядные к входным регистрам и регистрам хранения. При этом к входным регистрам применима только функция чтения, а к выходным как чтения, так и записи. Заметим также, что имеется чёткая привязка каждого кода функции к определённому диапазону адресов входов-выходов. Например, функциональный код 06 (запись одного регистра) относится только к диапазону адресов и ни к какому другому. Следовательно, при описании сообщения можно указывать не абсолютный адрес входа или выхода, а задать величину смещения относительно базового адреса. Таким образом, в данном случае вместо адреса мы указываем просто Код 16 1 или бит Описание 1 1 Read coils Чтение текущего состояния (ON/OFF) дискретных выходов 2 1 Read contacts Чтение текущего состояния (ON/OFF) дискретных входов 5 1 Write a single coil Изменение состояния дискретного выхода в ON или OFF 15 1 Write multiple coils Изменение состояния (ON/OFF) нескольких дискретных выходов 3 16 Read holding registers Чтение регистров хранения 4 16 Read input registers Чтение входных регистров 6 16 Write single register Запись одного регистра Write multiple registers Запись нескольких регистров Mask write register Маскированная запись регистра Read/write multiple registers Чтение/запись нескольких регистров Read FIFO queue Чтение содержимого очереди FIFO Рис. 6. Коды функций, обеспечивающие доступ к данным Диапазон адресов входов-выходов Здесь пора разъяснить один из наиболее запутанных аспектов протокола Modbus, касающийся ссылок на адреса входов-выходов. При разработке протокола компания Modicon приняла решение нумеровать физические координаты точек, входящих в тот или иной диапазон, начиная с 0, а не с 1. Дискретный выход 1 адресуется в сообщении как ячейка 0000, а не Дискретный вход 1 адресуется как ячейка 0000, а не То же самое относится и к регистру хранения 1, которому поставлена в соответствие ячейка 40001, его адрес записывается в виде Код функции всегда ассоциирован с конкретным диапазоном адресов входов-выходов, и поэтому для однозначной идентификации координат точки достаточно указать величину её смещения относительно базового адреса. Смещение записывается в виде 16-разрядного слова и при просмотре реального Modbus-сообщения отображается соответствующим шестнадцатеричным числом, а в таблице распределения регистров Modbus все адреса даются в виде десятичных чисел. Поэтому регистру соответствует чиcло 0х000F, которое является шестнадцатеричным представлением разности На первый взгляд всё кажется запутанным, но на самом деле это важно только для специалистов, которые занимаются написанием драйверов для систем с протоколом Modbus. Автор президент компании Contemporary Controls

Компания «Шатл» региональный дилер и системный интегратор в нефтегазовой отрасли (15 лет на рынке АСУ ТП) Компания «Шатл» была создана в Казани в 1993 г.

5 Компания «Шатл» региональный дилер и системный интегратор в нефтегазовой отрасли (15 лет на рынке АСУ ТП) Компания «Шатл» была создана в Казани в 1993 г. Практически сразу компания начала активную деятельность на рынке, заключив дилерское соглашение с ведущим российским дистрибьютором в сфере промышленной автоматизации компанией ПРОСОФТ. В течение 15 лет, являясь региональным дилером компании ПРОСОФТ, компания «Шатл» поставляет на рынок Республики Татарстан промышленные компьютеры, платы ввода-вывода, распределённые системы управления и сбора данных, компоненты для создания АСУ ТП и встраиваемых систем управления. Большая часть поставляемого оборудования предназначена для жёстких условий эксплуатации и работает в расширенном диапазоне температур, а также выдерживает вибрацию, удары и повышенную влажность. В программе поставок сотни тысяч наименований продукции от ведущих мировых производителей, начиная от компонентов микроэлектроники и заканчивая полнофункциональными системами. Такое разнообразие оборудования даёт заказчику полную свободу выбора для реализации своих проектов. Первая внедрённая в 1996 г. АСУ ТП резервуарных парков цеха подготовки нефти НГДУ «Заинскнефть» в ОАО «Татнефть» определила будущий профиль «Шатл» системная интеграция комплексных решений автоматизации в нефтегазовой отрасли. К основным стратегическим ориентирам развития компании относятся: применение высоконадёжных аппаратных средств автоматизации, имеющих международный сертификат ISO 9001; использование SCADA-систем как современного инструмента комплексной автоматизации; создание типовых программно-аппаратных решений автоматизации добычи, подготовки и переработки нефти и газа; творческое сотрудничество с НГДУ, нефтяными компаниями, проектными институтами, заводами-производителями нефтегазового оборудования. На сегодняшний день компания «Шатл» уже вышла на международный уровень выполнения заказов. Так, в 2003 г. заключён и успешно выполнен контракт с датской фирмой «Майерск Ойл» по автоматизации Вручение компании «Шатл» сертификата дилера ПРОСОФТ установки подготовки нефти в республике Казахстан. В настоящее время компания «Шатл» продолжает активно участвовать в международных тендерах. В целом за период с 1995 по 2008 годы было реализовано более 80 проектов по автоматизации. К примеру, в 2005 г. совместно с ОАО «НИИ точной механики» и компанией ПРОСОФТ завершён крупный проект по созданию Комплексной автоматизированной системы диспетчерского управления электромеханическими устройствами и устройствами электроснабжения пяти станций Казанского метрополитена. В настоящее время в компании «Шатл» работают более 50 сотрудников это монтажники, технологи, КИПовцы, электронщики, программисты, проектировщики и менеджеры. Компания обладает всеми необходимыми лицензиями по проектированию, поставке, монтажу, пусконаладке КИПиА, контроллерного оборудования, АРМ оператора и АСУ ТП в целом. В 2006 г. компания «Шатл» была сертифицирована согласно международному стандарту ISO 9001:2000. Обладая всеми необходимыми лицензиями, мощной базой программно-аппаратных средств и богатым опытом разработки и внедрения, компания «Шатл» готова эффективно выполнить проекты по автоматизации «под ключ» промышленных объектов в нефтегазовой отрасли. Ежедневная товарищеская поддержка коллег из компании ПРОСОФТ, опыт продвижения программно-аппаратных средств промышленной автоматизации и деятельность в качестве системного интегратора позволяет компании «Шатл» успешно развиваться и уверенно смотреть в будущее. Телефон/факс: (843)

docplayer.ru


Смотрите также

 

..:::Новинки:::..

Windows Commander 5.11 Свежая версия.

Новая версия
IrfanView 3.75 (рус)

Обновление текстового редактора TextEd, уже 1.75a

System mechanic 3.7f
Новая версия

Обновление плагинов для WC, смотрим :-)

Весь Winamp
Посетите новый сайт.

WinRaR 3.00
Релиз уже здесь

PowerDesk 4.0 free
Просто - напросто сильный upgrade проводника.

..:::Счетчики:::..

 

     

 

 

.