G29 разница между Q и D

Мне было интересно, в чем точная разница между переключателями Q и D для команды G29? Похоже, они делают то же самое:

[D<bool>]   
Режим сухого хода. Просто исследуйте сетку, но не обновляйте данные выравнивания стола

[Q<bool>]   
Запрос текущего состояния выравнивания

, 👍1


1 ответ


Лучший ответ:

0

TL;DR
Да, они разные, но активен ли Q, зависит от параметра конфигурации a, иначе он игнорируется, и будет выполнен обычный G29.


Вариант "D"

С опцией D код G29 выполняется в режиме сухого хода:

 * D Режим сухого хода. Просто оцените топологию стола - не применяйте
 * или измените данные на уровне стола. Полезно проверить топологию
 * после первого запуска G29.

Если вы посмотрите в исходный код G29 для ABL, опция D установит логическое значение abl.dryrun:

abl.dryrun = parser.boolval('D') || TERN0(PROBE_MANUALLY, no_action);

Это логическое значение приведет к исключению многих частей кода, например:

// Отмените смещение, потому что оно будет немедленно применено
// и вызывают компенсационное движение в Z.
..
// Автоматическое выравнивание стола завершено! Включите, если это возможно. 
...
probe.preheat_for_probing(LEVELING_NOZZLE_TEMP, LEVELING_BED_TEMP);
...
// vector_3 planeNormal связанный код
...
extrapolate_unprobed_bed_level();
...
// Создайте матрицу, но еще не исправьте положение
...
// Исправьте текущее положение XYZ на основе наклонной плоскости.
...
// Отмените смещение, потому что оно будет немедленно применено
// и вызывают компенсационное движение в Z.
..
// Автоматическое выравнивание стола завершено! Включите, если это возможно.

Опция "Q"

Опция Q в коде команды G29 доступна при активном ручном зондировании в файле configuration.h:

/**
 * The "Manual Probe" provides a means to do "Auto" Bed Leveling without a probe.
 * Use G29 repeatedly, adjusting the Z height at each point with movement commands
 * or (with LCD_BED_LEVELING) the LCD controller.
 */
//#define PROBE_MANUALLY

Из источников:

 *
 * Чтобы выполнить ручное зондирование, просто повторите G29 до тех пор, пока процедура не будет завершена.
 * Первый G29 принимает параметры. "G29 Q" - статус, "G29 A" - отбой.
 *
 *  Q  Query leveling and G29 state

Использование Q в команде установит логическую переменную seenQ, которая обеспечивает дополнительный вывод, как в режиме отладки.

  // G29 Q также доступен при отладке
  #if ENABLED(DEBUG_LEVELING_FEATURE)
    if (seenQ || DEBUGGING(LEVELING)) log_machine_info();
    if (DISABLED(PROBE_MANUALLY) && seenQ) G29_RETURN(false);
  #endif

Просматривая код, вы снова натыкаетесь на:

abl.dryrun = parser.boolval('D') || TERN0(PROBE_MANUALLY, no_action);

В первом варианте ("D") первая часть утверждения уже была истинной, поэтому последняя часть не представляла интереса, поскольку это утверждение является утверждением ИЛИ. Теперь (для опции "Q") интерес представляет последняя часть, первая часть которой является ложной. Последняя часть представляет собой троичный макрос Marlin:

TERN0(OPTION, T) Если ОПЦИЯ включена, emit T в противном случае emit 0 (false).

Итак, если PROBE_MANUALLY был включен/определен в конфигурации.файл h, троичный макрос возвращает no_action ("one"/true, так как это логическое значение: no_action = seenA || seenQ), в противном случае "ноль"/false. И если это так, то abl.dryrun истинен, и весь код, указанный в опции "D", также будет опущен. Но для no_action применяется дополнительное исключение; это приведет к раннему завершению функции (строка 478):

if (no_action) G29_RETURN(false);

Пока это общий ответ, следующий специфичен для Ender 5 Plus.

При рассмотрении другого вашего вопроса выясняется, что используемый принтер-это Ender 5 Plus. Если вы используете стоковую прошивку, вы можете заглянуть в источники, поскольку они доступны (через их Google Drive) Creality для Ender 5 Plus.

Покопавшись в источниках, версия прошивки взята из ветки 1.1.x, они ссылаются на разработку Marlin 2016/2017. Если вы посмотрите на источники, конфигурационный файл не определяет необходимый PROBE_MANUALLY для того, чтобы Q стал активным в G29 Q, отправленном на принтер, в таком случае Q игнорируется, и будет выполнен обычный G29. Обратите внимание, что реализация кода G29 способна обрабатывать опцию Q, но поскольку она не включена в этой конфигурации, она не будет работать.


,