Перейти к основному содержимому

Подприложения (Subapplications)

Источник

Основано на официальной документации Eclipse 4diac, лицензия EPL-2.0.

Subapplication — механизм модульной декомпозиции в IEC 61499. Подприложение инкапсулирует часть FB-сети в отдельный блок с собственным интерфейсом, аналогично Composite FB, но с важным отличием: FB внутри подприложения можно маппить на разные устройства и ресурсы.

Subapplication vs Composite FB

СвойствоComposite FB (CFB)Subapplication
Инкапсуляция FB-сети
Собственный интерфейс
Маппинг на разные устройства❌ Весь CFB — на одно устройство✅ Каждый FB — на своё
Многократное использованиеЧерез Type LibraryЧерез копирование
ТипизацияНовый тип FBЭкземпляр приложения
Вложенность

Когда использовать Subapplication:

  • Часть приложения должна работать на нескольких устройствах
  • Нужна логическая группировка FB без ограничения маппинга
  • Иерархическая декомпозиция сложных систем

Когда использовать Composite FB:

  • Вся логика выполняется на одном устройстве
  • Нужен переиспользуемый тип (библиотечный элемент)

Создание Subapplication в IDE

Способ 1: Новое подприложение

  1. В System Explorer правый клик на Application → New → Subapplication
  2. Задайте имя (например, DataAcquisition)
  3. Двойной клик — откроется редактор подприложения
  4. Перетащите FB из палитры, создайте соединения
  5. Определите интерфейс подприложения (входы/выходы)

Способ 2: Из существующих FB

  1. В Application Editor выделите группу FB
  2. Правый клик → Map to Subapplication
  3. IDE автоматически создаст подприложение и определит интерфейс на основе внешних соединений

Подприложение в Application Editor

Определение интерфейса

Интерфейс подприложения определяется в Property View:

  1. Выберите подприложение в Application Editor
  2. Вкладка Interface в Properties
  3. Добавьте входные/выходные события и данные

Соединения между FB внутри подприложения и внешними FB автоматически проходят через интерфейсные порты.

Содержимое подприложения

Свойства интерфейса подприложения

Маппинг подприложения на устройства

Ключевое преимущество — гибкий маппинг:

Subapplication: DataAcquisition
├── SensorReader (FB) ──► Device: Larus100_Field
├── DataFilter (FB) ──► Device: Larus100_Field
├── DataLogger (FB) ──► Device: EdgeServer
└── Alarm (FB) ──► Device: EdgeServer

Для маппинга:

  1. Откройте подприложение двойным кликом
  2. Выберите FB внутри
  3. Правый клик → Map to... → выберите устройство и ресурс

Пример: система сбора данных

Архитектура

┌───────────────────────────────────────┐
│ MainApp │
│ │
│ ┌──────────────┐ ┌───────────────┐ │
│ │ DataAcq │ │ Visualization │ │
│ │ (Subapp) ├──┤ (Subapp) │ │
│ │ │ │ │ │
│ │ ┌──────┐ │ │ ┌─────────┐ │ │
│ │ │Sensor│ │ │ │Display │ │ │
│ │ └──┬───┘ │ │ └─────────┘ │ │
│ │ ┌──▼───┐ │ │ ┌─────────┐ │ │
│ │ │Filter│ │ │ │ Logger │ │ │
│ │ └──┬───┘ │ │ └─────────┘ │ │
│ │ │ ▲ │ │ │ │
│ └────┼──┼──────┘ └───────────────┘ │
│ └──┘ │
└───────────────────────────────────────┘

Интерфейс Subapplication DataAcquisition

ТипИмяТип данныхОписание
Event InINITИнициализация датчиков
Event InREADЗапрос чтения
Data InCONFIGSTRINGКонфигурация Modbus
Event OutINITOИнициализация завершена
Event OutINDНовые данные готовы
Data OutVALUESARRAY[0..7] OF REALЗначения датчиков
Data OutSTATUSBOOLСтатус подсистемы

Маппинг

FBУстройствоОбоснование
SensorReaderЛарус-100 (полевой)Близко к датчикам, Modbus RTU
DataFilterЛарус-100 (полевой)Минимизация трафика
DataLoggerEdge-серверХранение данных, диск
AlarmHandlerEdge-серверИнтеграция с SCADA

Вложенные подприложения

Подприложения можно вкладывать друг в друга для создания иерархической структуры:

System
└── MainApplication
├── SubApp: ProductionLine1
│ ├── SubApp: DataAcquisition
│ │ ├── FB: SensorReader
│ │ └── FB: DataFilter
│ └── SubApp: Control
│ ├── FB: PIDController
│ └── FB: ActuatorDriver
└── SubApp: ProductionLine2
└── ...

Каждый уровень имеет собственный интерфейс, обеспечивая чёткое разделение ответственности.

Рекомендации

  • Называйте подприложения по функциональному назначению (DataAcquisition, MotorControl)
  • Минимизируйте интерфейс — только необходимые события и данные
  • Группируйте FB по принадлежности к устройству, когда это возможно
  • Документируйте распределение маппинга для каждого подприложения

Следующие шаги