Кремень КД Реклама
Кремень КМ Реклама

Обеспечение безопасной работы принтера на RepRap Firmware 3.4.

X-Dron
Идет загрузка
Загрузка
29.04.2022
3141
1
Техничка

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

9

    Про пожаробезопасность нагревательных приборов, к числу которых относится принтер, кто только не писал. Мое мнение – любой принтер должен быть обеспечен системой автоматического отключения при аварийных ситуациях. Для этого используются разнообразные устройства, которые позволяют отключить питание 220В принтера. Устройства могут быть как самосборные, так и заводского исполнения (Lerdge, BTT, MKS). Принцип действия у всех одинаков - по пропаданию управляющего сигнала от платы (PS_On). Мой выбор - PWC MKS – просто, функционально, не дорого.

    Но разговор не о железе, а о софте.

    Все, что будет сказано, относится к RRF 3.4. Более ранние версии могут отличаться (например, именами файлов-макросов), в новых версиях однозначно будут изменения. Об этом говорится в комментариях релиза.

    Первый эшелон обороны это - обработка неисправностей нагревателя. Команда M570. При возникновении неисправности нагревателя создается событие, за обработку которого отвечает макрос-файл heater-fault.g. Если этот файл обнаружен в /sys, то событие будет обработано именно так, как там написано, без предварительной постановки печати на паузу. Т.е. если файл пустой, то печать продолжится, с отключенным нагревом, т.к. нагреватель вылетит в ошибку.

Обеспечение безопасной работы принтера на RepRap Firmware 3.4.

    

    Если heater-fault.g. не обнаружен, то печать приостанавливается и пользователь получает уведомление. В настоящее время RRF не пытается отключить питание всей машины, если пользователь не реагирует на уведомление о неисправности нагревателя. Разработчики обещают что-нибудь придумать в релизе RRF3.5

    Второй эшелон обороны – это конфигурация нагревателя командой M143 с параметрами "A", "C" и "P".

    Параметр "P" - включает мониторинг наступления определенного события, описанного параметрами "A", "C". Возможно установить мониторинг до трех событий на один нагреватель - P0(по умолчанию), P1 и P2

    Параметр "A" управляет тем, что будет сделано при наступлении события. Возможны 3 варианта

- A0 (по умолчанию) - генерировать обработку неисправностей нагревателя. См. выше про "heater-fault.g"

- A1 - постоянно отключить нагреватель (Switch off permanently)

- A2 - временно отключить нагреватель (Switch off temporarily)

- A3 - отключить принтер.

Я не пользовался A1 и A2 и не скажу точно, как они работают.

    Параметр "C" условие формирования события

- C0 (по умолчанию) - превышение температуры (Temperature too high)

- C1 - температура слишком низкая (Temperature too low)

- C-1 - запрет функции монитора (Monitor is disabled)

    Что такое "температура слишком низкая" для меня не понятно. Ниже какого значения? Возможно параметр "S" (Maximum permitted temperature) можно использовать не только максимум, но и как минимум. Не проверял.

    

    Теперь как все это можно и нужно использовать, особенно при наличии модуля автоотключения.

    В config.g делаем настройку нагревателя следующим образом.

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

M80 C"pson"                ; Указываем какой пин используется для автоотключения и выставляем его в «1»

M950 H1 C"e0heat" T1;создаем нагреватель сопла на порту "e0heat", связанный с датчиком 1

M143 H1 P0 S280         ;при превышении температуры 280 град сформировать ошибку нагревателя

M143 H1 P1 S300 A3    ;при превышении температуры 300 град дать команду на отключение принтера

M570 H1                        ; включаем обработка неисправностей нагревателя

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    В heater-fault.g

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

; heater_fault.g

; called by heater fault

var msg_str = "Heater "^{param.D}^" fault!"     ;сторка сообщения

M291 P{var.msg_str} S1 T0                                ; вывод сообщения

M0                                                                      ; прекращаем печать

M106 S0                                                             ; отключение обдува модели

M568 A0                                                            ; отключение нагрева

M140 S-273.1                                                      ; отключение стола M140 S0 - это не отключение.

G91                                                                     ; относительное перемешение

G1 H2 Z1 F7200                                                ; принудительно увеличиваем Z

G28 XY                                                              ; парковка по X and Y

M18 X Y E0                                                        ; отключаем все движки, кроме Z

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    Здесь просто пример, как можно сделать. Можно все, что после "M0", перенести в "stop.g", тогда весь этот завершающий код можно не писать в слайсере. Так же просто "M0". Тут большое поле для творчества. Можно, например, клавишу энкодера или подсветку экрана 12864 с Neopixel делать красной.

В видео используются настройки

M143 H1 P0 S104 ; или S106 для разных сценариев отработки

M143 H1 P1 S110 A3

При S104 инерционности отключенного нагревателя не хватает для закидывание температуры за критическое значение в 110 градусов и принтер не отключается. При S106 – инерционности достаточно, чтобы сработала защита по второму пределу температуры.

Из замеченных особенностей: ошибка нагревателя стола и хотэнда "0" (Tool0) передается в heater-fault.g с одним и тем же значением параметра param.D = 0. Если вообще передается. Этот же ноль пишется в сообщениях, которые генерит сама система при отсутствии нагрева, или сильном отклонении температуры от заданного 

Обеспечение безопасной работы принтера на RepRap Firmware 3.4.

Обеспечение безопасной работы принтера на RepRap Firmware 3.4.

Проверить в двухэкструдерном варианте у меня нет возможности. В принципе строки

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

var msg_str = "Heater "^{param.D}^" fault!" ;сторка сообщения

M291 P{var.msg_str} S1 T0 ; вывод сообщения

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

можно заменить на

M291 P"Heater fault!" S1 T0 ; вывод сообщения

но вдруг починят.

Рассказать про возможные варианты третьего эшелона обороны (для параноиков)? 😊

  • В board.txt диагностический сигнал leds.diagnostic привязать к одному из выводов материнской платы и повесить на него электронный таймер, способный определять отсутствие импульсов как при нижнем, так и при верхнем уровне сигнала. Выход таймера поставить последовательно с сигналом PS_On от платы.
  • Установить термопредохранитель в нагревательный блок, подключить последовательно сигналом PS_On от платы. Для PWC MKS можно использовать предохранители многоразового срабатывания (термореле).
  • Если денег куры не клюют, то можно сделать цепь безопасности на базе сертифицированных на уровень полноты безопасности (УПБ - SIL) устройствах, например PhoenixContact PSR-M-B2-SDI8-SDO4-DO4-SC. Но тогда и датчик температуры, и нормирующий преобразователь должны быть сертифицированы на УПБ, иначе – это не по правилам функциональной безопасности. 

PS. Почему PWC MKS – просто, функционально? Потому что позволяет сделать вот так (блок видео почему-то больше не вcтавляется): https://youtube.com/shorts/wOAIImrZh9o?feature=share

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

9
Комментарии к статье