开源改变世界

光栅图像的 G7 代码功能(CNC 激光) #197

推推 grbl 3年前 (2023-01-21) 116次浏览

关闭
凯诺 打开了这个问题 2017 年 5 月 21 日 · 12条评论
关闭

光栅图像的 G7 代码功能(CNC 激光)#197

mkeyno 打开了这个问题 2017 年 5 月 21 日 · 12条评论

注释

光栅图像的 G7 代码功能(CNC 激光) #197
凯诺 评论了 2017 年 5 月 21 日  

在我回到 GRBL 之前,我使用修改版的Marlin 固件结合inskscape的扩展将图像转换为光栅并将其馈送到我的 100W CNC 激光机进行雕刻,它显示出非常高的雕刻速度,但 Marlin 固件没有真正的功能时间覆盖代码通过 G 代码控制机器,所以我返回具有激光模式功能的新 GRBL 发布固件,但感谢@arkypita&@svenhb,在尝试使用不同的 G 代码生成器(例如LaserGRBLGRBL-Plotter ) 以及不同的 GRBL 设置后,我注意到使用 G 代码语法(专为矢量指令设计)发送位图/光栅图像是一种可怕的浪费由于 Arduino uno 上当前实现的硬件限制字节数,对于此类任务来说,它是相当低的带宽缓冲区,根据@mayhem2408请注意,“Marlin 格式中使用的 G7 代码非常有效,但我的经验表明它的计算量要大得多。使用 G7s base64 我可以从 Marlin 中获得的最大提要在它开始断断续续之前约为 F7000,这不是因为带宽。G7s base64 应该能够每秒传输超过 7000 个像素,即每毫米 10 个像素,理论上可以达到超过 F40000 的进给。就 GRBL 而言,另一个问题是Arduino Unos 内存中没有剩余空间来添加如此庞大的功能。它可能会添加到 GRBL-Mega 版本中,因为它有更多空间”,这是讨论页面。arkypita/LaserGRBL#38(评论)
我知道这不会在 Arduino 上完成,幸好有几个 GRBL 版本在 STM32F103 等其他板上运行,我想知道该社区的官方开发人员是否计划在此类 STM 板上实现如此好的功能,感谢Roger Clarck,他的回购是真正的成熟和强大,STM32F103C8比 Arduino uno 便宜,但功能更强大,还有一些 GRBL 爱好者,例如@usbcnc @langwadt,@Meekdai,@MaxwellXyao将它移植到 STM 硬件但不是正式的

光栅图像的 G7 代码功能(CNC 激光) #197

在 Marlin 上实施 G7

用于创建光栅代码的 python 函数

 def generate_raster_gcode(self, curve, laserPower, altfeed=None):
...

G7解释器的代码

 #ifdef LASER_RASTER
    case 7: //G7 Execute raster line
      if (code_seen('L')) laser.raster_raw_length = int(code_value());
	  if (code_seen('$')) {
		laser.raster_direction = (bool)code_value();
		destination[Y_AXIS] = current_position[Y_AXIS] + (laser.raster_mm_per_pulse * laser.raster_aspect_ratio); // increment Y axis
	  }
      if (code_seen('D')) laser.raster_num_pixels = base64_decode(laser.raster_data, &cmdbuffer[bufindr][strchr_pointer - cmdbuffer[bufindr] + 1], laser.raster_raw_length);
	  if (!laser.raster_direction) {
	    destination[X_AXIS] = current_position[X_AXIS] - (laser.raster_mm_per_pulse * laser.raster_num_pixels);
	    if (laser.diagnostics) {
          SERIAL_ECHO_START;
          SERIAL_ECHOLN("Negative Raster Line");
        }
	  } else {
	    destination[X_AXIS] = current_position[X_AXIS] + (laser.raster_mm_per_pulse * laser.raster_num_pixels);
	    if (laser.diagnostics) {
          SERIAL_ECHO_START;
          SERIAL_ECHOLN("Positive Raster Line");
        }
	  }
	  
	  laser.ppm = 1 / laser.raster_mm_per_pulse; //number of pulses per millimetre
	  laser.duration = (1000000 / ( feedrate / 60)) / laser.ppm; // (1 second in microseconds / (time to move 1mm in microseconds)) / (pulses per mm) = Duration of pulse, taking into account feedrate as speed and ppm
	  
	  laser.mode = RASTER;
	  laser.status = LASER_ON;
	  laser.fired = RASTER;
	  prepare_move();

      break;
