Contact me: hankecnc@gmail.com

我在 Marlin 2.0 中实现了 G10 L20 ()… #549

推推 grbl 3年前 (2023-02-03) 431次浏览
打开
12 个任务中的第 4 个
fantasmag0ria 打开了这个问题 2020 年 1 月 2 日 · 18条评论
打开
12 个任务中的第 4 个

我在 Marlin 2.0 中实现了 G10 L20 ()…#549

fantasmag0ria 打开了这个问题 2020 年 1 月 2 日 · 18条评论

评论

我在 Marlin 2.0 中实现了 G10 L20 ()... #549

描述

基于MarlinFirmware/Marlin#14734

http://linuxcnc.org/docs/2.6/html/gcode/gcode.html#sec:G10-L1 _

我对 GCODE 和 C++ 有基本的了解,所以如果有人愿意看一下并确认它做了它应该做的事情,这里是源代码。

大多数更改位于:..\Marlin\src\gcode\feature\fwretract\G10_G11.cpp

我还在 G0 上添加了位置报告。

在 SKR 1.3 上测试并且似乎工作正常。

Marlin.zip
(复制替换Marlin 2.0仓库中的Marlin目录)

版本

  • CNCjs:1.9.20
  • 节点.js:6.x
  • NPM:5.x

你如何安装CNCjs?

  • NPM
  • 下载 CNCjs 桌面应用程序

数控系统

  • 马林鱼
  • 冰沙
  • TinyG/g2核心

硬件

  • 树莓派零 W
  • 台式机或笔记本电脑
  • 移动设备

操作系统

  • 不适用
  • 视窗
  • 苹果
  • Linux
我在 Marlin 2.0 中实现了 G10 L20 ()... #549

很有意思。我目前无法进行测试,但非常感谢 CNC 机器使用 (LinuxCNC / CNC.js) 对 G10 L2(0) 的支持。感谢您的贡献!

你提到

“我还在 G0 上添加了位置报告。”

我很好奇这涉及到什么……这是 CNC.js 的开发人员不得不说的关于位置报告的内容:

其他(非 Marlin)控制器有一个软配置(不需要重新编译)选项,可以在其位置报告中包含机器和工作坐标。例如,g2core 在 JSON 格式的报告中用“mpos:”标记机器坐标,用“wpos:”标记工作坐标。报告格式与 GCode 的解析几乎没有关系。就 Marlin 而言,没有简单的方法可以强制其自动及时发布位置报告。您必须发送一个命令来要求它提供报告,并且定期发送这些命令有时会导致运动卡顿,因为“发送报告”命令必须与文件中的 GCode 穿插在一起。缺少自动位置报告可能会给铣削带来麻烦,单个 GCode 移动通常需要几秒钟 – 例如低进给率下的长弧。对于 Marlin,DRO 在该移动期间不会更新,并且可能要等到几个这样的移动结束后才会更新,具体取决于 CNCjs 插入“发送位置”命令的频率。

#514

我在 Marlin 2.0 中实现了 G10 L20 ()... #549
作者

我很好奇这涉及到什么

这是一种不同的方法。我不是通过 cncjs 轮询机器位置,而是在每个 G0(快速)上从控制器发送它。它基本上是在 G0 函数末尾添加到 Marlin 的一行代码。

我想你通常不会用很多 G0 来运行作业(切割时),所以它不应该影响性能。在运行 GCODE 时了解机器位置不如在慢跑时有用。

此外,当您想使用 G0 进行切割时,marlin 允许修改进给率。所以你可以做到。

我在 Marlin 2.0 中实现了 G10 L20 ()... #549
出纳员 评论了 2020 年 1 月 8 日  

以下是 CNC.js 的开发人员对 Marlin 与 CNC.js 的结合所说的一切:
#514

“主要是 3D 打印数控机床 (MPCNC)”论坛上的一些人正在饶有兴趣地关注这个问题:
https ://forum.v1engineering.com/t/marlin-versus-work-coordinates-g10-l20/10959

您是否有机会确保位置报告在类似于 g2core 的自动报告中使用“mpos:”标签返回机器坐标并使用“wpos:”返回工作坐标?

我在 Marlin 2.0 中实现了 G10 L20 ()... #549
作者
幻想曲 评论了 2020 年 1 月 8 日  

