Swap Mode¶
Swap mode підтримує автоматизовані плейт-свопери -- механічні додатки, що виштовхують готову робочу пластину та позиціонують свіжу між друками. Коли swap mode увімкнено, BamDude координується зі свопером, щоб виконувати unattended-батчі без ручного підтвердження очищення пластини.
Що таке Swap Mode?¶
Плейт-свопер -- це апаратний аксесуар (найчастіше для A1 Mini), що бере на себе ротацію пластин між друками. Зі swap mode увімкненим планувальник черги:
- Виконує макрос
swap_mode_startперед першим друком - Запускає сам друк
- Виконує макрос
swap_mode_change_tableпісля завершення друку - Обходить підтвердження plate-clear
- Автоматично запускає наступний друк з черги
Цикл триває, поки черга не спорожніє.
Налаштування¶
Увімкнення Swap Mode¶
- Перейдіть до Settings → Queue.
- Увімкніть Swap Mode для свого A1 Mini.
-
Виберіть Swap Profile під своє залізо:
Профіль Для a1mini_kitОфіційний Bambu A1 Mini Plate Swapper Kit a1mini_stlCommunity-printable A1 Mini свопери (printable kit / STL дизайни) jobox-a1JoBox plate-swap автоматика Профіль прив'язує правильний набір макросів
swap_mode_start/swap_mode_change_table.a1mini_stlіjobox-a1постачаються з seed-нутими built-in-макросами;a1mini_kit— ні (офіційний кіт Bambu наразі покладається на user-supplied G-code — напишіть власну пару під Settings → Macros і позначтеswap_profile=a1mini_kit). Built-in-и будь-якого профілю можна перевизначити, відредагувавши макрос у UI.
Swap G-code макроси¶
Swap mode керується G-code макросами, прив'язаними до подій swap_mode_start та swap_mode_change_table. Налаштовуйте їх у Settings → Macros. Див. Макроси для повної системи подій + фільтрів.
; Приклад сніпета swap_mode_change_table
G28 X Y ; Home X and Y
G1 Y 180 F3000 ; Move bed forward for plate swap
M400 ; Wait for moves to complete
G4 S5 ; Pause 5 seconds for swap
G28 ; Home all axes
Потрібне власне обладнання
Swap mode потребує фізичного плейт-свопера, прикрученого до принтера.
Підлаштовуйте G-code swap_mode_change_table під ваш конкретний
механізм -- універсальної swap-рутини не існує.
Restart-стійке відстеження подій¶
Swap-намір зберігається на диск, а не в пам'яті. Рестарт BamDude посеред друку ніколи не втрачає очікуваний plate-swap.
Як це працює
- На диспатчі кожна swap-подія, яку завдання збирається виконати, додається в
print_archives.extra_data["swap_macro_events_pending"](JSON-список). - Коли
swap_mode_startспрацьовує успішно, диспатчер одразу видаляє його зі списку. - Коли
swap_mode_change_tableспрацьовує успішно (вon_print_complete), той самий запис видаляє його. - Щойно список порожніє, ключ зникає взагалі, тож
extra_dataархіву залишається чистим.
Чому це важливо
- Рестарт бекенду між print start та print complete раніше витирав in-memory dict
_active_swap_config, лишаючиon_print_completeбез нічого, на чому діяти. Тепер pending-список читається з рядка архіву, і спрацьовують лише ті події, що в ньому ще лишилися. - Дубльований
on_print_complete(MQTT replay, reconnect flap) знаходить подію вже видаленою і нічого не робить -- жодного подвійного swap.
Де живе маркер
Для диспатчів файлів бібліотеки початковий pending-список загортається
в INSERT всередині archive_print() (один statement, без додаткового
writer). Для повторних друків існуючий рядок архіву оновлюється у
відкритій сесії диспатчера до FTP-завантаження -- тримання всього в
одній транзакції уникає гонки з runtime-трекером по тому ж рядку.
Диспатч і startup-lock на DB-write¶
Background dispatch працює паралельно по принтерах — відправка друків на два A1 Mini зі сваперами справді стартує обидва завдання одночасно.
Що серіалізовано
Коротка фаза DB-insert (INSERT INTO print_archives) обгорнута в startup-lock, щоб single-writer семантика SQLite не падала на database is locked. Лок звільняється, як тільки рядок закомічений; FTP-завантаження і start_print MQTT round-trip далі біжать паралельно.
Що ти побачиш
- На двох принтерах
swap_mode_startспрацьовує практично одночасно. - Їхні FTP-завантаження йдуть паралельно (у dispatch-тості будуть два прогрес-бари).
- Тимчасовий "одне за раз через усю ферму" gate, що приземлився в середині 0.4.1, прибрали, як тільки startup-lock у диспатчер заїхав.
Поведінка черги в Swap Mode¶
Коли swap mode активний для принтера:
- Друк завершується на принтері.
- Виконується макрос
swap_mode_change_table(G-code через MQTT, з ACK у idle-стані). - Підтвердження plate-clear обходиться -- свопер сам розбирається з очищенням.
- Наступний друк з черги диспатчиться.
- Цикл повторюється, поки черга не спорожніє.
Це режим unattended batch production для сумісних принтерів.
Запускайте друк з BamDude, а не з екрана принтера
Swap-макроси виконуються лише для друків, які запустив BamDude -- з черги, з Auto-Queue, передруком з архіву або через Send-to-Printer. Друк, який ви запустили на самому екрані принтера (чи зі слайсера напряму в машину), не проходить через диспетчер BamDude, тому:
- макрос
swap_mode_change_tableне виконується -- стіл не міняється, і готова деталь лишається на місці; - оскільки плиту ніхто не звільнив, BamDude перед наступним друком з черги попросить вручну натиснути Очистити стіл -- так само, як для принтера без swap-режиму.
Виглядає це так, ніби принтер вільний, а черга не рухається. Натисніть Очистити стіл на карточці принтера, коли стіл справді порожній, і черга поїде далі.
Єдиний виняток -- файл, у назві якого є .swap. або .swaps. (саме такі
експортує swaplist.app): у них зміна столу зашита в сам G-code, тож вони
міняють стіл коректно навіть при запуску з принтера, і підтвердження не
питається.
Скасований або невдалий друк завжди просить підтвердження
Swap-макроси свідомо пропускаються, коли друк завершився не успішно: деталь (або те, що від неї лишилось) досі на столі, і заміна столу в такому стані або заклинить механізм, або заведе забруднену плиту під наступний друк. Саме тому черга після збою зупиняється й чекає на вас -- це безпечна поведінка, а не поломка.
Якщо друк позначено невдалим через те, що BamDude втратив звʼязок із принтером під час swap-макросу, у повідомленні це сказано прямо -- це проблема мережі, а не макросу. Короткі обриви перечікуються 30 секунд, і лише потім друк вважається провальним.
Парування з макросами print_started / print_finished¶
Новіші події print_started та print_finished (див. Макроси) спрацьовують додатково до swap-макросів, на кожному друку незалежно від swap mode. Використовуйте їх для ортогональної автоматизації -- світло корпусу, зовнішні реле тощо.
Приклад: світло корпусу тільки на swap-mode друках
| Macro 1 | Macro 2 |
|---|---|
| Action: MQTT-action | Action: MQTT-action |
Event: print_started |
Event: print_finished |
Command: chamber_light_on |
Command: chamber_light_off |
swap_mode_only: true |
swap_mode_only: true |
delay_seconds: 10 |
delay_seconds: 0 |
Світло цикл лише на справжніх swap-mode прогонах; ручні друки з того ж принтера лишають світло недоторканим.
Вимоги¶
| Вимога | Деталі |
|---|---|
| Принтер | A1 Mini (основний таргет) |
| Обладнання | Встановлений плейт-свопер |
| Макроси | Налаштований G-code макрос swap_mode_change_table |
| Елементи черги | Щонайменше 2 друки в черзі для принтера |
Поради¶
Перевірте swap-макрос вручну
Запустіть G-code swap_mode_change_table з файлового браузера принтера
(або через Macros → Run Now) перш ніж вмикати swap mode у
проді. Поганий swap-роутин заклинює всю чергу.
Поєднуйте з batch quantity
Використовуйте функцію batch-quantity у черзі, щоб поставити N копій, а далі дайте swap mode прогнати їх підряд. Поєднайте з авто-вимкненням розумних розеток для повністю unattended нічних прогонів.
Моніторте дистанційно
Стрім із камери + Telegram-бот дозволяють спостерігати за swap-операцією та отримувати сповіщення про завершення черги або збій. Див. Telegram-бот і Камеру.
Початково базується на документації Bambuddy.