开源改变世界

第一印象 #14

推推 grbl 3年前 (2023-02-02) 365次浏览
关闭
jarretluft 打开了这个问题 2015 年 12 月 19 日 · 12条评论
关闭

第一印象#14

jarretluft 打开了这个问题 2015 年 12 月 19 日 · 12条评论

注释

第一印象 #14

你好,
我刚刚安装并运行了 cnc.js,它看起来棒极了。但是,我在 Mac 上,要么我遗漏了一些明显的东西,要么有问题,因为我无法加载 gcode 文件。我假设因为没有上传选项,我应该只将 .nc 或 .gcode 文件拖放到浏览器窗口上,但这对我不起作用(在 chrome 或 safari 上),这可能是一个特定于 mac 的问题…

另外,有没有办法抑制打印的所有控制台输出?和 $G 默认响应并且仅显示是否在启动时发送详细/调试标志?该应用程序在闲置时使用了我 51% 的 CPU,我怀疑部分开销是由于不断打印这些控制台输出行造成的。

cnc.js 绝对有潜力!
干杯,
-J。

第一印象 #14

贾勒特,

我也在 Mac 上运行 Web 界面,没有问题。要上传文件,请单击 3d 查看器区域中的小云图标。当你想加载一个不同的文件时,点击小垃圾桶关闭现有的 gcode 文件。

虽然没有注意到高 CPU 或控制台消息。

第一印象 #14
合作者

嗨,贾勒特,

谢谢你的来信。Web 界面目前确实缺少拖放功能,但我已将其添加到待办事项列表中,并将很快添加。

至于闲置时CPU使用率高,我会进一步调查。

第一印象 #14 奇顿 添加了 增强 标签 2015 年 12 月 19 日
第一印象 #14
合作者

我还注意到即使处于空闲状态,网络浏览器也会导致 CPU 使用率很高,看来我遇到了与mrdoob/three.js#7670相同的问题。

function render() {
    requestAnimationFrame(render);
    renderer.render(scene, camera);
}
render();

默认情况下,requestAnimationFrame循环将以 60HZ 的刷新率渲染场景。即使场景中不需要更新,CPU 也会保持高工作状态。

我将尝试仅在事件发生时才使用静态场景渲染,如下所示:

// controls
let controls = new THREE.OrbitControls(camera);
controls.addEventListener('change', render);

let renderAnimationFrame = false; // a flag that will be updated when receiving mouse and keyboard events

function render() {
    if (renderAnimationFrame) {
        requestAnimationFrame(render);
    }
    renderer.render(scene, camera);
}
render();
第一印象 #14
合作者

嗨,贾勒特,

您可以查看v0.11.6以修复闲置时 CPU 使用率过高的问题:

  • 解决导致空闲状态下 CPU 使用率过高的 Web 界面问题 –第一印象 #14
第一印象 #14
合作者

如果当前状态不在运行状态,修复将停止渲染动画循环。componentDidUpdate任何状态更改都将在组件更新后触发。这似乎componentDidUpdate是调用 requestAnimationFrame重新启动循环的好地方。

例如:

class Visualizer extends React.Component {
    state = {
        workflow: WORKFLOW_STATE_IDLE
    };
    componentDidMount() {
        // create your scene
    }
    componentDidUpdate(prevProps, prevState) {
        requestAnimationFrame(::this.renderAnimationLoop);
    }
    renderAnimationLoop() {
        let isAgitated = (this.state.workflow === WORKFLOW_STATE_RUNNING);
        if (isAgitated) {
            requestAnimationFrame(::this.renderAnimationLoop); // 60 fps refresh rate
            // start animations
         } else {
            // stop animations
        }
        this.renderer.render(this.scene, this.camera);
    }
}
第一印象 #14
合作者

在v0.12.0中添加了对加载 G 代码文件的拖放支持

第一印象 #14
作者

刚刚测试了 0.12.0,这看起来棒极了。

