Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

МЭК 61131-3

.pdf
Скачиваний:
111
Добавлен:
23.05.2019
Размер:
9.36 Mб
Скачать

ГОСТ Р МЭК 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]