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
S·
D·
В данном коде, при срабатывании катушки 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
S·
D·
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
S·
D·
При срабатывании катушки Х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
S·
D·
Данная функция запишет значение регистра D[0] в FD[0]
2) запись 2 слов
D0
DFWRT
FD0
X1
S·
D·
Данная функция запишет D[0],D[1] в FD[0],FD[1]
3) множественная запись
D0
FWRT
FD0
X2
K3
S·
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
Сброс зоны катушек M500M599
Сброс зоны слов (знач. счетчиков ) 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·
D·
Данная функция суммирует (арифметическое сложение) значения регистров 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·
D·
Функция аналогична операции сложения. Из регистра S1 вычитается значение регистра S2 и заносится в D. Возможна также краткая запись, то есть используются только S1 и S2. Флаги ошибок те же.
Блок MUL – операция умножения Аргументы: DX、DY、DM、DS、T、C、D、FD、K
16-ти битная операция
MUL
D0
D2
D4
X0
S1·
S2·
D·
С примера видно, что в результате перемножения 2-х 16-ти битных регистров получается один 32-х битный регистр. Старший бит результата содержит знак значения 0 – положительное, 1 – отрицательное.
32-х битная операция
X1
DMUL
D0
D2
D4
S1·
S2·
D·
В
результате перемножения, получаем 64-х разрядное значение, которое не будет возможности показать на мониторе или панели оператора, так что рекомендую использовать тип float.
Блок DIV – операция деления Аргументы: DX、DY、DM、DS、T、C、D、FD、K
16- ти битная операция
DIV
D0
D2
D4
X0
S1·
S2·
D·
Здесь 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·
D·
Если значение делителя равно 0, то произойдет ошибка, и выполнение блока прекратится.
Деление, как и в предыдущем варианте целочисленное, то есть остаток отбрасывается.
Старший бит, как и при умножении указывает знак значения 0 – плюс, 1 – минус. Если делитель, или делимое со знаком минус, то и результат будет со знаком минус.
Блоки INC и DEC
Аргументы: DX、DY、DM、DS、T、C、D、FD
Данные блоки служат для увеличения или уменьшения значения регистра на 1 при каждом вызове такого блока.
INC
D0
X0
D·
DEC
D0
X1
D·
Когда инструкция 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
S·
D·
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
D·
X0
S1·
S2·
2) выполняет побитно операцию OR
WOR
D10
D12
D14
D·
X0
S1·
S2·
3) выполняет побитно операцию XOR
WXOR
D10
D12
D14
D·
X0
S1·
S2·
Данная инструкция, в сочетании с инструкцией CML, выполняет действия, похожие на логическую операцию XOR NOT
WXOR
D10
D12
D14
D·
X0
S1·
S2·
CML
D14
D14
Блок СML
Аргументы: DX、DY、DM、DS、T、C、D、FD
CML
D0
DY0
S·
D·
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·
Данный блок производит инвертирование указанного аргумента в 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
S·
D·
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
S·
D·
X0
Данный блок преобразует 32-х битное целое в 32-х битное вещественное значение
FLTD
D10
D14
S·
D·
X0
Данный блок преобразует 64-х битное целое в 64-х битное вещественное значение.
Данные команды противоположны командам INT. Константы K(десятичное число) и
H(шестнадцатеричное) приводятся к типу автоматически.
Блок INT Аргументы: DX、DY、DM、DS、T、C、D、FD
INT
D10
D20
S·
D·
X0
DINT
D10
D20
S·
D·
X0
(D0) → (D11,D10)
Single word Double word
FLT
D10
D12
S·
D·
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
S·
D·
X0
Если аргумент S не является BCD, блок не выполнится и сработает флаг M8067. Константа К автоматически приводится к данному типу.
Блок BCD
Аргументы: DX、DY、DM、DS、T、C、D、FD
BCD
D10
D0
S·
D·
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
S·
D·
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
S·
D·
Исходные младшие 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
D·
S1·
S2·
Для сравнения значений регистров можно использовать блоки LD<,LD>=,DLD<> и т.д. Но, если в данные блоки передать вещественное число, то его дробная часть будет отброшена, и сравниваться будут только целые части. Это ведут к потере точности и запаздыванию реагирования на какие-то события.
Данный блок позволяет сравнивать вещественные значения. В параметры S1 и S2 передаются значения для сравнения, а в параметре D указывается начальный флаг результата.
С предыдущего примера – М0 установится в 1, если параметр S1> S2, М1 установится в 1, если S1= S2, М2 установится в 1, если S1
Также можно сравнивать и константы:
ECMP
K500
D100
M10
X0