注释
这可以与问题#28合并。使用免费的 gcode 或 mdi/ 命令获得一些可自定义的用户按钮。这可以在设置文件中进行编辑,以避免开发 gui 时的开销。 |
@effer @vlachoudis 对于上面的示例,宏需要知道 Xmax、Ymax 和 Xmin Ymin,可能还需要知道 Zsafe。 我还想添加一个自动居中宏。如果您曾经使用过 Mach3,那么它就是它最酷的功能之一(无论如何对我而言)。我使用一个直径为 25 毫米的铜环(切断水管),它连接到一个连接到探头输入端一侧的板上。咬住它们的工具在 X+ 中移动,直到接触到铜环并记录该位置。然后工具沿负X轴方向移动-25mm,直到接触到铜环的另一侧。现在,脚本从 XminusTouch ((Xmax-Xmin/2) +Xmin) 中减去 XposTouch,然后移动到中间。然后它对 Y 轴执行此操作。完成后,工具位于铜环的中间。在我的盘子上,我刻有十字线和 3 个定位销以将其与一个角对齐。 该脚本看起来像这样: ring = 25 布鲁斯 |
@1bigpig这是个好主意。我可能会在 gcode 中添加函数评估,以及包含用户定义变量和系统变量的变量范围。在 python 中非常简单,它需要一些解析。我看到 linuxcnc 有一些功能评估我不知道他们的格式是否是 gcode 标准,在这种情况下会很好地遵循。 |
那很有意思@1bigpig. grbl 的一个明显限制是低内存,不允许在零件程序中进行参数化编程和变量。 |
@vlachoudis: 这是我可以帮忙的。g 代码标准有一种编程语言,他们称之为 Macro B,最初由 Fanuc 开发。它是带有变量的参数化语言,可以根据这些计算计算调整或更改 g 代码程序。例如,您可以自动更换工具、固定循环、自动找平探测循环、找到工件的中心、雕刻设置字母、饰面库存等。它相对简单,但功能强大,并被业界所接受。如果我们安装它,这可能是 bCNC 内部编写和管理所有这些自定义流程的方式,并允许用户根据需要添加或更改它们。 因为我已经花了很多时间编写和重写 Grbl g 代码解析器,所以我对正典有了非常深入的了解。我已经开始使用用 Python 编写的 grbl 解析器(PreGrbl,但已经 3 年没有接触了)。我可以将 PreGrbl 更新为当前的 Grbl 解析器,并开始添加一个 Macro B API 供 bCNC 使用。我想这会吐出与 Grbl 兼容的 g 代码。bCNC 必须管理操作流和顺序。 |
@vlachoudis: 经过昨晚的思考,我认为我现在没有时间完成这样的事情,但是有以前的 g-code 佳能项目@csdexter,用 C 语言编写。就佳能而言,它非常完整,但可能需要一些工作才能使其成为 bCNC 使用的 API。它确实有表达式(类似于 Fanuc MacroB),因此可以使用这些表达式创建自定义刀具路径或机器控制功能。 |
@vlachoudis @chamnit我想大家可能想多了。我认为除了 grbl streamer 之外,我们不需要完整的宏/子例程功能。我在想只是作为一个宏观特征。不能 100% 确定这一点,但像 Mach3 这样的程序只允许在界面上的宏“按钮”中编写脚本。我可能是错的,因为我已经很久没有做自定义 Mach3 屏幕了,但我很确定脚本是自定义屏幕的一部分,而不是由通用 G 代码解释器执行的。 我建议使用 Mach3 的脚本语言作为基础,但他们使用的是 Basic 的一种形式(也许是 Visual Basic?)。我知道 EMC/LinuxCNC 通常比 Mach3 落后几个迭代,因为 Fenerty 先生被支付给 Mach3 编程的简单面孔。 我还建议宏语言不必那么复杂。grbl 最多只有 8 个输入。其中 3 个是限制,1 个是探测器,1 个紧急停止,1 个门/运行保持线和 2 个当前未定义的杂项输入。Mach3 实际上有无限的输入/输出线,但我认为他将其限制为 1000 线 I/O。有了那么多生产线,您可以做一些非常疯狂的事情,例如完全在 Mach3 控制下的自动换刀。 虽然您有更多用于 Raspberry PI 板(等)的 I/O 选项,但您开始限制 bCNC 可以在哪些计算机上运行。我不认为@vlachoudis甚至有一个 Rasberry PI。 所以,我的提议是这样的:
所以上面的居中代码看起来像这样: ;<ring = 25> 布鲁斯 |
反对。看起来 Github 在他们的评论中也实现了“大于”符号,所以我不得不在大于号和变量之间添加一个空格。这个空间不会在代码中。 我认为 $G 报告的所有机器状态都应该包括机器常量。我还想包括所有 3 轴的最小/最大刀具路径。还应包括探测器返回值。今晚我会试着列出一份清单。 布鲁斯 |
@1bigpig:你所描述的是宏 B,又名表达式,又名变量等。如果我没记错的话,Mach3 有自己的宏语言。但大多数都是基于 MacroB。由于它是行业标准,专业人士可以轻松地将他们的技术应用到支持它的 GUI 中。 |
@chamnit我想我最好阅读一下 Macro B。 |
@vlachoudis:使用宏/子程序,我相信几乎所有内容都可以返回并用于计算子程序的下一部分。但,@effer关于启动和停止问题是正确的。在子程序中,您可能需要在继续之前等待您需要的特定数据,例如探测命令。但是,无论 Grbl 必须在内部执行还是 bCNC(作为 GUI)必须在外部执行,这都将是相同的问题。在我的脑海中,除了探测之外没有太多需要等待直到完成。最初创建子程序是为了处理自动探测任务、刀具偏置循环和固定循环。后者通常是使用规定的输入生成的,而不是在像探测这样的循环中生成的。 如果 GUI 需要确保 Grbl 的缓冲区为空,它可以简单地发送 G4 P0.001 驻留。它会排队进入 Grbl 并强制它在执行驻留之前清空缓冲区。当它返回“ok”时,GUI 可以立即恢复流。延迟将按串行通信和 GUI 处理延迟的顺序排列。很短。 |
@chamnit我看了一下宏 B。它甚至有简单的脚本逻辑 IF GOTO WHILE… 和一些功能,如 BCD。作为第一步,我将介绍函数评估并暂时保留脚本逻辑。真的有人用吗? |
@vlachoudis:我正在复习一个机械师朋友这个周末给我的几本关于 Macro B 和其他变体的书。Mach3 和 LinuxCNC 有自己的变体,它们称之为子程序。我也在研究我之前提到的那个 g 代码佳能项目,并审查他们使用的宏变体类型。AFAIK,它有所有的脚本逻辑和参数设置。 是的,人们使用它们。大多数是专业人士或更有经验的机械师。这些通常用于自动化自定义探测周期,例如扫描 3d 表面以生成 STL 模型或为特定机器更改自定义工具。后者是 IMO 中最重要的部分。 我认为通常有一组参数存储您可以从机器内存中访问的探测结果。在 LinuxCNC 上,这些是参数 5061-5069。 |
@vlachoudis:我还在争论是否在行业标准 Fanuc Macro B 上使用 LinuxCNC 宏(称为子程序)。由于 Grbl 使用 LinuxCNC 的 g 代码定义,因此保持一致可能是个好主意。在我的审查期间,我将调查它们之间的差异,并确定是否有充分的理由选择其中一个。 |
我已经使用 LinuxCNC 宏进行了一些测试,并生成了一些参数程序。所以,经验很少,但我发现它有点生疏。 |
@vlachoudis: 所以我对不同的宏观方言做了初步的审查。Macro B 非常强大,但没有太多免费工具可以利用它。它主要在专业领域。如果让我选择,我可能会坚持使用 LinuxCNC 的表达式、参数和子例程(它们的宏版本)。这使事情与 Grbl 保持一致。它也与 Macro B 一样强大,可以插入现有的 LinuxCNC 工具。 例如,有一个有趣的项目创建了一个更高级别的抽象,称为gcmc,它作为一种编写人类可读脚本的方法似乎非常有用。Gcmc 不会完全取代宏,因为它只生成 g 代码而不能适当地处理探测。您仍然必须为此使用宏。 |
@vlachoudis明白了。我一直在研究编写这样的程序需要付出多少努力。事实证明是相当多的。在处理与 Grbl 的通信时也很棘手。也许最好用 Python 做自己的事情,同时牢记宏的一般工作原理。在不久的将来,我希望能得到一个完整的 gcode API。这将是一项相当大的努力,但希望随着事情变得更强大而有用 |
@vlachoudis @chamnit对不起,我迟到了回到这个线程。工作一直很疯狂。 不管怎样,我快速浏览了一下 MacroB,但它让我想起了太多“老派”的 CNC。虽然我很欣赏与其他系统兼容的愿望,但我觉得在这种情况下,这可能会“限制”bCNC 的未来潜力。谁知道有人会想出什么很酷的功能或宏?我个人不会想到圆心查找器,但我要感谢用 Mach3 编写它的人! 另外,我觉得 bCNC 不应该是另一个“我也是”的项目。我认为@vlachoudis具有许多其他程序所没有的一些独特而酷炫的功能。我觉得 Python 中的宏语言可能是其他 grbl 接口程序所没有的另一个特性,并且会将 bCNC 置于 grbl“堆”之上! 只是我的两分钱。 PS 我答应了宏语言的常量列表。今天/今晚将解决这个问题。 |
@1bigpig: 我认为这与我们得出的结论相同。我将在下一个版本的 Grbl 中添加宏。但是,我认为将一些宏的机器编程概念基于 bCNC 的子程序是一个好主意,因为它是一个完整的方法。 |
@chamnit @1bigpig我使用方括号 [] 以及 # 前缀变量和普通变量进行了非常简单的函数评估(在 bCNC 之外)。它运行良好且速度相当快。然而,束缚我双手的是使用括号进行注释。它破坏了拥有与 g 代码兼容的东西并获得高级语言的灵活性的任何可能性。我需要一个聪明的解决方案。 目前我看到以下可能性: 我想知道有多少用户/程序确实编写了参数化 gcode,或者创建一个转换为 gcode 的参数化 CAD 更好? 如果使用参数化 gcode 生成器是为了使宏像@1bigpig中心查找环,也许我可以为用户定义的操作引入 gcode 标准之外的宏机制。 |
我不是很清楚评论到底有什么问题,但也有 参数 gcode 的使用取决于用户的类型。如果您谈论的是 Grbl 常见的业余爱好者 CNC 用户,则可能占很小的比例,因为他们没有意识到这一点。如果他们是 LinuxCNC/Mach3 用户或专业人士,我想说他们中的很大一部分人会知道如何使用它们并将它们用于重复性任务。如果这样的东西可用,我认为会有更多人学习使用它,尤其是当用户试图通过他们的机器赚取一点额外收入时,因为它可以节省在机器上的时间。宏最适合实时生成 gcode 程序。 例如,在铣削金属时,您要做的第一件事就是将库存材料平整,在材料进入机器之前,您通常不知道要面对多少。端面加工通常涉及一些简单的飞刀扫掠或一组立铣刀蛇形走刀。当您在机器旁时,这可以通过参数程序自动完成。输入一般尺寸、跨步和深度的变量,您将自动拥有一个 gcode 程序。这比返回主计算机、在 CAM 中更新它,然后将程序加载到 GUI 中运行要快得多。 通过将程序转换为 CAD,然后使用 CAM 生成 gcode,您对 gcode 程序本身的控制要少得多。结果可能因 CAM 和 CAM 程序而异,您需要添加导入它并生成 gcode 的步骤。在这一点上,您几乎失去了宏为您提供的优势:为机器上的重复性任务实时生成 g 代码。 |
@vlachoudis我建议我们将脚本仅限于宏。 我认为 99.9% 的用户会使用 CAD/CAM 来生成他们的 G 代码。宏将用于我上面提到的两个函数之类的东西。 你也可以做螺栓圆计算器和其他一些他们称之为“对话式”编程的功能,但这些事情也可以直接用 Python 完成,然后生成 G 代码。 让自己轻松一点。我相信随着事情的进展,我一定会提出改进和修复的建议……;-) 布鲁斯 |
@vlachoudis: 我同意@1bigpig. 不要过于复杂,用 Python 编写一个简单的实现即可完成大部分工作。当我可以安装宏时,Python 足够高级,可以在以后重新编写。不能说什么时候,但它在待办事项列表中。 |
在讨论中再添加一个数据点:LinuxCNC 有一组 Python 脚本,这些脚本使用 Tcl/Tk 显示 GUI 并允许用户做出选择,然后输出生成的 G 代码。知道 LinuxCNC 在许多级别的软件中都是可扩展的,我推测即使不是所有这些脚本也可以直接插入到 Axis(LinuxCNC 的 GUI)中,这样您就可以在不离开 CNC 主屏幕的情况下访问所需的功能。也许这个例子会有所帮助。 他们在这里:http ://wiki.linuxcnc.org/cgi-bin/wiki.pl?Simple_LinuxCNC_G-Code_Generators |
我希望 bCNC 将来也支持强大的宏/脚本语言,但我相信工具将得到更广泛的认可。 |
我在想完全一样的事情@effer. 除了功能评估之外,还为“工具”部分提供插件机制,因此任何人都可以编写自己的插件来创建或更改 gcode。 |
我继续将宏语言的保留字列表作为新问题发布。请随时添加到列表中并提出建议。 迟到总比不到好。 |
Having using bCNC for some time with my new CNC and being a novice, a scripting language wold be very useful, a method to write a script and load into bCNC and then GRBL execute the moves like. I have found this piece of code and i used it for drilling the slots for the screw in the spoilboard of my machine. Regards Carlo D. |
@1bigpig @effer I’ve made a branch called “eval” with the first version of function evaluation. %python-statement ; any python statement starting with % but in one line |
@vlachoudis我收到了另一个功能请求。这是一个非常基本的功能,但是当你做很多工作并试图用完废料时,这是一个很好的功能。
基本上,机器以矩形移动到所有四个极值点。Z 轴从不移动(除非移动到安全的 Z 高度)并且通过快速移动完成。从语义上讲,它是:
G90
G0 Zsafe
G0 Xmax, Ymin
G0 Xmax, Ymax
G0 Xmin, Ymax
G0 Xmin, Ymin
由于它在零件周围移动,您将知道您的夹具是否会撞到或其他任何东西。很高兴在您的工具钻头转动之前知道。
我曾经在我的一个旧 DOS 控制器中使用它,我一直在使用它,并且总是在我按下“运行”按钮之前运行它,只是为了确保没有任何阻碍……平坦的表面可以如此疯狂积累工具和材料…
谢谢,
布鲁斯