Перейти к публикации

XBuid Логический оператор AND


doodoroff

Рекомендованные сообщения

Здравствуйте !

Недавно жизнь заставила заняться написанием постпроцессора для электро-эрозионного станка. В Xbuild пишу такой код:

<IF>[and (lt(_X,0), lt(_Y,0), lt(_I,0), lt(_J,0))]<THEN>
    <32>----
<ENDIF>

Переменные _X, _Y, _I, _J - это значения соответствующих координат.

Так вот: я заметил, что в операции логического сравнения "and" участвуют только первые 2 аргумента выражения (lt(_X,0) и lt(_Y,0)), а 2 остальных игнорируются, как если бы у меня было написано:

<IF>[and (lt(_X,0), lt(_Y,0))]<THEN>
    <32>----
<ENDIF>

Строка компилируется без ошибок и в сгенерированном коде выводится результат логического выражения только для первых двух аргументов. Т. е. в строку сгенерированного кода выпадут все варианты для -X и -Y:

... ----  ---+  --+-  --++

Подскажите: это нормально ? "and" работает только с двумя аргументами, а остальные игнорятся ? Или я что-то делаю не правильно ?

 

P.S. вариант

<IF>[and (lt(<X-COORD>,0), lt(<Y-COORD>,0), lt(<ARC-X>,0), lt(<ARC-Y>,0))]<THEN>
    <32>----
<ENDIF>

пробовал - тот же результат. 

Ссылка на сообщение
Поделиться на других сайтах


UnPinned posts

@doodoroff Логическое И не обрабатывает все что справа если натыкается на ложь.

У вас видимо Y>0 или Y=0, на этом все и заканчивается.

Изменено пользователем mannul
Ссылка на сообщение
Поделиться на других сайтах

<IF>[and (lt(_X,0), lt(_Y,0), lt(_I,0), lt(_J,0))]<THEN>
    <32>----
<ENDIF>

На сколько я понимаю в этом коде должна реализовываться следующая логика:

ЕСЛИ у всех 4 аргументов логического выражения and значение="истина", то вывести "----". Если Y>0 или Y=0, то and возвращает "ложь" и оператор IF не выполняется, т.е. не выводится ничего.

А у меня два последних аргумента вообще игнорируются с любыми значениями.

Вот фрагмент кода:

<IF>[and (lt(_X,0), lt(_Y,0), lt(_I,0), lt(_J,0))]<THEN> //1
	<32>----
<ENDIF>
<IF>[and (lt(_X,0), lt(_Y,0), lt(_I,0), ge(_J,0))]<THEN> //2
	<32>---+
<ENDIF>
<IF>[and (lt(_X,0), lt(_Y,0), ge(_I,0), lt(_J,0))]<THEN> //3
	<32>--+-
<ENDIF>
<IF>[and (lt(_X,0), lt(_Y,0), ge(_I,0), ge(_J,0))]<THEN> //4
	<32>--++
<ENDIF>
<IF>[and (lt(_X,0), ge(_Y,0), lt(_I,0), lt(_J,0))]<THEN> //5
	<32>-+--
<ENDIF>
<IF>[and (lt(_X,0), ge(_Y,0), lt(_I,0), ge(_J,0))]<THEN> //6
	<32>-+-+
<ENDIF>
<IF>[and (lt(_X,0), ge(_Y,0), ge(_I,0), lt(_J,0))]<THEN> //7
	<32>-++-
<ENDIF>
<IF>[and (lt(_X,0), ge(_Y,0), ge(_I,0), ge(_J,0))]<THEN> //8
	<32>-+++
<ENDIF>
<IF>[and (ge(_X,0), lt(_Y,0), lt(_I,0), lt(_J,0))]<THEN> //9
	<32>+---
<ENDIF>
<IF>[and (ge(_X,0), lt(_Y,0), lt(_I,0), ge(_J,0))]<THEN> //10
	<32>+--+
<ENDIF>
<IF>[and (ge(_X,0), lt(_Y,0), ge(_I,0), lt(_J,0))]<THEN> //11
	<32>+-+-
<ENDIF>
<IF>[and (ge(_X,0), lt(_Y,0), ge(_I,0), ge(_J,0))]<THEN> //12
	<32>+-++
<ENDIF>
<IF>[and (ge(_X,0), ge(_Y,0), lt(_I,0), lt(_J,0))]<THEN> //13
	<32>++--
<ENDIF>
<IF>[and (ge(_X,0), ge(_Y,0), lt(_I,0), ge(_J,0))]<THEN> //14
	<32>++-+
<ENDIF>
<IF>[and (ge(_X,0), ge(_Y,0), ge(_I,0), lt(_J,0))]<THEN> //15
	<32>+++-
<ENDIF>
<IF>[and (ge(_X,0), ge(_Y,0), ge(_I,0), ge(_J,0))]<THEN> //16
	<32>++++
<ENDIF>

Вот пример:

R2yzR7c

В примере должен выводиться только текст в красной рамке

Вопрос тот же: AND в XBuild может обрабатывать больше 2-х аргументов ? Или я что-то не правильно делаю ?

3 минуты назад, doodoroff сказал:

<IF>[and (lt(_X,0), lt(_Y,0), lt(_I,0), lt(_J,0))]<THEN>
    <32>----
<ENDIF>

На сколько я понимаю в этом коде должна реализовываться следующая логика:

ЕСЛИ у всех 4 аргументов логического выражения and значение="истина", то вывести "----". Если Y>0 или Y=0, то and возвращает "ложь" и оператор IF не выполняется, т.е. не выводится ничего.

