МЭК 61131-3
.pdfГОСТ Р МЭК 61131-3—2016
Т а б л и ц а 30 — Функции битового сдвига
Но |
Описание |
Название |
Объяснение |
||
мер |
|||||
|
|
|
|
||
|
Графическая форма |
|
|
Пример использования а |
|
|
+---------+ |
|
|
||
|
I * * * |
| |
|
|
|
|
A N Y B I T — | I N |
| — A N Y B I T |
|
А:= SHL(IN:=B, N:=5); |
|
|
A N Y I N T — |N |
| |
|
||
|
|
(язык ST) |
|||
|
+---------+ |
|
|||
|
(***) — Имя функции |
|
|
|
|
1 |
Сдвиг влево |
|
SHL |
OUT:= IN, сдвинутому влево на N бит, биты справа |
|
|
заполняются нулями |
||||
|
|
|
|
||
2 |
Сдвиг вправо |
|
SHR |
OUT:= IN, сдвинутому вправо на N бит, биты слева |
|
|
заполняются нулями |
||||
|
|
|
|
||
3 |
Циклический сдвиг влево |
ROL |
OUT:= IN, циклически сдвинутому влево на N бит |
||
4 |
Циклический сдвиг вправо |
ROR |
OUT:= IN, циклически сдвинутому вправо на N бит |
П р и м е ч ан и е 1 — Запись OUT ссылается на результат функции.
Пример —
IN:= 2#0001_1001 of type BYTE, N = 3 SHL0N, 3) = 2М100 1000
SHR0N, 3) = 2U0000 0011
ROL(IN, 3) = 2#1100_1000
ROR(IN, 3) = 2#0010_0011
П р и м е ч ан ие 2 — IN типа BOOL (один бит) не имеет смысла. а) Если входная переменная N меньше нуля, возникает ошибка.
Таблица 31 — Поразрядные логические функции |
|
|
||||
Номер |
|
Описание |
Название |
Символ |
Объяснение |
|
|
(см. примечание 3) |
|||||
|
|
|
|
|
|
|
|
Графическая форма |
|
|
Примеры использования |
||
|
|
+-------- + |
|
|
(см. примечание 5) |
|
|
A N Y _ B IT — | * * * | — A N Y _ B IT |
|
|
А:= AND(B, С, D); |
||
|
A N Y B IT |
— | |
| |
|
|
|
|
|
|
или |
|||
|
: |
— I |
I |
|
|
|
|
: |
— I |
I |
|
|
А:= В & С & D; |
|
A N Y _ B IT |
— | |
| |
|
|
|
|
|
+-------- + |
|
|
|
|
|
(***) — Название или символ |
|
|
|
||
1 |
И |
|
|
AND |
& |
OUT:= IN1 & IN2 &... & INn |
|
|
|
|
|
(см. приме |
|
|
|
|
|
|
чание 1) |
|
2 |
Или |
|
|
OR |
> = 1 |
OUT:= IN1 OR IN2 OR... OR INn |
|
|
|
|
|
(см. приме |
|
|
|
|
|
|
чание 2) |
|
3 |
Исключающее или |
|
XOR |
= 2к+1 |
OUT:= IN1 XOR IN2 XOR... XOR INn |
|
|
|
|
|
|
(см. приме |
|
4 |
Отрицание |
|
NOT |
чание 2) |
OUT:= NOT IN1 (см. примечание 4) |
|
|
|
78
ГОСТ Р МЭК 61131-3—2016
Окончание таблицы 31
Пр и м е ч а н и е 1 — Данный символ подходит для использования в качестве оператора в текстовых язы ках, как показано в таблицах 68 и 71.
Пр и м е ч ан и е 2 — Данный символ не подходит для использования в качестве оператора в текстовых
языках.
П р и м е ч ан и е 3 — Запись IN1, I N 2 , I N n ссылается на входные переменные в нисходящем порядке; OUT ссылается на выходную переменную.
Пр и м е ч ан и е 4 — Графическое отрицание сигналов типа BOOL также может быть осуществлено.
Пр и м е ч ан и е 5 — Примеры использования и объявления даны на языке ST.
a)Когда представление функции поддерживается именем, это отмечается суффиксом «п» в декларации соответствия. Например, «1п» представляет запись «AND».
b)Когда представление функции поддерживается символом, это отмечается суффиксом «s» вдекларации соответствия. Например, «1s» представляет запись «&».
6.6.2.5.10 Функции выбора и сравнения Функции выбора и сравнения перегружены для всех типов данных. Стандартное графическое
представление, имена функций и символов и описания функций сравнения показываются в таблице 32. Стандартное графическое представление, имена функций и символов и описания функций срав нения показываются в таблице 33. Все функции сравнения (за исключением функции NE) являются
расширяемыми.
Сравнение битовых строк выполняется поразрядно от самого левого бита к самому правому. Предполагается, что более короткие битовые строки заполнены слева нулями при сравнении с более длинными битовыми строками, то есть сравнение переменных типа битовой строки будет иметь такой же результат, как сравнение целых чисел без знака.
Т аб л и ца 32 — Функции выбора*1)
Но |
Описание |
Имя |
|
мер |
|||
|
|
||
1 |
Пересылка3)' |
MOVE |
|
|
d) (присваива |
|
|
|
ние) |
|
|
2 |
Двоичный |
SEL |
|
|
выбор*1) |
|
Графическая форма
|
|
+--------------- |
|
+ |
|
|
|
| |
MOVE |
| |
|
A N Y |
— |
| |
|
| - |
A N Y |
|
|
+--------------- |
|
+ |
|
|
|
+------------- |
|
+ |
|
|
|
| |
SEL |
| |
|
BOOL |
— |G |
|
| - |
A N Y |
|
A N Y |
— | IN O |
| |
|
||
A N Y |
— |
| I N |
I |
| |
|
|
|
+------------- + |
|
3 |
Расширяемая |
МАХ |
+----------- + |
|||
|
функция |
мак |
A N Y E LE M E N TA R Y |
| |
MAX |
| |
|
симума |
|
— | |
|
| - A NY E LE M E N TA R Y |
|
|
|
: |
— I |
|
I |
|
|
|
|
|
|||
|
|
|
A N Y _ E L E M E N T A R Y — | |
|
| |
|
|
|
|
|
+----------- + |
||
4 |
Расширяемая |
MIN |
+----------- + |
|||
|
функция |
ми |
|
| |
M IN |
| |
|
нимума |
|
A N Y E L E M E N TA R Y — | |
|
| - A N Y E LE M E N TA R Y |
|
|
|
: |
— I |
|
I |
|
|
|
|
|
|||
|
|
|
A N Y _ E L E M E N T A R Y — | |
|
| |
|
|
|
|
|
+----------- + |
Объяснение/Пример
OUT:= IN
OUT:= INO if G = 0 OUT:= IN1 if G = 1
Пример 1 —
A:= SEL (G ;= 0,
IN0:=X,
IN1:= 5);
OUT:=
MAX(IN1, IN2.....INn);
Пример 2 —
A:= UAX(B, C , D);
OUT:=
MIN (IN1,1N2....
Nn)
Пример 3 —
A:= MIN(B, C, D);
79
ГОСТ Р МЭК 61131-3— 2016
Окончание таблицы 32
Но |
Описание |
Имя |
|
мер |
|||
|
|
||
5 |
Ограничитель |
LIMIT |
Графическая форма
+------------ |
+ |
| L I M I T |
| |
A N Y _ E L E M E N T A R Y — |MN |
| - A N Y _ E L E M E N T A R Y |
A N Y _ E L E M E N T A R Y — | I N |
| |
A N Y _ E L E M E N T A R Y — |MX |
| |
+------------ |
+ |
Объяснение/Пример
OUT:= MIN (MAX(IN, MN),MX);
Пример 4 —
A:= LIMIT(IN:= B,
MN:= 0,
MX:= 5);
6 |
Расширенный MUX |
a , b, c: |
|
|
|
мультиплек |
Выбирает |
одну из N |
|
|
сор k)' |
е) |
входных |
переменных |
|
+------------+ |
|
в зависимости от вход |
|
|
| M U X |
| |
|
|
|
|
ной переменной К |
||
|
A N Y _ E L E M E N T A R Y — |К |
| - |
A N Y _ E L E M E N T A R Y |
|
|
Пример 5 — |
|||
|
A N Y E L E M E N T A R Y — | |
| |
|
|
|
A N Y _ E L E M E N T A R Y — | |
| |
|
А:= MUX(0, В, С, D); |
|
+------------+ |
|
||
|
|
имеет такой же эф |
||
|
|
|
|
|
|
|
|
|
фект как |
|
|
|
|
А:= В; |
П р и м е ч а н и е |
1 — Запись IN1, IN2, INn ссылается на входные переменные в нисходящем порядке; |
|||
OUT ссылается на выходную переменную. |
|
|
|
|
П р и м е ч а н и е |
2 — Примеры использования и объявления даны на языке ST. |
|
a)Функция MOVE имеет ровно одну входную переменную IN типа ANY и одну входную переменную OUT типа ANY.
b)Неименованные входные переменные функции MUX имеют неявные имена INO, IN1....INn-1 в нисхо дящем порядке, где п из общего числа входных переменных. Данные имена могут (но необязательно) быть по казаны в графическом представлении.
c)Функция MUX может быть типизирована в форме MUX_*_**, где * — тип входной переменной К и ** — тип других входных переменных и выхода.
d)Разработчику разрешается (но необязательно) поддерживать выбор среди переменных определенных пользователем типов данных, чтобы подтвердить соответствие этому свойству.
e)Если фактическое значение входной переменной К функции MUX находится вне диапазона {0 ... п-1}, возникает ошибка.
Та б л и ц а 33 — Функции сравнения
Но |
Описание |
|
Имяа> |
Символь> |
Объяснение |
|
мер |
|
(расширяемая: 2 или большее число операндов) |
||||
|
Графическая форма |
|
|
|
Пример использования |
|
|
|
+--------+ |
|
|
А:= GT(B, С, D); // Имя функции |
|
|
ANY ELEM ENTARY |
— | * * * |
| — BOOL |
|
|
или |
|
: |
— I |
I |
|
|
А:= (В>С) & (C>D); // Символ |
|
A NY _ELEM EN TA R Y — | |
| |
|
|
||
|
|
+--------+ |
|
|
|
|
|
(***) Имя или символ |
|
|
|
|
|
1 |
Убывающая последовательность |
GT |
> |
OUT:= |
||
|
|
|
|
|
|
(IN1>IN2)& (IN2>IN3) &.. & (INn-1 > INn) |
2 |
Монотонная последовательность |
GE |
>= |
OUT:= |
||
|
|
|
|
|
|
(IN1>=IN2)&(IN2>=IN3)&.. & (INn-1 >= INn) |
80
|
|
|
|
ГОСТ Р МЭК 61131-3— 2016 |
|
Окончание таблицы 33 |
|
|
|
||
Но |
Описание |
Имя3) |
Символ6) |
Объяснение |
|
мер |
(расширяемая: 2 или большее число операндов) |
||||
|
|
|
|||
3 |
Equality |
EQ |
= |
OUT:= |
|
|
|
|
|
(IN1=IN2)&(IN2=IN3) &.. & (INn-1 = INn) |
|
4 |
Монотонная последовательность |
LE |
<= |
OUT:= |
|
|
|
|
|
(IN1<=IN2)&(IN2<=IN3)&.. & (INn-1 <= INn) |
|
5 |
Increasing sequence |
LT |
< |
OUT:= |
|
|
|
|
|
(IN1<IN2)& (IN2<IN3) &.. & (INn-1 < INn) |
|
6 |
Inequality |
NE |
<> |
OUT:= (IN1<>IN2) (нерасширяемая) |
П р и м е ч а ни е 1 — Запись IN1, IN2.....INn ссылается на входные переменные в нисходящем порядке; OUT ссылается на выходную переменную.
П р и м е ч а ни е 2 — Все символы, показанные в данной таблице, могут использоваться как операторы
втекстовых языках.
Пр и м е ч а ни е 3 — Примеры использования и объявления даны на языке ST.
Пр и м е ч а ни е 4 — Стандартные функции сравнения могут также определяться зависящими от языка, например, на языке релейно-контактных схем.
з) Когда представление функции поддерживается именем, это отмечается суффиксом «п» в декларации соответствия. Например, «1п» представляет запись «GT».
ь) Когда представление функции поддерживается символом, это отмечается суффиксом «э» в декларации соответствия. Например, «1э» представляет запись «>».
К строкам символов применяется таблица 33. Вместо однобайтовой строки может использоваться переменная типа CHAR или WCHAR, соответственно.
При сравнении двух строк разной длины более короткая строка рассматривается расширенной справа символами с нулевым значением до длины более длинной строки. Сравнение осуществляется слева направо на базе числовых значений кодов символа в наборе символов.
Пример — Строка символов ‘Z’ больше строки символов ‘AZ’ (‘Z ’ > ‘А’) и строка символов ‘AZ’ боль ше чем строка ‘АВС’ (‘А’ = ‘А’ и ‘Z’ > ‘В’).
Стандартное графическое представление, имена и символы функций и описания дополнительных функций сравнения строк символов показываются в таблице 34. При выполнении данных операций, позиции символов в строке считаются пронумерованными 1, 2,.... L, начиная с самого левого символа, где L — длина строки.
Ошибка возникает, если:
- фактическое значение какой-либо входной переменной типа ANYJNT в таблице 34 меньше
нуля;
-вычисление функции приводит к попытке (1) получить доступ к несуществующей позиции в стро ке, или (2) получить строку длиннее определенной разработчиком максимальной длины строки;
-аргументы типа данных STRING или CHAR и аргументы типа данных WSTRING или WCHAR смешаны в одной функции.
Таблица 34 |
— Строковые функции |
|
|
|
|||
Но |
Описание |
Графическая форма |
Пример |
||||
мер |
|||||||
|
|
|
|
|
|
||
1 Длина |
|
+ |
------------------ |
+ |
Длина строки |
||
|
строки |
ANY_STRING— | |
LEN |
| — ANY_INT |
А:= LEN('ASTRING’); |
||
|
|
|
+ ------------------ |
|
+ |
... эквивалентно А:= 7; |
81
ГОСТ Р МЭК 61131-3—2016
Окончание таблицы 34
Но
Описание
мер
2Левая
подстрока
3Правая
подстрока
4Средняя
подстрока
5Расши
ряемая
конкате
нация
6Вставить
Графическая форма
|
|
+ ------------------- |
|
+ |
|
|
A N Y _STRING — |
| |
LEN |
| — A N Y _IN T |
|||
|
|
+ ------------------- |
|
+ |
|
|
|
+ ------------------- |
|
|
+ |
|
|
|
| |
RIGHT |
| |
|
|
|
ANY_STRING — | IN |
|
| — |
ANY_STRING |
|||
A N Y _IN T |
— | L |
|
| |
|
|
|
|
+ ------------------- |
|
|
+ |
|
|
|
+ ------------------- |
|
|
+ |
|
|
|
| |
|
M ID |
| |
|
|
ANY STR IN G — | IN |
|
| — |
ANY |
STRING |
||
A N Y _IN T |
— |L |
|
| |
|
|
|
A N Y _IN T |
— |P |
|
| |
|
|
|
|
+ ------------------- |
|
|
+ |
|
|
|
+ ------------------- |
|
|
+ |
|
|
|
| |
CONCAT |
| |
|
|
|
ANY CHARS— | |
|
|
| — |
ANY |
STRING |
|
: — |
I |
|
|
I |
|
|
ANY_CHARS— | |
|
|
| |
|
|
|
|
+ ------------------- |
|
|
+ |
|
|
|
+ |
----------------- |
|
+ |
|
|
|
| |
INSERT |
| |
|
|
|
ANY_STRING— | IN I |
|
| — |
ANY_STRING |
|||
ANY_CHARS |
— | IN 2 |
|
| |
|
|
|
ANY_INT--------- |
| P |
|
| |
|
|
|
|
+ |
----------------- |
|
+ |
|
|
7 Удалить
8 Заменить
9 Найти
|
+ |
------------------DELETE |
+ |
|
|
| |
| |
|
|
ANY_STRING— | IN |
| — |
ANY_STRING |
||
ANY_INT |
— | L |
| |
|
|
ANY_INT |
— |P |
| |
|
|
|
+ |
------------------ |
+ |
|
|
+ ------------------ |
|
+ |
|
|
| |
REPLACE |
| |
|
ANY STRING— | IN I |
| — |
ANY STRING |
||
ANY_CHARS |
— | IN 2 |
| |
|
|
ANY_INT |
— | L |
| |
|
|
ANY_INT |
— |P |
| |
|
|
|
+ ------------------ |
|
+ |
|
|
-------------------- |
+ |
+ |
|
|
|
| F IN D |
| |
|
AN Y _STRING — |
| I N I |
| — A N Y _ IN T |
||
ANY_CHARS |
— |
| IN 2 |
| |
|
|
-------------------- |
+ |
+ |
|
Пример
L самых левых символов из IN
А:= LEFT(IN:=‘ASTR\ L:=3);
эквивалентно A:= ‘AST’;
L самых правых символов из IN
А:= LEFT(IN:=ASTR’, L:=3);
эквивалентно A:= ‘STR’;
L символов из IN, начиная с Р-й по зиции символа
А:= MID(IN:=‘ASTR’, L:=2, Р:=2);
эквивалентно А:= ‘ST’;
Расширяемая конкатенация
А:= CONCATCAB’/CD’/E ’);
эквивалентно А:= ‘ABCDE’;
Вставить строку IN2 в строку IN1 по сле Р-й позиции символа
А:= INSERT(IN1 :=’АВС’,
IN 2:-XY’, Р=2);
эквивалентно А:= ‘ABXYC’;
Удалить L символов из строки IN, начиная с Р-й позиции символа
А:= DELETE(IN:=‘ABXYC\
L:=2, Р:=3);
эквивалентно А:= ‘АВС1;
Заменить L символов строки IN1 строкой IN2, начиная в Р-й позиции символа
А:= REPLACE(IN1 :=‘ABCDE\
IN 2:-X ’, L:=2, P:=3);
эквивалентно A:= ‘ABXE’;
Найти позицию символа в начала первого вхождения строки IN2 в строку IN1. Если вхождения строки IN2 не обнаружены, то OUT:= 0.
А:= FIND(IN1 :=‘АВСВС’, IN2:=‘BC’);
... эквивалентно А:= 2;
Пр и м е ч а н и е 1 — Примеры в этой таблице даются на языке ST.
Пр и м е ч а н и е 2 — Все входные переменные функции CONCAT имеют тип ANY_CHARS, то есть могут быть также типа CHAR или типа WCHAR.
Пр и м е ч а н и е 3 — Входная переменная IN2 функций INSERT, REPLACE, FIND имеет тип ANY_CHARS, то есть может также иметь тип CHAR или WCHAR.
82
ГОСТ Р МЭК 61131-3— 2016
6.6.2.5.11Функции даты и продолжительности времени
В функциях сравнения и выбора разрешено также использование входных и выходных перемен ных, имеющих типы данных времени и продолжительности времени, показанные в таблице 35.
Возникает ошибка, если результат вычисления одной из этих функций превышает определенный разработчиком диапазон значений выходного типа данных.
Т а б л и ц а 35 — Числовые функции типов данных времени и продолжительности времени |
|
|||||
Но |
Описание |
Символ |
IN1 |
IN2 |
OUT |
|
мер |
(имя функции) |
|||||
|
|
|
|
|||
1 а |
ADD |
+ |
TIME, LTIME |
TIME, LTIME |
TIME, LTIME |
|
1 b |
ADD_TIME |
+ |
TIME |
TIME |
TIME |
|
1 с |
ADD_LTIME |
+ |
LTIME |
LTIME |
LTIME |
|
2 а |
ADD |
+ |
TOD, LTOD |
LTIME |
TOD, LTOD |
|
2 Ь |
ADD_TOD_TIME |
+ |
TOD |
TIME |
TOD |
|
2 с |
AD D_LTOD_LTIME |
+ |
LTOD |
LTIME |
LTOD |
|
За |
ADD |
+ |
DT, LDT |
TIME, LTIME |
DT, LDT |
|
ЗЬ |
ADD_DT_TIME |
+ |
DT |
TIME |
DT |
|
Зс |
ADD_LDT_LTIME |
+ |
LDT |
LTIME |
LDT |
|
4а |
SUB |
- |
TIME, LTIME |
TIME, LTIME |
TIME, LTIME |
|
4Ь |
SUB_TIME |
- |
TIME |
TIME |
TIME |
|
4с |
SUB_LTIME |
- |
LTIME |
LTIME |
LTIME |
|
5а |
SUB |
- |
DATE |
DATE |
TIME |
|
5Ь |
SUB_DATE_DATE |
- |
DATE |
DATE |
TIME |
|
5с |
SUB_LDATE_LDATE |
- |
LDATE |
LDATE |
LTIME |
|
6 а |
SUB |
- |
TOD, LTOD |
TIME, LTIME |
TOD, LTOD |
|
6 Ь |
SUB_TOD_TIME |
- |
TOD |
TIME |
TOD |
|
6 с |
SUB_LTOD_LTIME |
- |
LTOD |
LTIME |
LTOD |
|
7а |
SUB |
- |
TOD, LTOD |
TOD, LTOD |
TIME, LTIME |
|
7Ь |
SUB_TOD_TOD |
- |
TOD |
TOD |
TIME |
|
7с |
SUB_TOD_TOD |
- |
LTOD |
LTOD |
LTIME |
|
8 а |
SUB |
- |
DT, LDT |
TIME, LTIME |
DT, LDT |
|
8 Ь |
SUB_DT_TIME |
- |
DT |
TIME |
DT |
|
8 с |
SUB_LDT_LTIME |
- |
LDT |
LTIME |
LDT |
|
9а |
SUB |
- |
DT, LDT |
DT, LDT |
TIME, LTIME |
|
9Ь |
SUB_DT_DT |
- |
DT |
DT |
TIME |
|
9с |
SUB_LDT_LDT |
- |
LDT |
LDT |
LTIME |
|
1 0 а |
MUL |
* |
TIME, LTIME |
ANY_NUM |
TIME, LTIME |
|
|
||||||
1 0 Ь |
MUL_TIME |
* |
TIME |
ANY_NUM |
TIME |
|
|
||||||
Юс |
MUL_LTIME |
* |
LTIME |
ANY_NUM |
LTIME |
|
|
||||||
1 1 а |
DIV |
1 |
TIME, LTIME |
ANY_NUM |
TIME, LTIME |
83
ГОСТ Р МЭК 61131-3—2016
Окончание таблицы 35 |
|
|
|
|
||
Но |
Описание |
Символ |
IN1 |
IN2 |
OUT |
|
мер |
(имя функции) |
|||||
|
|
|
|
|||
11Ь |
DIVTIME |
/ |
TIME |
ANY_NUM |
TIME |
|
11с |
DIV_LTIME |
/ |
LTIME |
ANY_NUM |
LTIME |
П р и м е ч а ни е — Данные стандартные функции поддерживают перегрузку, но только в пределах обоих наборов тапов данных (TIME, DT, DATE, TOD) и (LTIME, LDT, DATE, LTOD).
Пример — Операторы языка ST
Х:= DT#1986-04-28-08:40:00; Y:= DT_TO_TOD(X);
W:= DT_TO_DATE(X);
имеют такой же результат, как и операторы с «извлеченными» данными.
Х:= DT1H986-04-28-08:40:00; Y:= TIME_OF_DAY#08:40:00; W:= DATE#1986-04-28;
Функции конкатенации и расщепления данных, показанные в таблице 36, определены и для об работки данных даты и времени. Дополнительно определена функция получения дня недели.
Возникает ошибка, если результат вычисления одной из этих функций превышает определенный разработчиком диапазон значений выходного типа данных.
Таблица 36 — Дополнительные CONCAT и SPLIT функции для типов данных даты и времени
Но |
Описание |
|
Графическая форма |
|
Пример |
мер |
|
|
|||
|
|
|
|
|
|
|
Конкатенация типов данных даты и времени |
|
|
||
1a CONCAT_DATE |
|
+-----------------+ |
Соединить дату и время |
||
|
_TOD |
|
VAR |
||
|
|
| CONCAT DATE TOD |
| |
||
|
|
|
myD: DATE; |
||
|
DATE |
— |
|DATE |
|— DT |
|
|
END_VAR |
||||
|
TOD |
— |
|TOD |
| |
|
|
|
|
+-----------------+ |
myD:= CONCAT_DATE_TOD |
(D#2010-03-12, TOD#12:30:00);
1b |
CONCAT DATE |
|
|
|
|
_LTOD |
|
+---------------- |
+ |
|
|
|
| CONCAT_DATE_LTOD| |
|
|
DATE |
— |
|DATE |
|— LDT |
|
LTOD |
— |
|LTOD |
| |
|
|
|
+---------------- |
+ |
2 |
CONCAT_DATE |
|
+------------ |
+ |
|
|
|
| CONCAT DATE |
| |
|
ANY |
INT — |YEAR |
|— DATE |
|
|
ANY_INT — |MONTH |
| |
||
|
ANY_INT — |DAY |
| |
||
|
|
|
+------------ |
+ |
Соединить дату и время суток VAR
myD: DATE; END_VAR
myD:= CONCAT_DATE_LTOD (D#2010-03-12,
TOD#12:30:12.1223452);
Соединить дату и время суток VAR
myD: DATE; END_VAR
myD:= CONCATJDATE (2010,3,12);
84
Продолжение таблицы 36 |
|
|
|
|
|
Но |
Описание |
|
Графическая форма |
|
|
мер |
|
|
|||
|
|
|
|
|
|
За |
CONCAT TOD |
|
| |
CONCAT_TOD |
|
|
|
|
|
||
|
ANY_INT |
■|HOUR |
— TOD |
||
|
ANY_INT |
■|MINUTE |
|
||
|
ANY_INT - 1SECOND |
|
|||
|
ANY |
INT |
- 1MILLISECOND |
|
|
|
|
|
+------------------------ |
|
|
3b |
CONCAT LTOD |
|
| |
CONCAT_LTOD |
|
|
|
|
|
||
|
ANY_INT |
■|HOUR |
— LTOD |
||
|
ANY_INT - |MINUTE |
|
|||
|
ANY_INT - |SECOND |
|
|||
|
ANY |
INT |
- |MILLISECOND |
|
|
|
|
|
+-------------------------- |
|
|
4a |
CONCAT DT |
|
|
|
|
|
ANY |
|
| |
CONCAT_DT |
|
|
IN T |
— |YEAR |
— DT |
||
|
ANY_ IN T |
- - |MONTH |
|
||
|
ANY_ IN T |
- - | DAY |
|
||
|
ANY_ IN T |
- - | HOUR |
|
||
|
ANY_ IN T |
- - |MINUTE |
|
||
|
ANY |
IN T |
— |SECOND |
|
|
|
ANY |
IN T |
- - |M ILLISECOND |
|
|
|
|
|
+ |
------------------------- |
|
4b |
CONCAT LDT |
|
+ --------------------------- |
|
|
|
|
|
| |
CONCATLDT |
|
|
ANY_INT |
— |YEAR |
— LDT |
||
|
ANY_INT |
— |MONTH |
|
||
|
ANY_INT |
— |DAY |
|
||
|
ANY_INT |
— |HOUR |
|
||
|
ANY_INT |
— |MINUTE |
|
||
|
ANY_INT |
— |SECOND |
|
||
|
ANY_INT |
— |MILLISECOND |
|
||
|
|
|
+------------ |
|
|
|
Расщепление типов даты и времени |
|
|||
|
SPLIT DATE |
+--------------- |
|
-----+ |
|
|
|
| |
SPLIT DATE | |
|
|
|
DATE— |IN |
|
YEAR|- ANY_INT |
||
|
|
I |
|
MONTH|- ANY_INT |
|
|
|
I |
|
DAY | - |
ANY INT |
|
|
+ --------------- |
|
-----------+ |
|
См. примечание 2
ГОСТ Р МЭК 61131-3— 2016
Пример
Соединить время суток VAR
myTOD: TOD; END_VAR
myTD:=CONCAT_TOD(16,33,12,0);
Соединить время суток VAR
myTOD: LTOD; END_VAR
myTD:= CONCAT_TOD (16,33,12,0);
Соединить время суток VAR
myDT: DT; Day: USINT;
END_VAR
Day := 17; myDT:= CONCAT_DT (2010,3,Day,12,33,12,0);
Соединить время суток VAR
myDT: LDT; Day: USINT;
END_VAR
Day := 17;
myDT:= CONCATLDT (2010,3,Day,12,33,12,0);
Расщепить дату VAR
myD: DATE:= DATE#2010-03-10; myYear: UINT;
myMonth, myDay: USINT;
END_VAR SPLIT_DATE
(myD, myYear, myMonth, myDay);
85
ГОСТ Р МЭК 61131-3—2016
Продолжение таблицы 36 |
|
|
|
|
|
|
|
|
|
Но |
Описание |
|
|
Графическая форма |
|
|
Пример |
||
мер |
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
6а |
SPLIT_TOD |
|
+-------------------------- |
|
|
+ |
|
|
Расщепить время суток |
|
|
|
| |
SPLIT |
TOD |
| |
ANY_INT |
VAR myTOD: TOD:= TOD#14:12:03; |
|
|
|
TOD— |I N |
|
HOUR|— |
myHour, myMin, mySec: USINT; |
||||
|
|
|
| |
MINUTE|— |
ANY_INT |
||||
|
|
|
myMilliSec: UINT; |
||||||
|
|
|
| |
SECOND|— |
ANY_INT |
||||
|
|
|
END_VAR |
||||||
|
|
|
| |
M ILLISECO ND|— |
ANY_INT |
||||
|
|
|
SPLIT_TOD(myTOD, myHour, |
||||||
|
|
|
+-------------------------- |
|
|
+ |
|
|
|
|
|
См. примечание 2 |
|
|
|
|
myMin, mySec, myMilliSec); |
||
|
|
|
|
|
|
|
|||
6Ь |
SPLIT_LTOD |
|
+------------------------- |
|
|
+ |
|
|
Расщепить время суток |
|
|
|
| |
SPLIT |
LTOD |
| |
|
|
VARmyTOD: LTOD:=TOD#14:12:03; |
|
|
LTOD— |IN |
HOUR|— |
ANY |
INT |
myHour, |
|||
|
|
|
| |
|
MINUTE|— |
ANY_INT |
myMin, mySec: USINT; |
||
|
|
|
| |
|
SECOND|— |
ANY |
INT |
||
|
|
|
|
myMilliSec: UINT; |
|||||
|
|
|
| |
M ILLISECOND|— |
ANY_INT |
||||
|
|
|
+------------------------- |
|
|
+ |
|
|
END_VAR |
|
|
См. примечание 2 |
|
|
|
|
SPLIT_TOD(myTOD, myHour, |
||
|
|
|
|
|
|
myMin, mySec, myMilliSec); |
|||
|
|
|
|
|
|
|
|
|
|
7а |
SPLIT_DT |
+ --------------------------- |
|
|
+ |
|
|
Расщепить дату |
|
|
|
| |
SPLIT |
DT |
| |
ANY_INT |
VAR myDT: DT |
||
|
|
DT— | I N |
|
YEAR|— |
:= DT#2010-03-10-14:12:03:00; |
||||
|
|
| |
|
|
MONTH|— |
ANY_INT |
|||
|
|
|
|
myYear, myMilliSec: UINT; |
|||||
|
|
| |
|
|
DAY|— |
ANY |
IN T |
||
|
|
|
|
myMonth, myDay, myHour, |
|||||
|
|
| |
|
|
HOUR|— |
ANY |
IN T |
||
|
|
|
|
myMin, |
|||||
|
|
| |
|
M IN UTE|— |
ANY_INT |
||||
|
|
| |
|
SECOND|— |
ANY_INT |
mySec: USINT; |
|||
|
|
| |
M ILLIS E C O N D |— |
ANY_INT |
END_VAR |
||||
|
|
+ --------------------------- |
|
|
+ |
|
|
SPLIT_DT(myDT, myYear, myMonth, |
|
|
|
См. примечание 2 |
|
|
|
|
|||
|
|
|
|
|
|
myDay, |
|||
|
|
|
|
|
|
|
|
|
myHour, myMin, mySec, myMilliSec); |
7Ь |
SPLIT_LDT |
|
+-------------------------- |
|
|
+ |
|
|
Расщепить дату |
|
|
|
| SPLIT_LDT | |
ANY_INT |
VAR myDT: LDT |
||||
|
|
LDT— | I N |
|
YEAR|— |
:= DT#2010-03-10-14:12:03:00; |
||||
|
|
|
| |
|
MONTH|— |
ANY |
IN T |
||
|
|
|
|
myYear, myMilliSec: UINT; UINT; |
|||||
|
|
|
| |
|
DAY|— |
A N Y I N T |
|||
|
|
|
|
myMonth, myDay, myHour, myMin, |
|||||
|
|
|
| |
|
HOUR|— |
ANY_INT |
|||
|
|
|
|
mySec: USINT; |
|||||
|
|
|
| |
MINUTE|— |
ANY_INT |
||||
|
|
|
| |
SECOND|— |
ANY_INT END_VAR |
||||
|
|
|
| |
M ILLISEC O N D |— |
ANY_INT |
SPLIT_DT(myDT, myYear, myMonth, |
|||
|
|
|
+ |
|
|
+ |
|
|
|
|
|
|
|
|
|
|
myDay, |
||
|
|
|
|
|
|
|
|
|
|
|
|
См. примечание 2 |
|
|
|
|
myHour, myMin, mySec, myMilliSec); |
||
|
Получить день недели |
|
|
|
|
|
|
|
|
8 |
DAY_0F_WEЕК |
|
+ |
|
|
+ |
|
|
Получить день недели: |
|
|
|
|
|
|
|
VAR myD: DATE:= DATE#2010-03- |
||
|
|
|
| DAY OF WEEK | |
|
|
||||
|
|
DATE— | I N |
|
| - |
ANY_INT |
10; myDoW: USINT; |
|||
|
|
|
+-------------------------- |
|
|
+ |
|
|
END_VAR |
|
|
См. примечание 2 |
|
|
|
|
myDoW:= DAY_OF_WEEK(myD); |
||
|
|
|
|
|
|
|
Функция DAY_OF_WEEK возвращает 0 для воскресенья, 1 для понедельника,..., 6 для субботы
86
ГОСТ Р МЭК 61131 -3— 2016
Окончание таблицы 36
Пр и м е ч а н и е 1 — Тип данных входной переменной YEAR должен быть, по меньшей мере, 16-битовым типом для поддержки допустимого значения года.
Пр и м е ч а н и е 2 — Типы данных для типов данных выходных переменных ANYJNT определяет разработчик.
П р и м е ч а н и е 3 — Разработчик может определять дополнительные входные и выходные переменные в соответствии с поддерживаемой точностью, например, микросекунды и наносекунды.
6.6.2.5.12Функции преобразования порядка следования байтов
Функции преобразования порядка следования байтов преобразуют этот порядок при обмене ин формацией с определенным разработчиком PLC.
Порядок следования байтов определяет упорядочение байтов в длинных типах данных и пере менных.
Значения данных в порядке big endian (от старшего к младшему) помещаются в байтах памяти, начиная елевого байта и оканчивая правым.
Значения данных в порядке little endian (от младшего к старшему) помещаются в байтах памяти, начиная с правого байта и оканчивая левым.
Независимо от порядка следования байтов, битовое смещение 0 адресует самый правый бит типа данных.
Использование частичного доступа с маленькими числам возвращает нижнюю часть значения не зависимо от указанного порядка следования байтов.
Пример 1 — Порядок следования байтов
TYPE D: DWORD:= 16#1234_5678; E N D TY P E ; Расположение в памяти
для порядка big endian: 16#12, 16#34,16#56,16#78 для порядка little endian: 16#78, 16#56,16#34,16#12.
Пример 2 — Порядок следования байтов
TYPE L: ULINT:= 16#1234_5678_9ABC_DEF0; END TYPE; Расположение в памяти
для порядка big endian: 16#12, 16#34,16#56, 16#78, 16#9А, 16#ВС, 16#DE, 16#F0 для порядка little endian: 16#F0,16#DE, 16#BC, 16#9A, 16#78, 16#56, 16#34, 16#12
В качестве входных и выходных переменных функций преобразования порядка следования бай тов поддерживаются следующие типы данных:
-AN YJNT с размером больше или равным 16 бит.
-ANY_BIT с размером больше или равным 16 бит.
-ANYJREAL;
-WCHAR;
-TIME;
-массивы этих типов данных;
-структуры, содержащие компоненты этих типов данных.
Другие типы не преобразуются, но могут содержаться в структурах, подлежащих преобразованию. Функции преобразования порядка следования байтов показаны в таблице 37.
87