开源改变世界!!

UGS平台发送状态面板问题 #989

推推 grbl 2年前 (2023-01-27) 190次浏览
关闭
3个任务完成
布雷勒 打开了这个问题 2018 年 4 月 5 日 · 5 条评论
关闭
3个任务完成

UGS平台发送状态面板问题#989

布雷勒 打开了这个问题 2018 年 4 月 5 日 · 5 条评论

注释

UGS平台发送状态面板问题 #989
合作者
布雷勒 评论了 2018 年 4 月 5 日  

问题描述

我已经开始处理发送进度面板的几个小问题。但是代码的变化越来越失控,所以创建这个问题来组织它们并讨论解决方案。

行为

  • 当面板变宽时,它不能再收缩。
  • 暂停作业时,持续时间计时器不会在状态面板中停止。我希望持续时间计时器与工作一起暂停/恢复。
    UGS平台发送状态面板问题 #989
  • 作业完成后,发送的行数是错误的。我希望文件中的命令数量与处理的数量相同。
    UGS平台发送状态面板问题 #989

规格

版本

UGS Platform 2.0 – 开发分支

操作系统

苹果操作系统

平台

GRBL 1.1f

其他

UGS平台发送状态面板问题 #989
合作者作者

由于两个问题,存在发送行数错误的问题:

  1. 它计算控制器中发送的行,而不是流中处理的行。
  2. 它会在所有命令完成之前停止状态面板更新计时器,因为当发送缓冲区为空时会触发完成文件事件AbstractController.java
    public void checkStreamFinished() {
        if (this.isStreaming() && !this.comm.areActiveCommands() && this.comm.numActiveCommands() == 0) {
            String streamName = "queued commands";
            boolean isSuccess = (this.errorCount == 0);
            this.fileStreamComplete(streamName, isSuccess);

            // Make sure the GUI gets updated when the file finishes
            this.dispatchStateChange(getControlState());
        }
    }

您如何看待使用从 streamCommands 中获取值而不是尝试将命令计数器存储在 AbstractController 中:

    public int getRowStat(RowStat stat) {
        switch (stat) {
            case TOTAL_ROWS:
                return this.numCommands;
                //return streamCommands.getNumRows(); <-- reactivate this part of the code
            case ROWS_SENT:
                return this.numCommandsSent;
                //return streamCommands.getNumRows() - streamCommands.getNumRowsRemaining(); <-- reactivate this part of the code
            case ROWS_REMAINING:
                return this.numCommands - this.numCommandsCompleted - this.numCommandsSkipped;
                //return streamCommands.getNumRowsRemaining(); <-- reactivate this part of the code
            default:
                throw new IllegalStateException("This should be impossible - RowStat default case.");
        }
    }

那么它AbstractController.queuedCommands就会过时,因为它只被测试用例使用。

UGS平台发送状态面板问题 #989
所有者

我认为我这样做的原因是预处理器可以添加/删除命令。在可视化工具中,我尝试根据原始代码显示状态。如果命令是一条大弧线,它可能会被分成 50 条线段。GcodeStream 读写器除了存储新行号外,还存储原始行号。

我不确定什么更好。打开一个 100 行的文件并在 GUI 中看到 1000 行会很奇怪吗?

UGS平台发送状态面板问题 #989
合作者作者

是的,那可能会很奇怪……
抱歉,我没有想到这一点,我会继续挖掘。

这个被引用了2018 年 4 月 7 日
UGS平台发送状态面板问题 #989
合作者作者

我正在处理几个测试用例。

场景 1:停止正在运行的文件

  1. 打开并连接 UGS
  2. 打开一个文件(例如 stress_test.gcode)并运行它
  3. 停止文件
  4. 慢跑几次,剩下的行减少
    UGS平台发送状态面板问题 #989

场景 2:运行一个小文件

  1. 打开并连接 UGS
  2. 打开一个小文件(例如 tiny.nc),运行它并让它完成
  3. 它没有处理多少行:
    UGS平台发送状态面板问题 #989

场景 3:运行大文件

  1. 打开并连接 UGS
  2. 打开一个文件(例如 stress_test.gcode),运行它并让它完成
  3. 它不计算最后几行
    UGS平台发送状态面板问题 #989

场景 4:运行带有注释的文件

  1. 打开并连接 UGS
  2. 打开一个文件(例如 buffer_stress_test.gcode),运行它并让它完成
  3. 它不计算评论(文件中有 52 个命令行)
    UGS平台发送状态面板问题 #989

场景 5:在工作流助手中运行文件

  1. 打开并连接 UGS
  2. 打开工作流助手
  3. 添加buffer_stress_test.gcodetiny.nc
  4. 运行第一个文件,会显示一个对话框,说明文件已完成,但它仍在后台运行命令。
    UGS平台发送状态面板问题 #989
UGS平台发送状态面板问题 #989
合作者作者

应用 PR 后,我得到了这些结果:

场景 1:停止正在运行的文件
UGS平台发送状态面板问题 #989

场景 2:运行一个小文件
UGS平台发送状态面板问题 #989

场景 3:运行大文件
UGS平台发送状态面板问题 #989

场景 4:运行带有注释的文件
UGS平台发送状态面板问题 #989

场景 5:在工作流助手中运行文件
机器停止移动时会出现弹出对话框。