空闲时的高 CPU 使用率和拖放都是固定的。我喜欢你用 gcode 拖/放框所做的事情,我也喜欢 3d 查看器不再与其他框一起滚动,所以下面没有空白,你永远不会丢失屏幕顶部的播放/暂停按钮。

其他一些观察:

  • 似乎在按下暂停时,它并没有立即停止移动,而是完成了切割已经发送到 grbl 队列中的所有 gcode。同样,在暂停期间,一个人仍然可以慢跑。如果一个 !用于暂停,而 ~ 用于取消暂停将立即停止,并且 grbl 将被锁定,因此不会发生可能将立铣刀置于意外位置的慢跑,从而导致队列中的下一次切割错误执行。
  • 对于Jogging,大多数其他软件似乎忽略进给率并使用G0命令(GRBL中设置的快速速度),有没有办法给用户这个选项?我宁愿永远不必设置进给率并始终以我预先定义的快速速度移动,而不是每次加载页面时都必须将默认进给率 (250) 调整为我的典型快速率 (5000)。另一种方法是存储一个设置 cookie,它允许我的 5000 进给率设置在页面加载之间保持不变。
  • 如果对侧边栏中小部件的排序/放置的任何更改,或者侧边栏的隐藏存储在 cookie 中以在页面刷新之间保持不变,那就太好了。现在我自定义小部件的位置只是为了在下次加载页面时将它们全部重置
  • 当 gcode 完成发送时,持续时间计数器不会停止……它似乎无限期地继续计数:)
  • 关于在 3d 查看器中为 G0、G1、G2/3 线着色不同颜色有什么想法吗?我想我只是在 chilipeppr 中习惯了这一点,但在使用 cnc.js 时发现自己错过了它,因为这是一种快速查看快速移动与实际铣削位置的方法。即使是 G0 的淡绿色和 G1/2/3 的深绿色也会给出一些指示,表明主轴将在负载下进行哪些运动与切削之间的快速运动。

抱歉,如果这些都应该是单独的问题,如果这样会更好,我可以将它们全部移出。

保持伟大的工作;我希望在接下来的几周内更深入地研究您的代码,看看我是否可以为您的项目做出任何贡献。我开发了 chilipeppr grbl 工作区,因此我熟悉那里的触摸板小部件、自动级别小部件、grbl 缓冲区处理等的大部分代码。

干杯,
-J。

第一印象 #14
合作者

非常感谢您的建议。我真的很感激。

请参阅下面我对您提出的要点的回复:

  • v0.12.2 : 现在点击[PAUSE]按钮也会!向 Grbl 发送进给保持命令以立即保持当前操作。~再次点击时会发出循环启动命令,[PLAY]恢复当前操作。
    Hold状态(即暂停)内,您将有机会通过单击[STOP]按钮停止并清除缓冲区中排队的所有动作。它还会发出一条Ctrl-X命令,将 Grbl 从Hold一个状态重置为另一个Idle状态。
    但是如果这样做,Grbl 可能会Alarm在某些情况下进入该状态,有必要让用户知道Unlock需要一个命令让 G 代码功能再次工作。我还在努力。
  • v0.12.4:进给率控制已从轴小部件中删除,因为它不是点动所必需的。
  • 持久设置和浏览器状态是从一开始就缺少的功能,我会尽快添加它。
  • 不间断持续时间计数器是一个错误,将在以后的版本中修复。
  • 关于G0~G3命令渲染不同颜色的问题,我在v0.12.3中做了快速修复,但如果用户可以根据自己的喜好选择自定义颜色就更好了。
第一印象 #14
合作者

v0.13.4:记住小部件位置
v0.13.5:不间断持续时间计数器的错误修复

第一印象 #14
合作者

TODO:浏览器刷新后恢复 UI

第一印象 #14
合作者

v0.14.7:浏览器刷新后恢复 G 代码

第一印象 #14
合作者

我将关闭该问题,因为上面提到的大多数问题都已解决。感谢您在这里的反馈。