MODBUS

Контроллеры обмениваются данными по протоколу MODBUS RTU согласно спецификации, опубликованной на сайте modbus.org.

Поддерживаются функции 1, 2, 3, 4, 5, 6, 15 и 16.

Физическое соединение контроллеров осуществляется по сети RS485, топология "шина":

Контроллер может быть запрограммирован для работы в одном из двух режимов: Slave или Master. В спецификации MODBUS эти режимы называются также Server и Client, соответственно.

Если контроллер имеет два порта RS485, то каждый из этих портов настраивается отдельно и независимо от другого порта.

Slave (ведомый, server)

В этом режиме контроллер выступает в роли сервера, который отвечает на запросы. Используйте режим Slave, например, если планируете подключать контроллер к SCADA или BMS.

В сети RS485 обычно существует несколько ведомых устройств, каждое из которых имеет уникальный сетевой номер (идентификатор, ID). Этот номер настраивается в системном меню контроллера, или при помощи программы AtomTool.

Master (ведущий, client)

В этом режиме контроллер является ведущим устройством в сети. Он посылает запросы ведомым устройствам (серверам), т.е. является для них клиентом. Режим Master используется, когда к контроллеру необходимо подключить дополнительные модули ввода/вывода, или другие устройства, которыми он должен управлять (например, частотные преобразователи).

В сети RS485 может быть только одно Master-устройство.

Если контроллер запрограммирован на работу в режиме Master, то для записи в него новой программы, он должен быть переведен в сервисный режим. Подробнее об этом написано в разделе "Запись программы".

Алгоритм работы в режиме Master

Конфигурация ведущего контроллера содержит список MODBUS-заросов. Эти запросы выполняются по очереди, начиная с первого. После выполнения последнего запроса, цикл повторяется.

Каждый запрос имеет такие параметры:

Опционально для каждого запроса можно выбрать переменную Разрешение и переменную Статус.

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

Если переменная Разрешение не выбрана, то запрос выполняется всегда.

После завершения запроса в переменную Cтатус записывается результат выполнения запроса:

В момент, когда получен правильный ответ на запрос, в Cтатус записывается 1; если произошла ошибка (таймаут, ошибка CRC, исключение), в Cтатус записывается 2. Это значение остается в переменной Cтатус до следующего завершения данного запроса. Чтобы определить завершение очередного запроса, в эту переменную следует записать 0 сразу после получения результата запроса.