Истина и ложь
Мы уже говорили, что переменные бывают различных типов. Поговорим о булевом (логическом) типе.
Таких переменных всего две:
TRUE и
FALSE, которые обозначают соответственно истину и ложь.
В
Sinumerik присутствуют такие переменные, они объявляются в начале программы, например:
DEF BOOL BREAK
Переменную BREAK (поломка) можно определить одним из значений:
BREAK = FALSE
или
BREAK = TRUE
А можно логическим выражением:
BREAK = R10 > 30
Что делается в этом кадре?
Значение переменной R10 сравнивается с числом 30. Если R10 больше 30, то переменная BREAK получает значение TRUE, а если это не так (R10 меньше или равна 30), то BREAK получает значение FALSE.
Пойдём дальше.
В одно выражение можно записать несколько таких условий, объединить их операторами
AND,
OR,
NOT:
BREAK = (R10 > 30) AND (R10 < 5)
В этом случае BREAK будет истинной, если
оба условия, слева и справа от слова AND (логическое "И") будут истинными.
Если же хотя бы одно условие ложно, то и весь результат будет ложным (FALSE).
Например, BREAK получит значение TRUE если R10 =20 или 25 или 10.8 и т.д.
Если R10 будет иметь значение 40 или 2 или 5 или 30, то во всех этих случаях BREAK будет ложным.
Если условия связывает оператор OR (логическое "ИЛИ"), то для истинности всего результата достаточно, чтобы хотя бы одно условие было истинным, например:
BREAK = (20 > 30) OR (50 < 60)
В этом случае переменная BREAK получит значение TRUE несмотря на то, что первое условие ложно.
NOT - отрицание, подмена "белого чёрным, а чёрного - белым":
BREAK = NOT(20 > 50)
Переменная BREAK получит значение TRUE.
А как же
FANUC?
В нём нет таких переменных, но работать с логическими выражениями он тоже может.
Просто TRUE соответствует 1, а FALSE 0:
#1 = [20 GT 30] AND [50 LT 60]
Как Вы думаете, какое значение получит переменная?