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

  • Блок FWRT – запись в флэш-память

  • Блок ADD – операция сложения

  • Блок SUB – операция вычитания

  • Блок MUL – операция умножения

  • Блок DIV – операция деления

  • Блок MEAN – среднее арифметическое

  • 5.7 Преобразование форматов данных

  • Блок ENCO

  • Расчет сложных электрических цепей. Обзор программных блоков плк


    Скачать 1.27 Mb.
    НазваниеОбзор программных блоков плк
    АнкорРасчет сложных электрических цепей
    Дата13.10.2022
    Размер1.27 Mb.
    Формат файлаpdf
    Имя файлаOverview_of_the_PLC_program_blocks.pdf
    ТипОбзор
    #732625
    страница2 из 4
    1   2   3   4

    FEND и END
    Аргументы – нет
    Блок FEND используется для указания конца главной программы и начало блоков подпрограмм (потоков). В нормальном состоянии (при нормальных обстоятельствах) инструкция FEND выполняет действия, подобные инструкции END, то есть обработку выходящих данных, входящих данных и таймер «сторожевая собака» обновляющий все выходы при выполнении.

    - если в программе инструкция CALL находится после инструкции FEND, должна быть инструкция SRET. Если используется точечный указатель программы, должна использоваться инструкция SRET (то есть, как я понимаю, после блока P1 должен стоять блок SRET)
    - После выполнения инструкции CALL и перед выполнением SRET инструкции, если выполняется FEND инструкция или выполняется FEND после выполнения FOR инструкции и перед выполнение NEXT – данная ситуация приведет к ошибке
    - если используется инструкция FEND, то конец программы должен заканчиваться END-ом, если FEND не используется – использование END не обязательно.
    Запись значений в регистры и установка/ сброс катушек
    Блоки данного раздела схожи по функциям, они записывают в регистры какое-то значение, если это катушки, то записывается (катушка устанавливается) в 0 или 1. Занесение данных может производиться как в одиночные регистры, так и в блоки регистров.
    Блок MOV
    Аргументы - DX、DY、DM、DS、T、C、D、FD、K
    MOV
    K10
    D10
    X0


    В данном коде, при срабатывании катушки X0 в регистр D[10] будет занесено значение 10
    (значение автоматически преобразуется в бинарный код).
    Есть возможность также записывать по 2 слова сразу:

    DMOV
    D0
    D10
    DMOV
    C235
    D20
    Блок BMOV
    Аргументы: DX、DY、DM、DS、T、C、D、FD、K
    Данный блок служит для последовательного копирования значений регистров начиная с адреса S в регистры, которые начинаются с адреса D. Количество регистров для копирования указывается в n.
    BMOV
    D5
    D10
    K3
    X0
    n


    D5
    D6
    D7
    D10
    D11
    D12
    n=3
    Значения адресов в S и D автоматически увеличивается на 1 до заданного значения в n, то есть
    BMOV
    D10
    D11
    K3
    BMOV
    D10
    D9
    K3
    X1
    X2
    D10
    D11
    D12
    D9
    D10
    D11
    D10
    D11
    D12
    D11
    D12
    D13






    Блок FMOV
    Аргументы: DX、DY、DM、DS、T、C、D、FD、K
    FMOV
    K0
    D0
    K10
    X0
    n


    При срабатывании катушки Х0 в регистры D[0] – D[9] будет занесено значение 0. То есть, S – является источником, с которого берется значение, D – первый регистр, в который запишется значения из S, n – количество регистров для записи.
    (D1,D0)→(D11,D10)
    (C235 текущее значение)→(D21,D20)

    K0
    D0
    K0
    n
    D1
    K0
    D2
    K0
    D3
    K0
    D4
    K0
    D5
    K0
    D6
    K0
    D7
    K0
    D8
    K0
    D9
    K0
    Блок FWRT – запись в флэш-память
    Аргументы: DX、DY、DM、DS、T、C、D、FD、K
    1) запись одного слова:
    D0
    FWRT
    FD0
    X0


    Данная функция запишет значение регистра D[0] в FD[0]
    2) запись 2 слов
    D0
    DFWRT
    FD0
    X1


    Данная функция запишет D[0],D[1] в FD[0],FD[1]
    3) множественная запись
    D0
    FWRT
    FD0
    X2
    K3

    D1·
    D3·
    В данном случае произойдет следующее: значение D[0] запишется в FD[0], значение D[1] запишется в FD[1], значение D[2] запишется в FD[2]
    Примечание:

    1) FWRT позволяет записывать данные во флэш-память, данная память не зависит от питания, в ней рекомендуется хранить все технические параметры системы
    2) для записи во флэш-память требуется много времени, порядка 150 мс. Данную операцию не рекомендуется часто применять
    3) флэш-память можно перезаписывать около 1 000 000 раз. Для вызова функции записи рекомендую использовать блоки LDP, LDF, то есть с одиночными сигналами.
    Блок ZRST
    Аргументы: все битовые и словесные аргументы
    ZRST
    M500
    M559
    ZRST
    C235
    C255
    D0
    D127
    D1·
    D2·
    D1·
    D2·
    D1·
    D2·
    X0
    ZRST
    То есть данная инструкция сбрасывает блок регистров. Для сброса одиночных регистров существуют следующие блоки:
    X1
    RST
    M0
    RST
    T0
    RST
    C0
    X2
    K0
    FMOV
    D0
    K100
    Блок SWAP
    Аргументы: DX、DY、DM、DS、T、C、D 、FD
    High 8 bits
    Low 8 bits
    D10
    Меняет местами 8 старших регистров и 8 младших регистров D10
    Сброс зоны катушек M500

    M599
    Сброс зоны слов (знач. счетчиков ) C235C255
    Сброс значения хранимых регистров D0D127
    Сброс M0
    Сброс текущего значения T0
    Сброс С0
    Запись K0 в D0D99

    Блок XCH
    Аргументы: DX、DY、DM、DS、T、C、D 、FD
    16-ти битная инструкция
    XCH
    D10
    D11
    X0
    D1·
    D2·
    Заносит значение D1 в D2, а D2 в D1.
    32-х битная инструкция
    DXCH
    D10
    D20
    X0
    D1·
    D2·
    Меняет значения местами D10 – D20, D11 – D21
    Операции с данными
    Блок ADD – операция сложения
    Аргументы: DX、DY、DM、DS、T、C、D、FD、K
    ADD
    D10
    D12
    D14
    X0
    S1·
    S2·

    Данная функция суммирует (арифметическое сложение) значения регистров S1 и S2, затем записывает их в D.
    1) суммировать можно как положительные аргументы, так и отрицательные (-5 + 3 = -2)
    2) если результат сложения равен 0 – установится флаг М8020, если полученное значение выйдет за пределы 323,767 (для 16-ти битного регистра) или за пределы 2,147,483,647
    (для 32 битного регистра), то установится флаг М8022, если же результат выйдет за пределы
    -323,767 или -2,147,483,647, то установится флаг М8021.
    3) если не использовать третий операнд, то результат будет заносится в первый операнд S1 4) для сложения 32 – битных регистров используйте DADD
    Блок SUB – операция вычитания
    (D10)+(D12)→(D14)

    Аргументы: DX、DY、DM、DS、T、C、D、FD、K
    SUB
    D10
    D12
    D14
    X0
    S1·
    S2·

    Функция аналогична операции сложения. Из регистра S1 вычитается значение регистра S2 и заносится в D. Возможна также краткая запись, то есть используются только S1 и S2. Флаги ошибок те же.
    Блок MUL – операция умножения
    Аргументы: DX、DY、DM、DS、T、C、D、FD、K
    16-ти битная операция
    MUL
    D0
    D2
    D4
    X0
    S1·
    S2·

    С примера видно, что в результате перемножения 2-х 16-ти битных регистров получается один 32-х битный регистр. Старший бит результата содержит знак значения 0 – положительное, 1 – отрицательное.
    32-х битная операция
    X1
    DMUL
    D0
    D2
    D4
    S1·
    S2·

    В результате перемножения, получаем 64-х разрядное значение, которое не будет возможности показать на мониторе или панели оператора, так что рекомендую использовать тип float.
    Блок DIV – операция деления
    Аргументы: DX、DY、DM、DS、T、C、D、FD、K
    16- ти битная операция
    DIV
    D0
    D2
    D4
    X0
    S1·
    S2·

    Здесь S1 является делимым, S2 – делителем, а в D заносится результат деления.
    32 –х битная операция
    (D10)—(D12)→(D14)
    BIN BIN BIN
    (D0) × (D2) → (D5,D4)
    16 bits 16 bits → 32 bits
    BIN BIN BIN
    (D1,D0) × (D3,D2) →
    (D7,D6,D5,D4)
    32 bits 32 bits → 64 bits

    DDIV
    D0
    D2
    D4
    X1
    S1·
    S2·

    Если значение делителя равно 0, то произойдет ошибка, и выполнение блока прекратится.
    Деление, как и в предыдущем варианте целочисленное, то есть остаток отбрасывается.
    Старший бит, как и при умножении указывает знак значения 0 – плюс, 1 – минус. Если делитель, или делимое со знаком минус, то и результат будет со знаком минус.
    Блоки INC и DEC
    Аргументы: DX、DY、DM、DS、T、C、D、FD
    Данные блоки служат для увеличения или уменьшения значения регистра на 1 при каждом вызове такого блока.
    INC
    D0
    X0

    DEC
    D0
    X1

    Когда инструкция 16-ти битная, и значение регистра достигает 32 676, то следующее значение при инкременте станет -32 676. при декрементировании происходит обратная ситуация, то есть при достижении -32 676 следующее значение будет 32 676. Для работы с
    32-х битными значениями используются DINC и DDEC.
    Блок MEAN – среднее арифметическое
    Аргументы: DX、DY、DM、DS、T、C、D、FD
    MEAN
    D0
    D10
    K3


    X0
    n
    (D0)
    +
    +
    3
    (D10)
    (D1)
    (D2)
    Если значение n выходит за допустимый диапазон – 1-64, то сгенерируется ошибка.
    Блоки WAND, WOR, WXOR
    Аргументы: DX、DY、DM、DS、T、C、D、FD,K
    Dividend Divisor Result Result
    BIN BIN BIN BIN
    (D1,D0) ÷ (D3,D2) (D5,D4)┅ (D7,D6)
    32 bits 32 bits 32 bits 32 bits
    (D0)+1→(D0)
    (D0)-1→(D0)

    1) выполняет побитно операцию AND
    WAND
    D10
    D12
    D14

    X0
    S1·
    S2·
    2) выполняет побитно операцию OR
    WOR
    D10
    D12
    D14

    X0
    S1·
    S2·
    3) выполняет побитно операцию XOR
    WXOR
    D10
    D12
    D14

    X0
    S1·
    S2·
    Данная инструкция, в сочетании с инструкцией CML, выполняет действия, похожие на логическую операцию XOR NOT
    WXOR
    D10
    D12
    D14

    X0
    S1·
    S2·
    CML
    D14
    D14
    Блок СML
    Аргументы: DX、DY、DM、DS、T、C、D、FD
    CML
    D0
    DY0


    X0
    Данный блок выполняет следующую функцию: побитно прочитав аргумент S, он записывает побитно значения в D, предварительно инвертируя каждый бит. То есть 0 станет 1, а 1 – 0.
    Чтение инвертированных входов
    0&0=0 0&1=0 1&0=0 1&1=1 0 or 0=0 0 or 1=1 1 or 0=1 1 or 1=1 0 xor 0=0 0 xor 1=1 1 xor 0=1 1 xor 1=0

    M0
    M1
    M2
    M3
    M17
    CML
    DX0
    DM0
    M8000
    X0
    X1
    X2
    X3
    X17
    Данный пример показывает, что левая и правая части имеют одинаковый функционал, однако выражение справа имеет более компактный вид.
    Блок NEG
    Аргументы: DX、DY、DM、DS、T、C、D、FD
    NEG
    D10
    (D10) +1
    (D10)
    X0

    Данный блок производит инвертирование указанного аргумента в D. То есть 0 становится 1,
    1 – 0. Когда инвертирование завершается, старшая единица прибавляется к битовому значению числа. В результате получаем полностью обратное значение, заданному в аргументе.
    Если эта инструкция используется в основном цикле, она будет выполняться каждый скан.
    Инструкции сдвигов (смешений)
    Блок SHR и SHL
    Аргументы: DX、DY、DM、DS、T、C、D、FD
    Арифметический сдвиг влево

    Арифметический сдвиг вправо
    Примечания. Данные инструкции выполняются каждый цикл. В случае с 32- х битными значениями, блоки работают аналогично.
    Блок LSL и LSR
    Аргументы: DX、DY、DM、DS、T、C、D、FD
    Логический сдвиг влево

    Логический сдвиг вправо
    Все остальное аналогично арифметическим сдвигам.
    Блоки ROL и ROR
    Аргументы: DX、DY、DM、DS、T、C、D、FD
    Кольцевой сдвиг влево
    Когда катушка X0 поменяет свое значение с 0 на 1, произойдет кольцевой сдвиг влево.
    Кольцевой сдвиг вправо

    Желательно не использовать данные блоки в каждом цикле программы. Работа с 32-х разрядными значениями аналогична.
    Блоки SFTL и SFTR
    Аргументы: DX、DY、DM、DS、T、C、D、FD
    SFTL - влево
    Данные блоки делают несколько копий источника S длиной n2 и записывают данные копии, в сегмент, начиная с адреса D длиной n1.
    Как видно из примера, первый аргумент Х0, длина блока – 4, то есть первый блок х0,х1,х2,х3. Второй аргумент М0, длина сегмента 16, следовательно получаем 4 пары (16 : 4
    = 4). Данная функция при срабатывании X0 поместит в М0,М4,М8,М12 значение Х0, в
    М1,М2,М3, М4 – Х1 и т.д.
    ① M15M12→overflow
    ② M11M 8→M15M 12
    ③ M 7M 4→M11M8
    ④ M 3M 0→M7M4
    ⑤ X 3X 0→M3M0

    SFTR – вправо
    Блоки WSLF и WSFR
    Аргументы: DX、DY、DM、DS、T、C、D、FD
    Данные блоки аналогичны предыдущим, разве что вместо катушек работа происходит с хранимыми регистрами.
    5.7 Преобразование форматов данных
    ① M 3M 0→overflow
    ② M 7M 4→M3M0
    ③ M11M 8→M7M4
    ④ M15M12→M11M8
    ⑤ X 3X 0→M15M12
    ① D25D22→overflow
    ② D21D18→D25D22
    ③ D17D14→D21D18
    ④ D13D10→D17D14
    ⑤ D 3D 0→D13D10
    ① D13D10→overflow
    ② D17D14→D13D10
    ③ D21D18→D17D14
    ④ D25D22→D21D18
    ⑤ D 3D 0→D25D22

    Блок WTD
    Аргументы: DX、DY、DM、DS、T、C、D、FD
    WTD
    D0
    D10
    X0


    High bits Low bits
    D11
    D10 0 or 1
    D0
    Данный блок преобразует 16-ти битное число в 32 – битное. Если число четное, то старший бит содержит 0, если отрицательное – 1.
    Блок FLT (DFLT, FLTD)
    Аргументы: DX、DY、DM、DS、T、C、D、FD
    Данный блок преобразует 16-ти битное целое значение в 32-х вещественное.
    DFLT
    D10
    D12


    X0
    Данный блок преобразует 32-х битное целое в 32-х битное вещественное значение
    FLTD
    D10
    D14


    X0
    Данный блок преобразует 64-х битное целое в 64-х битное вещественное значение.
    Данные команды противоположны командам INT. Константы K(десятичное число) и
    H(шестнадцатеричное) приводятся к типу автоматически.
    Блок INT
    Аргументы: DX、DY、DM、DS、T、C、D、FD
    INT
    D10
    D20


    X0
    DINT
    D10
    D20


    X0
    (D0) → (D11,D10)
    Single word Double word
    FLT
    D10
    D12


    X0
    (D10) → (D13,D12)
    BIN integer Binary float point
    (D11,D10)→ (D13,D12)
    BIN integer Binary float point
    (D13,D12,D11,D10)→ (D17,D16,D15,D14)
    BIN integer Binary float point
    (D11,D10) → (D20)
    (D11,D10) → (D20, D21)

    Данные блоки приводят значение к типу INT, первый блок 16-ти битный, второй 32-х битный.
    Блок BIN
    Аргументы: DX、DY、DM、DS、T、C、D、FD
    BIN
    D10
    D0


    X0
    Если аргумент S не является BCD, блок не выполнится и сработает флаг M8067. Константа К автоматически приводится к данному типу.
    Блок BCD
    Аргументы: DX、DY、DM、DS、T、C、D、FD
    BCD
    D10
    D0


    X0
    Данный блок приводит тип BIN к типу BCD. Входной аргумент должен находиться в рамках, для 16-ти разрядных значений, от 0 до 9999., для 32-х разрядных в пределах от 0 до
    99999999.
    Эта команда позволяет выводить данные на 7-ми сегментный монитор.
    Блок ASCII
    Аргументы: DX、DY、DM、DS、T、C、D、FD
    16-ти битное преобразование, когда M8161=OFF
    Данный блок преобразовывает каждый бит источника S в шестнадцатеричный код в аргумент
    D, данные автоматически размешаются в старшие 8 бит и младшие 8 бит аргумента D.
    Преобразование в буквенно-цифровой формат начинается с параметра n.
    Пример последовательности преобразования:
    Назначим начальные данные
    Границы данных:09,999 или 099,999,999 .
    Для преобразования этому блоку необходимо привести число к формату BCD→ затем BIN
    [0]=30H [1]=31H [5]=35H
    [A]=41H [2]=32H [6]=36H
    [B]=42H [3]=33H [7]=37H
    [C]=43H [4]=34H [8]=38H
    (D100)=0ABCH
    (D101)=1234H
    (D102)=5678H
    n
    D
    K1 K2 K3 K4 K5 K6 K7 K8 K9
    D200 down [C] [B] [A] [0] [4] [3] [2] [1] [8]
    D200 down
    [C] [B] [A] [0] [4] [3] [2] [1]
    D201 down
    [C] [B] [A] [0] [4] [3] [2]
    D201 up
    [C] [B] [A] [0] [4] [3]
    D202 down
    [C] [B] [A] [0] [4]
    D202 up
    [C] [B] [A] [0]
    D203 down
    [C] [B] [A]
    D203 up
    [C] [B]
    D204 down
    [C]
    Блок HEX
    Аргументы: DX、DY、DM、DS、T、C、D、FD
    16-ти битный режим включается, когда M8161=OFF
    Блок преобразовывает младшие и старшие 8 бит в HEX код. Адрес каждый раз смещается на
    4 бита. Преобразование начинается с аргумента, указанного в n.
    Последовательность выполнения блока следующая:
    (S·)
    ASCII
    HEX
    Conversion
    D200 up 30H
    0
    D200 up 41H
    A
    D201 down
    42H
    B
    D201 up 43H
    C
    D202 down
    31H
    1
    D202 up 32H
    2
    D203 down
    33H
    3
    D203 up 34H
    4
    D204 down
    35H
    5
    (
    D
    ·
    ) n
    D102
    D101
    D100 1
    Not change to be 0
    ···0H
    2
    ··0AH
    3
    ·0ABH
    4 0ABCH
    5
    ···0H
    ABC1H
    6
    ··0AH
    BC12H
    7
    ·0ABH
    C123H

    0 1
    0 0
    0 0
    0 1
    0 0
    1 1
    0 0
    0 0
    D200 41H→[A]
    30H→[0]
    0 1
    0 0
    0 0
    1 1
    0 1
    0 1
    0 0
    1 0
    D201 43H→[C]
    42H→[B]
    0 0
    0 0
    1 0
    1 0
    1 0
    1 1
    1 1
    0 0
    D202 0
    A
    B
    C
    Блок DECO
    Аргументы: DX、DY、DM、DS、T、C、D、FD
    Когда параметр D – катушка, и n<=16
    X000
    DECO
    M10
    K3
    X10
    n


    0 1
    1 0
    0 0
    1 0
    0 0
    X002
    X001
    X000
    M17
    M16
    M15
    M14
    M13
    M12
    M11
    M10 7
    6 5
    4 2
    1 0
    4 0
     Начальный адрес источника 3,стартуем с катушки M10, количество бит - 3
    (M13) is 1. Если все источники 0, M10 равно 1
     когда n=0, блок не работает, за пределами n=016, то инструкция не выполнится
     когда n=16, если кодирующая команда ―D‖ катушка, еѐ номер 2^8=256。
     когда на вход передается 0, инструкция не выполнится, активируйте S, что бы активировать выход.

    Когда D это слово, и n меньше 4:
    D0
    DECO
    D1
    K3
    X0
    n


    Исходные младшие n бит (n<=4), кодируются, если n<=3 старшие биты кодируются нулем.
    Когда n=0, данная инструкция не выполнится.
    Блок ENCO
    Аргументы: DX、DY、DM、DS、T、C、D、FD
    Блок ENCOL
    Аргументы: DX、DY、DM、DS、T、C、D、FD
    Вещественные операции
    Блок
    Функция
    ECMP
    Строгое сравнение вещественных чисел
    EZCP
    Сравнение блока вещественных чисел
    EADD
    Сложение вещественных чисел
    ESUB
    Вычитание вещественных чисел
    EMUL
    Умножение вещественных чисел
    EDIV
    Деление вещественных чисел

    ESQR
    Вычитание квадратного корня
    SIN
    Синус
    COS
    Косинус
    TAN
    Тангенс
    Блок ECMP
    Аргументы: DX、DY、DM、DS、T、C、D、FD、K
    ECMP
    D10
    D20
    M0
    M0
    M1
    M2
    X0

    S1·
    S2·
    Для сравнения значений регистров можно использовать блоки LD<,LD>=,DLD<> и т.д. Но, если в данные блоки передать вещественное число, то его дробная часть будет отброшена, и сравниваться будут только целые части. Это ведут к потере точности и запаздыванию реагирования на какие-то события.
    Данный блок позволяет сравнивать вещественные значения. В параметры S1 и S2 передаются значения для сравнения, а в параметре D указывается начальный флаг результата.
    С предыдущего примера – М0 установится в 1, если параметр S1> S2, М1 установится в 1, если S1= S2, М2 установится в 1, если S1Также можно сравнивать и константы:
    ECMP
    K500
    D100
    M10
    X0
    1   2   3   4


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