开源改变世界!!

G1失踪 #73

推推 grbl 1年前 (2023-01-26) 128次浏览
关闭
grosseruser 打开了这个问题 2017 年 8 月 15 日 · 11 条评论
关闭

G1失踪#73

grosseruser 打开了这个问题 2017 年 8 月 15 日 · 11 条评论

注释

G1失踪 #73
总用户 评论了 2017 年 8 月 15 日  

在尝试雕刻图像的填充时,在大多数情况下缺少“G1 Fxxx”,因此激光会以行进速度移动。
contur 的雕刻效果很好。

例子:

G90
F400
G0 X0 Y0
M5 S255
G1 F100
G91
M5
G0 F400 Y.25
G0 X14 Y11.75 F400 M5
X-.25 Y.25 M3
X-.25 Y.25 M3
G0 X-0.5 Y0.75 F400 M5
G1 F100 X.25 Y-.25 M3
X.25 Y-.25 M3
X.5 Y-.5 M3
G0 X3.75 Y-3.5 F400 M5
X-.25 Y.25 M3
X-.25 Y.25 M3
X-.25 Y.25 M3
G0 X-2.75 Y2.75 F400 M5
X-1 Y1 M3
G0 X-1.75 Y2 F400 M5
X.25 Y-.25 M3
X.25 Y-.25 M3
X.25 Y-.25 M3
G0 X1 Y-1 F400 M5
G1 F100 X.25 Y-.25 M3
X.75 Y-.75 M3
X.25 Y-.25 M3
G0 X2.25 Y-2.25 F400 M5

G1失踪 #73
作者

好的,
我找到了。该错误位于函数“ImageLine2Line”中的文件“GrblFile.cs”中。

以下对我有用(**中的更改):

private void ImageLine2Line(Bitmap bmp, L2LConf c){
	bool fast = false;
	List<ColorSegment> segments = GetSegments(bmp, c);
	List<GrblCommand> temp = new List<GrblCommand>();
	foreach (ColorSegment seg in segments) {
		bool changespeed = (fast != seg.Fast); //se veloce != dafareveloce
		if (seg.IsSeparator && !fast) //fast = previous segment contains S0 color {
			if (c.pwm)
				temp.Add(new GrblCommand("S0"));
			else
				**temp**.Add(new GrblCommand(c.lOff)); //laser off
		}
		fast = seg.Fast;
		**//**if (changespeed)
			temp.Add(new GrblCommand(String.Format("{0} F{1} {2}", fast ? "G0" : "G1", fast ? c.travelSpeed : c.markSpeed, seg.ToString())));
		**//**else
			**//**temp.Add(new GrblCommand(seg.ToString()));

		//if (seg.IsSeparator)
		//	list.Add(new GrblCommand(lOn));
	}

	temp = OptimizeLine2Line(temp, c);
	list.AddRange(temp);
}

可能“F {1}”部分不是必需的。

G1失踪 #73
所有者

Grbl v1.1 具有存储上次使用速度的记忆。当发送移动命令时未指定速度 grbl 使用最后确定的速度,因此除非需要更改速度,否则不需要 Fxxx 命令。

所以不发送F命令不是bug,是优化。
不知道其他 g 代码控制器和较旧的 grbl 版本,但是对于 v1.1,我很确定 LaserGRBL 生成的 g 代码运行良好。

希望@chamnit可以确认

G1失踪 #73
作者
总用户 评论了 2017 年 8 月 17 日  

好的,但是随着F命令的优化,不幸的是,G1命令也被删除了。我的 hack 帮助了我,但由于我对代码了解太少,我无法以最佳方式修复。
速度内存在 grbl 0.9 时工作正常。

G1失踪 #73
所有者

去掉G1指令也是一种优化。不需要多个 G 命令,因为 gcode 是模态的并且会记住最后的状态。

http://www.cnctrainingcentre.com/cnc-programming/modal-nonmodal-g-codes/

G1失踪 #73
作者
总用户 评论了 2017 年 8 月 17 日  

这很好用:

G0 X-0.5 Y0.75 F400 M5
G1 F100 X.25 Y-.25 M3
X.25 Y-.25 M3
X.5 Y-.5 M3

但在这种情况下只是缺少 G1 并且激光以 G0 速度运行

G0 X3.75 Y-3.5 F400 M5
X-.25 Y.25 M3
X-.25 Y.25 M3
X-.25 Y.25 M3

G1失踪 #73
所有者

好的,我现在明白你说的了!
你说得对……我会尽快修复

G1失踪 #73

G1、M3 和 F 进给率都是模态的。一旦设置,它们不需要再次发送,直到模态状态发生变化。此外,使用 G0 编程的 F 进给率不会改变 G0 的行为方式。一些固件允许这样做,但这是不正确的。F 应该只改变进给率(G1 G2/3 等)。不是急流率。但是您可以通过覆盖命令来覆盖它们以使其运行得更慢。

G1失踪 #73 arkypita 添加 漏洞 并删除 把招工广告 标签 2017 年 8 月 17 日
G1失踪 #73
所有者

@grosseruser看来问题与使用 PWM-less 模式有关。我之所以从来没有注意到这个问题是因为我使用的是 PWM 模式,似乎不受此错误的影响。

正在调查…

arkypita 添加了引用此问题的提交 2017 年 8 月 18 日

G1失踪 #73
所有者

@grosseruser 如果你愿意,你可以签出并编译我的最后一次提交(master)并检查它是否修复。
让我知道