ГОСТ Р МЭК 61131-3—2016
+---- +
I AD D I+ ------------+
COUNT--|
1— |
+
lCOUNTPl —|COUNT
| +
-------
+
+♦-■—+
A
----
1 * |+— +
B
-----
||-------1 /| -SIM PLE FUN
♦-----+II
C...............................II
♦
-----
+
END_FUNCT10N
а) Объявление и тело функции (языки ST и FBD) — (си. Примечание)
// Внешний интерфейс
Ифункция безрезультата, но есть выходная
переменная Sum
*------------------------
| SPECIAL_FUN|
INT---|FirstlndexSum|
----
INT
INT---|Lastlndex|
+----------------------------------+
// Тело функции— графически не показано
FORi:= Firstlndex TOLastlndex DO Sum:=
Sum +DataArray[i];
END_FOR
ENDJFUNCTION
b) Объявление и тело функции (функция без результата — с выходом Var)
Примечание — В примере а) входной переменной дано определенное неявное значение 1.0, что
бы предотвратить ошибку «делениена ноль», если вход не указан при вызове функции, например, если
графический вход в функцию слева не соединен.
6.6.2.3 Вызов функции
Вызов функции может быть представлен в текстовой или графической форме.
Так как входные переменные, выходные переменные и результат функции не сохраняется, при
сваивание входным параметрам, доступ к выходным переменным и результату происходит мгновенно
при вызове функции.
Если массив переменной длины используется как параметр, параметр должен быть соединен к
статической переменной.
Функция не содержит информацию о внутреннем состоянии, то есть она не сохраняет никакие
входные, внутренние (временные) и выходные элементы от одного вызова до другого:
- вызов функции с одинаковыми параметрами (VARJNPUT и VAR_IN_OUT) иодинаковыми значе
ниями переменных VAR_EXTERNAL всегда будет изготавливать одинаковые значения выходных пере
менных, входных-выходных переменных, внешних переменных и результат функции, если он имеется.
Примечание — Некоторыефункции, обычно предоставляемые как системные функции от разработчкиа
могут производить различные значения, например, функции TIME(), RANDOM().
VAR_GLOBAL DataArray: ARRAY[0..100] OFINT;
END_VAR
FUNCTIONSPECIAL_FUN
VARJNPUT
Firstlndex: INT;
Lastlndex: INT;
END_VAR
VAR_OUTPUTSum:
INT;
ENDJ/AR
VARJEXTERNAL DataArray:
ARRAY[0..100] OFINT;
END_VAR
VARI: INT; Sum: INT:= 0; ENDJ/AR
// Спецификация тела функцииИСпецификация тела функции
VAR COUNTP1: INT; ENDJ/AR COUNTP1:=
ADDfCOUNT, 1);
COUNT := COUNTP1
SIMPLE_FUN:=A*S/C;//результат
END_FUNCTION
59