注释
@nesetburakUGS 将尝试将其发送到控制器,而不是将命令处理为宏;而 GRBL、TinyG 和 Smoothie 仍然不支持 M6 工具更改(我只使用 GRBL)。 解决方法:我有一个想法可以很容易地添加到 UGS,但目前,您可能需要使用“查找/替换”策略在记事本(或 VS Code / Atom / Brackets,任何这些编辑器非常适合 G 代码扩展)。 对于像这样的入门级系统,推荐的方法是在单独的文件中更改工具,并使用诸如工作流插件之类的东西,并手动触摸/探测(例如您编写的宏)或使用探测插件。 我的实现思路(面向开发者):在工具 -> 选项 -> UGS -> 控制器选项中,有一个正则表达式删除器。 |
不幸的是用其他程序(uccnc)解决了我的问题。但我想使用 UGS。 @carneeki你的想法真好。“正则表达式去除器”。 但是为什么UGS不使用或不支持宏。宏的复杂性是什么。 |
Mach3 至少有 17 年的开发时间,并且是 LinuxCNC(当时称为 EMC)的一个分支,它有时间实现这样的事情。UCCNC 至少从 2011 年开始,也许更早。这只是时间问题。:) 查看 UCCNC 页面,宏支持看起来非常有用,而不仅仅是我的固定循环和工具更改示例 – 所以这个周末我会看看它,如果它是一个简单的更改,我’我将发布一个提交并做一些简单的测试,但我可能需要你测试它以查看它是否按你期望的方式工作。我对正则表达式和最终用户有点紧张,因为正则表达式有一些有趣的语法,如果您以前没有见过它们可能会非常可怕,但简单的“查找/替换”应该没问题。钻孔循环等更复杂的事情可能需要更多时间来解决,但现在,我认为我们大多数人只是使用 CAM 将固定循环扩展到许多 G0/G1 代码。几天后我会用我的发现更新这张票。
|
@carneeki您的 由于现有的插件引擎,这两个实现起来应该几乎微不足道。您可以看到现有的Pattern remover非常基础。该功能的大部分工作都与 GUI 相关。尽管它是一段简单的代码,但它足以使一些其他功能(如空格和注释处理器)变得微不足道。 |
大家好,请问这件事有进展了吗?如果 UGS 可以与 Gcode 的各个部分相交并将它们转换为宏,尤其是对于自动换刀器,就像 bCNC 和 CNCjs 对 M6 所做的那样,那就太好了。 |
如果有人想尝试一下,这是 UGS 中的第一个很棒的项目。Processor 接口不是很复杂,所有的东西都是用 json 文件配置的,并且有很好的测试覆盖率。 您可以在此处看到一个简单的检测 M3/M4 并插入一个额外命令的命令: 参数(即模式/替换)在此处从文件中解析出来: 通用G代码发送器/ugs-core/src/com/willwinder/universalgcodesender/gcode/util/CommandProcessorLoader.java 第 193 行 4da7db7
要用“重命名器”替换“删除器”,需要在 GUI 中进行一些调整,以添加/删除/保存一个额外的参数: 第 151 行 c6c85d5
|
这上面有什么事情发生吗???? |
我想进入 UGS,并有一定程度的编码经验(主要是 SQL、Python 和一点 C/C#)。这个’Replacer’听起来像是一个很好的介绍……如果热情和(适度的)经验让我有资格,那么我准备尝试 – 我在我当前的设置中使用’Remover’来识别工具更改条目并将它们剥离为“ ^[mM]6\s*[tT][0-9].*$”。 用于识别 gcode 文本流中的模式的类似 Grep 的模式是众所周知的并且已经定义,’remover’ 处理器恰好包含此功能。这个初始框架可以作为起点。所以问题会变成:
拥有一些“我想要/我需要”的用例示例将非常有用,这样我就可以形成或完善基础。 我还可以使用指向 HowTo GitHub 的指针并提出建议的贡献等。正如我所说,“一些经验”。 |
嗨安迪,这是一个很好的第一个项目。处理器系统相当独立,并且有一些很好的文档:https ://winder.github.io/ugs_website/dev/gcode_processor/ 1. 也许可以添加第三列来提供新命令。2. 有用于跳跃值的正则表达式捕获组,也许借用 sed 语法在替换中插入捕获的文本?它还可以做一些事情,比如查找宏并将其用作替代品。正则表达式:^[mM]6\s*[tT]([0-9].*)$替换;ToolChangeMacro\1 3. 处理器是一个处理每一行的独立对象,因此它可以根据需要缓存部分历史记录。处理器框架会跟踪当前位置和状态等信息,以便将这些信息提供给进程调用。最大的限制是处理提前发生,因此处理器不能实时中断正在运行的程序。4. 我认为这是 Regex 案例的一个子集,您提到的设计会支持它。对于开发,我们使用标准的 GitHub fork/pr 工作流程。这里有一些关于它如何工作的信息: https://gist.github.com/Chaser324/ce0505fbed06b947d962
|
稍微阅读一下 grep 和 sed,再加上考虑“replacer”命令将如何集成和/或替换“remover”命令,我相信带有空白“replace with”字符串的 replacer 将给出与当前“remover”相同的结果,这意味着可以安排任何现有的 JSON 条目以无缝过渡到新的“replacer”命令。 因此,我的建议是;
我认为在本地编译包对于证明代码编译是必要的,而且对于初始测试目的也是如此。我有最新版本的 Net Beans Dev Environment,但似乎在使用它时遇到困难 – 是否有最适合这项工作的版本?我也想在某个时候开发一个插件,所以考虑到同样的问题和希望相同的答案 |
如果我理解正确,这些是您要选择的选项:
我稍微喜欢第一个选项,它似乎更容易使用。但两者都可以,有一个帮助按钮,因此可以编写如何定义模式的完整描述。(见 |
我编写了第一个功能,成功构建并运行。我正在努力调试正在发生的事情…… 如果我在首选项 > UGS > 控制器选项中将模式设置为“ s/^[mM]6\s tT$ ”,它会起作用,并成功地从命令中“删除”M6T。如果我将模式设置为“ s/^[mM]6\s tT$/M123 ”以用“愚蠢”的东西替换 M6T 以查看它是否正常工作,它根本无法移除 M6T,并且 M123 不会出现据我所知 – grbl 抱怨 M6T 命令。 我遵循的实现这一点的过程是在 PatternRemover 中将“/”上的 regexPattern 拆分为 String[] 变量 s3,就像 sed 一样,并测试第一个 String[] 元素是否为“s”和 s3[0].equals (“s”) – 如果是,则使用 p = Pattern.compile(s3[1]) 编译 p,如果 s3 中有第三个元素,则将其添加到名为 r 的新最终私有列表中,以供 ProcessCommand 使用. 如果没有第三个元素,我只是 r.add(“”); 充当“去除剂”。漂亮而简单。 在 processCommand 中,我有 ret.add( p.matcher(command).replaceAll(r.get(0)) ); 我相信这应该有效。但测试表明“不完全是”。 热情多于知识……关于我如何着手解决和调试正在发生的事情的任何指示?我曾尝试使用 System.out.println() 从 processCommand() 中获取调试记录,但尽管阅读了早期作者是如何做到这一点的,但我没有得到任何输出(例如:在 GcodeModel.java 中输出“Num Line Segments: “ |
编写一些测试可能是调试它的最简单方法。我认为模式处理器没有任何测试,但您可以使用此处的其他文件之一作为模板: https ://github.com/winder/Universal-G-Code-Sender/tree/master/ugs- core/test/com/willwinder/universalgcodesender/gcode/processors 进行测试后,您还可以尝试使用调试器运行以帮助在运行时检查代码。
|
太棒了 – 得到了一个测试脚本设置和调试运行与休息和观察。好的。 |
模式处理器体系结构中是否有触发器来标记用户已编辑 regexPattern 并且需要重新编译?现在看来,这是一次解析和编译并按原样使用,还是我错过了什么? |
我相信当您打开 gcode 文件时,处理器已加载。如果处理器配置发生变化,我们可能应该重新加载 gcode 文件,但我认为目前不会发生这种情况。 |
明白了。我想我已经为拉取请求做好了准备,所以会在今晚进行。我有关于如何通过 sed 将值从原始匹配的正则表达式跳到返回模式的想法,这也可能有助于访问宏扩展 – 但后者需要从我的部分阅读如何键入宏。 |
对于功能目标 2:查看使用 getSettings().getMacros() 的枚举宏,但需要访问后端实例。我在哪里可以获得当前后端实例? |
宏扩展代码有效且健壮,使用 sed ” s/regex/%macroname% ” 语法,并且仍然是一段简单的代码。我遇到了一个导入查找问题,这意味着我将对代码进行一些小的调整以关闭宏扩展,但将其代码保留在原位,以便在看到进展时可以同时合并 Replacer 函数。 常用的“import com.willwinder.ugs.nbp.lib.lookup.CentralLookup;” 与“后端后端 = CentralLookup.getDefault().lookup(BackendAPI.class);”配对 调用以获取实例并从该实例访问宏列表。我不明白为什么这个导入失败,因为其他包进行相同的导入引用并且似乎没问题 – 但我收到“package com.willwinder.ugs.nbp.lib.lookup does not exist”错误。我通过添加依赖项克服了它,但由于循环引用,应用程序无法编译。 我可以对此提出一些建议,或者指向一个非后端依赖的方法来枚举 .getMacros()。我已将撤回的合并请求留在原处,以便可以看到代码 – 在 PatternRemover 包中。@winder |
我已经通过将“提供的”依赖项包含回 UGSLib 来设法解决循环依赖项,并且该应用程序现在可以通过作为 PatternRemover 的一部分的宏扩展成功构建、运行和测试。在测试过程中,我确定当“ s/M6T/%1% ”是 sed 模式时确实发生了宏扩展,并且存在名为“1”的宏,并且当通过测试命令“M6T”时该测试通过. 出色的。
|
The full functionality of ProcessorRemover to enable Replace and %macro% expansion is completed and tested, and a pull request made. |
功能要求
我如何将宏与 g 代码一起使用。我正在上传这个 gcode;
G21 G90
G01X10
T1 M6
主轴移动到 X10 坐标但不启动“T1 M6”宏
问题描述
宏不适用于 gcode。这不是错误,但我没有解决这个问题。
预期行为
我不想按宏按钮。
0
1
如果我从 Gcode 文件发送一个特殊代码,宏名称会捕获此代码并启动宏 GCode。
谢谢你的兴趣
winder