开源改变世界

如果我的轴没有设置“手笛卡尔规则”,是否可以进行归位/呼叫归位循环 #958

推推 grbl 2年前 (2023-01-23) 97次浏览

关闭
KevinBaileyCrum 打开了这个问题 2020 年 11 月 17 日 · 8条评论
关闭

注释

如果我的轴没有设置“手笛卡尔规则”,是否可以进行归位/呼叫归位循环 #958

我的系统有一个特殊的驱动器,y 轴和 z 轴共用同一条皮带。因此,如果我想移动,
y+1这等同于y+1, z+1如果我想移动,z+1那么我移动z+1等等y+1

我的问题是,是否仍然可以使用归位?
是否有 grbl 命令代表我可以在流中调用的家?

例如,我可以手动流式传输 gcode,以我知道我的机器必须移动的方式最大化 x、y、z 轴。如果我写了一个发送 gcode 移动的函数(以我奇怪的方式),有没有办法按下限位开关并告诉 grbl 我的机器在家?

如果我的轴没有设置“手笛卡尔规则”,是否可以进行归位/呼叫归位循环 #958

我知道这不是一个问题,而是一个问题,但我找不到 grbl 论坛

如果我的轴没有设置“手笛卡尔规则”,是否可以进行归位/呼叫归位循环 #958

不只是一个 COREXY 设置?除了它通常是 x/y 组合

如果我的轴没有设置“手笛卡尔规则”,是否可以进行归位/呼叫归位循环 #958

很高兴了解 COREXY。从来没有听说过他们。是的,我的系统就是这样,但是 3d。基本上我在问是否有办法仍然使用归位/限位开关。

所以我有通过串行通信发送 grbl GCODE 的代码,很像 simple_stream.py 但我发送的是 gcode 而不是文件。我希望能够编写自己的与我的轴相关的 HOME 函数,然后将归位完成警报发送到 grbl,这样它就不会被阻止。

如果我的轴没有设置“手笛卡尔规则”,是否可以进行归位/呼叫归位循环 #958

的 grbl 到 32 位端口中,我从几个文件中删除了 coreXY 代码并将其移动到一个单独的文件中。为了更容易添加新的运动学,我还定义了一个内部 API,允许在不更改现有代码的情况下添加新的运动学(除了对设置的单一调用)。壁式绘图仪马斯洛运动学的代码已使用此 API 添加,但目前尚未经过测试。

为此 API 添加代码可能是您的一个选择?

如果我的轴没有设置“手笛卡尔规则”,是否可以进行归位/呼叫归位循环 #958

我想我设计了一个解决方案。为了解决我的最后一段,我专门寻找https://github.com/gnea/grbl/wiki/Grbl-v1.1-Interface#feedback-messages[msg:'$H'|'$X' to unlock]

因此,我可以发送我的 gcode 映射以适合我的奇数驱动系统,如果我按下限位开关或启用归位,我可以简单地分别发送 $X 或 $H。

如果我的轴没有设置“手笛卡尔规则”,是否可以进行归位/呼叫归位循环 #958
作者
凯文贝利克鲁姆 评论了 2020 年 11 月 18 日  

哦,该死的,那行不通,因为我不知道哪个轴达到了极限开关,我得到的只是警报:1,但不是关于哪个轴达到的消息

除非我错了。如果我击中了一个轴,是否有一个 gcode 命令可以告诉我我的定位?我无法发送“?” 处于锁定状态。

如果我的轴没有设置“手笛卡尔规则”,是否可以进行归位/呼叫归位循环 #958 KevinBaileyCrum 重新打开了这个 2020 年 11 月 18 日
如果我的轴没有设置“手笛卡尔规则”,是否可以进行归位/呼叫归位循环 #958

我无法发送“?” 处于锁定状态。

为什么不?如果能够发送但没有回复,您可以修复 grbl 以使用几行代码来执行预期的操作(?)。

grbl/grbl/协议.c

