Contact me: hankecnc@gmail.com

改进的自动换刀器支持 #437

推推 grbl 3年前 (2023-02-02) 530次浏览
打开
12 个任务中的第 4 个
斯科特莱德 打开了这个问题 2019 年 4 月 1 日 · 35条评论
打开
12 个任务中的第 4 个

改进的自动换刀器支持#437

斯科特莱德 打开了这个问题 2019 年 4 月 1 日 · 35条评论

注释

改进的自动换刀器支持 #437

描述

我希望 cncjs 能够支持以下自动换刀场景:

给定一个大致如下所示的 gcode 文件:

T1 M6
... (milling goes here)
T3 M6
...
T4 M6
...
T1 M6
...

假设 CNC 带有 ATC 和适当的换刀宏,cncjs 应该能够:

  1. 通过从插槽加载工具来处理第一条换刀线在 3D GCode 查看器 #1中显示带有 G02(顺时针)和 G03(逆时针)的圆弧(从 T~ 命令中提取的插槽编号,由宏计算的插槽位置)。
  2. 通过将刀具卸载到槽中来处理第二次换刀在 3D GCode 查看器 #1中使用 G02(顺时针)和 G03(逆时针)显示圆弧,记住它来自第一次换刀的位置,然后从槽中加载刀具开发 #3
  3. 按预期处理第三个和第四个工具更改。

这仍然不足以提供出色的 ATC 体验——至少,我们需要在铣削开始之前弄清楚如何处理换刀器中的任何刀具,并且我们需要能够处理中途中止通过铣削而不会完全丢失 WRT 工具,但这是一个开始。

版本

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

你如何安装CNCjs?

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

数控系统

  • Grbl
  • 冰沙
  • TinyG/g2核心

硬件

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

操作系统

  • 不适用
  • 视窗
  • 苹果
  • Linux
改进的自动换刀器支持 #437

关于我正在尝试做的事情的一些背景知识:我正在努力让 ATC 为我工作。我有一个 AMB FME-W DI 主轴(基本上是旧 1050W Kress 的更新版本,具有 0-10V 速度控制和工厂工具更换器)连接到 Grbl 驱动的 CNC。AMB 工具更换器由 2 条气动管路驱动,一条用于解锁工具,另一条用于弹出工具并清除灰尘。

我有一个 Arduino 位于我的 Grbl 控制器和一对将空气发送到 AMB 主轴的 ATC 的气动螺线管之间。目前,换刀器 Arduino 会观察 Grbl 的主轴速度、主轴反转和冷却液管线(Grbl 的唯一输出),并根据这些决定何时弹出。它工作得很好,但它永远不会是防弹的,因为工具更换系统现在根本无法向 Grbl 或 CNCjs 提供任何反馈。所以像https://www.youtube.com/watch?v=7cLCOPLvp_g这样的事情会发生。

我想找到扩展 CNCjs 的方法,以便能够理智地实施工具更换器并从整个过程中获得合理的用户体验。其中一部分几乎肯定会涉及找到一种从 ATC 控制器向我的 CNCjs 工具更换宏提供反馈的好方法,以便控制器可以说“插槽 5 已满”或“工具尚未弹出”之类的话。由于 CNCjs 宏现在没有任何循环或逻辑结构,并且 CNCjs 没有任何明显的方式与其他非 gcode 设备对话,这应该很有趣。

改进的自动换刀器支持 #437

太棒了,这个路由器都是由 grbl 驱动的吗?

改进的自动换刀器支持 #437

太棒了,这个路由器都是由 grbl 驱动的吗?

路由器都是grbl。在位于 grbl 板和主轴之间的 Arduino 上运行了一些额外的工具更换逻辑和软件。它控制继电器来控制驱动工具更换器的气动螺线管,继电器打开和关闭主轴电源,以及一堆或多或少的可选组件,让我的生活更轻松,比如 LCD 显示器,所以我可以查看它正在运行的 RPM。例如,刀具更换代码包括旨在防止其在主轴旋转时弹出刀具的安全功能。就是几百行代码。

