Перейти до змісту

Авто-черга (Auto-Queue Routing)

Авточерга розподіляє роботу між чергами принтерів. Ви обираєте файл, плиту та правила друку, а система підбирає принтер точної моделі, здатний забезпечити всі використані канали філаменту.

Принтери однієї моделі з AMS і без нього перевіряються за їхньою фактичною конфігурацією. Повні правила, приклади багатоколірного й двосоплового друку та причини очікування описані в Призначенні філаменту.

Як це працює

Незалежні файли черги

Коли BamDude приймає завдання, він робить одну перевірену незмінну копію фактичних байтів у data/queue-sources/. Відтоді маршрутизація, підготовка й надсилання на принтер читають саме її. Ноутбук може заснути, SMB може від’єднатися, файл зовнішньої бібліотеки можна перемістити чи видалити, а retention архіву може спрацювати без зміни вже поставленої роботи. Однакові байти в багатьох завданнях зберігаються раз. Спільна копія звільняється лише після видалення останнього її рядка з черги принтера або авточерги. Портативний backup містить готові копії, названі його знімком бази, тому відновленій фермі не потрібні початкові теки. Підкаталог staging/ містить лише незавершені копії: він не є чергою і не потрапляє до backup.

Записи, створені до цієї зміни, лишаються legacy-записами, доки їх не захопить наступна операція. Відсутня копія, копія з неправильним checksum або зникле legacy-джерело дає помилку файла й пропускається. Решта черги продовжує роботу; черга принтера не ставиться на паузу й невдалий фізичний друк не зараховується. Помилкові завдання авточерги залишаються видимими з діями Повторити та видалення; черги принтерів показують їх серед проблемних завдань. Відновіть доступ лише для legacy-запису, тоді повторіть явно. Готова копія ніколи не повторює звернення до старого NAS-шляху.

Призначення

  1. Під час додавання BamDude перевіряє обрану плиту нарізаного 3MF, відповідний G-code, модель і використані канали. Помилка джерела блокує додавання; тимчасова відсутність сумісного принтера — ні.
  2. Фоновий розподільник читає завдання в порядку черги або SJF, якщо його ввімкнено.
  3. Для кожного завдання він шукає принтер потрібної моделі й розташування з повним відповідним набором джерел подачі. Кожен використаний канал потребує власного джерела.
  4. Серед придатних принтерів перевагу має готовий до запуску. Завдання переходить у його чергу разом зі своїми правилами; якщо кандидата немає, панель показує причину очікування.
  5. Черга принтера виконує звичайні перевірки очищення столу, сушіння, поетапного запуску та swap-макросів. Філамент і джерело перевіряються ще раз перед фактичною командою запуску.

SJF + захист від голодування

Коли увімкнено Queue Shortest First (Налаштування → Друк → Queue & Scheduling → Auto-Queue Routing → Queue Shortest First), pending-рядки сортуються:

ORDER BY been_jumped DESC,
         estimated_print_time_seconds ASC,
         position ASC

Sticky-біт been_jumped запобігає голодуванню: щоразу як SJF проштовхує коротший друк повз довший, довший отримує been_jumped=True і випливає на верх наступного раунду незалежно від часу друку. Так 14-годинний друк не стоятиме безкінечно за потоком 30-хвилинних завдань.

Якщо тогл вимкнено — елементи диспатчаться в порядку FIFO (за position).


Налаштування

Налаштування → Друк → Queue & Scheduling → Auto-Queue Routing:

Налаштування Що робить
Queue Shortest First Вмикає SJF + захист від голодування. За замовчуванням: вимкнено (FIFO).

Сам маршрутизатор завжди увімкнений — головного перемикача немає. Якщо в авто-черзі немає елементів — планувальник просто 30-секундний no-op.


Як додати в авто-чергу

Виберіть зручний спосіб додавання:

1. Print Modal — тогл "Auto"

Відкрийте друк файлу бібліотеки чи архіву та виберіть Auto.

