Главная страница
Навигация по странице:

  • Косвенный оператор (content)

  • 10.7 Вспомогательные функции INDEXOF Возвращает внутренний индекс POU. Пример ST: var1 := INDEXOF(POU2); SIZEOF

  • 10.8 Оператор вызова CAL

  • 10.9 Явное преобразование типов

  • Преобразования между целочисленными типами

  • 10.10 Математические функции ABS

  • Приложение В: Операнды в CoDeSys

  • Константы BOOL BOOL константы могут иметь значение TRUE или FALSE. TIME

  • Целочисленные константы

  • Типизированные константы

  • Руководство пользователя по программированию плк в CoDeSys 3


    Скачать 5.57 Mb.
    НазваниеРуководство пользователя по программированию плк в CoDeSys 3
    Дата25.10.2022
    Размер5.57 Mb.
    Формат файлаpdf
    Имя файлаCODESYS_manual.pdf
    ТипРуководство пользователя
    #754593
    страница37 из 50
    1   ...   33   34   35   36   37   38   39   40   ...   50
    BITADR
    BITADR возвращает DWORD смещение переменной от начала сегмента данных. Результат зависит от того, включена или нет опция байтовой адресации.
    VAR var1 AT %IX2.3:BOOL; bitoffset: DWORD;
    END_VAR
    Пример ST:
    Bitoffset := BITADR(var1); (* Результат 19, если byte addressing=TRUE, или 35, если byte addressing=FALSE*)
    Пример IL:
    LD Var1
    BITADR

    Приложение A: Операторы и функции МЭК
    CoDeSys V2.3 10-14
    ST Var2
    Косвенный оператор (content)
    Косвенное обращение через указатель производится путем добавления оператора "^" после имени указателя.
    Пример ST: pt:POINTER TO INT; var_int1:INT; var_int2:INT; pt := ADR(var_int1); var_int2:=pt^;
    10.7
    Вспомогательные функции
    INDEXOF
    Возвращает внутренний индекс POU.
    Пример ST: var1 := INDEXOF(POU2);
    SIZEOF
    Возвращает размер переменной в байтах.
    Пример IL: arr1:ARRAY[0..4] OF INT;
    Var1 INT
    LD arr1
    SIZEOF
    ST
    Var 1
    (* Результат 10 *)
    Пример ST: var1 := SIZEOF(arr1);
    TIME
    Функция TIME возвращает время в миллисекундах от начала работы системы в формате TIME.
    Пример IL:
    TIME
    ST systime (*Результат, например.: T#35m11s342ms *)
    Пример ST:
    systime:=TIME();

    Приложение A: Операторы и функции МЭК
    CoDeSys V2.3 10-15
    Пример FBD:
    INI
    INI можно использовать для инициализации retain переменных, содержащихся в экземпляре функ- ционального блока.
    Синтаксис: := INI(Если второй операнд равен TRUE, то все энергонезависимые переменные, определенные в функ- циональном блоке FB, будут инициализироваться.
    Пример ST: fbinst экземпляр функционального блока fb, в котором определена retain переменная
    retvar.
    Объявление: fbinst:fb; b:bool;
    Фрагмент реализации: b := INI(fbinst, TRUE); ivar:=fbinst.retvar (* => retvar инициализирована *)
    Пример IL:
    LD fbinst
    INI TRUE
    ST b
    Пример FBD:
    10.8
    Оператор вызова
    CAL
    Вызывает функциональный блок или программу.
    Применяется в IL для вызова экземпляра функционального блока, входные переменные помещаются в скобках вслед за его именем.
    Пример: Вызов экземпляра функционального блока Inst, где входные переменные Par1 и Par2 равны
    0 и TRUE соответственно.
    CAL INST(PAR1 := 0, PAR2 := TRUE)
    10.9
    Явное преобразование типов
    Неявное преобразование данных из ‘большего’ типа в ‘меньший’ запрещено стандартом (например, из INT в BYTE или DINT в WORD). Если подобное преобразование действительно необходимо, оно должно быть выражено явно. Явные преобразования работают практически для всех базовых типов данных.

    Приложение A: Операторы и функции МЭК
    CoDeSys V2.3 10-16
    Синтаксис:
    <баз.Тип1>_TO_<баз..Тип2>
    Преобразования в строку …_TO_STRING используют выравнивание влево. Если строка оказывается слишком короткой, результат будет обрезан.
    BOOL_TO
    Преобразование типа BOOL в другой тип:
    Для числовых типов результат равен 1, когда операнд TRUE, и 0, если операнд FALSE.
    Для типа STRING результат - это слово TRUE или FALSE.
    Примеры IL:
    LD
    TRUE
    BOOL_TO_INT
    ST
    I
    (*Результат: 1 *)
    LD
    TRUE
    BOOL_TO_STRING
    ST str
    (*Результат: 'TRUE' *)
    LD
    TRUE
    BOOL_TO_TIME
    ST t
    (*Результат: T#1ms *)
    LD
    TRUE
    BOOL_TO_TOD
    ST
    (*Результат: TOD#00:00:00.001 *)
    LD
    FALSE
    BOOL_TO_DATE
    ST dat
    (*Результат: D#1970-01-01 *)
    LD
    TRUE
    BOOL_TO_DT
    ST dandt
    (*Результат:DT#1970-01-01-00:00:01 *)
    Примеры ST:
    i:=BOOL_TO_INT(TRUE);
    (* Результат:1 *) str:=BOOL_TO_STRING(TRUE);
    (* Результат:"TRUE" *) t:=BOOL_TO_TIME(TRUE);
    (* Результат:T#1ms *) tof:=BOOL_TO_TOD(TRUE);
    (* Результат:TOD#00:00:00.001 *) dat:=BOOL_TO_DATE(FALSE);
    (* Результат:D#1970 *) dandt:=BOOL_TO_DT(TRUE);
    (* Результат:DT#1970-01-01-00:00:01 *)
    Примеры FBD:

    Приложение A: Операторы и функции МЭК
    CoDeSys V2.3 10-17
    (*Результат: 1 *)
    (*Результат: 'TRUE' *)
    (*Результат: T#1ms *)
    (*Результат: TOD#00:00:00.001 *)
    (*Результат: D#1970-01-01 *)
    (*Результат: DT#1970-01-01-00:00:01 *)
    TO_BOOL
    Преобразование других типов в BOOL:
    Результат TRUE, когда операнд не нулевой, иначе FALSE.
    Для типа STRING, если строка состоит из слова "TRUE", результат равен TRUE, иначе FALSE.
    Примеры IL:
    LD
    213
    BYTE_TO_BOOL
    ST b
    (*Результат: TRUE *)
    LD
    0
    INT_TO_BOOL
    ST b
    (*Результат: FALSE *)
    LD
    T#5ms
    TIME_TO_BOOL
    ST b
    (*Результат: TRUE *)
    LD
    'TRUE'
    STRING_TO_BOOL
    ST b
    (*Результат: TRUE *)
    Примеры ST: b := BYTE_TO_BOOL(2#11010101);
    (* Результат: TRUE *) b := INT_TO_BOOL(0);
    (* Результат: FALSE *) b := TIME_TO_BOOL(T#5ms);
    (* Результат: TRUE *) b := STRING_TO_BOOL('TRUE');
    (* Результат: TRUE *)
    Примеры FBD:

    Приложение A: Операторы и функции МЭК
    CoDeSys V2.3 10-18
    (*Результат: TRUE *)
    (*Результат: FALSE *)
    (*Результат: TRUE *)
    (*Результат: TRUE *)
    Преобразования между целочисленными типами
    Преобразования из одного целочисленного типа в другой:
    При преобразовании большего типа в меньший, Вы рискуете потерять информацию. Если число превосходит верхний предел данного типа, старшие байты числа игнорируются.
    Пример ST:
    si := INT_TO_SINT(4223);
    (* Результат: 127 *)
    Число 4223 (16#107F в шестнадцатеричной форме) сокращается до переменной типа SINT, теряя старший байт, и принимает значение 127 (16#7F в шестнадцатеричной форме).
    Пример IL:
    LD
    2
    INT_TO_REAL
    MUL 3.5
    Пример FBD:
    REAL_TO-/ LREAL_TO
    Преобразования типов REAL или LREAL в другие типы:
    Значение числа будет округлено вверх до целого и преобразовано в нужный тип. За исключением типов STRING, BOOL, REAL и LREAL. При преобразовании большего типа в меньший, вы рискуете потерять информацию.
    При преобразовании в STRING используется до 16 цифр. Если строка имеет не достаточный размер, результат будет обрезан справа.
    Пример ST: i := REAL_TO_INT(1.5);
    (* Результат: 2 *) j := REAL_TO_INT(1.4);
    (* Результат: 1 *) i := REAL_TO_INT(-1.5);
    (* Результат: -2 *) j := REAL_TO_INT(-1.4);
    (* Результат: -1 *)
    Пример IL:
    LD
    2.7
    REAL_TO_INT
    GE
    %MW8
    Пример FBD:

    Приложение A: Операторы и функции МЭК
    CoDeSys V2.3 10-19
    TIME_TO/TIME_OF_DAY
    Преобразования типов TIME или TIME_OF_DAY в другие типы:
    Физически значение времени сохраняется в переменной типа DWORD, выраженное в миллисекундах (начиная с 0 часов для TIME_OF_DAY). Собственное это число и будет преобразовано. При преобразовании в меньший тип, вы рискуете потерять информацию.
    При преобразовании в STRING образуется соответствующая МЭК текстовая строка.
    Примеры IL:
    LD
    T#12ms
    TIME_TO_STRING
    ST str
    (*Результат: 'T#12ms' *)
    LD
    T#300000ms
    TIME_TO_DWORD
    ST dw
    (*Результат: 300000 *)
    LD
    TOD#00:00:00.012
    TOD_TO_SINT
    ST si
    (*Результат: 12 *)
    Примеры ST: str :=TIME_TO_STRING(T#12ms);
    (* Результат: T#12ms *) dw:=TIME_TO_DWORD(T#5m);
    (* Результат: 300000 *) si:=TOD_TO_SINT(TOD#00:00:00.012); (* Результат: 12 *)
    Примеры FBD:
    DATE_TO/DT_TO
    Преобразования типов DATE или DATE_AND_TIME в другие типы:
    Физически значение даты сохраняется в переменной типа DWORD, выраженное в секундах начиная с 1 января 1970 г. Это число и будет преобразовано. При преобразовании в меньший тип вы рискуете потерять информацию.
    При преобразовании в STRING образуется соответствующая МЭК текстовая строка.
    Примеры IL:

    Приложение A: Операторы и функции МЭК
    CoDeSys V2.3 10-20
    LD D#1970-01-01
    (* Результат FALSE *)
    DATE_TO_BOOL
    ST b
    LD D#1970-01-15
    (*Результат 29952 *)
    DATE_TO_INT
    ST i
    LD DT#1970-01-15-05:05:05
    (*Результат 129 *)
    DT_TO_BYTE
    ST byt
    LD DT#1998-02-13-14:20
    (*Результат 'DT#1998-02-13-14:20' *)
    DT_TO STRING
    ST str
    Примеры ST: b :=DATE_TO_BOOL(D#1970-01-01);
    (* Результат: FALSE *) i :=DATE_TO_INT(D#1970-01-15);
    (* Результат: 29952 *) byt :=DT_TO_BYTE(DT#1970-01-15-05:05:05); (* Результат: 129 *) str:=DT_TO_STRING(DT#1998-02-13-14:20);
    (*Результат:'DT#1998-02-13-14:20'
    *)
    Примеры FBD:
    STRING_TO
    Преобразования типа STRING в другие типы:
    Содержимое строки должно соотноситься с желаемым типом данных, в противном случае преобразование дает 0.

    Приложение A: Операторы и функции МЭК
    CoDeSys V2.3 10-21
    Пример IL:
    LD 'TRUE'
    (*Результат: TRUE *)
    STRING_TO_BOOL
    ST b
    LD 'abc34'
    (*Результат: 0 *)
    STRING_TO_WORD
    ST w
    LD 't#127ms'
    (*Результат: T#127ms *)
    STRING_TO_TIME
    ST t
    Примеры ST: b :=STRING_TO_BOOL('TRUE');
    (* Результат: TRUE *) w :=STRING_TO_WORD('abc34');
    (* Результат: 0 *) t :=STRING_TO_TIME('T#127ms');
    (* Результат: T#127ms *)
    Примеры FBD:
    TRUNC
    Преобразование из REAL в INT. Используется только целочисленная часть аргумента.
    При преобразовании в меньший тип вы рискуете потерять информацию.
    Примеры ST: i:=TRUNC(1.9);
    (* Результат: 1 *) i:=TRUNC(-1.4);
    (* Результат: 1 *)
    LD
    2.7
    TRUNC
    GE
    %MW8

    Приложение A: Операторы и функции МЭК
    CoDeSys V2.3 10-22
    10.10
    Математические функции
    ABS
    Возвращает абсолютное значение числа. Например, ABS(-2) равно 2.
    Возможны следующие комбинации типов аргумента и результата:
    Параметр Результат
    INT
    INT, REAL, WORD, DWORD, DINT
    REAL
    REAL
    BYTE
    INT, REAL, BYTE, WORD, DWORD, DINT
    WORD
    INT, REAL, WORD, DWORD, DINT
    DWORD
    REAL, DWORD, DINT
    SINT
    REAL
    USINT
    REAL
    UINT
    INT, REAL, WORD, DWORD, DINT, UDINT, UINT
    DINT
    REAL, DWORD, DINT
    UDINT
    REAL, DWORD, DINT, UDINT
    Пример IL:
    LD
    2
    ABS
    ST i
    (*Результат: 2 *)
    Примеры ST:
    i:=ABS(-2);
    Пример FBD:
    SQRT
    Квадратный корень числа.
    Аргумент может быть типов BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT,
    UDINT, результат должен быть типа REAL.
    Пример IL:
    LD
    16
    SQRT
    ST q
    (*Результат: 4 *)
    Примеры ST: q:=SQRT(16);
    Пример FBD:
    LN
    Натуральный логарифм числа.

    Приложение A: Операторы и функции МЭК
    CoDeSys V2.3 10-23
    Аргумент может быть типов BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT,
    UDINT, результат должен быть типа REAL.
    Пример IL:
    LD
    45
    LN
    ST q
    (*Результат: 3.80666 *)
    Примеры ST:
    q:=LN(45);
    Пример FBD:
    LOG
    Десятичный логарифм числа.
    Аргумент может быть типов BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT,
    UDINT, результат должен быть типа REAL.
    Пример IL:
    LD
    314.5
    LOG
    ST q
    (*Результат: 2.49762 *)
    Примеры ST:
    q:=LOG(314.5);
    Пример FBD:
    EXP
    Экспонента.
    Аргумент может быть типов BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT,
    UDINT, результат должен быть типа REAL.
    Пример IL:
    LD
    2
    EXP
    ST q
    (*Результат: 9.7448e+009 *)
    Примеры ST: q:=EXP(2);
    Пример FBD:
    SIN
    Синус.

    Приложение A: Операторы и функции МЭК
    CoDeSys V2.3 10-24
    Аргумент может быть типов BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT,
    UDINT, результат должен быть типа REAL. Аргумент измеряется в радианах.
    Пример IL:
    LD
    0.5
    SIN
    ST q
    (*Результат: 0.479426 *)
    Пример ST: q:=SIN(0.5);
    Пример FBD:
    COS
    Косинус.
    Аргумент может быть типов BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT,
    UDINT, результат должен быть типа REAL. Аргумент измеряется в радианах.
    Пример IL:
    LD
    0.5
    COS
    ST q
    (*Результат: 0.877583 *)
    Пример ST: q:=COS(0.5);
    Пример FBD:
    TAN
    Тангенс.
    Аргумент может быть типов BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT,
    UDINT, результат должен быть типа REAL. Аргумент измеряется в радианах.
    Пример IL:
    LD
    0.5
    TAN
    ST q
    (*Результат: 0.546302 *)
    Пример ST: q:=TAN(0.5);
    Пример FBD:
    ASIN
    Арксинус.

    Приложение A: Операторы и функции МЭК
    CoDeSys V2.3 10-25
    Аргумент может быть типов BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT,
    UDINT, результат должен быть типа REAL.
    Пример IL:
    LD
    0.5
    ASIN
    ST q
    (*Результат: 0.523599 *)
    Пример ST: q:=ASIN(0.5);
    Пример FBD:
    ACOS
    Арккосинус.
    Аргумент может быть типов BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT,
    UDINT, результат должен быть типа REAL.
    Пример IL:
    LD
    0.5
    ABS
    ST q (*Результат: 1.0472 *)
    Пример ST: q:=ACOS(0.5);
    Пример FBD:
    ATAN
    Арктангенс.
    Аргумент может быть типов BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT,
    UDINT, результат должен быть типа REAL.
    Пример IL:
    LD
    0.5
    ABS
    ST q (*Результат: 0.463648 *)
    Пример ST: q := ATAN(0.5);
    Пример FBD:
    EXPT
    Число в степени:
    OUT =
    IN1
    IN2

    Приложение A: Операторы и функции МЭК
    CoDeSys V2.3 10-26
    IN1 и IN2 могут быть типов BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT,
    UDINT, OUT должена быть REAL.
    Пример IL:
    LD
    7
    EXPT 2
    ST var1 (*Результат: 49 *)
    Пример ST: var1 := EXPT(7,2);
    Пример FBD:

    Приложение В: Операнды в CoDeSys
    CoDeSys V2.3 10-27
    Приложение В: Операнды в CoDeSys
    В качестве операндов могут выступать константы переменные, адреса и вызовы функций.
    Константы
    BOOL
    BOOL константы могут иметь значение TRUE или FALSE.
    TIME
    Константы типа TIME в CoDeSys всегда начинаются с префикса "t" или "T" (длинная форма "time" или "TIME") и знака числа "#". Далее следует собственно время, которое может включать дни "d", часы "h", минуты "m", секунды "s" и миллисекунды "ms". Нет необходимости обязательно опреде- лять все составляющие времени, но присутствующие поля обязаны следовать именно в таком по- рядке (d, затем h, затем m, затем s, затем m, затем ms).
    Правильные примеры TIME констант в ST:
    TIME1 := T#14ms;
    TIME1 := T#100S12ms; (*Старший компонент может выходить за свой предел*)
    TIME1 := t#12h34m15s;
    Ошибочные примеры:
    TIME1 := t#5m68s;
    (*Младший компонент вышел за предел*)
    TIME1 := 15ms;
    (*T# пропущено*)
    TIME1 := t#4ms13d;
    (*Ошибочная последовательность*)
    DATE
    Константы типа DATE начинаются с префикса "d", "D", "DATE" или "date" и последующего "#".
    Даты задаются в формате Год-Месяц-День.
    Примеры:
    DATE#1996-05-06 d#1972-03-29
    См. также 10.14 Переменные типа DATE
    TIME_OF_DAY
    Константы типа A TIME_OF_DAY начинаются с префикса "tod#", "TOD#", "TIME_OF_DAY#" или "time_of_day#" и последующего времени в формате: Часы:Минуты:Секунды. Секунды можно задавать в виде десятичной дроби.
    Примеры:
    TIME_OF_DAY#15:36:30.123 tod#00:00:00
    DATE_AND_TIME
    Константы типа DATE_AND_TIME начинаются с префикса "dt#", "DT#", "DATE_AND_TIME#" или "date_and_time#". Дата и время приводятся последовательно через дефис.
    Примеры:
    DATE_AND_TIME#1996-05-06-15:36:30 dt#1972-03-29-00:00:00

    Приложение В: Операнды в CoDeSys
    CoDeSys V2.3 10-28
    Целочисленные константы
    Числовые значения могут быть представлены в двоичной, восьмеричной, десятичной и шестна- дцатеричной форме.
    Если число не десятичное, необходимо указать основание числа с префиксом # перед числом.
    Цифры диапазона 10-15 в шестнадцатеричной форме заменяются литерами A-F.
    Для удобства чтения в любом месте числа можно вставить подчеркивание.
    Примеры:
    14
    (*десятичное число*)
    2#1001_0011 (*двоичное число*)
    8#67
    (*восьмеричное число*)
    16#A
    (*шестнадцатеричное число*)
    Данные числа могут быть представлены типами BYTE, WORD, DWORD, SINT, USINT, INT,
    UINT, DINT, UDINT, REAL и LREAL. Неявное преобразование из "большего" в "младший" тип переменной не производится. Это означает, что нельзя просто использовать DINT как INT пере- менную, необходимо применять преобразование типов (см. раздел «Преобразование типов»).
    REAL/LREAL
    REAL и LREAL константы представляются в формате с десятичной точкой либо в экспоненциаль- ном формате. Запятая вместо точки не допускается.
    Примеры:
    7.4 но не 7,4 1.64e+009 но не 1,64e+009
    STRING
    Константы типа STRING представляются в виде набора символов, заключенных в одинарные ка- вычки. Строка может содержать пробелы и специальные символы (например, умляуты). Символы, не имеющие печатного образа, могут быть заданы шестнадцатеричным кодом в виде двух цифр, следующих за знаком доллара ($). Специальные комбинации из двух символов, начинающиеся со знака доллара, интерпретируются следующим образом:
    $$
    Знак доллара
    $'
    Одинарная кавычка
    $L или $l
    Line feed
    $N or $n
    New line
    $P or $p
    Page feed
    $R or $r
    Line break
    $T or $t
    Tab
    Примеры:
    'Полет нормальный'
    ' Abby and Craig '
    ':-)'
    Типизированные константы
    Обычно при использовании МЭК констант подразумевается наименьший из возможных типов данных. Если нужно точно указать тип константы, применяется префикс типа: #

    Приложение В: Операнды в CoDeSys
    CoDeSys V2.3 10-29
    1   ...   33   34   35   36   37   38   39   40   ...   50


    написать администратору сайта