Skip to content

Генерация Modbus обвязки для ПЛК: как работает модуль

Статья про сам модуль: что он делает при запуске, какие у него настройки и в каком порядке с ним работать. Как заполнять модели и что означают столбцы — в статье Генерация Modbus обвязки для ПЛК.


Фрейм — это один запрос к устройству: с какого адреса читать, сколько регистров и какой функцией. Есть два способа задать фреймы устройству, и от способа зависит, нужен ли модуль вообще.

СпособКак выглядит в файле фреймовНужен ли модуль
Фреймы описаны заранееу каждой строки заполнены начальный адрес и количество переменныхнет, устройство собирается само
Фреймы собираются по картестроки задают только имя, функцию и тип; адрес и количество пустыеда, иначе фреймов не будет

Во втором случае файл фреймов — это заготовка: он говорит, какими бывают запросы, но не говорит, сколько их и по каким адресам. Ответ даёт карта Modbus — таблица привязки каналов к регистрам. Модуль читает карту, раскладывает регистры по фреймам и достраивает недостающее.

Что происходит при запуске

Section titled “Что происходит при запуске”

Модуль обрабатывает каждое Modbus-устройство ПЛК по очереди:

  1. Проверяет, есть ли карта. Устройства без карты пропускаются — их список модуль выводит в лог одной строкой. Это штатно: у таких устройств фреймы заданы полностью, достраивать нечего.
  2. Читает карту и сортирует строки по фрейму, затем по адресу, затем по биту. Порядок важен: соседние регистры должны попасть в один запрос.
  3. Разбирает регистры по фреймам. Если для строки карты подходящего фрейма нет, модуль создаёт его сам и пишет об этом в лог — сообщение «фрейм … будет создан автоматически» означает штатную работу, а не ошибку.
  4. Считает размер каждого фрейма — начальный адрес и количество переменных по фактическим регистрам карты.
  5. Создаёт парные фреймы на чтение для тех строк, где в файле фреймов заполнен столбец frameNameRead. Так у команд появляется возможность прочитать записанное.
  6. Разводит одноимённые фреймы, если по одному имени получилось несколько запросов с разных адресов.
  7. Генерирует ST-код обвязки и раскладывает его в каталог результатов, а затем в структуру проекта Unimod.
  8. Дополняет словарь: добавляет узлы фреймов и создаёт служебные объекты для команд — массивы предыдущих значений и объекты отслеживания изменений. Этот шаг можно отключить настройкой (см. ниже).
НастройкаПо умолчаниюЧто меняет
Генерить только обвязку входов/выходов и статусоввыключенаУпрощённая генерация: привязка регистров и статусы делаются, дополнительная обработка команд — нет. Словарь и служебные объекты команд не трогаются.
Делить фреймы по пустым адресамвыключенаРазрывы в адресах начинают новый фрейм. При адресах 1, 2, 4, 5 выключенная настройка даёт один запрос с адреса 1 на 5 регистров, включённая — два запроса по два.
В один файл STвключенаВся обвязка складывается в один файл на программу. Выключите, если нужен отдельный файл на каждый блок — тогда родительский файл будет содержать только вызовы.
Игнорировать frameNameReadвыключенаОтключает шаг 5 — парные фреймы на чтение не создаются.

Порядок работы в Атомиксе

Section titled “Порядок работы в Атомиксе”

Модуль живёт во вкладке ПЛК Конфигуратор, в списке внешних модулей.

  1. Включите общий контекст — до того, как выберете ПЛК.
  2. Запустите модуль. Если проект ещё не разобран, модуль разберёт его сам. Нажать перед этим «Парсинг объектов» тоже можно — тогда модуль воспользуется готовым разбором. На результат выбор не влияет, разница только во времени.
  3. Запустите общую генерацию. Только теперь собранные фреймы уедут в словарь, ST и конфигурацию Unimod.

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

Отдельный параметр генерации ПЛК. Пока он выключен, устройства не сохраняются для импорта в Unimod: модуль отработает, фреймы соберёт, но в списке импорта устройств не будет. Проверить просто — при включённом параметре в логе появляется генерация набора Modbus Slave.

Как проверить результат

Section titled “Как проверить результат”

Откройте Инспектор объектов, вкладка Modbus. По каждому устройству видно:

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

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