使用“mpos:”标签的机器坐标和使用“wpos:”标签的工作坐标

你有一些例子或文件应该如何报告吗?
或者应该如何报告 CNCjs 才能正确理解它。

我在 Marlin 2.0 中实现了 G10 L20 ()... #549

你有一些例子或文件应该如何报告吗?
或者应该如何报告 CNCjs 才能正确理解它

对不起,我不知道。

CNC.js 开发人员Mitch Bradley知道自动位置报告应该是什么样子以获得最佳的 CNC.js 兼容性:
#514

我只是不知道如何引起他的注意,也不知道他是否愿意提供一个例子……

我在 Marlin 2.0 中实现了 G10 L20 ()... #549
作者
幻想曲 评论了 2020 年 1 月 9 日  

我猜他会在他有时间的时候。我也猜他的工作不是回答我们的问题 ;)

我在 Marlin 2.0 中实现了 G10 L20 ()... #549

我没有花太多时间查看更改,因为它们没有以针对特定版本的拉取请求 (PR) 的标准形式呈现。该标准表格有一个很好的理由——它为初级开发人员节省了时间,他们通常非常忙碌并且被许多不同的人的请求压得喘不过气来。使用 PR,您可以轻松准确地看到更改的内容,如果它是好的,只需按一下按钮就可以接受/合并它,只需单击一下就可以对特定行进行评论,等等。

另一个元问题是原始问题发布中的特定“询问”“有人可以看看它并确认它做了它应该做的事情”。要求 CNCjs 开发人员审查 Marlin 代码超出了范围。据我所知,CNCjs 和 Marlin 开发团队之间没有重叠。恰好有一些 g2core 重叠,因为我也是 g2core 开发人员,但即便如此,我希望 g2core 代码审查请求会转到 g2core 站点。

但抛开这些元问题,在我看来,该线程已经演变成三个独立的问题:

  • 通过 G10 支持坐标系
  • “自动”位置报告(实际上是对该问题完全有用的解决方案的一个子集)
  • 工作协调报告

(与 PR 元问题一样,当太多的问题被混为一谈时,人们就很难集中注意力。当太忙的人面对混杂的问题时,往往会疏远。)

一次拿一个:

G10:那么这里的 CNCjs 问题是什么?CNCjs 是否适用于更改后的版本?如果是,问题是什么?如果没有,专门确定如何重现问题的问题将是合适的——但 CNCjs 开发人员处理起来可能很耗时,因为测试它需要我们设置 Marlin 编译环境,编译补丁代码,将其加载到板等。如果此功能成为 Marlin 的标准配置,那可能是值得的,但在明确是否会发生之前,这是“一次性”情况。

“不是真正自动的”位置报告:同样,这是否适用于 CNCjs?我的猜测是它确实有效,因为 CNCjs 只是在它们到达时处理位置报告。没有“预期”与“意外”报告的概念。有一些 CNCjs 代码试图强制 Marlin 发送一些报告,但在接收端,每当位置报告恰好进来时,事情就会更新。也许这个问题应该作为一个公告来表达?

“工作坐标报告”:这被框定为“你能添加 mpos: 和 wpos: 标签,如 g2core”和“什么位置报告应该看起来像最佳的 CNCjs 兼容性”。就目前而言,Marlin 报告与 g2core 报告完全不同,因此尝试将 g2core 语法硬塞进 Marlin 语法中是行不通的。g2core 报告语法使用 JSON 符号高度结构化,而 Marlin 完全是临时的。使用结构化报告格式,您可以轻松添加新功能,因为解析器希望所有内容都被标记。旧版本的代码会简单地忽略任何新标记,这是可能的,因为解析器总是可以分辨什么是标记以及该标记的参数是什么。在不破坏旧代码的情况下更改临时格式非常棘手。由于格式是非结构化的,不同的 UI 代理可能使用不同的策略来识别各种不同的报告并提取不同的字段。您必须非常小心地设计一个新报告,旧的解析器不会将其与先前存在的报告混淆 – 并且仅向旧报告添加字段也会遇到同样的问题。要安全地执行此操作,您需要考虑每一个声称支持 Marlin 的不同 UI 代理——而不仅仅是 CNCjs。

