如何添加或定制自己的特殊G代码命令 

3D打印技术 /[固件]
2016-12-23 19:34
Marlin二次开发.jpg

Marlin固件具有很强大的功能,支持非常多G代码命令(参考:http://reprap.org/wiki/Gcode )。但很多朋友还是有特殊定制的需求,在这里简单写一个例子来说明一下如何添加或修改自己定制的G代码命令。
所有的G代码列表在Marlin_main.cpp文件中。
所有的相关代码都在process_commands这个函数里面。G开头的(G1、G2、G3等)及M开头的(M0、M1等)是分开的,所以一定要注意区分。
我这里以一个简单例子做说明,是@wanhaixin 提出的,执行M03的时候,接通一个继电器,执行M05的时候,关闭这个继电器。
首先因为是M命令,所以应该将代码添加在M代码部分。为了方便查找,按照原顺序进行添加会更好,比如M3应该放在M2和M4之间。
添加代码是一定要注意#if、#endif这样的宏命令。
  1. #ifdef ULTIPANEL
  2.     case 0: // M0 - Unconditional stop - Wait for user button press on LCD
  3.     case 1: // M1 - Conditional stop - Wait for user button press on LCD
  4.     {
  5.       LCD_MESSAGEPGM(MSG_USERWAIT);
  6.       codenum = 0;
  7.       if(code_seen('P')) codenum = code_value(); // milliseconds to wait
  8.       if(code_seen('S')) codenum = code_value() * 1000; // seconds to wait

  9.       st_synchronize();
  10.       previous_millis_cmd = millis();
  11.       if (codenum > 0){
  12.         codenum += millis();  // keep track of when we started waiting
  13.         while(millis()  < codenum && !lcd_clicked()){
  14.           manage_heater();
  15.           manage_inactivity();
  16.           lcd_update();
  17.         }
  18.       }else{
  19.         while(!lcd_clicked()){
  20.           manage_heater();
  21.           manage_inactivity();
  22.           lcd_update();
  23.         }
  24.       }
  25.       LCD_MESSAGEPGM(MSG_RESUMING);
  26.     }
  27.     break;
  28. #endif

  29. //需要添加的代码应该放在这个位置
  30.    case 3:
  31.        digitalWrite(Pin,High);//Pin指你打算用于控制继电器的接口(arduino Pin编号)。如果跟其它管脚冲突,可能需要配置Pins.h文件中相关管脚为-1.
  32.        break;
  33.    case 5:
  34.        digitalWrite(Pin,LOW);
  35.        break;

  36. //定制添加代码结束

  37.     case 17:
  38.         LCD_MESSAGEPGM(MSG_NO_MOVE);
复制代码
添加代码后,就可以通过发送M3和M5来分别拉高(5V)和拉低(0V)相应的IO口,从而实现对继电器的控制了。
修改代码的话跟添加差不多,只是找到相应代码段进行修改就好了。
声明:3D打印资源库(3dzyk)内网友所发表的所有内容及言论仅代表其本人,并不代表3D打印资源库(3dzyk)观点和立场;如对文章有异议或投诉,请联系kefu@3dzyk.cn。
B Color Smilies
如何添加或定制自己的特殊G代码命令