Skip to content

Выгрузка упаковки DI в Modbus

Статья описывает назначение и базовую настройку модуля «Выгрузка упаковки DI в Modbus».

Внешний модуль Выгрузка упаковки DI в Modbus входит в библиотеку StandardModules.dll. Модуль предназначен для упаковки дискретных сигналов DI в слова типа Integer, что позволяет сократить количество передаваемых переменных по Modbus. Такой подход уменьшает объем опроса и в ряде проектов напрямую влияет на лицензионные ограничения и стоимость опроса со стороны сторонних компаний и интеграционных систем.

Внешний вид модуля в Uniplant Atomix

Section titled “Внешний вид модуля в Uniplant Atomix”

Выгрузка упаковки DI в Modbus — внешний вид в Uniplant Atomix

Внешний вид внешнего модуля «Выгрузка упаковки DI в Modbus» в интерфейсе Uniplant Atomix.

Модуль формирует:

  • ST-секции для packed DI и COIL;
  • локальные словари;
  • глобальный словарь packed discrete;
  • итоговую Modbus-карту для упакованных сигналов.

Запуск и применение результатов генерации

Section titled “Запуск и применение результатов генерации”

Запуск модуля выполняется кнопкой Play. Процесс выполнения и статус операций отображаются в логе.

Выгрузка упаковки DI в Modbus — лог выполнения

Лог выполнения модуля после запуска кнопкой Play.

Если отсутствуют обязательные входные данные или некорректны настройки, модуль завершится без сохранения файлов.

1. Используются данные предыдущей генерации Modbus-карты.

2. Выполняется подготовка packed DI с параметрами:

  • Упаковывать каждый OBJTYPE с нового слова;
  • Начальный адрес Modbus для packed DI (по умолчанию 5000).

3. При отсутствии входных данных модуль завершает работу без сохранения результатов.

Перед сохранением пути из настроек проверяются и подставляются с учетом переменных проекта ПЛК.
Если переменная не подставилась, путь используется как есть.

Сохранение POU и словарей (если включено)

Section titled “Сохранение POU и словарей (если включено)”

Шаг выполняется только при включённой настройке Сохранять POU и словарь Unimod.

1. Проверяются конфликты адресов:

  • для каждой packed-переменной проверяется, не занят ли Modbus-адрес в основной карте;
  • при конфликте пишется ошибка вида:
    «Конфликт packed Modbus-адреса: переменная … использует адрес … но он уже занят основной генерацией: …».

2. Модуль сохраняет:

  • ST-секцию DI (MbPackDi);
  • ST-секцию COIL (MbPackCoil);
  • локальные словари DI и COIL;
  • глобальный словарь packed discrete.

3. Каждый созданный файл регистрируется в Result-кнопках и логируется.

Базовые пути по умолчанию:

  • POU: %JSC%\USR\PRJ\ResultFiles\PLC\<PlcName>\Unimod\Pou\Generated\main\;
  • шаблоны локальных словарей: %JSC%\Conf\Models\System\Modbus\PackData\LocalDictionary\;
  • глобальный словарь: [UNIMOD_DICTIONARY_PACKED_PATH].

Сохранение итоговой Modbus-карты (если включено)

Section titled “Сохранение итоговой Modbus-карты (если включено)”

Шаг выполняется только при включённой настройке Сохранять итоговую Modbus-карту (по умолчанию включена).

1. Итоговая карта строится на базе основной Modbus-карты и результатов упаковки дискретных сигналов.

2. Базовый XLS-шаблон берётся из настройки Шаблон Excel для Modbus-карты (по умолчанию [MODBUS_BASE_PATH]) и резолвится через переменные ПЛК.

3. Документ сохраняется по пути из настройки Путь к итоговой Modbus-карте:

%JSC%\USR\PRJ\ResultFiles\PLC\<PlcName>\Docs\ModbusMap\ModbusMapPacked.xls

4. Путь к файлу отображается в результатах модуля и в логе.

Интеграция результатов в проект Unimod2

Section titled “Интеграция результатов в проект Unimod2”

Последовательность интеграции результатов генерации в проектные решения:

  1. Копируем глобальный словарь с переменной массива в папку проекта Unimod2 кнопкой «Копирование packed в Unimod».
  2. Открываем окно со сгенерированными секциями FBD/ST для дальнейшего импорта программ в проект Unimod2.

Последовательность интеграции результатов в Unimod2

Шаги 1-2: переход в раздел Unimod, копирование словаря («Копирование распаковки в Unimod») и открытие импорта FBD/ST.

  1. Выбираем секцию MbPackDi и выполняем импорт выделенного в проект Unimod2.
  2. Нажимаем кнопку копирования содержимого локального словаря секции в буфер обмена.

Выбор секции и импорт выделенного в Unimod2

Шаги 3-4: выбор секции (MbPackDi) и копирование содержимого локального словаря в буфер.

  1. В задачах проекта Unimod2 находим импортированную секцию и в ее локальном словаре выполняем действие «Импорт из буфера».

Импорт из буфера в локальный словарь секции Unimod2

Шаг 5: импорт из буфера в локальный словарь импортированной секции.

  1. Открываем «Глобальный словарь» и импортируем файл с именем, указанным в настройках модуля (по умолчанию — DictionaryPackModbus).
  2. Компилируем проект для проверки корректности импорта и сборки.

