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, 2, 3, 4, 5, 6, 15 или 16);
- Сетевой номер Slave-устройства (сервера);
- Адрес первого регистра;
- Таблица регистров - список переменных, привязанных к регистрам в данном запросе. Для функций 3, 4 и 16 максимальное количество регистров в запросе - 125.
Опционально для каждого запроса можно выбрать переменную Разрешение и переменную Статус.
Если переменная Разрешение выбрана, то запрос выполняется только если значение этой переменной равно 1 в тот момент, когда пришла очередь выполнить данный запрос.
Если подошла очередь данного запроса и Разрешение = 1, то начинается выполнение этого запроса, а в переменную Разрешение записывается 0, т.е. Разрешение сбрасывается автоматически при каждом выполнении запроса.
Если переменная Разрешение не выбрана, то запрос выполняется всегда.
После завершения запроса в переменную Cтатус записывается результат выполнения запроса:
- 1 - запрос выполнен успешно;
- 2 - произошла ошибка при выполнении запроса.
В момент, когда получен правильный ответ на запрос, в Cтатус записывается 1; если произошла ошибка (таймаут, ошибка CRC, исключение), в Cтатус записывается 2.
Это значение остается в переменной Cтатус до следующего завершения данного запроса. Чтобы определить завершение очередного запроса, в эту переменную следует записать 0 сразу после получения результата запроса.