Переменные

Объявление

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

Пример объявления секции переменных:

VAR

   isEnabled : BOOL;

   bits : ARRAY[0..7] OF BOOL;

   data : INT := 100;

END_VAR

Поддерживаемые секции переменных

Тип

Пример

VAR ... END_VAR

Доступны только внутри компонента, вне компонента доступа нет. Могут иметь начальные значения. Для функций локальные переменные размещаются в динамической памяти. По окончании работы функции память освобождается. В программах и экземплярах функциональных блоков переменные VAR сохраняют свои значения между вызовами программ и экземпляров. В графическом представлении компонента локальные переменные не отображаются.

VAR_INPUT ... END_VAR

Передаются по значению путем копирования. При вызове блока такой переменной можно присвоить значение другой переменной (совместимого типа) или выражения. Любые изменения такой переменной внутри компонента никак не отображаются на данные вызывающего компонента. Применяется в любых компонентах. Могут иметь значения по умолчанию. Отражаются в графическом представлении с левой стороны компонента.

VAR_IN_OUT ... END_VAR

Этот параметр одновременно является входом и выходом. Передача переменной экземпляру блока выполняется по ссылке. Это означает, что внешняя переменная как бы сама работает внутри блока на правах внутренней переменной. В компонент передается только адрес ее расположения в памяти данных. Для переменной VAR_IN_OUT нельзя:

• присваивать начальное значение;

• присваивать константу как актуальный параметр.

Присваивание внешней переменной для VAR_IN_OUT можно производить только при вызове блока. Важнейшим свойством VAR_IN_OUT является отсутствие копирования внешних данных. Параметры VAR INPUT и VAR_OUTPUT могут оперировать с массивами и структурами, но всякий раз при обращении к компоненту будет происходить полное копирование данных. Это может отнимать много времени. Присваивание одного массива другому для VAR_IN_OUT означает фактически переключение компонента с одного массива на другой. Локальная копия данных в этом случае не создается. Параметры VAR_IN_OUT нарушают идеологию независимости компонентов. Правильный компонент не должен иметь возможности испортить чужую память. Поэтому применять их нужно очень аккуратно и только в случаях, когда это действительно необходимо.

VAR_OUTPUT ... END_VAR

Отражают результаты работы компонента. Передаются из компонента по значению путем копирования. Чтение значения выходов обычно имеет смысл после выполнения блока. Вне компонента параметры VAR_OUTPUT доступны только по чтению. Могут иметь начальные значения. Отражаются в графическом представлении справа.