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

  • Целый тип

  • CheckRangeSigned

  • Замечание

  • Приложение D: Библиотеки CoDeSys Стандартная библиотека Standard.lib Строковые функции

  • Обратите внимание

  • Переключатели

  • Детекторы импульсов

  • F_TRIG Функциональный блок F_TRIG генерирует импульс по заднему фронту входного сигнала. FUNCTION_BLOCK F_TRIG VAR_INPUT CLK

  • Счетчики

  • Таймеры

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


    Скачать 5.57 Mb.
    НазваниеРуководство пользователя по программированию плк в CoDeSys 3
    Дата25.10.2022
    Размер5.57 Mb.
    Формат файлаpdf
    Имя файлаCODESYS_manual.pdf
    ТипРуководство пользователя
    #754593
    страница39 из 50
    1   ...   35   36   37   38   39   40   41   42   ...   50
    TYPE < Имя > : < Целый тип > (<от>..<до>) END_TYPE;
    < Имя> любой допустимый МЭК идентификатор,
    <Целый тип> один из типов SINT, USINT, INT, UINT, DINT, UDINT, BYTE, WORD,
    DWORD (LINT, ULINT, LWORD).
    < от> константа, определяющая начало диапазона значений включительно.
    < до> константа, определяющая конец диапазона значений включительно.
    Пример:
    TYPE
    SubInt : INT (-4095..4095);
    END_TYPE
    Ограничение диапазона при объявлении переменной:
    VAR i : INT (-4095..4095); ui : UINT (0..10000);
    END_VAR
    При попытке присвоить переменной с ограниченным диапазоном константы, не попадающей в за- данный диапазон (например i := 5000;), CoDeSys даст сообщение об ошибке.
    Для контроля значений «ограниченных» переменных в процессе исполнения применяются функ- ции CheckRangeSigned или CheckRangeUnsigned. Они позволяют обрабатывать ошибки произ- вольным образом. Например, ограничить присваиваемое значение или сформировать флаги ошиб- ки. Первая функция работает для переменных со знаком, вторая для переменных без знака
    (unsigned). Изменять идентификаторы этих функций нельзя.
    Пример:
    Здесь применяется функция CheckRangeSigned, контролирующая переменные со знаком (как, на- пример, объявленная выше i). Функция «обрезает» присваиваемые значения по границам диапазо- на.
    FUNCTION CheckRangeSigned : DINT
    VAR_INPUT value, lower, upper: DINT;
    END_VAR
    IF (value < lower) THEN
    CheckRangeSigned := lower;
    ELSIF(value > upper) THEN
    CheckRangeSigned := upper;
    ELSE
    CheckRangeSigned := value;
    END_IF

    Приложение С: Типы данных CoDeSys
    CoDeSys V2.3 10-41
    Функция вызывается автоматически при соответствующих операциях присваивания. Она получает три параметра: присваиваемое значение (value) и обе границы диапазона (lower, upper).
    Фактически присваивается возвращаемое CheckRangeSigned значение.
    Например, при присваивании i:=10*y происходит неявный вызов: i := CheckRangeSigned(10*y, -4095, 4095);
    В результате, даже если y > 1000, i не получит значение более 4095.
    Аналогично объявляется и функция CheckRangeUnsigned:
    FUNCTION CheckRangeUnsigned : UDINT
    VAR_INPUT value, lower, upper: UDINT;
    END_VAR
    Замечание: Если функции CheckRangeSigned или CheckRangeUnsigned не включены в проект, ограничение границ диапазонов во время исполнения работать не будет.
    Внимание: Если функции «обрезают» значения, как в вышеописанном примере существует опасность получить бесконечный цикл. Это может случиться, если условие окончания итераций цикла не достигается из-за искусственного ограничения значений переменной!
    Пример. Переменная ui не превысит 10000, и цикл FOR ни когда не закончится:
    VAR ui : UINT (0..10000);
    END_VAR
    FOR ui:=0 TO 10000 DO
    END_FOR
    Внимание: Функции CheckRange…, содержащащиеся в библиотеке Check.Lib, представляют собой пример реализации. Прежде чем использовать эту библиотеку, убедитесь, что данные функции работает так, как нужно в вашем случае, либо создайте собственные функции непосредственно в вашем проекте.

    Приложение D: Библиотеки CoDeSys
    CoDeSys V2.3 10-42
    Приложение D: Библиотеки CoDeSys
    Стандартная библиотека Standard.lib
    Строковые функции
    Внимание: В многозадачных проектах необходимо сосредоточить всю работу со строками в одной задаче.
    При одновременном вызове одной и той же строковой функции из нескольких параллельных процессов возможно нарушение ее работы (перекрытие данных).
    LEN
    Возвращает длину строки.
    Аргумент STR типа STRING, возвращаемое значение типа INT.
    Пример IL:
    LD
    'SUSI'
    LEN
    ST
    VarINT1 (* Результат: 4 *)
    Пример FBD:
    Пример ST:
    VarSTRING1 := LEN (‘SUSI’);
    LEFT
    Возвращает левую значимую часть строки заданной длины.
    Входная строка STR типа STRING, размер SIZE типа INT, возвращаемое значение STRING.
    LEFT (STR, SIZE) означает: взять первых SIZE символов от строки STR.
    Пример IL:
    LD
    'SUSI'
    LEFT
    3
    ST
    VarSTRING1
    (* Результат ‘SUS’ *)
    Пример FBD:
    Пример ST:
    VarSTRING1 := LEFT (‘SUSI’,3);
    RIGHT
    Возвращает правую значимую часть строки заданной длины.
    Входная строка STR типа STRING, размер SIZE типа INT, возвращаемое значение STRING.

    Приложение D: Библиотеки CoDeSys
    CoDeSys V2.3 10-43
    RIGHT (STR, SIZE) означает: взять последних SIZE символов от строки STR
    Пример IL:
    LD
    'SUSI'
    RIGHT
    3
    ST
    VarSTRING1
    (*Результат: ‘USI’ *)
    Пример FBD:
    Пример ST:
    VarSTRING1 := RIGHT (‘SUSI’,3);
    MID
    Возвращает часть строки с указанной позиции указанной длины.
    Входная строка STR типа STRING, размер LEN и POS типа INT, возвращаемое значение STRING.
    MID (STR, LEN, POS) означает: вырезать LEN символов из STR строки, начиная с POS.
    Пример IL:
    LD
    'SUSI'
    RIGHT
    2,2
    ST
    VarSTRING1
    (* Результат: ‘US’ *)
    Пример FBD:
    Пример ST:
    VarSTRING1 := MID (‘SUSI’,2,2);
    CONCAT
    Конкатенация (объединение) двух строк.
    Обе входных строки STR1 и STR2 как и результат типа STRING.
    Пример IL:
    LD
    'SUSI'
    CONCAT
    ‘WILLI’
    ST
    VarSTRING1
    (* Результат: ‘SUSIWILLI’ *)
    Пример FBD:
    Пример ST:
    VarSTRING1 := CONCAT (‘SUSI’,’WILLI’);

    Приложение D: Библиотеки CoDeSys
    CoDeSys V2.3 10-44
    Обратите внимание: Функция CONCAT не работает при более чем 5 вложениях.
    INSERT
    INSERT вставляет строку в указанную позицию другой строки.
    Входные переменные STR1 и STR2 - типа STRING, POS - типа INT, возвращаемое значение - строка STRING.
    INSERT(STR1, STR2, POS) означает: вставить STR2 в STR1 в позиции POS.
    Пример IL:
    LD
    'SUSI'
    INSERT
    ‘XY’,2
    ST
    VarSTRING1
    (* Результат: ‘SUXYSI’ *)
    Пример FBD:
    Пример ST:
    VarSTRING1 := INSERT (‘SUSI’,’XY’,2);
    DELETE
    DELETE удаляет часть строки с указанной позиции.
    Входные переменные STR типа STRING, LEN и POS типа INT, возвращаемое значение строка
    STRING.
    DELETE(STR, L, P) означает: удалить L символов из STR, начиная с позиции P.
    Пример IL:
    LD
    'SUXYSI'
    DELETE
    2,23
    ST
    Var1
    (* Результат: ‘SUSI’ *)
    Пример FBD:
    Пример ST:
    Var1 := DELETE (‘SUXYSI’,2,3);
    REPLACE
    REPLACE заменяет часть строки другой строкой с указанной позиции заданной длины.
    Входные переменные STR1 и STR2 типа STRING, LEN и POS типа INT, возвращаемое значение строка STRING.

    Приложение D: Библиотеки CoDeSys
    CoDeSys V2.3 10-45
    REPLACE(STR1, STR2, L, P) означает: заменить L символов строки STR1 на STR2 начиная с по- зиции P.
    Пример IL:
    LD
    'SUXYSI'
    REPLACE
    'K', 2,2
    ST
    VarSTRING1
    (* Результат: ‘SKYSI’ *)
    Пример FBD:
    Пример ST:
    VarSTRING1 := REPLACE (‘SUXYSI’,’K’,2,2);
    FIND
    FIND ищет заданный контекст в строке.
    Входные переменные STR1 и STR2 типа STRING, возвращаемое значение INT.
    FIND(STR1, STR2) означает: найти позицию в строке STR1, где впервые встречается подстрока
    STR2.
    Нумерация позиций в строке начинается с 1. Если STR2 не найдена, STR1 возвращает 0.
    Пример IL:
    LD
    'SUXYSI'
    FIND 'XY'
    ST
    VarINT1
    (* Результат: ‘3’ *)
    Пример FBD:
    Пример ST:
    VarINT1 := FIND (‘SUXYSI’,’XY’);
    Переключатели
    SR
    Переключатель с доминантой включения:
    Q1 = SR (SET1, RESET) означает:
    Q1 = (NOT RESET AND Q1) OR SET1
    Входные переменные SET1 и RESET - как и выходная переменная Q1 типа BOOL.
    Пример объявления:
    SRInst : SR ;
    Пример IL:

    Приложение D: Библиотеки CoDeSys
    CoDeSys V2.3 10-46
    CAL SRInst(SET1 := VarBOOL1, RESET := VarBOOL2)
    LD
    SRInst.Q1
    ST
    VarBOOL3
    Пример FBD:
    Пример ST:
    SRInst(SET1:= VarBOOL1 , RESET:=VarBOOL2 );
    VarBOOL3 := SRInst.Q1 ;
    RS
    Переключатель с доминантой выключения:
    Q1 = RS (SET, RESET1) означает:
    Q1 = NOT RESET1 AND (Q1 OR SET)
    Входные переменные SET и RESET1 - как и выходная переменная Q1 типа BOOL.
    Пример объявления:
    RSInst : RS ;
    Пример IL:
    CAL RSInst(SET := VarBOOL1, RESET1 := VarBOOL2)
    LD
    RSInst.Q1
    ST
    VarBOOL3
    Пример FBD:
    Пример ST:
    RSInst(SET:= VarBOOL1 , RESET1:=VarBOOL2 );
    VarBOOL3 := RSInst.Q1 ;
    SEMA
    Программный семафор.
    BUSY = SEMA(CLAIM, RELEASE) означает:
    BUSY := X;
    IF CLAIM THEN X:=TRUE;
    ELSE IF RELEASE THEN BUSY := FALSE; X:= FALSE;
    END_IF
    X - это внутренняя BOOL переменная, изначально имеющая значение FALSE.

    Приложение D: Библиотеки CoDeSys
    CoDeSys V2.3 10-47
    Входные переменные CLAIM и RELEASE - как и выходная переменная BUSY типа BOOL.
    (CLAIM – запрос захвата, RELEASE - освобождение)
    Семафор предназначен для организации асинхронного доступа к одному аппаратному ресурсу.
    Если при вызове семафора с CLAIM = TRUE возвращаемое значение BUSY = FALSE, то ресурс свободен (запрашивается впервые или уже освобожден вызовом RELEASE = TRUE). Возвращае- мое значение BUSY = FALSE, это означает, что ресурс занят.
    Пример объявления:
    SEMAInst : SEMA ;
    Пример IL:
    CAL SEMAInst(CLAIM := VarBOOL1, RELEASE := VarBOOL2)
    LD
    SEMAInst.BUSY
    ST
    VarBOOL3
    Пример FBD:
    Пример ST:
    SEMAInst(CLAIM:= VarBOOL1 , RELEASE:=VarBOOL2 );
    VarBOOL3 := SEMAInst.BUSY;
    Детекторы импульсов
    R_TRIG
    Функциональный блок R_TRIG генерирует импульс по переднему фронту входного сигнала.
    FUNCTION_BLOCK R_TRIG
    VAR_INPUT
    CLK : BOOL;
    END_VAR
    VAR_OUTPUT
    Q : BOOL;
    END_VAR
    VAR
    M : BOOL := FALSE;
    END_VAR
    Q := CLK AND NOT M;
    M := CLK;
    END_FUNCTION_BLOCK
    Выход Q равен FALSE до тех пор, пока вход CLK равен FALSE. Как только CLK получает значе- ние TRUE, Q устанавливается в TRUE. При следующем вызове функционального блока выход сбрасывается в FALSE. Таким образом, блок выдает единичный импульс при каждом переходе
    CLK из FALSE в TRUE.
    Пример объявления:
    RTRIGInst : R_TRIG ;

    Приложение D: Библиотеки CoDeSys
    CoDeSys V2.3 10-48
    Пример IL:
    CAL RTRIGInst(CLK := VarBOOL1)
    LD
    RTRIGInst.Q
    ST
    VarBOOL2
    Пример FBD:
    Пример ST:
    RTRIGInst(CLK:= VarBOOL1);
    VarBOOL2 := RTRIGInst.Q;
    F_TRIG
    Функциональный блок F_TRIG генерирует импульс по заднему фронту входного сигнала.
    FUNCTION_BLOCK F_TRIG
    VAR_INPUT
    CLK: BOOL;
    END_VAR
    VAR_OUTPUT
    Q: BOOL;
    END_VAR
    VAR
    M: BOOL := FALSE;
    END_VAR
    Q := NOT CLK AND NOT M;
    M := NOT CLK;
    END_FUNCTION_BLOCK
    Выход Q равен FALSE до тех пор, пока вход CLK равен TRUE. Как только CLK получает значе- ние FALSE, Q устанавливается в TRUE. При следующем вызове функционального блока выход сбрасывается в FALSE. Таким образом, блок выдает единичный импульс при каждом переходе
    CLK из TRUE в FALSE.
    Пример объявления:
    FTRIGInst : F_TRIG ;
    Пример IL:
    CAL FTRIGInst(CLK := VarBOOL1)
    LD
    FTRIGInst.Q
    ST
    VarBOOL2
    Пример FBD:
    Пример ST:
    FTRIGInst(CLK:= VarBOOL1);

    Приложение D: Библиотеки CoDeSys
    CoDeSys V2.3 10-49
    VarBOOL2 := FTRIGInst.Q;
    Счетчики
    CTU
    Функциональный блок ‘инкрементный счетчик’.
    Входы CU, RESET и выход Q типа BOOL, вход PV и выход CV типа WORD.
    По каждому фронту на входе CU (переход из FALSE в TRUE) выход CV увеличивается на 1. Вы- ход Q устанавливается в TRUE, когда счетчик достигнет значения заданного PV. Счетчик CV сбрасывается в 0 по входу RESET = TRUE.
    Пример объявления:
    CTUInst : CTU ;
    Пример IL:
    CAL CTUInst(CU := VarBOOL1, RESET := VarBOOL2, PV := VarINT1)
    LD
    CTUInst.Q
    ST
    VarBOOL3
    LD
    CTUInst.CV
    ST
    VarINT2
    Пример FBD:
    Пример ST:
    CTUInst(CU:= VarBOOL1, RESET:=VarBOOL2 , PV:= VarINT1);
    VarBOOL3 := CTUInst.Q ;
    VarINT2 := CTUInst.CV;
    CTD
    Функциональный блок ‘декрементный счетчик’.
    Входы CD, LOAD и выход Q типа BOOL, вход PV и выход CV типа WORD.
    По каждому фронту на входе CD (переход из FALSE в TRUE) выход CV уменьшается на 1. Когда счетчик достигнет 0, счет останавливается, выход Q переключается в TRUE. Счетчик CV загружа- ется начальным значением, равным PV по входу LOAD = TRUE.
    Пример объявления:
    CTDInst : CTD ;
    Пример IL:
    CAL CTDInst(CD := VarBOOL1, LOAD := VarBOOL2, PV := VarINT1)
    LD
    CTDInst.Q
    ST
    VarBOOL3
    LD
    CTDInst.CV
    ST
    VarINT2

    Приложение D: Библиотеки CoDeSys
    CoDeSys V2.3 10-50
    Пример FBD:
    Пример ST:
    CTDInst(CD:= VarBOOL1, LOAD:=VarBOOL2 , PV:= VarINT1);
    VarBOOL3 := CTDInst.Q ;
    VarINT2 := CTDInst.CV;
    CTUD
    Функциональный блок ‘инкрементный / декрементный счетчик’.
    Входы CU, CD, RESET, LOAD и выходы QU и QD типа BOOL, PV и CV типа WORD.
    По входу RESET счетчик CV сбрасывается в 0, по входу LOAD загружается значением PV.
    По фронту на входе CU счетчик увеличивается на 1. По фронту на входе CD счетчик уменьшается на 1 (до 0).
    QU устанавливается в TRUE, когда CV больше или равен PV.
    QD устанавливается в TRUE, когда CV равен 0.
    Пример объявления:
    CTUDInst : CUTD ;
    Пример IL:
    CAL CTUDInst(CU := VarBOOL2, RESET := VarBOOL3, LOAD :=
    VarBOOL4, PV := VarINT1)
    LD
    CTUDInst.QU
    ST
    VarBOOL5
    LD
    CTUDInst.QD
    ST
    VarBOOL6
    LD
    CTUDInst.CV
    ST
    VarINT2
    Пример FBD:
    Пример ST:
    CTUDInst(CU := VarBOOL1, CU:= VarBOOL2, RESET := VarBOOL3,
    LOAD:=VarBOOL4 , PV:= VarINT1);
    VarBOOL5 := CTUDInst.QU ;
    VarBOOL6 := CTUDInst.QD ;

    Приложение D: Библиотеки CoDeSys
    CoDeSys V2.3 10-51
    VarINT2 := CTUDInst.CV;
    Таймеры
    TP
    Функциональный блок ‘таймер’.
    TP(IN, PT, Q, ET) Входы IN и PT типов BOOL и TIME соответственно. Выходы Q и ET аналогич- но типов BOOL и TIME.
    Пока IN равен FALSE, выход Q = FALSE, выход ET = 0. При переходе IN в TRUE выход Q уста- навливается в TRUE и таймер начинает отсчет времени (в миллисекундах) на выходе ET до дос- тижения длительности, заданной PT. Далее счетчик не увеличивается. Таким образом, выход Q ге- нерирует импульс длительностью PT по фронту входа IN.
    Временная диаграмма работы TP:
    Пример объявления:
    TPInst : TP;
    Пример IL:
    CAL TPInst(IN := VarBOOL1, PT := T#5s)
    LD
    TPInst.Q
    ST
    VarBOOL2
    Пример FBD:
    Пример ST:
    TPInst(IN := VarBOOL1, PT:= T#5s);
    VarBOOL2 :=TPInst.Q;
    TON
    Функциональный блок ‘таймер с задержкой включения’.
    TON(IN, PT, Q, ET) Входы IN и PT типов BOOL и TIME соответственно. Выходы Q и ET анало- гично типов BOOL и TIME.
    Пока IN равен FALSE, выход Q = FALSE, выход ET = 0. Как только IN становится TRUE, начина- ется отсчет времени (в миллисекундах) на выходе ET до значения, равного PT. Далее счетчик не увеличивается. Q равен TRUE, когда IN равен TRUE и ET равен PT, иначе FALSE. Таким образом, выход Q устанавливается с задержкой PT от фронта входа IN.

    Приложение D: Библиотеки CoDeSys
    CoDeSys V2.3 10-52
    Временная диаграмма работы TON:
    Пример объявления:
    TONInst : TON ;
    Пример IL:
    CAL TONInst(IN := VarBOOL1, PT := T#5s)
    LD TONInst.Q
    ST VarBOOL2
    Пример FBD:
    Пример ST:
    TONInst(IN := VarBOOL1, PT:= T#5s);
    TOF
    Функциональный блок ‘таймер с задержкой выключения’.
    TOF(IN, PT, Q, ET) Входы IN и PT типов BOOL и TIME соответственно. Выходы Q и ET анало- гично типов BOOL и TIME.
    Если IN равен TRUE, то выход Q = TRUE и выход ET = 0. Как только IN переходит в FALSE, на- чинается отсчет времени (в миллисекундах) на выходе ET. При достижении заданной длительно- сти отсчет останавливается. Выход Q равен FALSE, если IN равен FALSE и ET равен PT, иначе -
    TRUE.
    Таким образом, выход Q сбрасывается с задержкой PT от спада входа IN.
    Временная диаграмма работы TOF:
    Пример объявления:
    TOFInst : TOF ;
    Пример IL:
    CAL TOFInst(IN := VarBOOL1, PT := T#5s)
    LD
    TOFInst.Q
    ST
    VarBOOL2

    Приложение D: Библиотеки CoDeSys
    CoDeSys V2.3 10-53
    Пример FBD:
    Пример ST:
    TOFInst(IN := VarBOOL1, PT:= T#5s);
    VarBOOL2 :=TOFInst.Q;
    RTC
    Функциональный блок ‘часы реального времени’. После установки начального значения, RTC вы- дает текущие время и дату.
    RTC(EN, PDT, Q, CDT) Входы EN и PDT, выходы Q и CDT типов BOOL и DATE_AND_TIME со- ответственно.
    Пока EN равен FALSE, выход Q равен FALSE и CDT равен DT#1970-01-01-00-00:00:00.
    При включении EN = TRUE в часы загружается время PD и начинается отсчет времени. На выходе
    CDT. Если EN перейдет в FALSE, CDT сбросится в начальное значение DT#1970-01-01-00-
    00:00:00. Обратите внимание, что установка времени PDT происходит по фронту.
    Библиотека UTIL.LIB
    Данная библиотека содержит дополнительный набор различных функций и функциональных бло- ков, применяемых для BCD и бит/байт преобразований, дополнительных математических функ- ций, а также регуляторов, генераторов и преобразований аналоговых сигналов.
    Специальная версия этой библиотеки UTIL_NO_REAL не содержит функций и функциональных блоков, использующих переменные типа REAL.
    1   ...   35   36   37   38   39   40   41   42   ...   50


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