А у меня два последних аргумента вообще игнорируются с любыми значениями.

Вот фрагмент кода:


<IF>[and (lt(_X,0), lt(_Y,0), lt(_I,0), lt(_J,0))]<THEN> //1
	<32>----
<ENDIF>
<IF>[and (lt(_X,0), lt(_Y,0), lt(_I,0), ge(_J,0))]<THEN> //2
	<32>---+
<ENDIF>
<IF>[and (lt(_X,0), lt(_Y,0), ge(_I,0), lt(_J,0))]<THEN> //3
	<32>--+-
<ENDIF>
<IF>[and (lt(_X,0), lt(_Y,0), ge(_I,0), ge(_J,0))]<THEN> //4
	<32>--++
<ENDIF>
<IF>[and (lt(_X,0), ge(_Y,0), lt(_I,0), lt(_J,0))]<THEN> //5
	<32>-+--
<ENDIF>
<IF>[and (lt(_X,0), ge(_Y,0), lt(_I,0), ge(_J,0))]<THEN> //6
	<32>-+-+
<ENDIF>
<IF>[and (lt(_X,0), ge(_Y,0), ge(_I,0), lt(_J,0))]<THEN> //7
	<32>-++-
<ENDIF>
<IF>[and (lt(_X,0), ge(_Y,0), ge(_I,0), ge(_J,0))]<THEN> //8
	<32>-+++
<ENDIF>
<IF>[and (ge(_X,0), lt(_Y,0), lt(_I,0), lt(_J,0))]<THEN> //9
	<32>+---
<ENDIF>
<IF>[and (ge(_X,0), lt(_Y,0), lt(_I,0), ge(_J,0))]<THEN> //10
	<32>+--+
<ENDIF>
<IF>[and (ge(_X,0), lt(_Y,0), ge(_I,0), lt(_J,0))]<THEN> //11
	<32>+-+-
<ENDIF>
<IF>[and (ge(_X,0), lt(_Y,0), ge(_I,0), ge(_J,0))]<THEN> //12
	<32>+-++
<ENDIF>
<IF>[and (ge(_X,0), ge(_Y,0), lt(_I,0), lt(_J,0))]<THEN> //13
	<32>++--
<ENDIF>
<IF>[and (ge(_X,0), ge(_Y,0), lt(_I,0), ge(_J,0))]<THEN> //14
	<32>++-+
<ENDIF>
<IF>[and (ge(_X,0), ge(_Y,0), ge(_I,0), lt(_J,0))]<THEN> //15
	<32>+++-
<ENDIF>
<IF>[and (ge(_X,0), ge(_Y,0), ge(_I,0), ge(_J,0))]<THEN> //16
	<32>++++
<ENDIF>

Вот пример:

R2yzR7c

В примере должен выводиться только текст в красной рамке

Вопрос тот же: AND в XBuild может обрабатывать больше 2-х аргументов ? Или я что-то не правильно делаю ?

Вот ссылка на картинку с примером

https://ibb.co/R2yzR7c

Ссылка на сообщение
Поделиться на других сайтах

@doodoroff Было бы гораздо проще, если бы вы прикрепили проект, пост и написали что хотите сделать.

По вашей картинке выводит вообще всё.

Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, doodoroff сказал:

Вопрос тот же: AND в XBuild может обрабатывать больше 2-х аргументов ?

 

Нет. По-моему, требуемое реализуется просто:

<32>
<IF>[lt(<X-COORD>,0)]<THEN>-<ELSE>+<ENDIF>
<IF>[lt(<Y-COORD>,0)]<THEN>-<ELSE>+<ENDIF>
<IF>[lt(<ARC-X>,0)]<THEN>-<ELSE>+<ENDIF>
<IF>[lt(<ARC-Y>,0)]<THEN>-<ELSE>+<ENDIF>
<EOB>

 

Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, mannul сказал:

@doodoroff Было бы гораздо проще, если бы вы прикрепили проект, пост и написали что хотите сделать.

По вашей картинке выводит вообще всё.

Ну я, наверно, вопрос сформулировал избыточно сложно. Я узнать хотел у опытных разработчиков, может ли and обрабатывать больше 2-х аргументов.

 

5 часов назад, Helg сказал:

Нет. По-моему, требуемое реализуется просто:


<32>
<IF>[lt(<X-COORD>,0)]<THEN>-<ELSE>+<ENDIF>
<IF>[lt(<Y-COORD>,0)]<THEN>-<ELSE>+<ENDIF>
<IF>[lt(<ARC-X>,0)]<THEN>-<ELSE>+<ENDIF>
<IF>[lt(<ARC-Y>,0)]<THEN>-<ELSE>+<ENDIF>
<EOB>

 

Спасибо !

Ссылка на сообщение
Поделиться на других сайтах
  • 4 недели спустя...
05.01.2021 в 06:49, doodoroff сказал:

Ну я, наверно, вопрос сформулировал избыточно сложно. Я узнать хотел у опытных разработчиков, может ли and обрабатывать больше 2-х аргументов.

 

Спасибо !

Добрый день! Операторы and, or и подобные не умеют использовать более 2 аргументов. Проверено! Разработчики как-то подтверждали.

Пример обхода этой ситуации есть - делайте побольше круглых скобок и сравнивайте парами. Сложнее, но только так работает. Вот:

<IF>[and(and(apxeq(<ABS-SHIFTX>,0),apxeq(<ABS-SHIFTY>,0)),apxeq(<ABS-SHIFTZ>,0))]<THEN>

Изменено пользователем Greenston
Ссылка на сообщение
Поделиться на других сайтах
  • 7 месяцев спустя...

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...