开源改变世界!!

程序早期错误未发出进给保持 #971

推推 grbl 2年前 (2023-01-27) 158次浏览
关闭
绕线器 打开了这个问题 2018 年 3 月 27 日 · 7条评论
关闭

程序早期错误未发出进给保持#971

绕线器 打开了这个问题 2018 年 3 月 27 日 · 7条评论

注释

程序早期错误未发出进给保持 #971
所有者

问题描述

@breilerIDLE我注意到,在状态有机会从变为之前检测到错误时,UGS 不会暂停RUN。我不确定这是新的倒退还是旧的倒退。

预期行为

即使最后报告的状态是 ,UGS 也应该发出一个进给保持命令IDLE

实际行为

该程序继续运行所有命令,直到出现错误的命令为止,此时它停止,因为通信器正确地暂停了自己。

重现问题的步骤

运行以下程序。每次都将错误放在第一行,

F250.
G90 G20 G17
; attempt to fill up the buffer, adding/removing these lines
; causes the issue happens more/less frequently
; depending on the status poll rate setting
G1 X.123456789
G1 X-.123456789
G1 X.123456789
G1 X-.123456789
G1 X.123456789
G1 X-.123456789
G1 X.123456789
G1 X-.123456789
G1 X.123456789
G1 X-.123456789
G1 X.123456789
asdf

奇怪的是,这个案例看起来是由这个块处理的GUIBackend.java

    @Override
    public void pauseResume() throws Exception {
        logger.log(Level.INFO, "Pause/Resume");
        try {
            switch(getControlState()) {
                case COMM_IDLE:
                default:
                    if (!isSendingFile()) {
                        throw new Exception("Cannot pause while '" + getControlState() + "'.");
                    }
                    // Fall through if we're really sending a file.
                    // This can happen at the beginning of a stream when GRBL
                    // reports an error before we send it a status request.
                case COMM_SENDING:
                    this.controller.pauseStreaming();
                    return;

规格

版本

主分支

操作系统

苹果操作系统

平台

GRBL 1.1f

程序早期错误未发出进给保持 #971
合作者

追溯到 1 月 8 日 ( 2abdcdb ),并且可以重现该问题。

我尝试修改GrblController:rawResponseHandler添加this.pauseStreamingEvent();,这似乎可以解决问题:

Optional<GcodeCommand> activeCommand = this.getActiveCommand();
if( activeCommand.isPresent() ) {
    processed =
        String.format(Localization.getString("controller.exception.sendError"),
            activeCommand.get().getCommandString(),
            lookupCode(response, false)).replaceAll("\\.\\.", "\\.");
            this.errorMessageForConsole(processed + "\n");
            this.commandComplete(processed);
            this.pauseStreamingEvent(); // Send a feed hold
        } else {
...

但这只有在支持流媒体的情况下才有效?

程序早期错误未发出进给保持 #971
合作者

我刚刚意识到这会与#970中描述的行为相矛盾。错误暂停由@flounderscore进行工具更改。我想,如果您想以这种方式解决错误,解决方法是使用单步执行模式,直到真正支持工具更改为止?

程序早期错误未发出进给保持 #971
所有者作者

@breiler是的,UGS 不适合工具更改,我认为您甚至无法伪造它。GRBL 不会等到它到达换刀命令,所以它很可能会停在错误的位置。有几个解决方案。

制作一个 gcode 解析器来寻找M6并在它前面停留(或者甚至是自定义例程)是微不足道的,我实际上已经有一个可以为M3命令执行此操作的:M3Dweller.java

拥有一个可以告诉控制器/通信器做某些事情的“pragma”功能也很酷。例如 throw 之类的东西(#ugs-directive FORCE_SINGLE_STEP)可以(#ugs-directive RESTORE)对程序执行进行更细粒度的控制。这可能允许 UGS 执行诸如在您的程序中插入断点之类的操作(例如这个 grbl 工具)。

另一个可能更简单的选择可能是将程序分成单独的块,并使用类似的东西Workflow Helper来发送不同的部分。

程序早期错误未发出进给保持 #971

是否有像在 bCNC 中那样实施半自动换刀/探测的计划?

程序早期错误未发出进给保持 #971
所有者作者

已通过#972解决