#endif // LASER_RASTER

inkscape 的示例栅格代码

`; Raster data will always precede vector data
; Default Cut Feedrate 300 mm per minute
; Default Move Feedrate 2000 mm per minute
; Default Laser Intensity 10 percent
G28 XY; home X and Y

M5 ;turn the laser off

;(_)
;(** Layer: 10 [ppm=30,feed=2500] ****)
;(** Laser Power: 10 ****)
;(** Feed Rate: 2500.0 ****)
;(** Pulse Rate: 30.0 ****)
;(_********)
;(MSG,Starting layer '10 [ppm=30,feed=2500]')

;Beginning of Raster Image image4556 pixel size: 753x750
M649 S10 B2 D0 R0.09406
G0 X11.518 Y15.927 F2500

G7 $1 L68 DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
G7 L68 DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
G7 L68 DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
G7 L68 DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
G7 L68 DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
G7 L68 DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
G7 L68 DAAAAAAAAAAAAAAAAAAAAAAMHCiA3Tl9xg42XoqOlp6CZkoZ5bFpINSQTAQEAAAAAAAAA
G7 L68 DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAhMkNUda
G7 L28 DbHmGkpmgp6WjopiNg3FfTjchCwcD

G7 $0 L68 DBQoQMVN1kKvG1eT09vn78efcybajiGxQNx0DAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
G7 L68 DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIDHTdRbIikt8rd59H89fb05NXGq5B2
G7 L56 DUzEQCgUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=

G7 $1 L68 DAQMFFCQ0MzEwIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRIcMERYcImitMbY4u339fv8
G7 L68 D9u9o287Br5yKdV9KOSkYEAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
G7 L68 DAAAAAAAAAAAACBAYKTpKX3SJnK9Bztvn7vX899n37ePYxrSiiXFYRDAcEgkAAAAAAAAA
G7 L36 DAAAAAAAAAAAAAAAAAAAAECAwMjM0JRUFAwE=

G7 $0 L68 DAwcMK0tqZ2ViQSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEiU5W39iscHQ2eLr8fb79P39
G7 L68 D9vbz7ebg183EtKOTc1IyIRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
G7 L68 DAAAAAAAAAAAAECExUnOTo7TEzdfg5u3z99r99fz79vDr4tnQwbGif1s5JRIAAAAAAAAA
G7 L36 DAAAAAAAAAAAAAAAAAAAAIUJiZGdqSioLBwM=

G7 $1 L68 DBQsRP29gnJiUYzIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAHDlWh7rt8vj9999999999999
G7 L68 D99999999999989fcrHtLMhkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
G7 L68 DAAAAAAAAAAAAGDJLe6zb6PP99999999999999999999999999PLsuodWORwAAAAAAAAA
G7 L36 DAAAAAAAAAAAAAAAAAAAAMWOTmJyfcUESCwUA

`

When I compare this to the included g-code for, say the wolf.gcode, I see something much more reasonable:

