Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Микропроцессорные средства автоматизации энергетических систем. Сети автоматизации

.pdf
Скачиваний:
5
Добавлен:
12.11.2023
Размер:
20.13 Mб
Скачать

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

В ASCII-режиме протокола Modbus обрамление сообщения (кадра) начинается с двоеточия (:, ASCII 3A hex) и заканчивается последовательностью «возврат каретки – перевод строки» (CR-LF, ASCII 0D и 0A hex) для обозначения конца кадра. Символ LF также служит символом синхронизации, который показывает, что передающая станция готова получить немедленный ответ.

Обратим внимание, что hex или Н – символы, следующие в тексте за шестнадцатеричными цифровыми кодами для отличия их от других буквенно-цифровых кодов.

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

Ниже показана структура (фрейм) сообщения Modbus в ре-

жиме ASCII.

Начало

Адрес

Кодфункции

Данные

Контрольная

Конец

устройства

сумма(LRC)

1 символ(:)

2 символа

2 символа

n символов

2 символа

2 символа

 

 

 

 

 

(CRLF)

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

211

имитировать работу ведущего устройства, печатая на экране ЭЛТтерминала строку символов, передаваемую ведомому устройству, и наблюдая на экране ответное сообщение последнего.

4.3.3. Структура кадра сообщения в режиме RTU

На рис. 4.4 показана структура кадра для более распространенного режима RTU.

Рис. 4.4. Формат кадра протокола Modbus RTU: PDU (Protocol Data Unit) – элемент данных протокола; ADU (Application Data Unit) – элемент данных приложения

Структура отличается компактностью: всего один байт занимает адрес ведомого устройства или адрес широковещательной передачи, один байт – код функции и два – контрольная сумма (CRC). Следует отметить, что в сообщении отсутствует последовательность, обозначающая конец кадра. В режиме RTU конец кадра отмечается паузой, равной времени передачи 3,5–4,5 символов. Максимальное по длине сообщение занимает всего 256 байт.

В режиме RTU синхронизация имеет более важное значение, чем в режиме ASCII. Специальный начальный символ отсутствует, вместо этого кадр сообщения начинается с маркерного интервала тишины, длительность которого равна времени передачи 3,5 символов при данной скорости передачи в сети. По истечении этого интервала передаются адрес устройства, код функции и собственно данные. Конец кадра отмечается маркерным интервалом тишины, равным времени передачи 3,5 символа (14 бит). Кадр должен передаваться непрерывно. Если при передаче кадра обнаружится пауза продолжительностью более 1,5 шестенадцатеричного символа (6 бит), то счи-

212

тается, что кадр содержит ошибку и должен быть отклонен принимающим модулем. Эти величины пауз должны строго соблюдаться при скорости ниже 19 200 бит/с, однако при более высокой скорости рекомендуется использовать фиксированные значения пауз – 1,75 мс и 750 мкс соответственно.

Вместо контрольной суммы LRC (Longitudinal Redundancy Check – продольный контроль по избыточности) в режиме RTU используется контрольная сумма CRC (Cyclic Redundancy Check – циклический контроль по избыточности).

Вотличие от режима ASCII, сообщения в режиме RTU не поддаются считыванию человеком. Однако сообщения в этом режиме весьма компактны и более эффективны с точки зрения их передачи. В связи с этим режим RTU является более популярным.

Символы ASCII удобнее использовать при отладке, поэтому этот режим удобен для компьютеров, программируемых на языке высокого уровня. Режим RTU подходит для компьютеров, программируемых на машинных языках.

Врежиме RTU данные передаются в виде байта, в котором чаще всего закодированы два шестнадцатеричных цифровых символа 0–F, поэтому ASCII-режим использует почти в два раза больше битов, чем RTU-режим, но декодирование и управление данными легче. К тому же в режиме RTU символы сообщения должны передаваться непрерывным потоком. В ASCII допустима задержка до 1 с между двумя соседними символами.

