Лекция: Параметры и переменные компонента
При объявлении POU вы можете встретить следующие заголовки:
Формальные входные параметры VAR_INPUT Передаются POU по значению путем копирования. При вызове блока такой переменной можно присвоить значение другой переменной (совместимого типа), константы или выражения. Любые изменения такой переменной внутри POU никак не отображаются на данные вызывающего компонента. Применяется в любых POU. Могут иметь значения по умолчанию. Отражаются в графическом представлении с левой стороны компонента.
Формальные выходные параметры VAR_OUTPUT Отражают результаты работы компонента. Передаются из POU по значению путем копирования. Чтение значения выходов обычно имеет смысл после выполнения блока. Вне компонента параметры VAR_OUTPUT доступны только по чтению. Не используются в функциях, поскольку функция имеет только одно возвращаемое значение. Могут иметь начальные значения. Отражаются в графическом представлении справа.
Параметр типа VAR_IN_OUT
Этот параметр одновременно является входом и выходом. Передача переменной экземпляру блока выполняется по ссылке. Это означает, что внешняя переменная как бы сама работает внутри блока на правах внутренней переменной. В компонент передается только адрес ее расположения в памяти данных. Для переменной VAR_IN_OUTнельзя:
• использовать ее в функциях;
• присваивать начальное значение;
• обращаться как к элементу структуры данных, через точку;
• присваивать константу, как актуальный параметр.
Присваивание внешней переменной для VAR_IN_OUTможно производить только при вызове блока.
Важнейшим свойством VAR__IN_OUTявляется отсутствие копирования внешних данных. Параметры VAR_INPUT и VAR__OUTPUTмогут оперировать с массивами и структурами, но всякий раз при обращении к компоненту будет происходить полное копирование данных. Это может отнимать много времени. Присваивание одного массива другому для VAR_IN_OUTозначает фактически переключение компонента с одного массива на другой. Локальная копия данных в этом случае не создается.
Как и глобальные переменные, параметры VAR_IN_OUTнарушают идеологию независимости компонентов. Правильный компонент не должен иметь возможности испортить чужую память. Поэтому применять их нужно очень аккуратно и только в случаях, когда это действительно необходимо.
Локальные переменные VAR
VAR доступны только внутри компонента, вне компонента к ним доступа нет. Могут иметь начальные значения. Для функций локальные переменные размещаются в динамической памяти (обычно в стеке). По окончании работы функции память освобождается и может использоваться в других функциях. В программах и экземплярах функциональных блоков переменные VAR сохраняют свои значения между вызовами программ и экземпляров. В графическом представлении компонента локальные переменные не отражаются.
15.11.2011