开源改变世界

v0.9 中的软限制 #226

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

关闭
rverhag 打开了这个问题 2013 年 4 月 30 日 · 8条评论
关闭

v0.9 中的软限制#226

rverhag 打开了这个问题 2013 年 4 月 30 日 · 8条评论

注释

v0.9 中的软限制 #226

只是试验 v0.9。将它用于一些简单的项目(我的手放在红色按钮上;-))

一切看起来都很好,但我对软限制行为有点困惑。不确定这是错误还是有意为之。(也许我不明白软限制的确切功能)

我有软限制($22=1)并设置限制(最大行程距离):X 为 500 毫米($9 = 500),Y 为 700 毫米($10 = 700),Z 为 110 毫米($11 = 110)。

上电后,Grbl 处于 STATUS_OK,Robot 处于 STATUS_IDLE。

假设 X-work 为 220.50,而 machine-X 为 -220.50。

发送 G0 G91 X260 Grbl v0.9 后响应“警报:硬/软限制 MPOS?” 机器人处于 STATE_ALARM 状态。这不是预期的,因为:

220.50 + 260 = 480.50mm X-工作坐标
移动距离 = 260 mm
-220.50 + 260 = 39.50 mm X-机器坐标

它们都不大于 500mm X 限制(行程距离)。

发送重置 (ctrl-X) 后,Grbl 以“ok”(STATUS_OK) 响应,但机器仍处于 STATE_ALARM 状态。发送“$X”让机器回到 STATE_IDLE。

尝试让机器移动到 X 上,这样:

发送 G0 G91 X260 => 报警
发送 G0 G91 X240 => 报警
发送 G0 G91 X220 => OK

我是不是遗漏了什么或者是 Grbl v0.9 中的一个小错误?

格茨,

罗纳德

v0.9 中的软限制 #226
成员

@rverhag:感谢您报告软限制。还没有太多人对其进行测试并说明其工作原理。首先,它从来没有在我这边的工厂进行过测试,因为我的机器在我改造车库时一直在存放。所以它可能会有我无法解释的奇怪和错误,无论是在精神上还是通过软件测试。

其次,软限制设计为仅在启用归位且您的机器已归位时才起作用。归零时,机器坐标应仅存在于负空间中,即每个轴的 0 到 -max_travel。限制开关在哪里并不重要。它应该考虑到它们。然后,在实际移动机器之前,软限制将检查任何正值或小于 -max_travel 的移动。如果它找到一个,它就会报警。如果处于循环状态,机器应立即停止,或者根本不动,但仍保持系统位置。

如果您没有启用归位或您的机器没有归位,软限制将无法正常工作。它只会让你在负空间中移动。我可能需要创建另一个级别的系统检查以在归位时自动禁用软限制。

v0.9 中的软限制 #226
作者

@chamnit,

感谢您的回复。明天我将在归巢后再次测试。机器确实没有归位。

