开源改变世界

B-cnc的进一步发展。 #1191

推推 grbl 3年前 (2023-02-02) 202次浏览
关闭
sfinexer 打开了这个问题 2019 年 3 月 14 日 · 14条评论
关闭

B-cnc的进一步发展。#1191

sfinexer 打开了这个问题 2019 年 3 月 14 日 · 14条评论

评论

B-cnc的进一步发展。 #1191
贡献者
斯芬克斯 评论了 2019 年 3 月 14 日  

我建议考虑 bCNC 2.0 的版本
我认为我们需要重组程序。
我有一些我认为可能对进一步开发有用的建议。

  1. 在程序的某个内核中分配主要功能。
  2. 这些函数应该在单独的代码中单独列出,例如C++,以提高执行速度,并在单独的库中结束。
  3. 打开一个大的G代码文件应该使用多线程;为此,必须放弃 cnc 文件打开代码中的 ADDITION 选项。相反,我想运行两个(或更多)独立的线程,将它们的文件部分添加到 cnc 命令结构中。
  4. 您必须输入热键以及配置它们的选项。

这是我对B-cnc发展的愿景。

不幸的是,我在 Python 方面并不那么强……我不了解这种编程语言的意识形态及其抽象。

B-cnc的进一步发展。 #1191 哈维 补充道 研究和代码清理 需要更多思考的长期想法标签 2019 年 3 月 14 日
B-cnc的进一步发展。 #1191
合作者
哈维 评论了 2019 年 3 月 14 日  

这是我对B-cnc发展的愿景。

我对 bCNC 也有远见(顺便说一句,与您的愿景非常相似)。那不是问题。问题是谁来写代码。

在程序的某个内核中分配主要功能。

是的。但这将是很多工作。

打开一个大的G代码文件应该使用多线程;

这不是它的工作原理。多线程根本无助于提高速度。我也有 4 个 CPU,但是 bCNC 太慢了,4 倍的加速是不够的。加载文件并不慢。处理和显示很慢。另外我认为像 tkinter canvas 这样的东西不能同时从多个线程访问,因为它不是线程安全的并且会导致崩溃。

如果您使用在 C 或 ASM 中优化的 python 库处理数据并且可以自动执行多线程,则无需使用多线程。

但我同意在某些情况下我们应该使用多线程。例如。:

  • GUI 应该有它自己的线程,所以它永远不会停止响应按钮点击
  • OpenGL visualiser 应该也有它自己的线程,这样它在旋转大对象时不会阻塞 UI
  • CAM 处理应该在单独的线程中完成。也许每个 g 代码块都可以单独处理。

这些函数应该在单独的代码中单独列出,例如C++,以提高执行速度,并在单独的库中结束。

是和不是。有现成的用 C 编写的 python 库,我们可以使用它们来加速一切,而无需编写它们。

  • OpenCAMlib(CNC相关几何操作)
  • Shapely,Sympy.geometry(通用几何)
  • Numpy、Scipy(处理大量的数学计算)
  • Vispy、Glumpy、Mayavi、PyQT 图形、GLVis、ModernGL(GPU 加速可视化)
  • GTK3(带有所见即所得编辑器和独立于代码的 UI 定义的便携式 GUI)

这些是一些现成的 python 库,可用于显着加速 bCNC。这就是现代 python 软件的工作原理:

  • 您将文件加载到“numpy array”,这是 python 对象,但所有数据都存储在 C 数据结构中
  • 您使用用 C 编写的 numpy 和 scipy 程序操作数据
  • 您使用一种基于 OpenGL 的可视化工具,它可以直接从 numpy 数组中读取和 3D 显示数据(同样没有数据被 python 代码实际处理,一切都在 C 中)
  • 如果你想,例如。做几万点的view 3D旋转,用numpy还是可以的,比python快很多。
  • 然后你要保存 g 代码文件,所以你使用 python 代码读取 numpy 数组。

这意味着您仅在某些特定情况下使用 python 代码,例如解析、生成和流式传输 g 代码。而其他一切都在 C 中完成。这些库也经过高度优化,其中一些甚至能够在多个 CPU 上自动处理数据。

问题是要实现所有这些,我们可以开始全新的项目。因为要做到这一点,我们需要重写 100% 的 bCNC。此外,OpenGL 可视化器不支持 Tkinter,因此它非常依赖 GTK3 端口。所以我想我会开始并行开发这样的项目。

我不理解这种编程语言的意识形态及其抽象。

Python 的理念是它很容易被完全的初学者使用。因此,除非你用 C 编写所有内容并从 python 调用它,否则它的速度慢得令人难以置信,而且完全没用。适合简单的任务,无法用于任何大的任务。

如果你有使用循环的 python 代码,无论如何它都会很慢。甚至有一些方法可以编译 python 以使其更快(例如 pypy),但我已经尝试过了,但 bCNC 一点也不快。在某些测试中,它甚至更慢。

B-cnc的进一步发展。 #1191
贡献者作者

我知道这项工作很棒,有时也很困难。
我自己有一些很老的程序,它们在 delphi 上。由于它们的复杂性,没有理由用相同的 C++ 重写它们。
我的程序以不同的模式对热力和水力对象进行建模。例如,核反应堆的活性区。有我的C++程序,没有UI的纯计算(GUI/UI是独立的第三方程序)

但是一开始,正如您所说的那样,有必要加快显示速度。

B-cnc的进一步发展。 #1191
合作者

反正。我不明白这个 github 问题的意义,除非你有时间贡献你提议的改变……