Skip to main content

Адаптеры (Adapter Interfaces)

Источник

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

Адаптер — механизм IEC 61499 для объединения нескольких событийных и данных-соединений в одно адаптерное соединение. Это упрощает FB-сети и обеспечивает повторное использование интерфейсных шаблонов.

Когда использовать адаптеры

  • Несколько FB обмениваются одинаковым набором событий и данных (например, Init/Read/Data)
  • Нужно обеспечить полиморфизм: разные реализации одного интерфейса
  • Сложная FB-сеть с большим числом перекрёстных соединений

Концепция

Адаптер определяет два интерфейса:

СторонаНазваниеОписание
Socket (розетка)Использующая сторонаFB, который вызывает операции через адаптер
Plug (вилка)Предоставляющая сторонаFB, который реализует операции адаптера

Соединение Socket ↔ Plug заменяет все индивидуальные событийные и данные-соединения, определённые в типе адаптера.

Socket и Plug адаптера

Создание адаптерного типа в IDE

Создание нового адаптера в IDE

  1. File → New → Type → Adapter Type
  2. Задайте имя (например, SensorAdapter)
  3. В редакторе интерфейса определите:
    • Event Inputs (от Socket к Plug): например, INIT, READ
    • Event Outputs (от Plug к Socket): например, INITO, IND
    • Data Inputs (от Socket к Plug): например, CONFIG (STRING)
    • Data Outputs (от Plug к Socket): например, VALUE (REAL), STATUS (BOOL)

Пример: SensorAdapter

Adapter Type: SensorAdapter
─────────────────────────────────
Socket → Plug:
Events: INIT, READ
Data: CONFIG (STRING)

Plug → Socket:
Events: INITO, IND
Data: VALUE (REAL), STATUS (BOOL)

Использование адаптера в FB

Добавление Socket в FB-интерфейс

Добавление адаптера в FB

  1. Откройте тип FB (Basic или Composite)
  2. В редакторе интерфейса, раздел Sockets Socket, нажмите Add
  3. Выберите тип адаптера (SensorAdapter)
  4. Задайте имя экземпляра (например, Sensor1)

Добавление Plug в другой FB

  1. Аналогично, в разделе Plugs Plug, добавьте тот же тип адаптера
  2. Задайте имя (например, SensorPlug)

Соединение в Application Editor

В Application Editor адаптерные порты отображаются как треугольники. Соедините Socket одного FB с Plug другого перетаскиванием — одно соединение заменит все пары событий и данных.

Пример использования адаптера в приложении

Пример: адаптер для датчика температуры

Адаптерный тип TempSensorAdapter

НаправлениеТипИмяТип данных
Socket → PlugEventINIT
Socket → PlugEventREAD
Socket → PlugDataINTERVALTIME
Plug → SocketEventINITO
Plug → SocketEventIND
Plug → SocketDataTEMPERATUREREAL
Plug → SocketDataQUALITYBOOL

Controller FB (Socket)

BasicFB: TempController
Socket: Sensor (type: TempSensorAdapter)

ECC:
START ──INIT──► INITIALIZING
INITIALIZING ──Sensor.INITO──► READY
READY ──E_CYCLE.EO──► READING (action: Sensor.READ)
READING ──Sensor.IND──► PROCESS (action: ProcessTemp)
PROCESS ──1──► READY

Modbus Sensor FB (Plug)

BasicFB: ModbusTempSensor
Plug: SensorPlug (type: TempSensorAdapter)

ECC:
IDLE ──SensorPlug.INIT──► INIT (action: InitModbus)
INIT ──1──► READY (output: SensorPlug.INITO)
READY ──SensorPlug.READ──► READ (action: ReadRegister)
READ ──1──► READY (output: SensorPlug.IND, TEMPERATURE, QUALITY)

Полиморфизм через адаптеры

Главное преимущество — можно заменить реализацию Plug-стороны без изменения Controller:

Реализация PlugПротоколПрименение
ModbusTempSensorModbus RTU/TCPПромышленные датчики
MqttTempSensorMQTTIoT-датчики
OpcUaTempSensorOPC UASCADA-системы
SimTempSensorСимуляцияТестирование

Controller FB остаётся неизменным — меняется только Plug-FB, подключённый к адаптеру.

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

  • Используйте адаптеры, когда 3+ пар событий/данных передаются между FB
  • Давайте адаптерам осмысленные имена, отражающие функцию (SensorAdapter, DriveAdapter)
  • Документируйте протокол взаимодействия (порядок событий)
  • Для простых случаев (1-2 соединения) адаптеры избыточны

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