Генерация Modbus обвязки для ПЛК: как работает модуль
Статья про сам модуль: что он делает при запуске, какие у него настройки и в каком порядке с ним работать. Как заполнять модели и что означают столбцы — в статье Генерация Modbus обвязки для ПЛК.
Зачем нужен модуль
Section titled “Зачем нужен модуль”Фрейм — это один запрос к устройству: с какого адреса читать, сколько регистров и какой функцией. Есть два способа задать фреймы устройству, и от способа зависит, нужен ли модуль вообще.
| Способ | Как выглядит в файле фреймов | Нужен ли модуль |
|---|---|---|
| Фреймы описаны заранее | у каждой строки заполнены начальный адрес и количество переменных | нет, устройство собирается само |
| Фреймы собираются по карте | строки задают только имя, функцию и тип; адрес и количество пустые | да, иначе фреймов не будет |
Во втором случае файл фреймов — это заготовка: он говорит, какими бывают запросы, но не говорит, сколько их и по каким адресам. Ответ даёт карта Modbus — таблица привязки каналов к регистрам. Модуль читает карту, раскладывает регистры по фреймам и достраивает недостающее.
Что происходит при запуске
Section titled “Что происходит при запуске”Модуль обрабатывает каждое Modbus-устройство ПЛК по очереди:
- Проверяет, есть ли карта. Устройства без карты пропускаются — их список модуль выводит в лог одной строкой. Это штатно: у таких устройств фреймы заданы полностью, достраивать нечего.
- Читает карту и сортирует строки по фрейму, затем по адресу, затем по биту. Порядок важен: соседние регистры должны попасть в один запрос.
- Разбирает регистры по фреймам. Если для строки карты подходящего фрейма нет, модуль создаёт его сам и пишет об этом в лог — сообщение «фрейм … будет создан автоматически» означает штатную работу, а не ошибку.
- Считает размер каждого фрейма — начальный адрес и количество переменных по фактическим регистрам карты.
- Создаёт парные фреймы на чтение для тех строк, где в файле фреймов заполнен столбец
frameNameRead. Так у команд появляется возможность прочитать записанное. - Разводит одноимённые фреймы, если по одному имени получилось несколько запросов с разных адресов.
- Генерирует ST-код обвязки и раскладывает его в каталог результатов, а затем в структуру проекта Unimod.
- Дополняет словарь: добавляет узлы фреймов и создаёт служебные объекты для команд — массивы предыдущих значений и объекты отслеживания изменений. Этот шаг можно отключить настройкой (см. ниже).
Настройки модуля
Section titled “Настройки модуля”| Настройка | По умолчанию | Что меняет |
|---|---|---|
| Генерить только обвязку входов/выходов и статусов | выключена | Упрощённая генерация: привязка регистров и статусы делаются, дополнительная обработка команд — нет. Словарь и служебные объекты команд не трогаются. |
| Делить фреймы по пустым адресам | выключена | Разрывы в адресах начинают новый фрейм. При адресах 1, 2, 4, 5 выключенная настройка даёт один запрос с адреса 1 на 5 регистров, включённая — два запроса по два. |
| В один файл ST | включена | Вся обвязка складывается в один файл на программу. Выключите, если нужен отдельный файл на каждый блок — тогда родительский файл будет содержать только вызовы. |
| Игнорировать frameNameRead | выключена | Отключает шаг 5 — парные фреймы на чтение не создаются. |
Порядок работы в Атомиксе
Section titled “Порядок работы в Атомиксе”Модуль живёт во вкладке ПЛК Конфигуратор, в списке внешних модулей.
- Включите общий контекст — до того, как выберете ПЛК.
- Запустите модуль. Если проект ещё не разобран, модуль разберёт его сам. Нажать перед этим «Парсинг объектов» тоже можно — тогда модуль воспользуется готовым разбором. На результат выбор не влияет, разница только во времени.
- Запустите общую генерацию. Только теперь собранные фреймы уедут в словарь, ST и конфигурацию Unimod.
Модуль должен отработать до генерации: он дописывает фреймы к разбору, а генерация забирает их оттуда. Если запустить генерацию без модуля, устройство с заготовкой попадёт в конфигурацию Unimod с пустым списком запросов — и сообщений об ошибке не будет, потому что с точки зрения разбора всё прошло штатно.
Галка «Генерация Modbus»
Section titled “Галка «Генерация Modbus»”Отдельный параметр генерации ПЛК. Пока он выключен, устройства не сохраняются для импорта в Unimod: модуль отработает, фреймы соберёт, но в списке импорта устройств не будет. Проверить просто — при включённом параметре в логе появляется генерация набора Modbus Slave.
Как проверить результат
Section titled “Как проверить результат”Откройте Инспектор объектов, вкладка Modbus. По каждому устройству видно:
- откуда оно прочитано и куда ведут пути — файл фреймов и карта открываются прямо из свойств;
- сколько фреймов дожило до конца разбора;
- все фреймы, включая выброшенные, с причиной у каждого — например, «не заполнено количество переменных» или «удалён алгоритмом: размножать не по чему».
Сверху выбирается разбор: запуск модуля и кнопка парсинга дают разные разборы, и по этому списку видно, чей результат перед вами. Значок у устройства загорается только при настоящей беде разбора — не найден файл фреймов, не распознаны функция или тип, указан неизвестный алгоритм.