МЭК 61131-3
.pdfГОСТ Р МЭК 61131-3—2016
Т а б л и ц а |
19 — Объявление функции |
Номер |
Описание |
Без результата
1a
FUNCTION ... END_FUNCTION
С результатом
1b FUNCTION <name>: <data type> END _FU NOTION
Входные параметры
2a
VARJNPUT...END_VAR
Выходные параметры
2b
VARJDUTPUT...END_VAR
Входные-выходные параметры
2c
VAR_IN_0 UT...END_VAR
Временные переменные
2d
VAR_TEMP...END_VAR
2e
2f |
Внешние переменные |
|
VAR_EXTERNAL...END_VAR |
||
|
||
|
Внешние константы |
|
2g |
VAR_EXTERNAL |
|
|
CONSTANT..,END_VAR |
|
3a |
Инициализация входных параметров |
|
3b |
Инициализация выходных параметров |
|
3c |
Инициализация временных переменных |
Временные переменные
VAR...END_VAR
-
Входной параметр EN и выходной параметр ENO
Пример
FUNCTION myFC... END_FUNCTION
FUNCTION myFC: IN T... END_FUNCTION
VARJNPUT IN:
VAR_OUTPUT OUT: BOOL; ET_OFF: TIME; END_VAR
VARJN_OUT A: INT; END_VAR
VAR_TEMP I: INT; END_VAR
VAR B: REAL; END_VAR
Различие с функциональными блоками из-за проблем совместимости в функциональных блоках VAR являются статическими (сохраняются)!
VAR_EXTERNAL В: REAL; END_VAR Соответствует следующему: VAR_GLOBAL В: REAL...
VAR_EXTERNAL CONSTANT В: REAL; END_VAR Соответствует следующему:
VARJ3LOBAL В: REAL
VARJNPUT MN: INT:= 0;
VARJDUTPUT RES: INT:= 1;
VAR I: INT:= 1;
Определено в таблице 18
Пример — |
|
|
|
|
// Спецификация интерфейсов параметра |
// Спецификация интерфейсов параметра |
|||
FUNCTION SIMPLE_FUN: REAL |
|
+ |
F U N C T IO N |
|
VARJNPUT |
|
+ |
|
|
|
| |
S IM P L E _ F U N | |
|
|
A, В: REAL; |
|
|
||
R E A L ---------- |
| A |
| |
----------R E A L |
|
C: REAL:= 1.0; END_VAR |
R E A L ---------- |
| В |
| |
|
R E A L |
| С |
| |
|
|
VARJN_OUT COUNT: INT; |
|
|||
I N T ------------- |
| C O U N T ------- C O U N T | ---------- |
I N T |
||
END VAR |
|
+------------------------- |
+ |
|
58
// Спецификация тела функции
VAR COUNTP1: INT; END_VAR COUNTP1:
ADDfCOUNT, 1);
COUNT := COUNTP1 SIMPLE_FUN:= А*В/С; //результат END FUNCTION
|
|
|
ГОСТ Р МЭК 61131-3— 2016 |
|||
И Спецификация тела функции |
|
|||||
+----- |
+ |
|
|
|
|
|
| A D D | ------- |
|
|
+ --------- |
+ |
|
|
C O U N T — | |
| ------- |
C O U N T P 1— | : = | -------- |
C O U N T |
|||
1— I |
I |
+ |
+ |
+ ---------- |
+ |
|
+----- |
+ |
|
|
|
||
|
A----- |
| * |
| |
+------ |
+ |
|
|
В ------- |
| |
| ---------- |
| / |
| - S IM P L E _ F U N |
|
|
|
+ — |
+ |
I |
I |
|
|
C --------------------------------- |
|
|
| |
| |
|
+------ +
END F U N C T IO N
а) Объявление и тело функции (языки ST и FBD) — (см. Примечание)
VARJGLOBAL DataArray: ARRAY[0..100] OF INT;
END_VAR
FUNCTION SPECIAL_FUN
VARJNPUT
Firstlndex: INT;
Lastlndex: INT;
END_VAR
VARJOUTPUT Sum:
INT;
END_VAR
VAR_EXTERNAL DataArray:
ARRAY[0..100] OF INT;
END_VAR
VAR I: INT; Sum: INT:= 0; END VAR
FOR /:= Firstlndex ТО Lastlndex DO Sum:= Sum + DataArray[i];
END_FOR
END_FUNCTION
//Внешний интерфейс
И функция без результата, но есть выходная переменная Sum
|
+----------------- |
|
+ |
|
|
| |
S P E C IA L _ F U N |
| |
|
I N T ---------- |
| F i r s t l n d e x |
S u m | ------------ |
I N T |
|
I N T ---------- |
| L a s t l n d e x |
| |
|
|
|
+------------------------------------ |
|
+ |
|
// Тело функции — графически не показано
b)Объявление и тело функции (функция без результата — с выходом Var)
П р и м е ч а н и е — В примере а) входной переменной дано определенное неявное значение 1.0, что бы предотвратить ошибку «деление на ноль», если вход не указан при вызове функции, например, если графический вход в функцию слева не соединен.
6.6.2.3Вызов функции
Вызов функции может быть представлен в текстовой или графической форме.
Так как входные переменные, выходные переменные и результат функции не сохраняется, при сваивание входным параметрам, доступ к выходным переменным и результату происходит мгновенно при вызове функции.
Если массив переменной длины используется как параметр, параметр должен быть соединен к статической переменной.
Функция не содержит информацию о внутреннем состоянии, то есть она не сохраняет никакие входные, внутренние (временные) и выходные элементы от одного вызова до другого:
- вызов функции с одинаковыми параметрами (VARJNPUT и VAR IN OUT) и одинаковыми значе ниями переменных VAR_EXTERNAL всегда будет изготавливать одинаковые значения выходных пере менных, входных-выходных переменных, внешних переменных и результат функции, если он имеется.
П р и м е ч а н и е — Некоторые функции, обычно предоставляемые как системные функции от разработчкиа могут производить различные значения, например, функции TIMEO, RANDOMQ-
59
ГОСТ Р МЭК 61131-3—2016
Т а б л и ц а 20 — Вызов функции
Номер |
Описание |
1a Полный формальный вызов (только текстовый)
П р и м е ч а н и е 1 — Такой вызов используется, если указание параметров EN и ENO в вызове яв ляется обязательным.
1b Неполный формальный вызов (только текстовый)
П р и м е ч а н и е 2 — Используется, если исполь зование параметров EN и ENO в вызове не явля ется обязательным.
2Неформальный вызов (только текстовый) (с фик сированным порядком параметров и полный)
Пр и м е ч а н и е 4 — Используется для вызова стандартных функций без формальных имен.
3Функция без результата функции
4Графическое представление
Пример
А:= LIMIT(EN: = COND, IN:= В, MN:= 0, МХ:= 5,
ENO => TEMPL);
А:= LIMIT(IN:= В, МХ:= 5);
П р и м е ч а н и е 3 — Переменная MN будет иметь неявное значение 0 (ноль).
А:= LIMIT(B, 0, 5);
П р и м е ч а н и е 4 — Данный вызов эквивален тен вызову в примере 1а, но без параметров EN и ENO.
FUNCTION myFun // нет объявления тала
VARJNPUT х: INT; END_VAR;
VARJDUTPUTу: REAL; END.VAR;
myFun(150, var); // Вызов
|
+-------------- |
|
+ |
|
| |
FUN |
| |
a |
— | EN |
ENO | — |
|
b — | I N I |
| — r e s u l t |
||
c |
— |IN 2 |
Q 1 |— o ut |
|
|
I |
|
Q21 |
|
+-------------- |
|
+ |
5Использование логического входа с отрицанием и логического выхода с отрицанием в графическом представлении
6 Графическое использование VAR_IN_OUT
Пример — Вызов функции
Вызов
VAR
X, Y, Z, Res1, Res2: REAL;
Еп1, V: BOOL;
END_VAR
Res1:= DIV(ln1:= COS(X), In2:= SIN(Y), ENO => EN1);
Res2:= MUL(SIN(X), COS(Y));
Z := ADD(EN:= EN1, IN1:= Res1, IN2:= Res2, ENO => V);
|
+--------------+ |
||
|
I |
FUN |
| |
a |
-o |E N |
ENO|— |
|
b — I I N I |
| — r e s u l t |
||
c |
— IIN 2 |
Q11o- o ut |
|
|
I |
|
Q2| |
+--------------+
Пр и м е ч ан и е 6 — Использование таких кон
струкций запрещено для входных-выходных пе ременных.
+------------------------ +
| myFCl |
I |
а — | I n l |
O u t l | — d |
b— | i n o u t — In o u t | — c
+------------------------ +
60
|
|
|
|
|
|
|
|
|
|
|
|
|
ГОСТ Р МЭК 61131-3— 2016 |
|
|
|
|
|
|
+------- |
+ |
|
+----------- |
|
+ |
— |
+---------- |
+ |
V |
|
|
|
х —+-| cos |—+ |
- |EN ENO| ■ |
|EN ENO|— |
|||||||||
|
|
|
|
II |
I I |
I |
DIV |
I |
— |
I |
I |
z |
||
|
|
|
|
I |
+------- |
+ |
+ |
- | |
| |
| ADD |
|— |
|||
|
|
|
|
I |
|
+ |
|
I |
|
I |
|
I |
I |
|
|
|
|
Y -+ |
I +---- |
|
I |
|
I |
+ -I |
I |
|
|||
|
|
|
|
| SIN |
|--- |
|
- I |
|
I |
I |
+---------- |
+ |
|
|
|
|
|
III |
I |
|
+---------- |
|
+ |
|
|
|
|
||
|
|
|
| |
| |
+------- |
+ |
|
|
|
|
|
|
|
|
|
|
|
I |
I |
+ |
+ |
|
+ |
|
+ |
|
|
|
|
|
|
|
| |
| |
+ |
|
|
|
|
|
||||
|
|
|
I +-| SIN |— |
- |EN ENO| |
|
|
|
|
||||||
|
|
|
I |
I |
+ |
I |
I |
I |
MDL |
I |
-+ |
|
|
|
|
|
|
| |
|
+ |
+ |
-| |
| |
|
|
|
|||
|
|
|
I |
|
+ |
+ |
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
||
|
|
|
+--- |
|
I COS |
|--- |
|
|
|
|
|
|
|
|
|
|
|
|
|
I |
I |
|
+---------- |
|
+ |
|
|
|
|
|
|
|
|
|
+--------- |
+ |
|
|
|
|
|
|
|
|
а) Вызов стандартных функций с результатом и параметрами EN и ENO |
||||||||||||||
Объявление |
|
|
|
|
|
|
|
|
|
|
|
|
||
FUNCTION МуJunction |
|
|
|
|
|
|
//нет типа, нет результата |
|||||||
VARJNPUT In1: |
|
|
|
REAL; |
END_VAR |
|
|
|
|
|
||||
VARjOUTPUT Outl, |
Out2: |
REAL; |
ENDJ/AR |
|
|
|
|
|
||||||
VAR_TEMP Ттр1: |
|
|
REAL; |
ENDJ/AR |
//разрешено использование VARJEMP |
|||||||||
VAR_EXTERNAL Ext: |
|
|
BOOL; |
ENDJ/AR |
|
|
|
|
|
|||||
|
// Тело функции |
|
|
|
|
|
|
|
|
|
|
|
||
END FUNCTION |
|
|
|
|
|
|
|
|
|
|
|
|
||
Текстовый и графический вызов |
|
|
|
|
|
|
|
|
|
|||||
My_Function (In1:= a, Outl => b; Out2 => с); |
|
|
|
|
|
|
|
|
||||||
|
|
+ |
+ |
|
|
|
// без результата |
|
|
|
||||
|
|
|
|
|
И с двумя выходными переменными |
|||||||||
а |
— |
I My_Function| |
|
b |
|
|||||||||
|Ini |
Outl|— |
|
|
|
|
|
|
|
|
|
|
|||
|
|
I |
Out2|-- |
|
c |
|
|
|
|
|
|
|
|
|
|
|
+---------------------- |
+ |
|
|
|
|
|
|
|
|
|
|
|
Ь) Объявление и вызов функции без результата, но с двумя выходными переменными |
||||||||||||||
Текстовый и графический вызов |
|
|
|
|
|
|
|
|
|
|||||
myFC1 (In1:= a, lnout:= b, Out! => Ттр1); |
И использование временной переменной |
|||||||||||||
d:= myFC2 (In1:= Ттр1, lnout:= b); |
|
|
// переменная b сохраняется в входной-выходной пере |
|||||||||||
менной inout; Присваивание переменной |
|
|
|
|
|
|
|
|
||||||
с:= Ь;//значение переменной b присвоено переменной с |
|
|
|
|
||||||||||
|
+------------ |
+ |
|
+----------- |
myFC2 |
+ |
|
|
|
|
|
|||
а |
— |
| myFCl |
| |
|
| |
| |
d |
|
|
|
|
|||
|Ini |
Outl |------ |
|
1Ini |
|
|
|— |
|
//результат |
|
|||||
b |
— |
|Inout— |
Inout |---- |
|
|Inout— Inout |— |
с |
|
//присваивание переменной |
||||||
|
+--------------------------- |
+ |
|
I |
|
|
|
I |
|
|
|
|
|
|
|
|
|
|
|
+----------------------- |
|
|
|
+ |
|
|
|
|
|
с) |
Вызов функции с графическим представлением входных-выходных переменных |
|||||||||||||
Текстовый и графический вызов |
|
|
|
|
|
|
|
|
|
|||||
My_Funetion (1 п 1 a, Out1+Out2 - > d); И не разрешен в языке ST |
|
|
|
|||||||||||
My_Function (In1:= a, Outl => Ттр1, Out2 => Ттр2); |
|
|
|
|
|
|
||||||||
d:= Ттр1 + Ттр2; |
|
|
|
|
|
|
|
|
|
|
|
|
61
ГОСТ Р МЭК 61131-3—2016
+ ------------- |
+ |
+ ------- |
— |
+ |
I Му F u n c t i o n | |
I |
+ |
I |
|
|Ini |
Outl|--- --- |
|Ini |
|
I |
| |
Out2|--- --- |
|In2 |
— |
I |
+ ------------- |
+ |
+ ------- |
+ |
d) Вызов функции без результата, но с выражением из выходных переменных
Примечание 2 — Данные примеры представляют различные представления одной и той же фукциональности. Не требуется поддерживать какое-либо автоматическое преобразование между двумя формами представления.
6.6.2.4 Типизированные и перегруженные функции Функция, которая нормально представляет перегруженный оператор, должна быть типизирован
ной. Это можно сделать добавлением символа подчеркивания «_» с последующим требуемым типом, как показано в таблице 21. Типизированная функции выполняется, используя тип данных для своих входных и выходных переменных. Может применяться неявное или явное преобразование типов.
Перегруженная функция преобразования ТО_ххх или TRUNC_xxx с ххх, указывающим на типизи рованный элементарный выходной тип, может быть уточнена предшествующим требуемым элементар ным типом входных данных и следующим символом подчеркивания.
Таблица 21 — Типизированные и перегруженные функции
Номер |
Описание |
1a Перегруженная функция
ADD (ANY_Num to ANY_Num)
|
|
|
Пример |
|
|
|
+ |
-------------------- |
+ |
|
|
| |
A D D |
| |
A N Y _ N U M — | |
|
| — A N Y _ N U M |
||
A N Y _ N U M |
— |
| |
|
| |
A N Y N U M |
— |
| |
|
| |
|
|
+ -------------------- |
|
+ |
1b |
Преобразование входных переменных |
|
|
|
+ -------------------- |
|
+ |
|
|
ANY_ELEMENT TO JN T |
A N Y E L E M E N T A R Y ------ |
| |
TO IN T | --------- |
IN T |
|||
|
|
|
|
+ |
|
+ |
|
|
|
|
|
|
|
|
|
||
2aa> |
Типизированные функции: |
|
|
+ ------------------- |
|
+ |
|
|
|
ADDJNT |
|
|
| A D D _ IN T | |
|
|
||
|
|
IN T |
— | |
|
| — |
IN T |
|
|
|
|
IN T |
— |
| |
|
| |
|
|
|
|
IN T |
— |
| |
|
| |
|
|
|
|
|
|
+ ------------------- |
|
+ |
|
|
2ba) |
Преобразование типов: |
|
|
-|-------------------------- |
|
h |
|
|
|
WORD_TO_INT |
WORD-------- |
|
| WORD |
TO |
IN T | ------- |
IN T |
|
|
|
|
+ |
|
+ |
|
|
|
|
|
|
|
|
|
|
П р и м е ч а н и е — Перегрузка нестандартных функций или типов функциональных блоков не входит в задачу настоящего стандарта.
а) Если поддерживается свойство 2, разработчик предоставляет дополнительную таблицу, показывающую, какие функции являются перегруженными и какие являются типизированными в реализации.
62
ГОСТ Р МЭК 61131-3—2016
Пример 1— Типизированные и перегруженные функции
VAR |
А: IN T ; |
|
+----- + |
||
|
A |
— | |
+ I — C |
||
|
В: |
IN T ; |
В |
— | |
| |
|
С: |
IN T ; |
|
+-- + |
|
END |
VAR |
|
|
|
С:= А+В;
Пр и ме ч ани е 1 — Преобразование типов в показанном выше примере не требуется.
V A R |
|
|
|
A : |
I N T ; |
|
В : R E A L ; |
|
|
C : R E A L ; |
|
E N D |
V A R |
|
V A R |
|
|
|
A : |
I N T ; |
|
В : |
I N T ; |
|
C : R E A L ; |
|
E N D |
V A R |
+ |
---------------- |
----------- + |
+ ------- |
+ |
A — | IN T TO R E A L | ------- |
1 + | — |
|||
+ ---------------- |
|
----------- + |
| |
| |
В |
|
---------------------- |
1 |
| |
|
|
|
|
|
|
|
|
+ ------- |
+ |
C : = IN T _ _ T 0 _ R E A L ( A ) + B ; |
||||
+ ------- |
+ |
+ ---------------------------- |
|
+ |
A — | + | — - I IN T TO R E A L I — |
||||
В - - I |
I ---------------------------- |
+ |
|
+ |
+ ------- |
+ |
|
|
|
C : = IN T T O R E A L ( A + B ) ;
|
|
+ |
------------------- |
+ |
+ -------- |
+ |
C |
A ------- |
| T O R E A L | --------- |
| A D D | — - C |
|||
|
|
+ ------------------- |
|
+ |
I |
I |
|
В ------------------------------------------ |
|
|
|
| |
| |
|
|
|
|
|
+ ------- |
+ |
|
|
C : = T O _ R E A L (A ) + B ; |
||||
|
|
+ ------- |
+ |
+ ------------------- |
|
+ |
C |
A ------- |
| A ---------D D | |
| T O R E A L | — C |
|||
в — |
I |
I |
+ |
|
+ |
|
|
|
|||||
|
|
+ ------- |
+ |
|
|
|
|
|
C : = T O R E A L ( A + B ) ; |
|
а) Объявление типа (язык ST) Ь) Использование (языки FBD и ST)
Пример 2 — Явное и неявное преобразование типов типизированными функциями
V A R |
|
|
|
|
+------- |
+ |
|
|
|
|
A : I N T ; |
А | A D D _ IN T | |
---------------- С |
|
|
|
|
||||
В : |
I N |
T ; |
В |
---- 1 |
| |
|
|
|
|
|
С : |
I N |
T ; |
|
+---------------- |
+ |
|
|
|
|
|
E N D |
V A R |
|
|
С : = A D D _ I N T ( А , В ) ; |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
||
|
Пр им е ч ани е 2 — Преобразование типов в показанном выше примере не требуется. |
|
||||||||
|
|
|
|
Явное преобразование типа данных |
|
|
|
|||
VAR |
|
|
|
|
+ |
+ + |
+ |
|
||
A: |
IN T ; |
|
|
|
||||||
|
|
А— | I NТ_Т 0_R EA L| — I ADD REAL |
| — |
С |
||||||
В: |
REAL; |
|
|
|||||||
С: |
REAL; |
|
|
+ ------------------------ |
+ |
|
|
|
||
|
|
В |
|
|
|
|
||||
END VAR |
|
|
|
|
|
|
||||
|
|
|
+ |
+ |
|
|||||
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
С := ADD_REAL( IN T _TO _R EA L( А ) , |
В ); |
|
|
||
|
|
|
|
Неявное преобразование типа данных |
|
|
|
|||
VAR |
|
|
|
|
|
|
|
|
|
|
|
A: |
|
IN T ; |
|
|
|
+ |
|
+ |
|
|
В: |
|
REAL; |
|
|
|
|
|
||
|
|
|
|
А |
| |
ADD_REAL |
| — |
С |
||
|
С: |
|
REAL; |
|
|
|||||
|
|
|
|
|
I |
|
|
|
||
END |
|
VAR |
|
|
В |
|
|
|
||
|
|
|
I |
|
|
|
||||
|
|
|
|
|
|
|
+ |
|
||
|
|
|
|
|
|
|
+---------- |
|
|
|
|
|
|
|
|
С: = |
ADD REAL |
(А,В) ; |
|
|
|
63
ГОСТ Р МЭК 61131-3—2016
Явное преобразование типа данных
VAR |
|
|
|
|
|
|
|
A : |
I N T ; |
|
+- ------- + |
+---------- + |
|||
В: |
I N T ; |
- - I |
A D D _ IN T | — | I N T _ T O _ R E A L | — |
||||
С: |
REA L; |
||||||
|
I |
| |
+--------- + |
||||
END |
VAR |
|
- - I |
I |
|
||
|
|
|
|
+- |
---------| |
|
|
|
|
|
C : = I N T TO |
REA L(ADD I N T ( A , B ) ) |
|||
|
|
Неявное преобразование типа данных |
|
||||
VAR |
|
|
|
|
|
||
|
A : |
IN T ; |
|
|
+ -------------------- + |
||
|
В: |
IN T ; |
|
|
|||
|
|
|
А — | A D D _ IN T | — С |
||||
|
С: |
REAL; |
|
|
|||
|
|
|
I |
|
|||
END |
VAR |
|
|
|
|||
|
|
В — | |
| |
||||
|
|
|
|
|
|||
|
|
|
С := |
A D D _ IN T (А , |
В ); |
||
а) |
Объявление типов (язык ST) |
|
Ь) Использование (языки FBD и ST) |
||||
6.6.2.5 |
Стандартные функции |
|
|
|
|
6.6.2.5.1 Общие положения Стандартная функция, определенная в этом подпункте расширяемой, может иметь две или более
входных переменных, к которым может быть применена указанная операция. Например, расширяемое сложение дает в качестве выхода сумму всех ее входов. Максимальное число входных переменных расширяемой функции определяется разработчиком. Фактическое число входных переменных в фор мальном вызове расширяемой функции определяется именем формальной входной переменной с са мым большим индексом в последовательности имен переменной.
Пример 1—
Оператор Х:=ADD (Y1, Y2, Y3);
эквивалентен операторуХ:= ADD (IN1:= Y1, IN2:= Y2, IN3:= Y3); Пример 2 —
Оператор /:= MUXJNT (К:=3, IN0:= 1, IN2:= 2, IN4:= 3); эквивалентен оператору /:= 0;
6.6.2.5.2 Функции преобразования типов данных Как показано в таблице 22, функции преобразования типов *_то_**, где «*» — тип входной пере
менной IN, а «**» — тип выходной переменной OUT, например, INT_TO_REAL. Влияние преобразова ний типов на точность и типы ошибок, которые могут возникать во время выполнения операций преоб разования типов, определяется разработчиком.
Т а б л и ц а 22 — Функция преобразования типов данных
Номер Описание
1a Типизированное преоб разование вход_ТО_выход
|
Графическая форма |
Пример использования |
||
|
н-------------------------- |
|
ь |
А:= |
В ------ |
| * ТО * * |
| |
-------А |
INT_TO_REAL(B); |
+------------------------+
(*)— Входной тип данных, например, INT
(**) — Выходной тип данных, например, REAL
64
Продолжение таблицы 22
Номер Описание
1 Ьа).Ь),е) Перегруженное преоб разование ТО_выход
2ас> |
«Старое» перегружен |
|
ное усечение данных |
|
TRUNC |
2ЬС> |
Типизированное |
|
усечение данных |
|
Bxofl_TRUNC_Bbixofl |
2сс> |
Перегруженное |
|
усечение данных |
|
TRUNC_Bbixofl |
3ad> |
Типизированная |
|
функция |
|
вход_ВСО_ТО_выход |
3bd) |
Перегруженная функция |
|
ВСО_ТО_выход |
4ad) |
Типизированная |
|
функция |
|
вход_ТО_ВСО_выход |
4bd) |
Перегруженная функция |
|
ТО_ВСО_выход |
ГОСТ Р МЭК 61131-3— 2016
Графическая форма
|
Л |
---------------------------------- |
|
h |
В ------- |
| |
Т О * * |
| |
--------- А |
+-------------------------------+
—Входной тип данных, например, INT
(* *) — Выходной тип данных, например, REAL
|
+ ----------------------------- |
|
+ |
|
A N Y R E A L |
------- | |
TR O N C |
| -------- |
A N Y I N T |
|
+ ----------------------------- |
|
+ |
|
|
+ ----------------------------- |
|
+ |
|
A N Y _ R E A L |
-------| * _ T R O N C _ * * | --------- |
A N Y _ IN T |
||
|
+ ----------------------------- |
|
+ |
|
|
+ ----------------------------- |
|
+ |
|
A N Y R E A L ------- |
| T R O N C * * | -------- |
A N Y I N T |
||
|
+ ----------------------------- |
|
+ |
|
----------------------------------- |
Л |
|
h |
|
* -------- |
| * B C D T O * * | ---------- |
* * |
||
-------------------------------- |
+ |
|
+ |
|
---------------------------------- |
- | |
|
1- |
|
* ---------- |
| B C D T O * * |
| --------- |
* * |
|
|
+ ------------------------------- |
|
+ |
|
|
+ ------------------------------- |
|
+ |
|
* * ---------- |
I * * |
To B C D * | --------- |
* |
|
|
+ ------------------------------- |
|
+ |
|
* ---------- |
I T O B C D * * |
I --------- |
* * |
|
|
+---------- |
|
+ |
|
Пример использования
A:= TO_REAL(B);
He рекомендуется
A:= REAL_TRUNCJNT(B);
A:= TRUNCJNT(B);
A:= WORD_BCD_TOJNT(B);
A:= BCDJTOJNT(B);
A:= INT_TO_BCD_WORD(B);
A:= TO_BCD_WORD(B);
П р и м е ч а ни е — Примеры использования даны на языке ST.
a)Декларация соответствия на свойство 1 этой таблицы должна включать перечень поддерживаемых специфических преобразований типов и описание эффектов выполнения каждого преобразования.
b)Преобразования типа REAL или LREAL в тип SINT, INT, DINT или LINT производить, округлять в соот ветствии с МЭК 60559, согласно которому, если два ближайших целых значения одинаково близки, результатом является ближайшее целое число, например:
REAL_TO_INT ( 1.6) эквивалентно 2;
REAL_TO_INT ( -1.6) эквивалентно -2;
REAL_TO_INT ( 1.5) эквивалентно 2;
REAL_TO_INT (-1.5) эквивалентно -2;
REALJTOJNT ( 1.4) эквивалентно 1;
REALJTOJNT (-1.4) эквивалентно -1;
REALJTOJNT ( 2.5) эквивалентно 2;
REAL_TOJNT ( -2.5) эквивалентно -2.
°) функция TRUNCJ* используется для усечения по направлению к нулю типов REAL или LREAL, выда вая один из целых типов, например:
TRUNCJNT ( 1.6) эквивалентно INT#1;
TRUNCJNT (-1.6) эквивалентно INT#-1;
TRUNC_SINT ( 1.4) эквивалентно SINT#1;
TRUNC_SINT (-1.4) эквивалентно SINT#-1.
65
ГОСТ Р МЭК 61131-3— 2016
Окончание таблицы 22
d)Функции преобразования *_BCD_TO_** и **_TO_BCD_* выполняют преобразования между переменны ми типа BYTE, WORD, DWORD и LWORD и переменными типа USINT, UINT, UDINT и ULINT (представленными «*» и «**», соответственно), когда соответствующие переменные типа битовой строки закодированы в формате BCD. Например, значением USINT_TO_BCD_BYTE(25) будет 2#0010_0101, а значением WORD_BCD_TO_UINT (2#0011_0110_1001) будет 396.
e)Когда входом или выходом функции преобразования типов является тип STRING или WSTRING, данные символьной строки соответствуют внешнему представлению соответствующих данных, как указано в 6.3.3, в наборе символов, определенном в 6.1.1.
6.6.2.5.3 Преобразование числовых типов данных В преобразовании числовых типов данных используются следующие правила:
1 Тип данных источника расширяется до самого большого типа данных этой категории типов дан
ных.
2 Затем результат преобразуется в самый большой тип данных категории типов данных, к которой принадлежит целевой тип данных.
3 Затем этот результат преобразуется в целевой тип данных.
Если значение исходной переменной не вмещается в целевой тип данных, то есть диапазон зна чений слишком мал, то значение целевой переменной определяется разработчиком.
П р и м е ч а н и е — Реализация функции преобразования может использовать более эффективную процедуру.
Пример — Х:= R E A L T O IN T (70 000.4)
1 Значение (70 000.4) типа REAL преобразуется в значение (70 000.400 000..) типа LREAL.
2 Значение (70 000.4000 000..) типа LREAL преобразуется в значение (70 000) типа LINT. Здесь зна чение округлено до целого.
3 Значение (70 000) типа LINT преобразуется в значение типа INT. Здесь окончательное значе ние определяется разработчиком, поскольку максимальное значение, которое может хранить тип INT равно 65536.
Затем результат записывается в переменную целевого типа данных. Теперь данная переменная хранит то же значение, что и исходная переменная, если целевой тип данных в состоянии хранить это значение.
При преобразовании чисел с плавающей точкой применяются нормальные правила округления, то есть округление до ближайшего целого и, если результат неоднозначен, до ближайшего четного целого.
Тип данных BOOL, используемый в качестве исходного типа данных, рассматривается как тип данных целого без знака, который может хранить значения 0 и 1.
В таблице 23 описаны функции преобразования с деталями, вытекающими из применения опи санных выше правил.
Т а б л и ц а 23 — Преобразование числовых типов данных
Номер |
Функция преобразования |
Детали преобразования |
|||
|
типов данных |
||||
|
|
|
|||
1 |
LREAL |
_ТО_ |
REAL |
Преобразование с округлением, ошибки дают результат, определяе |
|
мый разработчиком |
|||||
|
|
|
|
||
2 |
LREAL |
_ТО_ |
LINT |
Преобразование с округлением, ошибки дают результат, определяе |
|
мый разработчиком |
|||||
|
|
|
|
||
3 |
LREAL |
_ТО_ |
DINT |
Преобразование с округлением, ошибки дают результат, определяе |
|
мый разработчиком |
|||||
|
|
|
|
||
4 |
LREAL |
_TO_ |
INT |
Преобразование с округлением, ошибки дают результат, определяе |
|
мый разработчиком |
|||||
|
|
|
|
66
Продолжение таблицы 23
Номер |
Функция преобразования |
||
|
типов данных |
||
|
|
||
5 |
LREAL |
_T O _ |
SINT |
6 |
LREAL |
_T O _ |
ULINT |
7 |
LREAL |
_T O _ |
UDINT |
8 |
LREAL |
_T O _ |
UINT |
9 |
LREAL |
_T O _ USINT |
|
10 |
REAL _T O _ LREAL |
||
11 |
REAL _T O _ LINT |
||
12 |
REAL _T O _ DINT |
||
13 |
REAL |
_T O _ INT |
|
14 |
REAL _T O _ SINT |
||
15 |
REAL _T O _ ULINT |
||
16 |
REAL _T O _ UDINT |
||
17 |
REAL _TO_ UINT |
||
18 |
REAL |
_TO_ |
USINT |
19 |
LINT |
_TO_ |
LREAL |
2 0 |
LINT |
_TO_ |
REAL |
21 |
LINT |
_TO_ |
DINT |
2 2 |
LINT |
_TO_ |
INT |
23 |
LINT |
_TO_ |
SINT |
24 |
LINT |
_TO_ |
ULINT |
25 |
LINT |
_TO_ |
UDINT |
26 |
LINT |
_TO_ |
UINT |
27 |
LINT |
_TO_ |
USINT |
ГОСТ Р МЭК 61131 -3— 2016
Детали преобразования
Преобразование с округлением, ошибки дают результат, определяе мый разработчиком
Преобразование с округлением, ошибки дают результат, определяе мый разработчиком
Преобразование с округлением, ошибки дают результат, определяе мый разработчиком
Преобразование с округлением, ошибки дают результат, определяе мый разработчиком
Преобразование с округлением, ошибки дают результат, определяе мый разработчиком
Преобразование, сохраняющее значение
Преобразование с округлением, ошибки дают результат, определяе мый разработчиком
Преобразование с округлением, ошибки дают результат, определяе мый разработчиком
Преобразование с округлением, ошибки дают результат, определяе мый разработчиком
Преобразование с округлением, ошибки дают результат, определяе мый разработчиком
Преобразование с округлением, ошибки дают результат, определяе мый разработчиком
Преобразование с округлением, ошибки дают результат, определяе мый разработчиком
Преобразование с округлением, ошибки дают результат, определяе мый разработчиком
Преобразование с округлением, ошибки дают результат, определяе мый разработчиком
Преобразование с потенциальной потерей точности
Преобразование с потенциальной потерей точности
Ошибки диапазона значений дают результат, определяемый разра ботчиком
Ошибки диапазона значений дают результат, определяемый разра ботчиком
Ошибки диапазона значений дают результат, определяемый разра ботчиком
Ошибки диапазона значений дают результат, определяемый разра ботчиком
Ошибки диапазона значений дают результат, определяемый разра ботчиком
Ошибки диапазона значений дают результат, определяемый разра ботчиком
Ошибки диапазона значений дают результат, определяемый разра ботчиком
67