开源改变世界

支持:系统命令 #84

推推 grbl 3年前 (2023-02-02) 245次浏览
关闭
MoonshineSG 开启了这个issue 2016 年 10 月 2 日 · 21条评论
关闭

支持:系统命令#84

MoonshineSG 开启了这个issue 2016 年 10 月 2 日 · 21条评论

注释

支持:系统命令 #84

有什么方法可以添加可以通过 Web UI 以某种方式调用的自定义命令吗?
我有一个 RPi GPIO,可以打开/关闭 cnc 的电源。我想有一种方法可以通过(太棒了)cnc ui 来切换它

支持:系统命令 #84 奇顿 添加了 增强 标签 2016 年 10 月 2 日
支持:系统命令 #84
合作者

我计划添加一个可以从 UI 触发自定义脚本的用户定义命令。#75中也提到了这个特性。请继续关注进一步的更新。

支持:系统命令 #84
作者

很高兴听到它正在筹备中……

支持:系统命令 #84
合作者
奇顿 评论了 2016 年 12 月 30 日  

这个特性是在95698eb中加入的,之后会在 1.8.10 版本中发布。示例配置(即~/.cncrc文件)如下所示:

{
    "state": {
        "checkForUpdates": true
    },
    "commands": [
        {
            "text": "Reboot",
            "command": "/sbin/reboot"
        },
        {
            "text": "Shutdown",
            "command": "/sbin/shutdown"
        }
    ],
    "macros": [],
    "users": []
}
支持:系统命令 #84
作者

伟大的。有没有办法更新到非发布版本(实时)?

支持:系统命令 #84
合作者

如果你愿意使用 master 分支中的最新更改,你可以在树莓派上 git clone 这个项目,然后运行npm install && npm run prepublish创建一个新的构建。您可以按照此页面上列出的所有步骤操作:https ://github.com/cheton/cnc/wiki/Installation#git-installation 。

我将在两天内发布一个新版本。请继续关注进一步的更新。

支持:系统命令 #84
作者

我这样做了,但是出现了一堆错误…我会耐心等待直到您发布 :D
谢谢!!!

支持:系统命令 #84
合作者
奇顿 评论了 2016 年 12 月 30 日  

只是为了让您知道出于安全考虑,我没有提供直接从 Web 界面添加 shell 命令的页面,否则黑客可能会在服务器上执行任意命令或脚本。

您必须暂时手动更新~/.cncrc文件以添加或删除命令。

支持:系统命令 #84
作者

那很好。

支持:系统命令 #84

@cheton在 CNC gui 中有反馈/控制台输出会很好。
可能需要一个新的系统终端小部件或某种类型的推送通知……

此外,这是我的命令(包括 CNC 和系统更新)

  "commands": [
    {
      "text": "Check network connection",
      "command": "ping -c 10 127.0.0.1"
    },
    {
      "text": "Update System",
      "command": "sudo apt-get update; sudo apt-get upgrade -y; sudo apt-get dist-upgrade -y"
    },
    {
      "text": "Update CNCjs",
      "command": "sudo npm install npm@latest -g; sudo npm install -g cncjs --unsafe-perm; pm2 restart cnc; pm2 save; sudo npm install pm2 -g; pm2 update"
    },
    {
      "text": "Reboot",
      "command": "sudo /sbin/reboot"
    },
    {
      "text": "Shutdown",
      "command": "sudo /sbin/shutdown"
    }
  ],
支持:系统命令 #84
合作者

我也在考虑打开一个新的浏览器窗口(或通知)来接收 stdout 输出,可能会尝试在以后的版本中添加它。

除了 WebSockets,SSE(Server-Sent Events)可能是它的替代解决方案,浏览器可以自动接收服务器发送的事件通知。

关于 stackoverflow 的一些讨论:http: //stackoverflow.com/questions/21934831/nodejs-express-stream-stdout-instantly-to-the-client
http://stackoverflow.com/questions/5195452/websockets-vs-server-
发送事件事件源

支持:系统命令 #84

如果您想在它发生时看到它,SSE 或 websockets 会很好,但是在它结束时将日志作为文本文件托管可能非常有用,而且不费吹灰之力。此外,您可能不希望在默认情况下看到输出,只希望看到成功/失败,并带有检查输出的选项。

我觉得这是相关的,但也许不是,根据数控机床的状态启动停止命令怎么样?我想在剪辑时做一个游戏中时光倒流,如果我可以在 gcode 开始、完成或错误时调用脚本,我就可以做到这一点。我希望我没有劫持这个问题,或者如果我没有阅读足够的文档来找到你已经提供的方法来做到这一点。我使用过与 octoprint 类似的东西,它们有一组非常好的事件,我可以用它们来打开和关闭灯,或发送通知,或任何我想要的东西。