Поле Значення
Цільова модель Точна модель із нарізаного файлу. Порожній вибір означає визначення з 3MF, а не дозвіл будь-якої моделі.
Розташування Необов'язкове обмеження розташування принтера.
Джерело філаменту Автоматично: AMS або зовнішня котушка; лише AMS; лише зовнішні котушки.
Точний збіг кольорів Типово вимкнений: точний колір має перевагу, але дозволений інший сумісний колір. Матеріал і сопло залишаються обмеженнями.
Дозволити збіг за базовим матеріалом Типово увімкнений: порівнюються базові матеріали, наприклад PETG, а не вендори чи назви профілів — матеріал сімейства, якщо каталог профіль знає, і матеріал, який оголошує файл, якщо не знає. Поки він увімкнений, жоден ідентифікатор профілю не відмовляє. Вимкніть, щоб вимагати тип профілю й, де відомо, його різновид.
Канали плити Матеріал і колір кожного використаного каналу; Вимагати цей колір закріплює колір одного каналу.

Нижче показано групи AMS підключено / Без AMS / Стан AMS невідомий, окремо кількість сумісних і готових принтерів та причини. Коректне завдання можна додати й із нульовими лічильниками — воно чекатиме. Помилку читання джерела потрібно усунути перед додаванням.

Для файлу бібліотеки той самий діалог несе поле Замовлення — відкриті замовлення, яким цієї плити ще бракує, з тими, кому бракує, на початку списку (передрук з архіву несе прив'язку оригінального друку, тож у нього нічого не перепитують). Вибір підшиває елемент під це замовлення, а якщо плита належить рівно одному його рядку — то й під цей рядок, тож план замовлення перестає просити роботу, яку ви вже поклали в чергу. Без замовлення доступне завжди. Див. Підшивання друку під замовлення.

2. Режим auto_queue віртуального принтера

Слайсер "Send to Printer" → ВП зберігає файл у бібліотеку → перевіряє плиту → додає в авточергу. Деталі UI див. Віртуальний принтер → auto_queue.

Машину обирає розподільник за правилами завдання. Підтвердження очищення столу та інші умови запуску залишаються чинними.

3. Drag-and-drop на панель Auto-Queue

Кидай скільки завгодно нарізаних файлів куди завгодно над панеллю Auto-Queue на верху сторінки Queue. Кожен завантажується в корінь бібліотеки, а далі файли, на які відповідь була б однакова, групуються — один Print Modal на групу, з бейджем група 1 з 3 · 12 одиниць — заблокований у режимі Auto (без тогла specific/auto, без printer picker, правила Auto: модель, розташування, джерело філаменту та кольори).

Цільова модель кожного елемента припнута до його власної sliced_for_model і змінити її не можна. По файлу, а не по прогону: два файли, нарізані під дві різні машини, зберігають дві різні цілі в одному дропі. Ставити її явно, а не лишати порожньою, важливо — порожнє означає «розберись із 3MF», що зазвичай дає ту саму відповідь, але на екрані там, де стоїть обмеження, порожньо, і прогін із десяти файлів не сказав би нічого про те, чого кожен із них чекає.

Файл без записаної моделі відхиляється поіменно, ще до відкриття діалогу. Припинати нема до чого й перевіряти нема з чим, а поставити його на здогад означало б лишити елемент чекати машини, якої ніхто не обирав.

Форма auto-режиму більше й не пропонує ціль, на якій файл не піде. Вибір невідповідної моделі ніколи не падав помилкою — він давав елемент, що чекає принтера, який його ніколи не візьме, і на екрані нічого цього не пояснювало.

Кнопка Завантажити з бібліотеки на панелі відкриває той самий пікер файлів, де запропоновано кожен друкований файл, а не лише під одну машину.

Захищено правом queue:create. Панель рендериться завжди, навіть порожня — drop-target постійно доступний; підказка empty-state нагадує про drag-drop при першому відкритті.

Налаштування окремих каналів належать файлу: після такої відповіді наступний файл групи відкривається для перевірки.

4. REST API

POST /api/v1/auto-queue/
{
  "library_file_id": 42,
  "target_model": "P1S",
  "plate_id": 1,
  "feed_policy": "external_only",
  "force_color_match": false,
  "allow_base_material_match": true
}

Повна схема — у API reference. Quantity > 1 створює N рядків одним викликом (та ж семантика batch_id, що й у print_queue).

5. План замовлення та Telegram

План замовлення може відправити рядок або весь план в авточергу; перевірка плити виконується до створення завдань. Telegram використовує ту саму перевірку джерела. Велика кількість копій не послаблює правила кольору чи подачі.


Панель AutoQueuePanel на Queue dashboard

На сторінці Queue є панель Auto-Queue над картками per-printer черг. Рендериться завжди, тож drop-target постійно доступний; коли pending-айтемів немає, панель згортається до однорядкової підказки про drag-drop.

З 0.5.5 панель — справжня черга, а не просто купа:

  • Елементи йдуть у справжньому порядку диспетчеризації. Сусідні копії одного завдання згортаються в компактний рядок ×N; рядок розгортається в окремі копії.
  • Тягнеться все. Згорнутий батч рухається як блок, розгорнута копія — будь-куди в порядку: постав п'ять копій A, додай дві B, витягни одну B наперед і залиш другу вкінці — список покаже саме це. З увімкненим Queue Shortest First ручки перетягування ховаються, а підказка пояснює, що порядком володіє дистриб'ютор.
  • Кожна копія редагується в повному діалозі Schedule — тому самому, що й per-printer черга: цільова модель і локація, розклад, опції друку, макроси. Редагування батча застосовується до всіх його копій одразу; окрему копію також можна редагувати, видалити чи примусово призначити саму по собі.
  • Кожен рядок, як і раніше, показує мініатюру, назву, плейт, цільову модель, розрахунковий час і причину очікування, коли придатного принтера немає.

Щойно елемент призначається на принтер — він зникає з панелі і зʼявляється в чергу того принтера з невеликим бейджем "auto-assigned".


Правила придатності

Принтер має бути активним, неархівованим, доступним розподільнику й вільним узяти нову роботу. Іконка маршруту на картці дозволяє виключити машину з автоматичного розподілу, не зупиняючи її звичайну чергу.

Потрібні точна модель, обране розташування та повне призначення всіх використаних каналів: матеріал за збереженим правилом зіставлення, сопло, правило джерела й потрібні кольори. Одного слота PLA недостатньо для двох каналів PLA. Ручні фізичні призначення не переносяться довільно між принтерами.

Серед придатних кандидатів спочатку перевагу має готовий до старту, далі — кращий збіг кольорів. Повні приклади див. у Призначенні філаменту.

«Спорожнювати першою найпорожнішу котушку» обирає лоток, а не принтер

prefer_lowest_filament жодним чином не бере участі у виборі, який принтер отримає завдання. Воно вирішує на вже обраному принтері, у який його слот лягає однаково добрий збіг: у той, де філаменту лишилось найменше, — щоб догризти майже порожню котушку замість свіжої. Той самий перемикач керує автоматичним підбором для діалогу друку й завдань віртуального принтера. Явний фізичний вибір слота зберігається, а не ранжується заново.

Типово увімкнене, живе в Налаштування → Філамент → Перевірки філаменту → «Спорожнювати першою найпорожнішу котушку». На власних dispatch-шляхах BamDude — цей маршрутизатор і queue scheduler — воно додатково пропускається для принтера з вимкненим AMS Filament Backup; чому саме — див. Черга друку.

Колір, матеріал і різновид профілю

Колір і матеріал — окремі рішення. Коли Дозволити збіг за базовим матеріалом увімкнено, кастомний PETG-профіль і Generic PETG збігаються попри різні назви чи вендорів — зокрема й профіль, який цей інстанс узагалі не може розв'язати, а це звичайна річ, коли на одну ферму нарізає кілька людей. Коли воно вимкнене, відомий різновид tray_info_idx лишається обмеженням. Відсутній різновид не вигадується. Див. зіставлення матеріалу і правила кольору.


Маршрутизація — це не диспетчеризація

Обрати, якому принтеру належить завдання, і вирішити, коли його можна почати — два різні питання, і відповідають на них у двох різних місцях.

Роутер відповідає лише на перше. Він віддасть завдання принтеру, який не може стартувати просто зараз — тому, що чекає підтвердження «Очистити стіл», міняє стіл, сушить або притриманий ступінчастим стартом. Завдання тоді видимо лежить у черзі того принтера, доки той не буде готовий, і всі перевірки безпеки спрацьовують тоді, коли це справді має значення.

До 0.5.1.2 роутер узагалі відмовлявся скеровувати роботу на такий принтер. Звучало безпечніше, але безпечніше не було: черга принтера лишалась порожня, тож на екрані ніщо не пояснювало затримку, а плашка «Очистити стіл» — яка зʼявляється саме з черги принтера — не мала шансу показатись. Оператор бачив простоюючі машини, названі зайнятими, і ферму, що виглядала мертвою. Саме розміщення роботи робить причину видимою.

Принтер, який готовий, усе одно виграє, коли є з чого вибирати.


Перебалансування між моделями принтерів

Роботу рядка замовлення ділять між моделями принтерів у момент постановки в чергу — руками або за пропозицією ферми, — і поставлена копія належить моделі свого файлу. Коли P1S звільняються швидше, ніж припускав прогноз, копії для X1C так і чекають у своїй купці. Перебалансування дозволяє авточерзі переносити ще не розподілені копії рядка замовлення на вільні принтери іншої моделі, коли так рядок завершиться раніше — зокрема на модель, чия плита робить іншу кількість деталей; тоді плити й кількість друків перераховуються.

Правило. Копія переноситься лише коли виконується все разом: на її моделі зараз немає готового принтера; на іншій моделі є хоча б один принтер, який вільний і готовий (порожньої черги замало — принтер, що ще чекає підтвердження очищення столу, лише виглядає вільним); у рядка є нарізаний файл для тієї моделі з оцінкою часу; і друки, потрібні, щоб покрити ті самі деталі там, завершаться не пізніше, ніж очікування вдома. Серед кількох придатних моделей перемагає найраніше завершення, далі — найменший надлишок.

Деталі, а не друки. Копія — це заявка на покриття N деталей. Перенесення 6-деталевої плити P1S на A1 mini, де плита дає 2 деталі, перетворює один друк на три; перенесення 2 деталей на більший стіл — на один друк із надлишком менше однієї плити, який лягає на полицю як будь-який інший надлишок.

Три способи запустити.

  • Автоматично — Налаштування → Друк → Маршрутизація авточерги → Перебалансування між моделями принтерів (типово вимкнено). Планувальник перевіряє після кожного проходу розподілу, переносить не більше однієї копії на вільний принтер за прохід і не чіпає рядок п'ять хвилин після перенесення.
  • По рядку — кнопка Перебалансувати на плані рядка замовлення; показується, поки в рядка є нерозподілені копії в авточерзі. Працює незалежно від налаштування й не зважає на п'ятихвилинну паузу.
  • По копії — Перебалансувати на рядку в очікуванні або на згорнутому блоці ×N на панелі авточерги. Рядок, який перенести не можна, каже чому.

Що ніколи не переноситься. Копія, вже віддана принтеру, запланована на час, поставлена на ручний старт, прив'язана до конкретних слотів філаменту, націлена на локацію, поставлена з архіву, а не з файлу бібліотеки, або не підшита під рядок замовлення. Вони або вже належать принтеру, або несуть ваше рішення.

Що ви бачите. Перенесений рядок має на панелі позначку ← P1S — модель, для якої його ставили раніше; створені разом із ним копії поділяють його партію. Маршрутизація, диспетчеризація й правила філаменту не змінюються: перенесена копія записується тим самим записувачем, що й будь-яка постановка, і проходить ті самі перевірки файлу й філаменту.

Вирішують оцінки

Перебалансування порівнює ті самі оцінки часу друку, що й ETA. Файл без оцінки ніколи не стає ціллю, а копія без оцінки вважається такою, що могла б стартувати вдома щойно принтер звільниться.


Сушіння має нижчий пріоритет за друк

Авто-сушіння черги тримає котушки сухими між друками. Коли Settings → AMS Display Thresholds → Queue Auto-Drying у типовому неблокуючому режимі (queue_drying_block=false, "друк має пріоритет над сушінням"), завдання, додане напряму до принтера, вже зупиняє поточний цикл сушіння й починає друк.

Авто-черга поводиться так само, і з 0.5.1.2 робить це ранжуванням, а не виключенням: принтер, вільний узяти роботу, але зайнятий сушінням, завдання отримує — просто програє тому, хто може почати негайно. Per-printer dispatch тоді зупиняє цикл сушіння й починає друк (той самий крок _stop_drying, описаний у AMS → Авто-сушіння черги).

Коли Авто-сушіння черги у блокуючому режимі (queue_drying_block=true), сушіння й далі тримає чергу — завдання чекає в черзі того принтера, доки цикл сушіння не завершиться, точно як чекало б завдання, додане напряму.

Поведінка додана у 0.4.5

До 0.4.5 авто-черга вважала принтер, що сушиться, просто "зайнятим" і пропускала його, тож авто-скероване завдання могло чекати за циклом сушіння, хоча додане напряму завдання отримало б пріоритет. Найпомітніше на фермах P2S / H2 з увімкненим авто-сушінням AMS.


AMS-мапінг на момент призначення

Призначення обчислюється з поточних джерел обраного принтера й збережених правил завдання. Черга принтера зберігає ці правила незалежно від початкового рядка авточерги.

Перевірка повторюється до підготовки та безпосередньо перед командою запуску. Зміна котушки, з'єднання, файлу або поточного завдання може повернути друк в очікування з причиною; часткове призначення не надсилається. Див. перевірку перед друком.

Семантика cancel / edit

Дія Ефект
Cancel pending авто-черги Рядок видалений. Жоден принтер його не бачив.
Cancel assigned авто-черги Скасовується per-printer елемент, якого створив маршрутизатор. Auto-рядок лишається у assigned для аудиту.
Редагувати pending елемент Повний діалог Schedule — цільова модель / локація, розклад, опції друку, макроси. Редагування батча застосовується до кожної копії; окрема копія редагується сама.
Редагувати після призначення Редагуй per-printer елемент черги.

Коли користуватися

Сценарій Рекомендація
Один принтер Пропусти авто-чергу, користуйся звичною per-printer чергою — без overhead на маршрутизацію, простіший UI.
2-3 принтери однієї моделі Авто-черга — золотий варіант для load-balancing: кидаєш завдання, планувальник розгрібає на той що звільнився першим.
Змішана ферма по моделях Авто-черга з явним target_model per job — той самий load-balancing у межах моделі, без кросу між моделями.
Кольоро-чутливі завдання (логотипи, вивіски) Увімкни force_color_match — завдання не диспатчиться на принтер з не тим кольором.
Hands-off потік від слайсера ВП у режимі auto_queue + авто-черга → розподіл за правилами завдання зі звичайними умовами запуску.

Перехід зі звичайної черги

Звичайні черги залишаються способом вибрати конкретний принтер; авточерга відкладає вибір машини. Обидва шляхи застосовують повну перевірку філаменту перед запуском.

Після оновлення старі завдання зберігають доведені обмеження подачі й фізичні призначення. Якщо даних для відновлення правил бракує, потрібна перевірка мапінгу. Редагування розкладу, копії та повтори зберігають правила; зміна принтера або плити для ручного мапінгу потребує нової відповіді. Див. редагування й повтори.