如果有兴趣,我可以将其打包并在某个时候将其开源,但作为示例比作为实际代码使用更有用。

改进的自动换刀器支持 #437
  1. 向宏添加循环和逻辑。我不确定如何最好地做到这一点,但有很多现有技术——这看起来很像大多数 HTML 模板系统。我不知道现有的节点库是否适合 CNCjs。以前有没有人研究过这个,或者有强烈的意见?
  2. 添加从宏内部直接与工具更换器硬件交互的能力。这看起来很简单,设计明智。编写一个特定于 ATC 的库,在 CNCjs 中实例化它的一个对象,然后将它传递到宏上下文中。所以你可以这样说%SLOTEMPTY = myAtc.slotEmpty(SLOT)。显然,推广这一点并找到一种合理的方式将其他库公开到宏中是很重要的。
  3. 添加gcode直接触发换刀宏的功能。至少,应该可以指定一个特定的宏来处理 M6。我认为这将是对当前事件代码的直接扩展。理想情况下,给定一个成熟的工具更改系统,应该可以运行带有工具更改的 gcode 作业,而无需在点击“运行”后进行任何单击。添加更多通用 gcode 宏支持(固定循环等)超出范围。
改进的自动换刀器支持 #437

@scottlaird, 非常感谢。我正在改装一台氧燃料数控机床,但它是一台宽 5 米、长 10 米的大机器。
所以我的想法是在上面放一个主轴,也用于在我们生产的零件上钻孔或铣孔,我还想设置零件的自动夹紧,所以这就是我感兴趣的原因,我准备好了帮忙。我唯一的问题是,尽管我知道如何编程并且知道如何维护机器,但我从来没有做过那样的事情。没有什么比这更困难的了,但是
听到已经做过并能给出好的建议的人的意见总是好的。
抱歉有点跑题,但据我所知,我有交流伺服驱动器,我想我需要使用 GRBL 的修改版本来驱动它们。但总的来说,我已经准备好帮助改变工具。

改进的自动换刀器支持 #437

对于这么大的机器,我会认真考虑像 UCCNC 这样的商业控制。这样一台机器的崩溃可能会以各种方式造成昂贵的代价。CNCjs 非常适合业余爱好者和轻型商业用途,但它在软件方面有很多“移动部件”,其中许多变化很快,因此无法从深入和长期测试中获益。在我的台式 Taig 研磨机上,我有 2 Nm 闭环步进电机,每个步进电机可以拉动 180W。他们的力量足以让我害怕。对于像您的机器一样大而强大的任何东西,我想我会想要紧密集成的软件,从而减少组件之间的通信延迟,并且经过很好的测试。

改进的自动换刀器支持 #437

我想为我的下一台 VMC 机器使用三相工业伺服电机。我们可以将伺服反馈到 cncjs 或 g2core 吗?我认为反馈有两个部分。一种是伺服驱动器正在运行或处于报警状态等广泛的反馈。另一种是读取和显示实际移动的坐标而不是发送的脉冲……
它们中的任何一个都可以通过任何变通方法实现吗?我准备在这个完全闭环系统上投入时间。顺便说一句,我也想尝试一下绝对伺服,以摆脱限位开关或将它们用作二级安全装置。

改进的自动换刀器支持 #437

这有点偏离了手头的话题;伺服系统与工具更换没有密切关系:-)

一般而言,Grbl 不直接支持伺服系统或任何类型的闭环电机,而且确实没有办法在现有硬件上扩展它。

然而,一些驱动程序可以使伺服系统看起来像步进电机,反之亦然。例如,看看 Leadshine 的 CS-Dxxx 闭环步进驱动器——它们同时支持“步进和方向”接口(基本上,它看起来像步进器)和“cw/ccw”接口(它看起来像伺服) . 同样,Leadshine 的许多伺服驱动器也可以支持步进和方向,因此可能可以Grbl 驱动它们,但我不知道考虑到它们的成本,这是否有意义。

考虑在https://github.com/gnea/grbl上询问通用 Grbl 问题?

改进的自动换刀器支持 #437