`G28 ; home all

M5

;(_)
;(** LAYER: 10 ****)
;(_**)
;(MSG,Starting layer '10')

G00 X3.299782 Y118.552030
T01 (select tool)
M6 (tool change)

M5

G00 X3.299782 Y118.552030 F1400
M3
G02 S10.00 X3.548178 Y118.501119 I0.000000 J-0.631423 F1400
G02 S10.00 X3.676074 Y118.391017 I-0.110031 J-0.257148 F1400
G03 S10.00 X3.805945 Y118.305855 I0.156134 J0.096495 F1400
G03 S10.00 X4.136655 Y118.324427 I0.119469 J0.826362 F1400
G03 S10.00 X4.290573 Y118.498593 I-0.052748 J0.201711 F1400
G03 S10.00 X4.208141 Y118.860798 I-0.527850 J0.070353 F1400
G02 S10.00 X3.894311 Y120.088890 I1.636677 J1.072386 F1400
G02 S10.00 X4.381019 Y121.026364 I1.354478 J-0.108126 F1400
G03 S10.00 X4.518115 Y121.254128 I-0.257294 J0.310012 F1400
G03 S10.00 X4.521857 Y121.701707 I-1.117987 J0.233151 F1400
G01 S10.00 X4.429717 Y122.183697 F1400
G01 S10.00 X4.895852 Y121.878273 F1400
G03 S10.00 X5.715594 Y121.570679 I1.094221 J1.670000 F1400
G03 S10.00 X5.907575 Y121.737854 I0.023203 J0.167175 F1400
G02 S10.00 X5.950319 Y121.885151 I0.275167 J0.000000 F1400
光栅图像的 G7 代码功能(CNC 激光) #197
混乱2408 评论了 2017 年 5 月 21 日  

@mkeynoG7 的这个实施是第一个。从那时起它就发展了。这个旧的 G7 的一个问题是它如何计算方向的变化。一个较新的实现,也是我已经使用了一年多的实现,使用 G0/1 在一条线上设置起点,然后使用 G7 来填充这条线。这使得它更容易使用。这是我使用的 G7 代码的示例。您会注意到每个 G7 行之前的 G0 用于设置起始位置。它使对齐更容易,因为您不必使用无用的“0”来扩展行的开头或结尾来对齐每一行。前面几行中的“A”不是对齐,而是加速空间。

M649 S100 B2 D0 R0.1
G0 X69.700 Y45.700 F1500.0; Line n.457
G7 $0 L48 DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wA=
G7 L48 DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
G7 L48 DAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAA=
G7 L28 DAAAAAAAAAAAAAAAAAAAAAAAAAA==

G0 X57.300 Y45.800 F1495.0; Line n.458
G7 $1 L60 DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAA=
G7 L60 DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
G7 L48 DAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

G0 X69.700 Y45.900 F1501.0; Line n.459
G7 $0 L56 DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAA
G7 L56 DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
G7 L56 DAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==

G0 X57.300 Y46.000 F1495.0; Line n.460
G7 $1 L60 DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAA==
G7 L60 DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
G7 L52 DAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
光栅图像的 G7 代码功能(CNC 激光) #197

在每行上手动设置起始位置的另一个重要原因是它允许 X 轴和 Y 轴具有不同的分辨率。这在抖动雕刻时会派上用场。(即在亚克力上)使用 R0.05 意味着每毫米 20 个像素,但仍仅将 Y 增加 0.1,有效地将分辨率提高一倍,但不会增加雕刻时间。它真的很好用。

M649 S100 B2 D0 R0.05
G0 X64.600 Y45.600 F1496.0; Line n.456
G7 $1 L64 DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAA
G7 L24 DAAAAAAAAAAAAAAAAAAAAAA==
G0 X68.100 Y45.700 F1500.0; Line n.457
G7 $0 L52 DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////8=
G7 L44 DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
G0 X62.300 Y45.700 F1499.0; Line n.457
G7 $0 L56 DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////8AAA==
G7 L40 DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
G0 X58.800 Y45.800 F1502.0; Line n.458
G7 $1 L48 DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8=
G7 L48 D////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=

光栅图像的 G7 代码功能(CNC 激光) #197
svenhb 评论了 2017 年 5 月 22 日 通过电子邮件
光栅图像的 G7 代码功能(CNC 激光) #197
USBCNC 评论了 2017 年 5 月 22 日  

@mkeyno我已将 1.1 移植到 STM32F103 芯片。https://github.com/usbcnc/grbl。检查此
https://www.youtube.com/watch?v=5DBtbAYmfEE&t=31s
如果您需要帮助,请与我联系,

光栅图像的 G7 代码功能(CNC 激光) #197

它可以使用未使用的 G 代码来实现。如果 Marlin 开发人员这样做是明智的,现有的用途是众所周知的。

光栅图像的 G7 代码功能(CNC 激光) #197
贡献者

我过去看过这个。我不喜欢 G7 的定义,但这并不意味着不需要这样的定义。我仍在研究什么会运作良好。并且可能会将其定义为固定循环,而不是 G7。

光栅图像的 G7 代码功能(CNC 激光) #197

@gerritv @chamnit将 Marlin 更改为使用不同的 G 代码(例如 G99)并更改 inkscape 插件以反映相同的更改,只需不到 2 分钟的时间。实际的 G 数并不重要。我同意不应该是 G7。我说 G99 是因为它没有被 LinuxCNC 或 RepRap 引用。我在 UCCNC 控制器中看到一个自定义宏,它使用 M10027 作为类似的命令。

光栅图像的 G7 代码功能(CNC 激光) #197
作者
凯诺 评论了 2017 年 5 月 22 日  

@chamnit你能详细说明你的计划吗?,因为正如它提到的,可能无法添加到官方 GRBL Arduino nano,你能在其他官方平台上实现吗,比如什么@usbcnc在 STM32 上完成?如果社区能在其官方平台上添加这样的特殊功能就好了

谢谢@mayhem2408,您建议哪个平台添加或改进此类功能?

光栅图像的 G7 代码功能(CNC 激光) #197
贡献者

@mkeyno: 几个固件开发者就此进行了长时间的讨论,包括我自己简而言之,没有共识。还有其他影响性能的因素不仅仅是 gcode。其实这只是问题的很小一部分。

只是为了绝对清楚这一点。我不会进一步详细说明,因为线程已经这样做了,我不会在 Grbl v1.1 的特定端口上工作。所有工作都将在新的、即将发布的 Grbl 硬件抽象版本中完成,所以如果@usbcnc如果选择这样做,他将能够轻松地为他的 ST 平台引入下游更改。这样,在 HAL 中完成的任何工作都可以轻松传播到使用它的其他端口。不仅仅是 ST、LPC 或 SAMD21 版本。

光栅图像的 G7 代码功能(CNC 激光) #197
作者

谢谢@chamnit但是那些相关的问题并没有得出有意义的方式或用于此类目的的代码,但是由于我打算始终同步到原始(官方)repo,您​​建议如何保持这种同步?
@mayhem2408你非常熟悉这个功能并且@usbcnc 目前在 STM32 上移植原始 GRBL,有没有办法让你们一起实现这样的功能?

光栅图像的 G7 代码功能(CNC 激光) #197
贡献者

@mkeyno: 抱歉,我链接了错误的问题线程。是你想读的。关注通信带宽不是 Grbl 限制因素的部分。(328 上的 Grbl 运行速度几乎与 Cortex M3 上的 Smoothie 一样快,而 Grbl-LPC 端口在所有讨论中运行速度最快。)因此,使用 G7 不会显着改善光栅作业。

就像我之前说的,gcode 只是问题的一小部分。我有一个解决方案,在接近发布之前我不会公开讨论。我不会进一步详细说明。

光栅图像的 G7 代码功能(CNC 激光) #197

@chamnit由于我过去在用于光栅雕刻的 inkscape 插件上做过大量工作,一旦您有了解决方案,我会很乐意对其进行测试,并将需要的任何更改写入插件。

喜欢 (0)