Вызов функций и функциональных блоков

<< Click to Display Table of Contents >>

Navigation:  Программирование в MasterSCADA 4D > Редактор ST >

Вызов функций и функциональных блоков

Вызов функций

Функция (термин стандарта IEC 61131-3) – это программный компонент (POU), который возвращает один элемент данных (в т.ч. массив или структуру) как результат своего выполнения (т.н. возвращаемое значение) и имеет произвольное количество входных элементов (VAR_INPUT и VAR_IN_OUT). Функция не содержит внутренних переменных, значения которых сохраняются между вызовами, поэтому при одних и тех же значениях входов всегда производит одни и те же выходные значения.

В программы добавляется ссылка на тип в библиотеке. Как правило, для вызова функции используют следующую форму записи: [имя функции]([вход1] := [выражение1], [вход2] := [выражение2],...)

Вход EN в языке ST не используется. Считается, что он равен TRUE. В вызове функции может быть задано произвольное число входных аргументов, в т.ч. ни одного.

Если перетащить функцию из библиотеки в тело программы, то в форме записи будут присуствовать все входы:

vyzov_funkciy_i_FB_1

Если вход не определить, то будет считаться, что он равен значению по умолчанию.

Функция возвращает значение того типа данных, которое задано для ее выхода Q.

Если функция кроме выхода Q имеет другие выходы, то для присвоения такого выхода функции какому-либо параметру необходимо использовать следующую форму записи:

[имя функции]([вход1] := [выражение1], [вход2] := [выражение2], ...[выход функции] =>[Выход программы]...)

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

vyzov_funkciy_i_FB

Если нет возможности задать у функций разные имена, то необходимо перед именем функции указать имя библиотеки, в которой она находится:

[имя библиотеки].[имя функции]([вход1] := [выражение1], [вход2] := [выражение2], ...[выход функции] =>[Выход программы]...)

Примеры:

mINT:=TRUNC(IN:=3.14) - выходу программы mINT присваивается значение полученное в результате рассчета функции TRUNC, при условии, что ее вход равен IN который равен 3.14

mINT1:= OSCAT.D_TRUNC(X:=2*mREAL) - в данном случае вход функции X рассчитывается путем умножения на 2 значения входа программы mREAL, после вычисления значения функции оно присваивается выходу программы mINT1;

mREAL2:=myADD(x:=(3+mREAL), y:=3) - вход х пользовательской функции myADD рассчитывается исходя из значения параметра программы mREAL, значение входа y не меняется, после вычисления значения функции оно присваивается параметру программы mREAL2;

Q:= SPLIT_DATE(IN:=Дата_время, YEAR =>Параметр_1 ) - происходит вызов функции SPLIT_DATE вход IN равен входу программы Дата_время, после вычисления значения функции выход функции YEAR присваивается выходу программы Параметр_1

Если результат функции не нужно записывать в переменную, то функцию можно вызвать в виде  func(). Например, если программа, содержит функцию RestartPLC:

vyzov_funkciy_i_FB_6

Важно! При использовании функции без записи результата в переменную, проверка программы будет неуспешна. В этом случае ошибки типа: Ожидается тело функции, можно игнорировать. При проверке всего проекта ошибки не будет.

Вызов ФБ

В отличии от функций в программах ST вызываются не типы, а экземпляры.

Для того чтобы создать экземпляр ФБ в программе  нужно перетащить тип ФБ из Палитры в поле программы. Также можно перетащить нужный функциональный блок из дерева библиотек:

vyzov_funkciy_i_FB_2

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

Можно сначала добавить экземпляр во вкладку легенды Локальные. Это можно сделать двумя способами:

перетащить его из дерева библиотек в поле вкладки.

нажать кнопку vyzov_funkciy_i_FB_3. В появившемся меню выбрать пункт ФБ: vyzov_funkciy_i_FB_4 . Появится элемент ФБ 1, если дважды нажать по нему левой кнопкой мыши, то откроется диалоговое окно, где нужно выбрать имя типа и указать имя его экземпляра:

vyzov_funkciy_i_FB_5

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

После чего можно обращаться к этому ФБ в теле программы ST.

Форма записи для обращения к параметру ФБ: [имя экземпляра ФБ].[имя параметра]

Примеры использования ФБ

Помним, что экземпляр ФБ уже находится во вкладке Локальная.

gen_rdm_1.Am:=1 - в данном случае входу Am экземпляра ФБ gen_rdm присваивается значение 1.

VXX:=1.1+1.65*gen_rdm_1.out - тут переменной VXX присваивается значение выражения, где gen_rdm_1.out это выход out экземпляра функционального блока gen_rdm

gen_rdm_1(PT:=t#10s, OS:=0,Out=>Параметр_1) - производится вызов экземпляра функционального блока, значения входов PT и OS производятся непосредственно в форме вызова, значение выхода Out присваивается выходу программы Параметр_1.

Смотрите также:

Операторы определения переменных