开源改变世界!!

覆盖在 v3 上无法正常工作 #488

推推 grbl 2年前 (2023-01-27) 154次浏览
关闭
gflaser-au 打开了这个问题 2018 年 11 月 13 日 · 13条评论
关闭

覆盖在 v3 上无法正常工作#488

gflaser-au 打开了这个问题 2018 年 11 月 13 日 · 13条评论

注释

覆盖在 v3 上无法正常工作 #488

当我通过一次拖放将线性滑块从默认 (1x) 位置更改为 2x 时,我只看到在线路上发送了一个 0x91 字符。

串行日志:

?<运行|WPos:33.425,19.900,0.000|Bf:0,189|FS:100.000,750.000|Pn:RHS|Ov:100,100,100|A:SF>

?<运行|WPos:33.763,19.900,0.000|Bf:0,189|FS:100.000,750.000|Pn:RHS>
?<运行|WPos:34.094,19.900,0.000|Bf:0,189|FS:100.000,750.000|Pn: RHS>
?<运行|WPos:34.425,19.900,0.000|Bf:0,189|FS:100.000,750.000|Pn:RHS>
‘?<运行|WPos:34.763,19.900,0.000|Bf:0,189|FS:110.000,750.000 |Pn:RHS|Ov:110,100,100|A:SF>

?<运行|WPos:35.119,19.900,0.000|Bf:0,189|FS:110.000,750.000|Pn:RHS>
?<运行|WPos:35.487,19.900,0.000|Bf:0,189|FS:110.000,750.000|Pn:右手>

注意:第 5 行 (‘) 上的第一个字符实际上是线路上的 0x91(通过十六进制转储确认)

此外,
将滑块设置为 2x 后,如果我只是少量拖放,或者只是单击滑块控制手柄,则每次单击都会发送另一个 0x91,并且速度会增加一个小增量。

要减慢机器速度,我必须拖动到 < 1x,每次点击都会使机器减慢一点。

我确信这在 lasergrbl 版本 2.x 中工作正常,但不能 100% 确定 – 我已经显着改变了我的机器/控制器并且不能轻易地倒退以确认。
我敢肯定,如果我拖放至 2 倍,机器速度将提高至 2 倍。

覆盖在 v3 上无法正常工作 #488
所有者

我没有更改 LaserGRBL 中的覆盖管理。
如果您想使用较旧的 LaserGRBL 版本进行测试,您可以从此处找到并下载版本历史记录:https ://github.com/arkypita/LaserGRBL/releases

覆盖在 v3 上无法正常工作 #488

我领先你 0.5 步…我现在有另一台笔记本电脑,安装了 2.8.50。
它的行为与 v3 相同 – 所以不是 v3 问题。

LaserGRBL 期望控制器的响应是什么,因此它将发送多个 0x91 字符以提高滑块设置的速度?
我的串行端口记录器只显示一个 0x91 字符被发送用于 1x 和 2x 之间的阶跃变化。

另外,重置按钮对我也不起作用。

我正在使用 Grbl_Esp32 端口 – 我怀疑状态报告中的某些内容已更改 – 如果我了解 LaserGRBL 要求,我可以修复它。

覆盖在 v3 上无法正常工作 #488
所有者
阿尔基皮塔 评论了 2018 年 11 月 14 日  

这是在 LaserGRBL 中管理覆盖的方式:

  • 当滑块用于设置覆盖时,LaserGRBL 将该值存储为“TargetValue”(即 mTarOvLinear)。当滑块值更改时,通过调用“ManageOverrides()”立即发送第一个覆盖命令。

  • 现在每次收到状态报告,如果此报告包含覆盖信息,LaserGRBL 解析状态报告并检测每个覆盖的实际值。LaserGRBL 将这些值存储为“CurrentValue”(即 mCurOvLinear)。因此它再次调用“ManageOverrides()”。

ManageOverrides() 是一个测试 Current 和 Target 的函数,并发送一个命令,在正确的方向上执行单个(bigstep 或 smallstep)以到达目标。由于 grbl 会在收到并执行覆盖命令后立即响应状态消息,因此会再次触发新的“ManageOverride()”,直到达到正确的目标,

public void ManageOverrides()
{
	if (mTarOvLinear == 100 && mCurOvLinear != 100) //devo fare un reset
		SendImmediate(144);
	else if (mTarOvLinear - mCurOvLinear >= 10) //devo fare un bigstep +
		SendImmediate(145);
	else if (mCurOvLinear - mTarOvLinear >= 10) //devo fare un bigstep -
		SendImmediate(146);
	else if (mTarOvLinear - mCurOvLinear >= 1) //devo fare uno smallstep +
		SendImmediate(147);
	else if (mCurOvLinear - mTarOvLinear >= 1) //devo fare uno smallstep -
		SendImmediate(148);

	if (mTarOvPower == 100 && mCurOvPower != 100) //devo fare un reset
		SendImmediate(153);
	else if (mTarOvPower - mCurOvPower >= 10) //devo fare un bigstep +
		SendImmediate(154);
	else if (mCurOvPower - mTarOvPower >= 10) //devo fare un bigstep -
		SendImmediate(155);
	else if (mTarOvPower - mCurOvPower >= 1) //devo fare uno smallstep +
		SendImmediate(156);
	else if (mCurOvPower - mTarOvPower >= 1) //devo fare uno smallstep -
		SendImmediate(157);

	if (mTarOvRapids == 100 && mCurOvRapids != 100)
		SendImmediate(149);
	else if (mTarOvRapids == 50 && mCurOvRapids != 50)
		SendImmediate(150);
	else if (mTarOvRapids == 25 && mCurOvRapids != 25)
		SendImmediate(151);
}
覆盖在 v3 上无法正常工作 #488
所有者

