Отправка нескольких команд на принтер без перегрузки его буфера команд

Я пишу код python для 3D-принтера (Marlin). Я пытаюсь выполнить движение, которое может состоять из нескольких команд (G0). К сожалению, отправка всех команд сразу, кажется, не работает. Насколько я понимаю, это связано с тем, что буфер команд принтера для необработанных команд довольно мал и перегружается при отправке такого количества команд одновременно. Есть ли способ узнать, сколько буфера принтера свободно, чтобы я знал, когда отправить следующие 1, 2, 5 и т.д. Команды на принтер? Я не могу отправить следующие команды, как только буфер полностью свободен, так как это остановит движение, и мне нужно, чтобы он был текучим весь путь.

Два дополнительных вопроса:

  1. Кто-нибудь из вас знает, как принтер обрабатывает файл G-кода, который он получает на SD-карте, чтобы он выполнял его полностью плавно, без перегрузки?
  2. Говорит ли мне сообщение "ОК", полученное от принтера, что все команды были выполнены или что в буфере команд есть хотя бы одно свободное пространство?

, 👍0

Обсуждение

Я думаю, что о чем-то подобном спрашивали раньше, см., например, этот ответ. Это может быть дублирующий вопрос. Я думаю, что это ответ на ваши вопросы. Что касается части вопроса о чтении SD, вы можете посмотреть это в источниках Marlin., @0scar

Спасибо за ссылку. Я полностью пропустил подраздел "Буферизация" на странице RepRap. Ранее у меня была проблема с отправкой нескольких "M105" во время движения, и я мог ошибочно предположить, что это произошло из-за перегрузки буфера. Я не понимал, что сигналы обрабатываются по-разному и только некоторые из них буферизуются. Я проверю это поведение со своим принтером завтра, может быть, я зря беспокоился :), @Alathen

ОК означает, что в "буфере"есть место. Всякий раз, когда вы получаете сообщение "ОК", отправьте команду. Кроме того, Марлин никогда не будет выполнять "плавный" набор команд. Между ними всегда будет пауза. Идея в том, что все будет достаточно гладко., @user77232