4.3.4. Распределение регистров Modbus

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

Первые (по времени создания) ПЛК имели дело главным образом с дискретными входными и выходными сигналами. При этом каждый дискретный вход и дискретный выход представлены в таблице

213

распределения регистров 1 битом (см. табл. 4.1). Содержимое входных регистров можно только читать, в то время как содержимое выходных регистров можно и читать, и записывать.

 

 

Таблица 4 . 1

 

Распределение адресов регистров Modbus

 

 

 

Адресарегистров

Описание

п/п

 

 

1

00001–10000

Дискретныевыходы(чтение/запись)

2

10001–20000

Дискретныевходы(чтение)

3

30001–40000

16-битовыеаналоговыевходы(чтение)

4

40001–50000

Регистрыхранения(чтение/запись)

По мере увеличения сложности ПЛК появились средства работы с аналоговыми входами-выходами (точнее с цифровыми входамивыходами ЦАП/АЦП) и средства выполнения вычислений. Регистры аналоговых входов и выходов являются 16-разрядными. Их адреса начинаются с 30001 – это адрес первого аналогового входа (только чтение, например, для ввода сигналов от барабанных переключателей). С адреса 40001 начинается диапазон универсальных регистров (чтение и запись), которые могут также служить аналоговыми выходами. В зависимости от фирмы-изготовителя ПЛК эти регистры могут быть внутренними регистрами, аналоговыми входами, аналоговыми выходами и даже дискретными входами и выходами. Однако не все функциональные коды работают с адресами этих регистров.

4.3.5. Коды функций

Коды функций определены в документации Modicon Modbus Reference Guide и Modbus Application Protocol Specification. Посколь-

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

В протоколе Modbus можно выделить несколько подмножеств функций (команд), приведенных в табл. 4.2.

214

 

 

Таблица 4 . 2

 

Подмножества команд Modbus

 

 

 

№п/п

Подмножествокоманд

Диапазонкодовкоманд

1

Стандартныекоманды

1–21

2

Резервдлярасширенныхфункций

22–64

3

Пользовательскиекоманды

65–119

4

Резервдлявнутреннихнужд

120–255

Набор команд протокола включает следующие функции:

чтение/запись битов и битовых последовательностей;

чтение/запись регистров;

функция диагностики;

программные функции;

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

функции сброса (Reset).

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

Одноразрядные коды функций относятся к дискретным входам и выходам, а 16-разрядные – к входным регистрам и регистрам хранения. При этом к входным регистрам применима только функция чтения, а к выходным – как чтения, так и записи. Заметим также, что имеется четкая привязка каждого кода функции к определенному диапазону адресов входов-выходов. Например, функциональный код 06 (запись одного регистра) относится только к диапазону адресов 40001–50000 и ни к какому другому. Следовательно, при описании сообщения можно указывать не абсолютный адрес входа или выхода, а задать величину смещения относительно базового адреса. Таким образом, в данном случае вместо адреса 40001 мы указываем просто 0000.

215

 

 

Таблица 4 . 3

 

Коды функций, обеспечивающих доступ к данным

 

 

 

 

 

1 или

 

Диапазон

Код

Описание

адресов

16 бит

 

 

 

входов-выходов

1

1

Readcoils (чтениетекущегосостояниядискретных

00001–10000

выходов)

2

1

Readcontacts (чтениетекущегосостояниядискрет-

10001–20000

ныхвходов)

5

1

Writeasinglecoil (изменениесостояниядискретного

00001–10000

выхода)

15

1

Writemultiplecoils (изменениесостояниянесколь-

00001–10000

кихдискретныхвыходов)

3

16

Readholdingregisters (чтениерегистровхранения)

40001–50000

4

16

Readinputregisters (чтениевходныхрегистров)

30001–40000

6

16

Writesingleregister (записьодногорегистра)

40001–50000