之前的消息已更新

覆盖在 v3 上无法正常工作 #488

我做了更多的测试和串行端口日志记录。
抱歉,这里的 hexdump 格式不正确。

我测试了 2.8.47,它的行为相同(对于单个滑块移动到 200%,只是将速度增加到 110%)

然后,我在 arduino Nano 中测试了 gnea/grbl 1.1 并记录了它的工作原理。在达到目标之前,我会看到多个 0x91 命令。

来自我的控制器 (GRBL_esp32) 的状态报告似乎没有被 lasergrbl 正确解析,因此只发送了一个 0x91 cmd。

请比较这两个包含 Ov: 报告的状态报告。

1,(Arduino Nano 上的 gnea/grbl 1.1(与 LaserGRBL 覆盖处理一起使用)

[14/11/2018 23:59:06] 写入数据 (COM4)
91 3f ‘?
[14/11/2018 23:59:07] 读取数据 (COM4)
3c 52 75 6e 7c 4d 50 6f 73 3a 2d 31 30 35 35 2e <Run|MPos:-1055。
32 35 30 2c 2d 31 30 36 34 2e 36 30 30 2c 30 2e 250,-1064.600,0.
30 30 30 7c 46 53 3a 31 31 30 2c 37 35 30 7c 4f 000|FS:110,750|O
76 3a 31 31 30 2c 31 30 30 2c 31 30 30 7c 41 3a v:110,100,e34
0a 150|A SF>..
[14/11/2018 23:59:07] 写入数据 (COM4)
91 3f ‘?
[14/11/2018 23:59:07] 读取数据 (COM4)
3c 52 75 6e 7c 4d 50 6f 73 3a 2d 31 30 35 34 2e <Run|MPos:-1054。
38 35 30 2c 2d 31 30 36 34 2e 36 30 30 2c 30 2e 850,-1064.600,0.
30 30 30 7c 46 53 3a 31 32 30 2c 37 35 30 7c 57 000|FS:120,750|W
43 4f 3a 2d 31 30 38 34 2e 35 30 30 2c 2d 31 30 CO:-1084.508 2e 34,
-1 30 30 2c 30 2e 30 30 30 3e 0d 0a 84.500,0.000>..
(继续发送 0x91 直到达到 Ov:200 目标 – 正确操作)

2、GRBL_esp32(不适用于LaserGRBL v2.8.47、2.8.50、v3.0)

[13/11/2018 21:48:24] 写入数据 (COM3)
91 3f ‘?
[13/11/2018 21:48:24] 读取数据 (COM3)
3c 52 75 6e 7c 57 50 6f 73 3a 33 34 2e 37 36 33 <Run|WPos:34.763
2c 31 39 2e 39 30 30 2c 30 2e 30 30 30 7c 42 66 ,19.900,0.000|Bf
3a 30 2c 31 38 39 7c 46 53 3a 31 31 30 2e 30 30 :0,189|FS:110.00
30 2c 37 35 30 2e 30 30 30 7c 50 6e 3a 52 48 53 0,750.000 |Pn:RHS
7c 4f 76 3a 31 31 30 2c 31 30 30 2c 31 30 30 7c |Ov:110,100,100|
41 3a 53 46 3e 0d 0a A:SF>..
[13/11/2018 21:48:25] 写入数据 (COM3)
3f?
[13/11/2018 21:48:25] 读取数据 (COM3)
3c 52 75 6e 7c 57 50 6f 73 3a 33 35 2e 31 31 39 <运行|WPos:35.119
2c 31 39 2e 39 30 30 2c 30 2e 30 30 30 7c 42 66 ,19.900,0.000 32
3c 30 |Bf 7c 46 53 3a 31 31 30 2e 30 30 :0,189|FS:110.00
30 2c 37 35 30 2e 30 30 30 7c 50 6e 3a 52 48 53 0,750.000|Pn:RHS
3e 0d 0a >1../ 2018
[13/2018 ] :48:25] 写入数据 (COM3)
3f?
[13/11/2018 21:48:25] 读取数据 (COM3)
3c 52 75 6e 7c 57 50 6f 73 3a 33 35 2e 34 38 37 <Run|WPos:35.487
2c 31 39 2e 39 30 30 2c 30 2e 30 30 30 7c 42 66 ,19.900,0.000|Bf
3a 30 2c 31 38 39 7c 46 53 3a 31 31 30 2e 30 30 :0,189|FS:110.00
30 2c 37 35 30 2e 30 30 30 7c 50 6e 3a 52 48 53 0,750.000|Pn:RHS
3e 0d 0a >..

