Найти в Дзене

Что такое POU?

POU (Program Organization Unit) переводится с английского, как «программная организационная единица». Из таких программных единиц-компонентов строится код прикладного программного обеспечения всех программируемых логических контроллеров (ПЛК). Всегда есть как минимум одна такая единица – главная программа. Но для удобства обычно ее все же делят на множество отдельных POU. Каждый компонент программы обладает собственным именем, интерфейсом и реализацией на одном из языков программирования. В среде CoDeSys возможность использования разных языков программирования для ПЛК в рамках одной программы реализуется именно на уровне POU. Это означает, что вы можете разрабатывать исходный код программы, применяя разные языки — например, для создания менеджера аварий использовать язык LD, а для реализации PID-регулятора — язык ST. POU делятся на: программы, функции и функциональные блоки – все они во многом похожи, но имеют свои особенности и разное предназначение. Одной из задач, решаемых компонент
Оглавление

Общие понятия

POU (Program Organization Unit) переводится с английского, как «программная организационная единица».

Из таких программных единиц-компонентов строится код прикладного программного обеспечения всех программируемых логических контроллеров (ПЛК). Всегда есть как минимум одна такая единица – главная программа. Но для удобства обычно ее все же делят на множество отдельных POU.

Каждый компонент программы обладает собственным именем, интерфейсом и реализацией на одном из языков программирования. В среде CoDeSys возможность использования разных языков программирования для ПЛК в рамках одной программы реализуется именно на уровне POU. Это означает, что вы можете разрабатывать исходный код программы, применяя разные языки — например, для создания менеджера аварий использовать язык LD, а для реализации PID-регулятора — язык ST.

Создания нового POU
Создания нового POU

POU делятся на: программы, функции и функциональные блоки – все они во многом похожи, но имеют свои особенности и разное предназначение.

Одной из задач, решаемых компонентами, является локализация имен переменных. Так, область видимости локальных переменных определяется в рамках одного POU.

Важные моменты:

  • Отдельный компонент целиком реализуется на одном языке программирования (он выбирается при создании компонента и не может быть изменен в дальнейшем).
Выбираем язык реализации при создании компонента
Выбираем язык реализации при создании компонента
  • Один компонент может вызвать другие. Но, вызов самого себя (рекурсия) не разрешен.
Ошибка рекурсии
Ошибка рекурсии
  • При вызове компонента язык его реализации значения не имеет.
Из POU на языке ST мы вызываем стандартный функциональный блок R_TRIG
Из POU на языке ST мы вызываем стандартный функциональный блок R_TRIG

Типы POU

Программы

-6

Программы являются единицами организации программного обеспечения высшего уровня и могут быть написаны на любом из языков программирования IEC 61131-3. Каждая программа представляет собой сеть функций и функциональных блоков, которые управляют агрегатами и техпроцессом. В любом проекте требуется как минимум одна программа. В CoDeSys по умолчанию это PLC_PRG.

Программы имеют возможность считывать и записывать данные в входные и выходные переменные, а также взаимодействовать с другими программами. Кроме того, только программы среди всех типов POU могут объявлять глобальные переменные, доступные во всем проекте, и задавать пути обмена данными между различными конфигурациями.

Программы могут вызываться (инициироваться) задачами. При каждом вызове программы, если значения в программе изменяются, то они сохраняются и остаются доступными при последующих вызовах, даже если они инициируются разными задачами.

Функциональные блоки

-7

Один из самых распространённых типов POU — это функциональные блоки. Они представляют собой повторно используемые фрагменты кода, обладающие собственной внутренней памятью и способные возвращать различные результаты даже при одинаковых входных данных. Другими словами, выходные значения функционального блока зависят от его предыдущего состояния, текущего этапа процесса или внешних воздействий. Примером такого блока служит PID-регулятор.

Функциональные блоки могут вызываться как программами, так и другими функциональными блоками. В некоторых реализациях стандарта МЭК 61131-3 их также можно запускать с помощью задач. Для каждого уникального экземпляра функционального блока необходимо выделить отдельную область памяти, которая будет хранить его выходные данные. Этот процесс называется инстанцированием, поскольку он создаёт конкретный «экземпляр» функционального блока.

Функции

-8

Функцию можно представить как подпрограмму (часто уравнение), которая не обладает внутренней памятью и возвращает непосредственно значение, а не выходные параметры. Это означает, что при каждом вызове функции с одинаковыми входными данными результат будет строго одинаковым, вне зависимости от количества её выполнений. Типичными примерами функций являются операции сложения (ADD) и извлечения квадратного корня (SQRT).

***

Все три этих компонента: программы, функциональные блоки и функции, определяют программную модель МЭК 61131-3, которая позволяет эффективно разрабатывать проекты для ПЛК.

Благодаря этой структуре, мы можем копировать и повторно использовать в будущих проектах уже реализованные и протестированные программные решения, а также оперативно производить отладку и диагностику системы — можно легко отделять конкретные компоненты и временно отключать их при поиске неисправностей.

-9

Объявление POU

Объявления функции, функционального блока и программы начинаются с ключевых слов FUNCTION, FUNCTION_BLOCK и PROGRAM соответственно. За ним следует идентификатор (имя компонента). Далее определяется интерфейс POU — перечень входных и выходных параметров.

К интерфейсу POU относятся входы (блок VAR__INPUT), выходы (блок VAR__OUTPUT) и переменные типа вход-выход (блок VAR__IN_OUT). Завершают раздел объявлений локальные переменные (блок VAR).

Функции выделяются среди POU – в базовом варианте они не могут иметь выходные (VAR__OUTPUT) и вход-выходные (VAR__IN_OUT) переменные — выходом функции служит единственная переменная, совпадающая с именем функции, а тип возвращаемого значения функции указывается при определении имени этой функции через двоеточие.

Однако, в некоторых реализациях МЭК 61131-3 все же можно вручную добавить и выходные и вход-выходные переменные в функции, если это необходимо.

-10
Ставьте 👍🏻, если статья понравилась!
А если хотите узнать больше о программировании ПЛК - приходите к нам на
курсы, набор уже идет!