Лекция: Функциональные блоки
Функциональный блок — программный компонент, отображающий множество значений входных параметров на множество выходных. После выполнения экземпляра функционального блока все его переменные сохраняются до следующего выполнения. Следовательно, функциональный блок, вызываемый с одними и теми же входными параметрами, может производить различные выходные значения. Сохраняются все переменные, включая входные и выходные. Так, если мы вызовем экземпляр функционального блока, не определяя значения некоторых входных параметров, он будет использовать ранее установленные значения. Возможность задания переменного числа входных значений заложена по определению и не требует каких-либо дополнительных усилий. Извне доступны только входы и выходы функционального блока, получить доступ к внутренним переменным блока нельзя.
С позиций объектно-ориентированного программирования (ООП) функциональные блоки — это объекты, великолепно реализующие инкапсуляцию, т. е. сокрытие деталей реализации. Объединение кода и данных в «одном флаконе» роднит функциональные блоки с классами ООП. Возможность наследования и полиморфизм, к сожалению, пока отсутствуют.
Создание экземпляра функционального блока
Прежде чем использовать функциональный блок, необходимо создать его экземпляр. Эта операция аналогична по смыслу объявлению переменной. Описав новый блок, мы фактически создали новый тип данных подобный структуре. Каждый функциональный блок может иметь любое количество экземпляров. Так, различные экземпляры блока «таймер» совершенно независимы друг от друга. Каждый из них имеет собственные настройки и живет собственной жизнью.
Каждый экземпляр функционального блока имеет свой собственный идентификатор и свою область в статической памяти данных. Объявление еще одного экземпляра блока приводит к выделению еще одной области в памяти данных. Код, очевидно, как и для функции, остается общим.
Экземпляр функционального блока создается в разделе объявлений переменных функционального блока, программы или в разделе глобальных переменных проекта. Как и переменные, он должен получить уникальный идентификатор. Например, создание экземпляра стандартного функционального блока «инкрементный счетчик» с идентификатором ctuTimeMeter выглядит так:
ctuTimeMeter: CTU;
Очевидно, что создавать экземпляры можно только для известных системе блоков. Это библиотечные блоки или блоки, ранее реализованные пользователем. С точки зрения транслятора, создание экземпляра означает выделение необходимой памяти для размещения переменных блока.
Экземпляр функционального блока можно не только вызывать, но и использовать в качестве входных переменных других функциональных блоков.
Функциональным блоком иногда называют экземпляр функционального блока, для краткости. В данном курсе такие неоднозначные сокращения применяться не будут. Позволим себе только называть иногда функциональный блок просто блоком, а экземпляр функционального блока — экземпляром.