<< 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. В вызове функции может быть задано произвольное число входных аргументов, в т.ч. ни одного.
Если перетащить функцию из библиотеки в тело программы, то в форме записи будут присуствовать все входы:
Если вход не определить, то будет считаться, что он равен значению по умолчанию.
Функция возвращает значение того типа данных, которое задано для ее выхода Q.
Если функция кроме выхода Q имеет другие выходы, то для присвоения такого выхода функции какому-либо параметру необходимо использовать следующую форму записи:
[имя функции]([вход1] := [выражение1], [вход2] := [выражение2], ...[выход функции] =>[Выход программы]...)
В случае, если разные библиотеки проекта содержат функции с одинаковыми именами, то при попытке компиляции появится сообщение о том, что найдено несколько элементов с данным именем.
Если нет возможности задать у функций разные имена, то необходимо перед именем функции указать имя библиотеки, в которой она находится:
[имя библиотеки].[имя функции]([вход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:
Важно! При использовании функции без записи результата в переменную, проверка программы будет неуспешна. В этом случае ошибки типа: Ожидается тело функции, можно игнорировать. При проверке всего проекта ошибки не будет.
В отличии от функций в программах ST вызываются не типы, а экземпляры.
Для того чтобы создать экземпляр ФБ в программе нужно перетащить тип ФБ из Палитры в поле программы. Также можно перетащить нужный функциональный блок из дерева библиотек:
Функциональный блок добавится в текст программы со всеми входами. Затем эти входы можно задать, например, указать константу, либо перетащить в нужное место локальную переменную программы или параметр программы из клеммника входа. При этом видно, что в группе Локальные в дереве и в одноименной панели палитры появился экземпляр данного ФБ.
Можно сначала добавить экземпляр во вкладку легенды Локальные. Это можно сделать двумя способами:
•перетащить его из дерева библиотек в поле вкладки.
•нажать кнопку . В появившемся меню выбрать пункт ФБ:
. Появится элемент ФБ 1, если дважды нажать по нему левой кнопкой мыши, то откроется диалоговое окно, где нужно выбрать имя типа и указать имя его экземпляра:
У появившегося экземпляра можно установить значения по умолчанию для его входов, связи параметров проекта с параметрами экземпляра ФБ.
После чего можно обращаться к этому ФБ в теле программы 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.
Смотрите также: