开源改变世界!!

连接冰沙 java.lang.Exception:Grbl 尚未完成启动。 #70

推推 grbl 1年前 (2023-01-25) 168次浏览
关闭
dandumit 打开了这个问题 2013 年 3 月 23 日 · 12条评论
关闭

连接冰沙 java.lang.Exception:Grbl 尚未完成启动。#70

dandumit 打开了这个问题 2013 年 3 月 23 日 · 12条评论

注释

连接冰沙 java.lang.Exception:Grbl 尚未完成启动。 #70

大家好,
我正在尝试将 Universal G Code Sender 与 smoothie(GRBL 的 cortex M3 端口)一起使用,当我尝试发送文件时,我收到此“java.lang.Exception:Grbl 尚未完成启动。”。看来思慕雪应该用什么来回答了。

您能否向我详细说明我应该使用什么 IDE 来编译 Universal-G-Code-Sender。我想调试这种情况。

兄弟,
丹尼尔

连接冰沙 java.lang.Exception:Grbl 尚未完成启动。 #70
所有者

Netbeans v7.2.1。如果您想将 smoothie 与 UGS 完全结合,您应该首先创建一个扩展 GrblController 的 SmoothieController 类,然后是扩展 GrblController 或 AbstractController 的 SmoothieCommunicator 类。然后出于测试目的,在 MainWindow.java 中将控制器类从 GrblController 更改为 SmoothieController,将来会有一个下拉菜单来选择要使用的控制器类。

连接冰沙 java.lang.Exception:Grbl 尚未完成启动。 #70
作者

行。我已经安装了 NetBeans。
需要在 Controller 中完成大量工作。
我已经开始在 GrblController 中覆盖“isReadyToStreamFile”,成员是私有的 -> 不能被继承并且没有可用的方法来访问它们。
我应该如何进行?我认为我们需要讨论一下。
Communicator 看起来很普通。
GrblUtils 也有非常具体的东西。

连接冰沙 java.lang.Exception:Grbl 尚未完成启动。 #70
作者

我在 GrblController 上添加了一些方法

public Boolean areActiveCommands(){
    return comm.areActiveCommands();
}

public LinkedList<GcodeCommand> awaitingResponseQueue(){
    return awaitingResponseQueue;
}
public Boolean commHasActiveCommands(){
    return comm.areActiveCommands();
}

public LinkedList<GcodeCommand> outgoingQueue(){
    return outgoingQueue;
}
连接冰沙 java.lang.Exception:Grbl 尚未完成启动。 #70
作者

我已经设法将 gcode 文件发送到冰沙板,但在 3 次之后我遇到了一个严重的错误:

线程“AWT-EventQueue-0”中的异常 java.lang.ArrayIndexOutOfBoundsException:-1
在 java.util.Vector.elementAt(Vector.java:430)
在 javax.swing.table.DefaultTableModel.setValueAt(DefaultTableModel.java:648)
在 com.willwinder.universalgcodesender.MainWindow$36.run(MainWindow.java:1761)
在 java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)

可能是冰沙在收到命令后必须用其他字符串回答?
或者它应该在处理命令后以特殊方式进行通信?

连接冰沙 java.lang.Exception:Grbl 尚未完成启动。 #70
所有者

GrblController 中的许多内容最终将移至 AbstractController 类中,这将简化您所看到的许多问题。使这些公共访问器成为一个很好的中止之门,直到我到达那里。

除了初始化新的 SmoothieController 类之外,您根本不需要修改 GUI。当控制器类没有以正确的顺序发送事件,或者由于某种原因控制器的队列损坏(丢失命令号)时,您看到的异常就会发生。每个命令都需要发送事件(这就是所有“dispatch*”静态方法正在做的事情)。在我的脑海中,每个命令都必须是:

  1. 排队 – 当控制器类向通信器发出命令时会发生这种情况。
  2. 已发送 – 当通信器发送命令时,它会向控制器发送一个侦听器事件,然后控制器向 GUI 发送一个事件。
  3. 完成 – 当固件返回“ok”时,通信器向控制器发送一个事件,然后控制器向 GUI 发送一个事件。

控制器类负责跟踪正在排队/发送/完成的命令。目前,我使用 3 个列表(outgoingQueue、awaitingResponseQueue 和 completedCommandList)执行此操作,当其中一个事件发生时,命令从一个列表中取出,并附加到下一个列表。

最终我希望将这些东西放入抽象类中,以便其中的大部分自动发生,但在那之前要做到正确可能有点棘手。

连接冰沙 java.lang.Exception:Grbl 尚未完成启动。 #70
作者

感谢您记录/解释 UGS 的工作方式。
我仍在努力/努力开始让 UGS 与 Smoothie 一起使用。

不幸的是,Smoothie 在命令处理方面有不同的方法:我已经与 Smoothie 的主要开发人员讨论过,他告诉我:

  • smoothie 中有一个队列,但它是一个移动队列,您无法知道您发送的 gcode 将以何种方式填充它
  • 冰沙队列根本不是关于你可以发送多少命令
  • smoothie 在队列中有空间时发送“ok”

这些让我得出结论,在 UGS 上需要一些重要的改变:

  • 例如,没有关于已执行/完成的命令的信息
  • 必须修改主窗体

另一个想法是对 smoothie 添加一些更改以更像 grbl。

你能提供一些指导吗?

亲切的问候,
丹尼尔

连接冰沙 java.lang.Exception:Grbl 尚未完成启动。 #70
所有者

嗨丹尼尔,

我很乐意根据您的需要提供帮助,如果您的更改在公共存储库中,我可以对其进行审核。

修改 smoothie 为每个完成的命令发送一个“ok”将使 GUI 可以有效地保持缓冲区满,或者至少在“ok”之后附加一些空闲字节。我真的没有看到另一种方式,我们可以通过假设“ok”意味着发送 X 个字节的命令来使用它。也许 Smoothie 有一个如此大的缓冲区,以至于有效地填充缓冲区成为一个有争议的问题,并且像这样成批发送数据足以让计划者忙碌。

如果在 smoothie 发送“ok”时剩余空间有一个定义的阈值,那么您应该能够从活动字符串列表中查看/弹出命令,直到释放那么多字节的数据。这将在 SmoothieCommunicator.java 中完成,在“responseMessage”事件中,您只需要更新“isOkErrorResponse”事件以删除多个命令而不是一个。

Smoothie 开发人员是否建议应如何保持缓冲区满?

-将要

连接冰沙 java.lang.Exception:Grbl 尚未完成启动。 #70
作者

嗨,威尔,
我想我以某种方式混淆了你。
每次 Smoothie 发送“ok”时,他的缓冲区中都有空间。

关于公共存储库 – 我对这些一无所知。请给我一个指向一些文档的指针,当然我会发布我所有的更改。

经过数小时的努力,我已经让 UGS 将完整的文件发送给 smoothie:
我在 sendStringToComm(String command) 中进行了更改:

    this.comm.queueStringForComm(command+"\n");


this.comm.queueStringForComm(command+”\r\n”);

较早的更改使 UGS 能够将完整的文件发送到 smoothie。

请告诉我,您是否不时发送“?” 命令登机?此命令未在 smoothie 中实现。

BR,
丹尼尔

连接冰沙 java.lang.Exception:Grbl 尚未完成启动。 #70
所有者

@dandumit凉爽的!恭喜您发送了完整的文件。

我想我明白你所说的“确定”消息的意思,基本上它可能意味着完成了多个命令,而不是像我的代码假设的那样只完成一个命令。

我实际上并没有提出 github 拉取请求,但这里有一些文档:https ://help.github.com/articles/using-pull-requests

当我重构 AbstractController 时,我将使行终止符像 AbstractCommunicator 一样可配置。

你是对的“?” 命令,是GRBL获取当前机器状态的状态命令。不过,我认为它不应该在 Smoothie 上看到它,因为除非收到 GRBL 版本字符串,否则它不会打开。

连接冰沙 java.lang.Exception:Grbl 尚未完成启动。 #70
所有者

@dandumit我刚刚添加了一个用于选择固件的组合框。您应该能够将新类添加到 FirmwareUtils.java 并对其进行初始化。

连接冰沙 java.lang.Exception:Grbl 尚未完成启动。 #70
所有者

我刚刚完成了制作 AbstractController 的第一步。我还制作了一个扩展“AbstractCommunicator”并执行一般 RXTX 操作的“AbstractSerialCommunicator”。

可能还有一些东西可以使界面更易于使用,但目前我认为可以通过仅实现 Communicator/Controller 对象并在固件下拉列表中添加一个条目来添加其他固件。

连接冰沙 java.lang.Exception:Grbl 尚未完成启动。 #70
作者

抱歉旷工。我在 Smoothie 中添加了更多功能,使其与 grbl 更兼容,从而与 UGS 更兼容