第 226 至 238 行 eefe2bb

如果((rt_exec == EXEC_ALARM_HARD_LIMIT)||(rt_exec == EXEC_ALARM_SOFT_LIMIT)){
report_feedback_message (MESSAGE_CRITICAL_EVENT);
system_clear_exec_state_flag (EXEC_RESET); //禁用任何现有的重置
{
//阻止所有内容,除了重置和状态报告,直到用户发出重置或电源
//循环。硬限制通常在无人看管或不注意时发生。给予
//用户和 GUI 时间在重置之前做需要做的事情,比如杀死
//传入流。关于软限制也可以这样说。虽然位置不是
// lost, continued streaming 如果偶然被执行,可能会导致严重的崩溃。
} while ( bit_isfalse (sys_rt_exec_state,EXEC_RESET));
}
system_clear_exec_alarm (); //清除报警
}

 

在 do…while 循环中添加这些行…

grbl/grbl/协议.c

第 249 至 253 行 eefe2bb

//执行并串口打印状态
如果(rt_exec & EXEC_STATUS_REPORT){
report_realtime_status ();
system_clear_exec_state_flag (EXEC_STATUS_REPORT);
}

 

…按照注释“// 阻止所有内容,重置和状态报告除外”的说明进行操作,您会收到报告吗?

还是没有足够的闪存可用?

从我的 32 位端口:

        if ((alarm_code_t)rt_exec == Alarm_HardLimit || (alarm_code_t)rt_exec == Alarm_SoftLimit || (alarm_code_t)rt_exec == Alarm_EStop) {
            system_set_exec_alarm(rt_exec);
            grbl.report.feedback_message((alarm_code_t)rt_exec == Alarm_EStop ? Message_EStop : Message_CriticalEvent);
            system_clear_exec_state_flag(EXEC_RESET); // Disable any existing reset
            while (bit_isfalse(sys_rt_exec_state, EXEC_RESET)) {
                // Block everything, except reset and status reports, until user issues reset or power
                // cycles. Hard limits typically occur while unattended or not paying attention. Gives
                // the user and a GUI time to do what is needed before resetting, like killing the
                // incoming stream. The same could be said about soft limits. While the position is not
                // lost, continued streaming could cause a serious crash if by chance it gets executed.
                if(bit_istrue(sys_rt_exec_state, EXEC_STATUS_REPORT)) {
                    system_clear_exec_state_flag(EXEC_STATUS_REPORT);
                    report_realtime_status();
                }

                grbl.on_execute_realtime(STATE_ESTOP);
            }
            system_clear_exec_alarm(); // Clear alarm
        }
    }
如果我的轴没有设置“手笛卡尔规则”,是否可以进行归位/呼叫归位循环 #958

所以我不知道这是否在文档中,但我想出了如何在警报后连接。

  • 基本上$21=1当我的机器达到极限时(’模拟归位,即一次移动一个轴直到按下一个开关并假设被击中的开关是我正在移动的轴 – 不是超级安全但它现在有效)
  • grbl 发送ALARM: 1然后[MSG:Reset to continue]
  • 正是这种重置为继续状态阻止了一切,甚至发送了我的$X命令。直到我发送'\x18\n'重置命令(这是我在 wiki 中找不到的部分),然后我才能发送'$X\n'解锁。

在我对 wiki 的阅读中,$21=1 似乎会导致 if limit hit -> alarm -> send $X to unlock。在我的情况下不是这样,它的警报 -> ^X -> $X -> 继续

希望这可以帮助别人。如果它出现在 wiki 中,请告诉我我很乐意引用它,否则我可能会尝试在 wiki 的某处键入编辑以消除歧义。现在让问题悬而未决,看看 ^X 是否在 wiki 中,我知道标题与我正在解决的问题不完全匹配(“在达到硬限制后无法发送 $X 以解锁”)可能更合适。希望这可以帮助。

喜欢 (0)