因此,也许您会明白为什么我不喜欢 Marlin 的外部 UI 控件用例。它的串行通信框架在非常基础的层面上设计得很糟糕。对于通过连接的 LCD 面板运行 3D 打印机的用例,Marlin 表现出色。我在我的 3D 打印机上使用它。将 GCode 复制到 USB 记忆棒,将其插入打印机,然后让作业运行数小时,而不必担心连接的 PC 是否会在不好的时间进入睡眠状态。

“为了获得最佳的 CNCjs 兼容性,它们应该是什么样子”的答案是:与当前版本的 CNCjs 的兼容性是没有希望的,因为 CNCjs 根据没有工作位置的现有 Marlin 语法解析 Marlin 报告。对于未来,无论你能说服 Marlin 团队做什么,CNCjs 都可以,前提是 Marlin 团队会发明一些明确的东西(否则会给每个人带来无穷无尽的问题)。Marlin 和 g2core 报告解析器是完全独立的,因此尝试将两者混合是没有帮助的。如果 Marlin 要使用 g2core 样式的 JSON 报告,这在理论上可能会有帮助,但事实上有如此多的 Marlin 副本使用现有的 Marlin 格式使得新的 JSON 格式在实践中没有帮助。

对不起,如果这听起来很古怪——但事实是有很多因素在起作用,我想把它们列出来让你了解问题的深度。维护和增强复杂的软件是一个大问题,并且由于多个单独开发的组件之间的交互而变得更加困难。

我在 Marlin 2.0 中实现了 G10 L20 ()... #549
作者
幻想曲 评论了 2020 年 1 月 10 日  

感谢您的深入答复。

未以拉取请求的标准形式呈现

我知道,我需要完成它。我来自 svn 阵营,git 对我来说很奇怪;)

原始问题中的特定“询问”帖子“有人可以看看它并确认它做了它应该做的事吗”
,因为我也是 g2core 开发人员,但即便如此,我还是希望 g2core 代码审查请求能够进行到 g2core 网站

正是我的观点,我想因为 Marlin 主要用于 3D 打印并且对 G10 没有用,所以我会在这里提出这个问题得到更好的反馈。正如我所提到的,我在这方面完全是个菜鸟。

我只是搬到了 Marlin(从 grbl),因为我买了一些 TMC5160 并想检查一下。而且似乎工作量不大。

CNCjs 是否适用于更改后的版本?

认为是的。

关于自动位置报告:所以看起来没有简单的单向解决方案。我可能会和半熟的一起生活。目前对我来说已经足够好了。

对不起,如果这听起来很古怪

你没有。谢谢!

我在 Marlin 2.0 中实现了 G10 L20 ()... #549

git 对每个人来说都很奇怪。

我在 Marlin 2.0 中实现了 G10 L20 ()... #549
出纳员 评论了 2020 年 1 月 10 日  

我可以请您张贴一段 g2core JSON 位置报告吗,如果您有方便的话,谢谢。

非常感谢您的辛勤工作。

我在 Marlin 2.0 中实现了 G10 L20 ()... #549

https://github.com/synthetos/g2/wiki/Status-Reports#json-mode-status-report

我没有花太多时间查看更改,因为它们没有以针对特定版本的拉取请求 (PR) 的标准形式呈现。该标准表格有一个很好的理由——它为初级开发人员节省了时间,他们通常非常忙碌并且被许多不同的人的请求压得喘不过气来。使用 PR,您可以轻松准确地看到更改的内容,如果它是好的,只需按一下按钮就可以接受/合并它,只需单击一下就可以对特定行进行评论,等等。

另一个元问题是原始问题发布中的特定“询问”“有人可以看看它并确认它做了它应该做的事情”。要求 CNCjs 开发人员审查 Marlin 代码超出了范围。据我所知,CNCjs 和 Marlin 开发团队之间没有重叠。恰好有一些 g2core 重叠,因为我也是 g2core 开发人员,但即便如此,我希望 g2core 代码审查请求会转到 g2core 站点。

但抛开这些元问题,在我看来,该线程已经演变成三个独立的问题:

  • 通过 G10 支持坐标系
  • “自动”位置报告(实际上是对该问题完全有用的解决方案的一个子集)
  • 工作协调报告

(与 PR 元问题一样,当太多的问题被混为一谈时,人们就很难集中注意力。当太忙的人面对混杂的问题时,往往会疏远。)

一次拿一个:

