Общие сведения

Основные сведения об интерфейсе RS-485

Интерфейс RS-485 подразумевает использование исключительно топологии типа «шина» (топологии типа «звезда» и «кольцо» не описаны в стандарте).

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

Число Slave-устройств в сегменте сети не должно превышать 32. Сегменты могут быть соединены повторителями (например, ОВЕН АС5), но следует учитывать, что так как опрос всех устройств происходит последовательно, то время одного полного цикла опроса может значительно увеличиться. Общее ограничение числа Slave-устройств в сети для протокола Modbus247.

На первом и последнем устройстве в сети рекомендуется устанавливать согласующий резистор (терминатор) с сопротивлением 120 Ом.

Для линий связи RS-485 необходимо использовать экранированный кабель с витой парой, предназначенный для промышленного интерфейса RS-485 с волновым сопротивлением 120 Ом (например, КИПЭВ). Экран кабеля должен быть соединен с функциональной землей только в одной точке.

Некоторые устройства имеют встроенные резисторы подтяжки интерфейса RS-485. Информация и рекомендации по их использованию приведены в руководстве по эксплуатации на соответствующие приборы.

Основные сведения о протоколе Modbus

Modbus – открытый коммуникационный протокол, основанный на архитектуре Master-Slave (ведущий-ведомый). Спецификация протокола доступна на сайте Modbus Organization.

Master (мастер, ведущее устройство) является инициатором обмена и может считывать и записывать данные в Slave-устройства.

Slave (слэйв, подчиненное устройство) отвечает на запросы Master-устройства, но не может самостоятельно инициировать обмен.

Существуют две основные реализации протокола:

  • Modbus Serial для передачи данных с использованием последовательных интерфейсов RS-232/RS-485

  • Modbus TCP для передачи данных через сети TCP/IP.

Если для работы используют протокол Modbus RTU с интерфейсом RS-232/RS-485, то в сети может присутствовать только одно Master-устройство и несколько (до 247) Slave-устройств. Адрес 0 используется для широковещательной рассылки (команд записи, которую получат все Slave-устройства).

У протокола Modbus TCP нет явного ограничения на количество Master- и Slave-устройств. Кроме того, устройство может одновременно выполнять функции Master и Slave.

Запрос Master-устройства к Slave-устройству содержит следующие данные:

  • Slave ID (адрес Slave-устройства);

  • Код функции, применяемой к Slave-устройству;

  • Данные – адрес первого регистра и их количество (в случае записи – также записываемые значения);

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

Ответ Slave-устройства имеет схожую структуру.

Запрос Master-устройства представляет собой обращение к одной из областей памяти Slave-устройства с помощью определенной функции. Область памяти характеризуется типом хранящихся в ней значений (биты/регистры) и типом доступа (только чтение/чтение и запись). Стандарт Modbus определяет четыре области памяти.

Области данных протокола Modbus

Область данных

Обозначение

Тип данных

Тип доступа

Coils (Регистры флагов)

0x

BOOL

Чтение/запись

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

1x

BOOL

Только чтение

Input Registers (Регистры ввода)

3x

WORD

Только чтение

Holding Registers (Регистры хранения)

4x

WORD

Чтение/запись

Каждая область памяти состоит из определенного (зависящего от конкретного устройства) количества ячеек. Каждая ячейка имеет уникальный адрес. Для конфигурируемых устройств (таких как ТРМ, ПЧВ и т. д.) производитель предоставляет карту регистров, в которой содержится информация об адресах и типах параметров устройства. Для программируемых устройств пользователь формирует такую карту самостоятельно с помощью среды разработки. Существуют устройства, в которых сочетаются оба рассмотренных случая – у их карты регистров есть фиксированная часть, которую пользователь может дополнить в соответствии со своей задачей (но адреса ячеек не должны пересекаться).

Примечание
В некоторых устройствах области памяти наложены друг на друга (например, 0x и 4x) – т. е. к одним и тем же ячейкам памяти можно обращаться разными функциями.

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

Основные функции протокола Modbus

Код функции

Имя функции

Команда

1 (0x01)

Read Coil Status

Чтение значений из регистров флагов

2 (0x02)

Read Discrete Inputs

Чтение значений из дискретных входов

3 (0x03)

Read Holding Registers

Чтение значений из регистров хранения

4 (0x04)

Read Input Registers

Чтение значений из регистров ввода

5 (0x05)

Write Single Coil

Запись значения в один регистр флага

6 (0x06)

Write Single Register

Запись значения в один регистр хранения

15 (0x0F)

Write Multiple Coils

Запись значений в несколько регистров флагов

16 (0x10)

Write Multiple Registers

Запись значений в несколько регистров хранения

Примечание
Нельзя смешивать понятия области памяти и функции. У начинающих пользователей часто возникают проблемы при работе с Input и Holding регистрами, поскольку область памяти Holding регистров имеет обозначение 4x, а функция чтения Holding регистров – 0x03 (может интуитивно показаться, что идентификатор области памяти и код функции должны совпадать – но на практике это не так).

Запрос к Slave-устройству может быть одиночным или групповым.

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

Групповой опрос позволяет уменьшить трафик в сети и время, затрачиваемое на опрос устройства, но в некоторых случаях его нельзя применять (или можно, но с ограничениями) из-за индивидуальных особенностей устройства.

Примечание
Согласно стандарту Modbus объем данных кадра ответа не может превышать 125 регистров. Поэтому групповой запрос запрашивает ограниченное количество регистров. Для 4-байтовых переменных типа float количество аргументов не должно превышать 63.