Лекция: Компоненты организации программ (POU)
Компоненты организации программ образуют код прикладного программного обеспечения ПЛК. Именно на уровне компонентов доступно совмещение различных языков МЭК. В англоязычных документах компоненты организации программ сокращенно обозначаются POU — Program Organization Unit. Чтобы не вызывать неоднозначность, мы далее также будем использовать эту аббревиатуру.
Определение компонента
Компоненты организации программ являются базовыми элементами, из которых строится код проекта. Каждый компонент программы имеет собственное наименование, определенный интерфейс и описание на одном из МЭК-языков. Один компонент может вызвать другие компоненты. Вызов самого себя (рекурсия) в стандарте МЭК не разрешена. Комбинировать различные языки в одном проекте можно при описании различных компонентов, но отдельный компонент целиком реализуется на одном языке МЭК. При вызове компонента язык его реализации значения не имеет.
К компонентам организации программ в МЭК-стандарте относятся функции, функциональные блоки и программы. Все они во многом похожи, но имеют определенные особенности и различное назначение.
Компонент обладает свойством инкапсуляции — работает как «черный ящик», скрывая детали реализации. Для работы с компонентом достаточно знать его интерфейс, включающий описание входов и выходов. Внутреннее его устройство знать необязательно. В графической форме представления компонент выглядит как Прямоугольник с входами слева и выходами справа. Локальные (внутренние) переменные компонента недоступны извне и в графическом представлении не отображаются.
Готовый компонент всегда можно вскрыть, изучить и поправить. Это, конечно, относится только к пользовательским компонентам и открытым библиотекам. Некоторые стандартные компоненты включены в транслятор и недоступны для просмотра и изменения. Это относится и к внешним библиотекам. Внешние библиотеки реализуются в виде объектного кода при помощи внешних средств, например компилятора С или ассемблера. Возможно даже, что компонент реализован не только программно, а использует вспомогательные аппаратные средства, например часы реального времени или математический сопроцессор.
Еще одной задачей, решаемой компонентами, является локализация имен переменных. Это означает, что в различных компонентах можно использовать повторяющиеся имена. Так, например, любимую переменную с оригинальным идентификатором «X» можно использовать в каждом компоненте, и всякий раз это будет новая переменная. Область видимости локальных переменных определяется рамками одного компонента. Конечно, можно все переменные проекта объявить глобальными. Модификация и отладка подобных проектов вызывает такие же ощущения, как распутывание «бороды» из лески на удочке во время клева. Ограничение области видимости является обязательным во всех современных системах программирования.
Экземпляры функциональных блоков, объявленные внутри других компонентов, также обладают локальной областью видимости. Программы и функции всегда определены глобально.