Выравнивание стола сетки больше не обновляется после MemoryError

У меня были проблемы с печатью на моем i3 MK3, особенно когда дело касалось первого слоя. В марте 2020 года я установил плагин Prusa Mesh Leveling Plugin для Octoprint. С помощью этого плагина и модификации гайки Nylock я смог уменьшить дисперсию стола с 0,6 мм до 0,014 мм, и отпечатки получились великолепными. Это заняло около 25 раундов калибровки, и у меня не было никаких проблем с тем, что графика не обновлялась.

Mesh desk levelling on March 2020

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

Во-первых, я повернул винты в неправильном направлении, поэтому результат стал хуже, и мне потребовалось несколько попыток, пока результаты не пошли в правильном направлении. В настоящее время я нахожусь на уровне дисперсии стола ~1,0 мм, что очень плохо, и мне нужно продолжать выравнивать стол.

Bed variance currently

Теперь графика больше не обновляется. Он всегда показывает одну и ту же картину.

Я также заметил несколько иное поведение процедуры выравнивания сетчатого стола. Обычно после запуска выравнивания сетки принтера требуется некоторое время (~5 секунд), прежде чем он отреагирует на другие команды, такие как движение по оси Z. Я использовал следующую технику, чтобы узнать, когда нужно перезагрузить графику:

  • запустить выравнивание сетки стола
  • скажите принтеру, чтобы он поднялся на 10 мм по оси Z
  • как только печатающая головка переместилась вверх, появилась возможность перезагрузки графики

Теперь печатающая головка перемещается вверх сразу после выравнивания сетки стола, без задержки ~5 секунд, и графика не обновляется.

Я уже пробовал:

  • нажмите кнопку "перезагрузить тепловую карту"
  • снова запустите выравнивание стола сетки
  • перезапуск Octoprint
  • сброс настроек принтера с помощью кнопки X
  • поиск места на диске через SSH

.

pi@octopi:~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       7.3G  1.9G  5.1G  27% /
devtmpfs        182M     0  182M   0% /dev
tmpfs           186M     0  186M   0% /dev/shm
tmpfs           186M  2.7M  183M   2% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           186M     0  186M   0% /sys/fs/cgroup
/dev/mmcblk0p1   42M   21M   21M  51% /boot
tmpfs            38M     0   38M   0% /run/user/1000

В файле журнала (octoprint.log) с уровнем вывода , установленным на DEBUG, я мог видеть запись:

2020-06-06 12:19:52,261 - octoprint.plugins.PrusaMeshMap - INFO - Generating heatmap
2020-06-06 12:19:52,288 - py.warnings - WARNING - 
    /home/pi/oprint/local/lib/python2.7/site-packages/matplotlib/pyplot.py:522:
    RuntimeWarning: More than 20 figures have been opened. 
    Figures created through the pyplot interface (`matplotlib.pyplot.figure`) are
    retained until explicitly closed and may consume too much memory. 
    (To control this warning, see the rcParam `figure.max_open_warning`).
    max_open_warning, RuntimeWarning)

Как видите, это было в 12:19. Последнее изображение, которое я видел, относится к 12:37.

Журналы также содержат сообщение в 12:40:

2020-06-06 12:40:39,262 - octoprint.util.comm - ERROR - Error while processing hook PrusaMeshMap:
Traceback (most recent call last):

  File "/home/pi/oprint/local/lib/python2.7/site-packages/octoprint/util/comm.py", line 2849, in _readline
    ret = hook(self, ret)
  File "/home/pi/oprint/local/lib/python2.7/site-packages/octoprint_PrusaMeshMap/__init__.py", line 90, in mesh_level_check
    self.mesh_level_generate()
  File "/home/pi/oprint/local/lib/python2.7/site-packages/octoprint_PrusaMeshMap/__init__.py", line 236, in mesh_level_generate
    fig.savefig(self.get_asset_folder() + '/img/heatmap.png', bbox_inches="tight")
[...]
  File "/home/pi/oprint/local/lib/python2.7/site-packages/matplotlib/image.py", line 512, in _make_image
    output = self.to_rgba(output, bytes=True, norm=False)
  File "/home/pi/oprint/local/lib/python2.7/site-packages/matplotlib/cm.py", line 259, in to_rgba
    xx = (xx * 255).astype(np.uint8)
MemoryError

В 12:46 я перезагрузил систему

2020-06-06 12:46:08,761 - octoprint.server.api.system - INFO - Performing command for core:reboot: sudo shutdown -r now

но, конечно, эта графика все еще отсутствует, и последняя доступная графика-это та, что с 12:37, Поэтому после перезагрузки нужно снова запустить выравнивание mesh-стола.

И все же не повезло...

OctoPrint версия 1.4.0, OctoPi версия 0.15.0 PE, плагин Prusameshmap: 0.3.0. Насколько я могу судить, это последняя доступная версия.

Что я могу сделать, чтобы снова начать выравнивание сетчатого стола?

, 👍2

Обсуждение

Это все еще проблема? Я подозреваю, что это ошибка в плагине. Примечание [этот отчет об ошибке](https://github.com/PrusaOwners/OctoPrint-PrusaMeshMap/issues/31), это, вероятно, тот же вопрос, но он был закрыт!, @0scar

@0scar: он был закрыт, но с ним не связано исправление кода., @Thomas Weller


2 ответа


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

1

Я отформатировал SD-карту и установил Octoprint с нуля. Это ужасно, потому что я потерял все модели, которые загрузил.

Похоже, это ошибка в __init__.py OctoPrint-PrusaMeshMap (архивный репозиторий Github).

Этот код сохраняет тепловую карту в следующей строке:

fig.savefig(self.get_asset_folder() + '/img/heatmap.png', bbox_inches="tight")

Он использует Pyplot

import matplotlib.pyplot as plt

и поэтому код, вероятно, должен использовать (непроверенный!)

plt.close(fig) 
del fig

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


,

0

Вы нашли ошибку в плагине OctoPrint. Как вы заметили, одновременно можно создать/открыть не более 20 графиков. Это означает, что разработчик неправильно реализовал pyplot, это распространенная ошибка, с которой я сталкивался сам раз или два. Вы должны уведомить разработчика.

Проблема в том, что старый граф не уничтожен или не обновлен должным образом (я думаю, что он предназначен для обновления графика). Код проходит процедуру создания графика несколько раз, и после 20 графиков он выдаст сообщение об ошибке.

Если вы сбросите Pi или перезагрузите сервер Octoprint, то, вероятно, вам будет полезно перейти еще на 20 графиков.

,