我在我的磨机上集成了(驱动器和电机在一个包中)闭环步进器,连接到支持警报输入的 g2core。我以每件约 110 美元的价格买到了它们。他们要么走完全程而不失步,要么进入警报状态。

改进的自动换刀器支持 #437

谢谢@scottlaird的答案。抱歉在错误的线程中提出问题。顺便说一句,工业伺服器还支持脉冲和方向策略。所以它会开箱即用。唯一关心的是接收对控制器的反馈。我现在将为此开始一个新线程。

改进的自动换刀器支持 #437

谢谢@MitchBradley分享您的经验。我会考虑的。然而,我的想法是使用像西门子或松下这样的全闭环伺服系统,这将消除许多通往可靠机器的障碍。我们将在新线程上讨论更多,以免破坏工具更换器的主要话题 :)

改进的自动换刀器支持 #437
合作者

你好@scottlaird

CNCjs v1.9.18发布。现在您可以在不丢失所有值的情况下声明全局变量。

这里有些例子:

%global.startTime = Date.now()
%global.activeTool = Number(tool) || 0
%global.state.cx = (xmax + xmin) / 2
%global.state.cy = (ymax + ymin) / 2
%global.state.cz = (zmax + zmin) / 2
%global.state.dx = Math.abs(xmax - xmin) || 0
%global.state.dy = Math.abs(ymax - ymin) || 0

要检查当前值,您可以使用内联注释来输出全局变量,如下所示:

(global=[JSON.stringify(global)])

此处列出了所有受支持的 JavaScript 全局对象。

export const GLOBAL_OBJECTS = {
    // Function properties
    parseFloat,
    parseInt,

    // Fundamental objects
    Object,
    Function,
    Boolean,

    // Numbers and dates
    Number,
    Math,
    Date,

    // Text processing
    String,
    RegExp,

    // Structured data
    JSON,
};
改进的自动换刀器支持 #437
合作者

使用新增强的 evaluate-expression library,可以提供与外部库通信的函数接口,因此您可以创建一个对象实例来返回状态或与外部硬件交互。

我会看看是否有机会这样做。命令行选项之类的东西可用于传递带有导出模块的 JavaScript 文件,该文件允许您将宏与底层系统连接起来。

改进的自动换刀器支持 #437
合作者

据我所知,@ahedderich去年他开始了添加自动换刀器支持的工作,拉取请求中所有更改的文件都可以在这里找到: master...ahedderich:tool-changer

大家可以先看看他做了什么,如果可行我会在以后的版本中合并他的代码。

改进的自动换刀器支持 #437

谢谢。我现在正在连接到我的 CNC 的 Raspberry Pi 上构建 1.9.18。这需要一段时间 :-)。我应该弄清楚如何交叉编译它。

改进的自动换刀器支持 #437
贡献者
米奇布拉德利 评论了 2019 年 4 月 5 日  

尽管进行了多次尝试,但我未能在运行我的工厂的 Pi Zero 上完全构建最新版本的 CNCjs。它总是在 build-prod-web 步骤中耗尽内存并死掉。
然而,事实证明(如@cheton已确认)代码的 Web 部分是独立于平台的,因此可以从另一台构建机器上复制它。所以我所做的是在 Pi 上运行“npm run build-prod-server”步骤,然后在 PC 上构建所有内容,然后将 dist/cnc/web 从 PC 复制到 Pi。
即使您成功构建了完整的 Pi,由于 PC 和 Pi 之间的极端速度和内存差异,混合构建方法要快得多。
这是食谱:

  • 在 Pi 上:
    • npm 运行干净
    • npm 运行 prebuild-prod
    • npm 运行构建产品服务器
    • 在 /usr/local/bin 中创建名为“cncjs”和“cncjs-server”的符号链接,引用 /bin/cncjs。

注意:如果您使用的是 cncjs-1.10 之前的版本,则必须说build-prod-app而不是上面的build-prod-server

  • 在 PC 或 Mac 上:
    • npm 安装
    • 将 dist/cnc/web/* 复制到 Pi(位于 /dist/cnc/web)

上述流程避免了在树莓派上运行eslint、stylint、test等耗时且冗余的操作。

喜欢 (0)