Файл с картой переменных и адресами Modbus

Section titled “Файл с картой переменных и адресами Modbus”

Итоговая карта сохраняется в формате XLS по шаблону базовой карты Modbus.

При формировании:

  • сохраняется структура и формат исходной карты;
  • данные основной генерации дополняются packed DI/COIL;
  • для дискретных сигналов записываются адрес регистра и номер бита.

Для быстрого доступа к карте используйте кнопку «Открыть папку документации» в разделе «Результат сборки» и перейдите к соответствующему файлу.

Быстрый доступ к файлу Modbus-карты через раздел документации

Быстрый переход к каталогу с файлом Modbus-карты через кнопку «Открыть папку документации».

Выгрузка упаковки DI в Modbus — окно настроек

Окно настроек модуля.

ПараметрОписание
Начальный адрес Modbus для packed DIСтартовый адрес packed DI (по умолчанию 5000).
Упаковывать каждый OBJTYPE с нового словаНачинать каждый ObjType с новой 16-битной границы (по умолчанию выключено).
Каталог POU для импорта в UnimodКаталог сохранения POU-файлов.
Итоговый путь к глобальному словарю UnimodПуть итогового файла глобального словаря packed discrete.
Каталог шаблонов локальных словарейКаталог шаблонов локальных словарей DI/COIL.
Путь к итоговой Modbus-картеПуть сохранения ModbusMapPacked.xls.
Шаблон Excel для Modbus-картыПуть к базовому шаблону карты ([MODBUS_BASE_PATH] по умолчанию).
Сохранять итоговую Modbus-картуВключение/отключение шага сохранения итоговой карты (true по умолчанию).
Сохранять POU и словарь UnimodВключение/отключение шага сохранения POU и словарей (true по умолчанию).

После выполнения модуль формирует:

  • переменную массива в глобальном словаре Unimod2 с назначенными Modbus-адресами;
  • программу ST для упаковки дискретных каналов в слова;
  • переменную локального словаря для созданной ST-программы;
  • Modbus-карту в формате XLSX.

В итоговой Modbus-карте для каждого упакованного дискретного сигнала указываются:

  • имя сигнала;
  • адрес регистра;
  • номер бита в слове;
  • пометка о принадлежности к packed-данным.

Пример фрагмента ST-программы:

BitToIntDi.IN0 := F0_80_020_JTI1201.Fault;
BitToIntDi.IN1 := F0_80_020_JTI1201.InvalidPV;
BitToIntDi.IN2 := F0_80_020_JTI1201_CH.Break;
BitToIntDi.IN3 := F0_80_020_JTI1201_CH.ShortCircuit;
BitToIntDi.IN4 := F0_80_020_JTI1201_CH.BadScale;
BitToIntDi.IN5 := F0_80_020_JTI1201_CH.DeadZoneAct;
BitToIntDi.IN6 := false;
BitToIntDi.IN7 := false;
BitToIntDi.IN8 := false;
BitToIntDi.IN9 := false;
BitToIntDi.IN10 := false;
BitToIntDi.IN11 := false;
BitToIntDi.IN12 := false;
BitToIntDi.IN13 := false;
BitToIntDi.IN14 := false;
BitToIntDi.IN15 := false;
BitToIntDi.IN16 := F0_80_020_JTI1202.Fault;
BitToIntDi.IN17 := F0_80_020_JTI1202.InvalidPV;
BitToIntDi.IN18 := F0_80_020_JTI1202_CH.Break;
BitToIntDi.IN19 := F0_80_020_JTI1202_CH.ShortCircuit;
BitToIntDi.IN20 := F0_80_020_JTI1202_CH.BadScale;
BitToIntDi.IN21 := F0_80_020_JTI1202_CH.DeadZoneAct;
BitToIntDi.IN22 := false;
BitToIntDi.IN23 := false;
BitToIntDi.IN24 := false;
BitToIntDi.IN25 := false;
BitToIntDi.IN26 := false;
BitToIntDi.IN27 := false;
BitToIntDi.IN28 := false;
BitToIntDi.IN29 := false;
BitToIntDi.IN30 := false;
BitToIntDi.IN31 := false;
BitToIntDi.BIT_TO_INT();
PackedDataMbDi[0] := BitToIntDi.q;

Пример фрагмента Modbus-карты (выведена часть столбцов таблицы):

ТегТип данныхАдрес регистра чтения (дес.)БитПримечание
F0_80_020_JTI1201.FaultBool50000PackedDiscrete
F0_80_020_JTI1201.InvalidPVBool50001PackedDiscrete
F0_80_020_JTI1201.BreakBool50002PackedDiscrete
F0_80_020_JTI1201.ShortCircuitBool50003PackedDiscrete
F0_80_020_JTI1201.BadScaleBool50004PackedDiscrete
F0_80_020_JTI1201.DeadZoneActBool50005PackedDiscrete
F0_80_020_JTI1202.FaultBool50010PackedDiscrete
F0_80_020_JTI1202.InvalidPVBool50011PackedDiscrete
F0_80_020_JTI1202.BreakBool50012PackedDiscrete
F0_80_020_JTI1202.ShortCircuitBool50013PackedDiscrete
F0_80_020_JTI1202.BadScaleBool50014PackedDiscrete
F0_80_020_JTI1202.DeadZoneActBool50015PackedDiscrete

← Состав библиотеки StandardModules.dll