支持:系统命令 #84
合作者

在 1.9.0-alpha 中添加了对推送通知的支持。现在,如果未启用,您可以通过单击“命令”标题旁边的铃铛图标来打开通知。

支持:系统命令 #84

每个执行的命令后面都会有一个动画图标,指示正在进行的工作。
支持:系统命令 #84

完成后,您将收到一条推送通知,显示命令成功或命令失败。

命令成功

支持:系统命令 #84

命令失败

支持:系统命令 #84

支持:系统命令 #84
合作者

@jeffeb3

我刚刚提到了 OctoPrint 的事件。如何将一些事件添加到~/.cncrc文件中,如下所示?一旦事件触发,您可以发送某些 gcode 行或运行脚本。

{
    "events": [
        { // Load
            "event": "command:load",
            "trigger": "gcode",
            "command": "G21 ; use millimeters\n$H",
        },
        { // Unload
            "event": "command:unload",
            "trigger": "gcode",
            "command": [ // array
                "M5" // spindle stop
            ]
        },
        { // Start
            "event": "command:start",
            "trigger": "system",
            "command": "/path/to/script"
        },
        { // Stop
            "event": "command:stop",
            "trigger": "system",
            "command": "/path/to/script"
        },
        { // Pause
            "event": "command:pause",
            "trigger": "system",
            "command": "/path/to/script"
        },
        { // Resume
            "event": "command:resume",
            "trigger": "system",
            "command": "/path/to/script"
        }
    ]
}
支持:系统命令 #84

这看起来很有用。

一些想法:
你怎么知道哪些是系统调用,哪些是 gcode?你可以有单独的变量名。system_command 和 gcode_command。
命令必须是脚本吗?在你的路径中调用一些东西会有效吗?脚本看起来不错,但我可以看到让用户感到困惑。
命令和脚本可以是列表,对吗?他们会被连续处决,我想?包括睡觉吗?
对于 gcode,是否有人使用命令加载文件的用例?就像主轴关闭一样,将 z 向上移动,转到机器原点,将 z 向下移动到停放位置。

支持:系统命令 #84
合作者

谢谢您的意见。从我最初的想法来看,事件管理应该在 UI 上完成,而不是从文本编辑器中完成。这有助于避免混淆。

触发器类型(即“system”或“gcode”)可用于区分gcode和系统调用,它们都可以是一个由换行符分隔的多行文本输入控件。举些例子:

  1. gcode 触发器类似于宏:

    G21
    G90
    
  2. 系统触发器将是一个逐行执行的脚本:

    /path/to/your/script
    sleep 5
    shutdown 
    

gcode 触发器还可用于支持类似于您上面提到的用例的M6 工具更改命令 ( #118 )。

支持:系统命令 #84
合作者

@jeffeb3

在接下来的几天里,我将添加对事件触发器的初步支持,其中包括以下事件:


gcode:load
gcode:unload
gcode:start
gcode:pause
gcode:resume
gcode:stop
feedhold
cyclestart
homing
sleep #Sleep目前支持 Grbl 1.1
loadmacro
loadfile


你有没有发现上面列表中缺少的有用的东西?

支持:系统命令 #84

抱歉,我没有早点回复,我的盘子里有很多事情要做。

这些看起来足以满足我的需求。我计划在 gcode:start 时开始延时摄影,然后在 gcode:stop 时停止。当 gcode 完成时会发生这种情况,而不仅仅是当我停止它时,对吗?我还可以在 gcode:stop 上添加 pushbullet 或 slack 通知。

如果我伸出头来,当 cnc.js 开始有用时,我可以看到一个事件。针对特定 gcode 的事件,如 M6 可能也不错。我可以让它在需要更换工具时向我发送通知。我还没有进行工具更改,但这似乎很有用。

我会看看今天或明天是否可以将这些更改应用到我的 CNC 上。谢谢。

支持:系统命令 #84
合作者

此功能在 1.9.0-alpha.3 中可用,但管理 UI 尚未实现。我将在 1.9.0-beta 或最终的 1.9.0 版本中添加这部分。

支持:系统命令 #84 cheton 提到了这个问题 2017 年 2 月 24 日
40个任务
支持:系统命令 #84 cheton 修改了里程碑: 1.9 , 1.8 2017 年 2 月 24 日
支持:系统命令 #84
合作者

在 v1.9.0-alpha.4 中添加了事件触发器配置 UI。我稍后会向 NPM 发布一个新的 alpha 版本。

支持:系统命令 #84
合作者

命令和事件配置 UI 现在在 1.9.0-alpha.5 中可用。