笔记:

  • esp32 状态报告包括 Pn:Ov 之前的状态:
  • esp32 状态报告根据https://github.com/gnea/grbl/wiki/Grbl-v1.1-Interface#real-time-status-reports看起来格式正确
  • esp32 FS: report 是浮点数,而 Nano 是整数,lasergrbl 使用 int.parse()
  • 下面的代码是报告解析器….不包括 Pn: – 它会被跳过吗?将阻止 Ov: 被解析?

    LaserGRBL/激光GRBL/GrblCore.cs

    第 1312 至 1328 行 cb41da4

    for ( int i = 1 ; i < arr . Length ; i ++ )
    {
    如果( arr [ i ] .StartsWith ( Ov: ))
    ParseOverrides ( arr [ i ]);
    else if ( arr [ i ]. StartsWith ( Bf: ))
    ParseBf ( arr [ i ]);
    else if ( arr [ i ]. StartsWith ( WPos: ))
    ParseWPos ( arr [ i ]);
    else if ( arr [ i ]. StartsWith ( MPos: ))
    ParseMPos ( arr [ i ]);
    else if ( arr [ i ]. StartsWith ( WCO: ))
    ParseWCO ( arr [ i ]);
    else if ( arr [ i ] .StartsWith ( FS: ))
    ParseFS ( arr [ i ]);
    else if ( arr [ i ] .StartsWith ( F: ))
    ParseF ( arr [ i ]);
    }
  • 为什么这个包含 Ov: 报告的状态报告看起来符合 grbl 规范,却没有被 LaserGRBL 解析?我看不出这将如何无法正常工作。
覆盖在 v3 上无法正常工作 #488
所有者
阿尔基皮塔 评论了 2018 年 11 月 14 日  

有时间我会看看你的帖子。给你两个提示:

  1. 如果您通过命令行或快捷方式使用“comlog”参数 (LaserGRBL.exe comlog) 启动 LaserGRBL,LaserGRBL 将在位于 C:\Users<YourName>\AppData\ 的名为“comlog.txt”的文件中记录每个 tx 和每个 rx漫游\激光GRBL

无需使用外部记录器

  1. 如果点击“?”可以打开LaserGRBL的会话日志 和“打开会话日志”。
    在会话日志中会记录最终的解析异常。

你能打开你的会话日志并张贴在这里吗?

覆盖在 v3 上无法正常工作 #488
所有者
阿尔基皮塔 评论了 2018 年 11 月 14 日  

下面的代码是报告解析器….不包括 Pn: – 它会被跳过吗?将阻止 Ov: 被解析?

没问题,将被跳过。

我想解析失败是因为这个:

esp32 FS: report 是浮点数,而 Nano 是整数,lasergrbl 使用 int.parse()

覆盖在 v3 上无法正常工作 #488
所有者

为什么这个包含 Ov: 报告的状态报告看起来符合 grbl 规范,却没有被 LaserGRBL 解析?我看不出这将如何无法正常工作。

因为解析中的异常会中断执行解析和覆盖管理的“ManageRealTimeStatus(string rline)”的代码执行。

覆盖在 v3 上无法正常工作 #488
所有者
阿尔基皮塔 评论了 2018 年 11 月 14 日  

文档显示 FS 报告是整数(在示例中,F 为 500,S 为 8000)

覆盖在 v3 上无法正常工作 #488

覆盖在 v3 上无法正常工作 #488

我会将报告中的 FS: fp 值更改为 int 作为测试(在几个小时内)。
规范并未明确指出数字是 int 还是 fp – 我们只是从示例中推断出来。;)

我可以建议:
1,更改数字解析以使用更强大的方法。(将数字解析为float,如果lasergrbl 需要,则转换为int 数据类型)
2、更改异常处理,当状态报告的一个字段发生异常时,后续字段仍然正常处理。

这将使状态报告处理更加稳健。

我将在使用 FS: int 值进行测试后报告。

覆盖在 v3 上无法正常工作 #488
所有者

完全同意 1,即将捕获异常 不完全同意,因为它可能隐藏问题。我更喜欢异常不会被太多捕获,所以它们有更大的影响

覆盖在 v3 上无法正常工作 #488

我更改了控制器以报告 FS: 作为整数并且覆盖正常工作。👍👍

此外,我现在在 lasergrbl 可视化器的右上角有机器位置和 f/s 读数 – 我没有注意到它们也不见了!

如果你关闭这个问题,但请查看改进状态报告消息的解析代码,这样它就不会轻易崩溃。👍👍

arkypita 添加了引用此问题的提交 2018 年 11 月 19 日

覆盖在 v3 上无法正常工作 #488
#488 
覆盖在 v3 上无法正常工作 #488
所有者

FS字段的浮点解析将在下一个版本中可用