G10:那么这里的 CNCjs 问题是什么?CNCjs 是否适用于更改后的版本?如果是,问题是什么?如果没有,专门确定如何重现问题的问题将是合适的——但 CNCjs 开发人员处理起来可能很耗时,因为测试它需要我们设置 Marlin 编译环境,编译补丁代码,将其加载到板等。如果此功能成为 Marlin 的标准配置,那可能是值得的,但在明确是否会发生之前,这是“一次性”情况。

“不是真正自动的”位置报告:同样,这是否适用于 CNCjs?我的猜测是它确实有效,因为 CNCjs 只是在它们到达时处理位置报告。没有“预期”与“意外”报告的概念。有一些 CNCjs 代码试图强制 Marlin 发送一些报告,但在接收方,每当位置报告恰好进来时,事情就会更新。也许这个问题应该作为一个公告来表达?

“工作坐标报告”:这被框定为“你能添加 mpos: 和 wpos: 标签,如 g2core”和“什么位置报告应该看起来像最佳的 CNCjs 兼容性”。就目前而言,Marlin 报告与 g2core 报告完全不同,因此尝试将 g2core 语法硬塞进 Marlin 语法中是行不通的。g2core 报告语法使用 JSON 符号高度结构化,而 Marlin 完全是临时的。使用结构化报告格式,您可以轻松添加新功能,因为解析器希望所有内容都被标记。旧版本的代码会简单地忽略任何新标记,这是可能的,因为解析器总是可以分辨什么是标记以及该标记的参数是什么。在不破坏旧代码的情况下更改临时格式非常棘手。由于格式是非结构化的,不同的 UI 代理可能使用不同的策略来识别各种不同的报告并提取不同的字段。您必须非常小心地设计一个新报告,旧的解析器不会将其与先前存在的报告混淆 – 并且仅向旧报告添加字段也会遇到同样的问题。要安全地执行此操作,您需要考虑每一个声称支持 Marlin 的不同 UI 代理——而不仅仅是 CNCjs。

因此,也许您会明白为什么我不喜欢 Marlin 的外部 UI 控件用例。它的串行通信框架在非常基础的层面上设计得很糟糕。对于通过连接的 LCD 面板运行 3D 打印机的用例,Marlin 表现出色。我在我的 3D 打印机上使用它。将 GCode 复制到 USB 记忆棒,将其插入打印机,然后让作业运行数小时,而不必担心连接的 PC 是否会在不好的时间进入睡眠状态。

“为了获得最佳的 CNCjs 兼容性,它们应该是什么样子”的答案是:与当前版本的 CNCjs 的兼容性是没有希望的,因为 CNCjs 根据没有工作位置的现有 Marlin 语法解析 Marlin 报告。对于未来,无论你能说服 Marlin 团队做什么,CNCjs 都可以,前提是 Marlin 团队会发明一些明确的东西(否则会给每个人带来无穷无尽的问题)。Marlin 和 g2core 报告解析器是完全独立的,因此尝试将两者混合是没有帮助的。如果 Marlin 要使用 g2core 样式的 JSON 报告,这在理论上可能会有帮助,但事实上有如此多的 Marlin 副本使用现有的 Marlin 格式使得新的 JSON 格式在实践中没有帮助。

对不起,如果这听起来很古怪——但事实是有很多因素在起作用,我想把它们列出来让你了解问题的深度。维护和增强复杂的软件是一个大问题,并且由于多个单独开发的组件之间的交互而变得更加困难。

你好 Mitch Bradley,我在寻找有关让 CNCjs 中的 Feedrate Override 与 Marlin 一起工作的帮助时遇到了这个线程。我不确定这是 Marlin 还是 CNCjs 的问题或者在哪里发布问题。

请您指点我到正确的站点以查找有关此的任何信息或发布问题好吗?

提前感谢您提供的任何帮助。

周杰伦

我在 Marlin 2.0 中实现了 G10 L20 ()... #549

It appears to me that cncjs already has feedrate overrides for Marlin. There is this UI code in cncjs/src/app/widgets/Marlin/Overrides.jsx:

        <div className={styles.overrides}>
            {!!ovF && (
                <DigitalReadout label="F" value={ovF + '%'}>
                    <RepeatButton
                        className="btn btn-default"
                        style={{ padding: 5 }}
                        onClick={() => {
                            controller.command('feedOverride', -10);
                        }}
喜欢 (0)