16

16

Writemultipleregisters (записьнесколькихрегистров)

40001–50000

22

16

Maskwriteregister (маскированнаязаписьрегистра)

40001–50000

23

16

Read/writemultipleregisters (чтение/запись

40001–50000

нескольких регистров)

24

16

Read FIFO queue (чтениесодержимогоочередиFIFO)

40001–50000

Один из наиболее запутанных аспектов протокола Modbus касается ссылок на адреса входов-выходов. При разработке протокола компания Modicon приняла решение нумеровать физические координаты точек, входящих в тот или иной диапазон, начиная с нуля, а не с единицы. Дискретный выход 1 адресуется в сообщении как ячейка 0000, а не 00001. Дискретный вход 1 адресуется как ячейка 0000, а не 10001. То же самое относится и к регистру хранения 1, которому поставлена в соответствие ячейка 40001; его адрес записывается в виде 0000.

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

216

рядного двоичного слова и при просмотре реального Modbus-сооб- щения отображается соответствующим шестнадцатеричным числом, а в таблице распределения регистров Modbus все адреса даются в виде десятичных чисел. Таким образом, регистру 40016 соответствует число 0х000F, которое является шестнадцатеричным представлением разности 40016 – 40001.

Если обратиться к десятичным диапазонам адресов входоввыходов в табл. 2.4, то шестнадцатеричное представление разности укладывается для всех диапазонов в величину 00–FF, т.е. в 1 байт.

На первый взгляд, все кажется запутанным, но на самом деле это важно только для специалистов, которые занимаются написанием драйверов для систем с протоколом Modbus.

4.3.6. Содержание полей данных

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

Например, если главный запрашивает у подчиненного прочитать группу регистров (код функции – 03), поле данных содержит адрес начального регистра и количество регистров. Если главный хочет записать группу регистров (код функции – 10 hex), поле данных содержит адрес начального регистра, количество регистров, счетчик количества байтов данных и данные для записи в регистры.

Поле данных может не существовать (иметь нулевую длину) в определенных типах сообщений.

4.3.7. Описание форматов команд

Сообщения с номерами функций 1–6, 15 и 16 (см. табл. 4.3) ссылаются на конкретные доступные переменные программируемого контроллера. Функции 1, 5 и 15 ссылаются на логиче-

217

ские ячейки (0ХХХ (Х)), функция 2 – на дискретные входы (1ХХХ (Х)), функция 4 – на входные регистры (3ХХХ (Х)), функции 3, 6 и 16 – на внутренние регистры (4ХХХ (Х)). Все адреса ссылок в сообщениях Modbus индексируются с нуля. Например, первый внутренний регистр в контроллере 584, будучи 40001-м, имеет адрес ссылки 0. Точно так же ячейка 00127 будет иметь адрес 0126.

Заметим, что в широковещательном режиме используются только функции 5, 6, 15 и 16.

Примеры в данном разделе демонстрируют протокол Modbus независимо от режима RTU или ASCII. Числа имеют шестнадцатеричный формат.

Пример чтения регистров 4108–4110 из SL с адресом 06 приведен ниже.

 

 

Старший

Младший

Старший

Младший

Полекон-

Адрес

Функция

байтадреса

байтадреса

байтчисла

байтчисла

трольной

 

 

1-горегистра

1-горегистра

требуемых

требуемых

суммы

 

 

регистров

регистров

 

 

 

 

 

06

03

00

6B

00

03

CRC

Это сообщение при форматировании в RTU и ASCII показано в табл. 4.4.

Функция 1. Чтение логических ячеек

Запрос. Помимо полей адреса SL и функции, сообщение требует, чтобы информационное поле содержало логический адрес первой ячейки и число ячеек, статус которых необходимо получить. Широковещательный режим не поддерживается.

