Добавление пользовательских кодов M или G в Marlin 2.0

Добавление пользовательских кодов M в Marlin не работает для Marlin 2.0

Как можно было бы добавить пользовательские G-коды или M-коды в Marlin 2.0? Тот самый Marlin_main.cpp файл не существует.

В целом для Marlin 2.0 все организовано лучше, но разбито на большее количество файлов.

, 👍2


2 ответа


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

0
  1. Выберите код в поле >10 000 на случай добавления новых кодов. Но в этом примере я выберу 13
  2. Перейдите в папку "src" Marlin
  3. Отредактируйте файл gcode.cpp вокруг линии 223, чтобы иметь новый неиспользуемый номер. Например, это создаст новую функцию G-кода для метки G13.
  ...
  // Handle a known G, M, or T
  switch (parser.command_letter) {
    case 'G': switch (parser.codenum) {
      case 13: G13(); break;
      case 0: case 1: G0_G1(  
  ...
  1. В строке 375 gcode.h добавьте: static void G13(); чтобы объявить его.

  2. В моем случае я считывал значения из аналоговой системы. Поэтому я пошел в src/temperatures и скопировал M105.cpp быть G13.cpp. Затем внутри файла я заменил GcodeSuite::M105 на GcodeSuite::G13. Я использую это, чтобы измерить вес чего-то с помощью [шкалы][1], но сейчас я просто хочу проверить функциональность, поэтому вот моя тестовая функция:


void GcodeSuite::G13() {

  SERIAL_ECHOPGM(MSG_OK);
  SERIAL_ECHOLNPGM("here is where weights are broadcast");

}

И опять же это единственная часть которую я изменил в своем новом экземпляре M105.cpp (новый файл с именем G13.cpp). В файле все еще больше материала, чем просто эти несколько строк.

  1. Загрузить на борт

  2. Когда я иду в octoprint и печатаю в G13, я получаю:


Send: G13
Recv: okhere is where weights are broadcast

Немного больше работы можно сделать, чтобы он выглядел красиво, но это была самая трудная часть. [1]: https://www.instructables.com/id/Arduino-Bathroom-Scale-With-50-Kg-Load-Cells-and-H/


,

2

Код в 2.0.x похож на старую ветвь 1.1.x, G-код разбирается в gcode.cpp, в частности, в process_parsed_command:

void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/)

В операторе case коды, считанные из файлов G-кода, анализируются (интерпретируются) и вызывается соответствующий метод (например, G28() вызывает void GcodeSuite::G28 ()).

Если вы хотите создать свои собственные коды, было бы неплохо начать с этого. Также подумайте об использовании другой буквы и/или кодов в диапазоне 10 000, чтобы она не сталкивалась с новыми реализованными G-кодами.

,