关于测试 v0.9:我刚刚完成我的机器并开始使用 v0.9(我知道,边缘版本 :-))到目前为止一切正常。X 和 Y 的最大速度为 4000 毫米/分钟,Z 为 3000。X、Y、Z 速度为 60。归位、硬限制、G10 等。在自写的 gui 上运行(基于其他示例的 c#)。

明天我会告诉你考试的最新情况

v0.9 中的软限制 #226
作者

@chamnit,

我刚刚在我的机器上测试了软限制。这是调查结果的摘录(按时间顺序)

Arduino 上电

软限制初始禁用。

获取状态

response –Idle,MPos:0.0000,0.0000,0.0000,WPos:432.6000,58.9000,35.0000–
发送$H(归位)
响应–Idle,MPos:-99.0000,-49.0000,-1.0000,WPos:333.6000,9.9000, 34.0000–(归位完成)

送G1G91X50.000Y50.000Z-20.000F500(轻移工零50、50、-20相对机零)

响应 –Idle,MPos:-49.0000,1.0000,-21.0000,WPos:383.6000,59.9000,14.0000–(当前位置)

发送 G10 L2 P1 X-049.000 Y001.000 Z-021.000(在 G54 中设置零点)

响应 –Idle,MPos:-49.0000,1.0000,-21.0000,WPos:0.0000,0.0000,0.0000–

现在打开 Softlimits
发送 $22=1
发送 $$

00384:响应 =>$0=320.0000(x,步长/mm)
00385:响应 =>$1=320.0000(y,步长/mm)
00386:响应 =>$2=320.0000(z,步长/mm)
00387:响应 => $3=4000.0000 (x v_max, mm/min)
00388:响应 =>$4=4000.0000 (y v_max, mm/min)
00389:响应 =>$5=3000.0000 (z v_max, mm/min)
00390:响应 =>$6= 60.0000(x 加速度,mm/sec^2)
00391:响应 =>$7=60.0000(y 加速度,mm/sec^2)
00392:响应 =>$8=60.0000(z 加速度,mm/sec^2)
00393:响应=>$9=100.0000(x 最大行程,mm)
00394:响应 =>$10=50.0000(y 最大行程,mm)
00395:响应 =>$11=20.0000(z 最大行程,mm)
00396:响应 =>$12=10 (步进脉冲,usec)
00397:响应 =>$13=250.0000(默认进给,毫米/分钟)
00398:响应 =>$14=224(步进端口反转掩码,整数:11100000)
00399:响应 =>$15=25(步空闲延迟,毫秒)
00400:响应 =>$16=0.0500(结偏差,毫米)
00401:响应=>$17=0.0050(圆弧公差,mm)
00402:响应=>$18=4(n-decimals,int)
00403:响应=>$19=0(报告英寸,bool)
00404:响应=>$20=1(自动start, bool)
00405: Response =>$21=0 (invert step enable, bool)
00406: Response =>$22=1 (soft limits, bool)
00407: Response =>$23=0 (hard limits, bool)
00408: 响应=>$24=1(归位周期,bool)
00409:响应=>$25=96(归位方向反转掩码,int:01100000)
00410:响应=>$26=25.0000(归位进给,mm/min)
00411:响应 =>$27=100.0000(归位搜索,毫米/分钟)
00412:响应 =>$28=100(归位去抖,毫秒)
00413:响应 =>$29=1.0000(归位牵引,毫米)

现在尝试在 X 上移动 50 毫米

发送 G0G91X50.000Y0Z0
响应 ALARM:硬/软限位。硕士?=> 按照设计,因为机器零位在 -49,但 X 极限行程是 100mm?

重置,关闭警报

也许-20 超过 X?

发送 G1G91X-20.000Y0Z0
响应 ALARM:硬/软限位。硕士?=> 为什么?X 留在负空间中。

重置杀死警报。

现在尝试在已经启用软限制的情况下回家,而不是将工作设置为零。

发送 $H
响应 –Idle,MPos:-99.0000,-49.0000,-1.0000,WPos:-50.0000,-50.0000,20.0000–

发送 G1G91X10.000Y10.000Z-10.000F500(相对于机器零位轻轻移动到虚拟工作零位 10,10,-10)
响应 –Idle,MPos:-89.0000,-39.0000,-11.0000,WPos:-40.0000,-40.0000 ,10.0000– => 好的,仍然在负机器空间

发送 G1G91X50.000Y0Z0F500(在 G54 处不设置零的情况下在 X 上移动 50!)
响应 –Idle,MPos:-39.0000,-39.0000,-11.0000,WPos:10.0000,-40.0000,10.0000– ok,仍然在负机器空间

发送 G1G91X50.000Y0Z0F500(再次超过 x 50 毫米,因此总请求行程超过 x=100)
响应警报:硬/软限制。硕士?=>按设计,因为机器空间将变为正数并且 X 限制为 100

重置,关闭警报,获取状态
–Idle,MPos:-39.0000,-39.0000,-11.0000,WPos:10.0000,-40.0000,10.0000–

发送 G1G91X49.000Y0Z0F500(而不是 X50,现在是 X49,所以总行程应该是 99)
报警:硬/软限位。硕士?=>按设计,因为机器空间会变成正数,但不是预期的,因为总的 X 限制是 100

最后尝试在启用软限制的情况下回家,并将工作零设置为相对于原始位置(机器)的 50,40,-15

发送 $22=1(以确保)
发送 $H

响应 –Idle,MPos:-99.0000,-49.0000,-1.0000,WPos:-50.0000,-50.0000,20.0000–

送G0G91X50.000Y40.000Z-15.000

响应 –Idle,MPos:-49.0000,-9.0000,-16.0000,WPos:0.0000,-10.0000,5.0000–

send G10 L2 P1 X-049.000 Y-009.000 Z-016.000 (在G54中设置workzero)
response –Idle,MPos:-49.0000,-9.0000,-16.0000,WPos:0.0000,0.0000,0.0000–

现在尝试在 X 上移动 50mm
发送 G1G91X50.000Y0Z0F500

响应 ALARM:硬/软限制。硕士?=>按设计,因为机器空间会变成正数,但不是预期的,因为总的 X 限制是 100

重置,杀死警报,

尝试在 X 上移动 10mm
发送 G1G91X10.000Y0Z0F500
响应 –Idle,MPos:-39.0000,-9.0000,-16.0000,WPos:10.0000,0.0000,0.0000– => ok

再超过 X 10mm
发送 G1G91X10.000Y0Z0F500
响应 –Idle,MPos:-29.0000,-9.0000,-16.0000,WPos:20.0000,0.0000,0.0000– => ok

再超出 x 10mm
发送 G1G91X10.000Y0Z0F500
响应 –Idle,MPos:-19.0000,-9.0000,-16.0000,WPos:30.0000,0.0000,0.0000– => ok

再超过 x 10mm
发送 G1G91X10.000Y0Z0F500
响应 –Idle,MPos:-9.0000,-9.0000,-16.0000,WPos:40.0000,0.0000,0.0000– => ok

再超出 x 10mm
发送 G1G91X10.000Y0Z0F500
响应 ALARM:硬/软限位。硕士?=>按设计,因为机器空间将变为正值,总行程等于 100mm 的最大行程

重置,关闭警报,尝试在 X 上再移动 5 毫米(因此从工作零开始总共移动 45 毫米,从家开始移动 95 毫米)

发送 G1G91X5.000Y0Z0F500
响应 –Idle,MPos:-4.0000,-9.0000,-16.0000,WPos:45.0000,0.0000,0.0000–=>ok

尝试在 X 上再移动 4.9 毫米(从零开始总共 49.9 毫米,从家里开始总共 99.9 毫米)
发送 G1G91X4.9Y0Z0F500
响应警报:硬/软限制。硕士?通过设计,因为机器空间将变为正数。预计不会,因为总行程低于 100 毫米的最大行程

重置,杀死警报。

尝试在 X 上移动 4 毫米(从工作开始总共移动 49 毫米,从家里移动 99 毫米)
发送 G1G91X4.000Y0Z0F500
响应 –Idle,MPos:0.0000,-9.0000,-16.0000,WPos:49.0000,0.0000,0.0000– => ok,如预期

如您所述,机器坐标应仅存在于负空间中,因此软限制按设计工作(不可能超出 Mx0),

编辑 => 下一行是废话,但我让它代表线程的完整性

“但是我的机器上的归位总是在左下角(作为 Autocad 中的世界坐标),完成工作后的停车位在左下角附近。通电后归位距离相对较小,因此工作空间很小启用软限制。”

对我来说这不是问题,因为我将使用硬限制而不是软限制,但也许我的发现对您或其他人有用。

再一次,也许我错过了什么。最后,我还在学习和测试中……

v0.9 中的软限制 #226
成员

@rverhag: 感谢非常详尽的结果。它看起来像预期的那样工作。

您可能不知道的一件事是,归位循环在您的限位开关将机器定位为零后立即执行拉动操作。换句话说,机器零位恰好位于您的限位开关触发时。默认情况下,它会离开限位开关 1 毫米,而不是意外触发它们。您的软限制负空间定义为从限制触发器到轴最大行程的距离。因此,在归位后,您应该能够向回限位开关移动最多 1 毫米。这可能是您的结果有些混乱的原因。

v0.9 中的软限制 #226
作者

@chamnit:我想知道为什么机器在使用方向掩码 $25 = 96 归位后处于 -99、-49、-1,所以我刚刚做了另一个测试,但现在在 4 个不同的角落归位。

$25 = 0(home 在右上角)在 homing machinepos = -1,-1,-1 之后
$25 =32 invert X-dir(home 在左上角)在 homachinepos = -99, -1, -1
$25 = 96 invert x and Y dir (home at left corner) after homing machinepos = -99,-49,-1
$25 =64 invert y dir (home at right lower corner) after homing machinepos = -1,-49,-1

这可能是“问题”吗?只有右上角的归位给出了预期的-1、-1、-1。对于其他 3 个角,偏移量似乎有点奇怪。(仅作记录:机器尺寸为 500mm x 750mm x 125mm X,Y,Z)

v0.9 中的软限制 #226
成员

@rverhag: 我不确定你指出的问题是什么。$9-$11 的最大行程设置定义了轴的总行程长度。因此,当归位轴反转时,它会使用此最大行程数据来确定“归位”位置,从而使机器的整个行程空间为负。如果您的机器是 500mm x 750mm x 125mm,则需要将最大行程设置与之对应。

v0.9 中的软限制 #226
作者

@chamnit

很抱歉对于这个误会。你是绝对正确的。这很合乎逻辑(如果你看到了整个画面;-))

v0.9 中的软限制 #226

白色:总工作空间
绿色:左下角的主页。只用了总空间的一部分(可能床上有障碍物)
红色:家在右上角。只使用总空间的一部分

X 和 Y 两种情况下的软限制最大距离为 300 毫米(忽略图中的 Z)。

现在偏移量的“问题”对我来说很清楚了。当然没有问题,但我没有看到机器坐标“奇怪”的原因。我实际上不得不立即画一幅画。值一千字。

最好睡个好觉……

感谢您的时间和耐心

v0.9 中的软限制 #226

Hola , tengo una pregunta, estoy utilizando este software , pero al momento de pulsar el boton de emergencia o un final de carrera físicos, me aparace en la pantalla de grbl alarma, me dice que con $x puedo dejar estado de error alarma ; pero como hago esto si en la pantalla se me pone todos los botones como desabilitados?? 谢谢你的回应

喜欢 (0)