Адресация позволяет получить за один запрос до 2000 логических ячеек. Однако некоторые приборы имеют ограничение на максимальное число ячеек, статус которых можно получить за один запрос. Ячейки нумеруются с нуля (ячейка 1 = 0, ячейка

2 = 1 и т.д.).

218

Таблица 4 . 4

Формат передачи при чтении регистров

ЗАПРОС

 

 

RTU

 

ASCII

Заголовок

 

 

 

:

Адрес

 

0000

 

0110

0

 

6

Функция

 

0000

 

0011

0

 

3

Начальныйадрес

H.O.

0000

 

0000

0

 

0

 

L.O.

0110

 

1011

6

 

В

Количествотребуемыхрегистров

H.O.

0000

 

0000

0

 

0

 

L.O.

0000

 

0011

0

 

3

Полеконтрольнойсуммы

 

 

СКС

8

 

9

Trailer

 

 

CR

 

LF

ОТВЕТ

 

 

RTU

 

ASCII

Заголовок

 

 

 

:

Адрес

 

0000

 

0110

0

 

6

Функция

 

0000

 

0011

0

 

3

Количествобайтданных

 

0000

 

0110

0

 

6

Данные

H.O

0000

 

0010

0

 

2

 

L.O.

0010

 

1011

2

 

B

 

H.O.

0000

 

0000

0

 

0

 

L.O.

0000

 

0000

0

 

0

 

H.O.

0000

 

0000

0

 

0

 

L.O.

0110

 

0011

6

 

3

Контрольнаясумма

 

 

CRC

6

 

1

Trailer

 

 

CR

 

LF

Длинапакета

 

11 байт

23

байта

Ниже представлен запрос на чтение логических ячеек 0020–0056 из прибора с адресом 17.

 

 

Старший

Младший

Старший

Младший

Контрольная

Адрес

Функция

байтадреса

байтадреса

байт

байтчисла

 

 

1-йячейки

1-йячейки

числаячеек

ячеек

сумма

 

 

 

11

01

00

13

00

25

СRC

Ответ. Пример ответного сообщения на предыдущий запрос представлен ниже.

219

Адрес

Функция

Количество

 

Статусячеек

 

Контрольная

байтоввполе

 

 

 

 

 

20–27

28–35

36–43

44–51

52–56

сумма

 

 

данных

 

 

 

 

 

 

11

01

05

CD

6B

B2

0E

1B

СRC

Данные в поле данных упакованы по одному биту на каждую ячейку. Ответное сообщение включает адрес SL, код функции, число байтов в поле данных, данные и контрольную сумму. Младший значащий бит первого байта поля данных содержит первую адресуемую ячейку, за которой следуют остальные. Если число ячеек не кратно восьми, то остальные биты заполняются нулями в порядке от старших битов к младшим.

Статус ячеек 20–27 равен DDh = 1101 1101. Читая слева направо, видим, что все ячейки установлены. Старшие три бита в последнем байте данных (1 Bh = 0001 1011) заполнены нулями.

Данные в ответе отражают состояние ячеек в конце рабочего цикла.

Функция 2. Чтение дискретных входов

Запрос. Функция позволяет получить состояние (вкл./выкл.) входных дискретных линий адресуемого SL. Широковещательный режим не поддерживается. В дополнение к адресу SL и номеру функции запрос требует, чтобы информационное поле содержало начальный адрес и количество требуемых линий.

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

меруются с нуля (10001 = 0, 10002 = 1 и т.д.).

Ниже представлен пример запроса на чтение дискретных вхо-

дов 10197–10218 из SL с номером 17.

 

 

Старший

Младший

Старший

Младший

 

Адрес

Функция

байтномера

байтномера

байт

байт

Контроль-

количества

количества

1-йтребуе-

1-йтребуе-

наясумма

 

 

мойячейки

мойячейки

требуемых

требуемых

 

 

 

 

 

ячеек

ячеек

 

11

02

00

С4

00

16

CRC

220

Соседние файлы в папке книги