评论
你好!我正致力于类似的目标,为此我一直在 cncjs 项目中生成文档。 我的策略是从复制“WorkflowControl”小部件的功能开始,所以我一直在努力完成它。它是可视化工具小部件左上角的一小组按钮。当在 WorkflowControl 小部件上触发事件(包括文件加载和上传事件)时,它会调用来自 Visualizer 小部件的函数(在 src/widgets/Visualizer 的 index.jsx 中定义,并在其“actions”属性中传递给 WorkflowControl)。Visualizer 有一个类“Controller”的实例,其中大部分定义在单独的存储库“cncjs-controller”中。Visualizer 小部件使用 Controller 将事件(带有数据)发送到服务器。事件列表在 cncjs-controller/src/controller.js 中定义。 我仍在研究 Controller 类和其他特定控制器类(GrblController、MarlinController 等)之间的关系(如果有的话)。我还在研究 Visualizer API 接口的细节。它确实在其操作中定义了一个名为“loadGCode”的函数,该函数似乎加载了 gcode 的 3d 视图。调用此函数来处理控制器事件“gcode:load”。 所以我的粗略总结是
这很粗糙,但这就是我要做的。我会边走边添加更多。 |
只是一个警告,当我进一步阅读时,我想知道 Visualizer 是否正在以旧的方式做事。还有cncjs/src/app/api/index.js。仍在努力完成它,但我想知道它是否是一种新的“标准化”API 方式来处理向服务器发送内容而不是使用 Controller 实例。只是一个想法; 我仍在努力通过它。 |
嗨蒂莫西,谢谢你的回复。您能否指导我查看您编写的文档或提供一些代码示例?我还注意到位于那里的 API 端点,但还没有找到调用这些端点的方法 |
我正在API 文档中编写文档,到目前为止它还处于早期阶段,反映了我早期对 WorkflowControl 小部件的探索。我还没有为 wiki 贡献任何关于服务器 API 的文档。在接下来的几周里,我将贡献更多内容。 我没有任何代码示例。目前,您最好的例子是代码库本身。您可能已经发现,cncjs 服务器 API 是在目录 cncjs/src/server/api 中的文件中定义的。cncjs 代码库为该服务器 API 使用客户端库,在 cncjs/src/app/api/index.js 中定义。要查找使用 API 的代码示例,可以搜索对客户端库中定义的函数的引用。例如 cncjs/app/lib/user.js 从 ‘app/api’ 导入 api,然后在第 7 行调用 api.signin。另一个示例位于 cncjs/src/app/widgets/Axes/index.js 的第 595 行: |
这些都没有出现在维基页面的目录中,其他地方是否有指向这些主题的链接? |
@timothy-godfrey我实际上已经设法使用 Axios 访问这些 API 来创建我的帖子并获取请求。花了一些时间来了解 API 端点需要什么,但之后它变得非常简单。对于控制器 API,您的意思是发送 controller.command(),因为我也通过在小部件中创建控制器实例来实现这一点,然后可以在需要时运行这些命令,如启动和停止 GCode |
@timothy-godfrey很乐意用我所做的为您的文档做出贡献,因为它可能会帮助将来尝试做类似事情的其他人 |
@nickm324如果您只想阅读文档,那么我之前的帖子中的链接就可以使用。但是,是的,wiki 中的导航有点隐藏。侧边栏“目录”是手动编辑的(我认为),可能无法反映 wiki 的当前状态。如果您点击出现在目录上方的“页面”,您将看到按字母顺序排列的完整 wiki 页面列表(如果您错过了,底部有一个按钮可以进一步扩展列表) . 页面列表顶部的搜索过滤器非常方便。 @Davies-Cavies我对文档的贡献是相当高层次的,缺乏函数/端点的细节。如果您想贡献详细的功能文档或代码示例,我相信将来其他人会发现它很有帮助。 |
这是否意味着客户端 Web-UI 可以仅使用 API 制作,并且不需要使用“cncjs-controller”库?我还想为我的机器制作一个应该“轻量级”的用户界面。你能建议最好的方法吗?我可以在不使用任何库的情况下直接向服务器发送 socket.io 命令吗?我不是软件人,但你的小提示可以给我一个推动。顺便说一句,我擅长 html、css 和 JS(初学者)。 |
@karoria您希望在轻量级 UI 上显示什么样的信息?我们处理这个问题的方法是将一个小部件(查看 CNCjs 小部件样板的文档)安装到运行机器的 CNCjs 版本。这允许创建一个可以直接与 cncjs 程序交互的控制器实例。该小部件是用 React(html 和 Javascript 的组合)编写的。您可以使用 Socket.io 从您的 UI 或服务器与该小部件进行通信,具体取决于您想要做什么 |
这是一个功能齐全的吊坠,我选择了布局。但我想知道,如果 UI 可以通过 socket.io 进行通信,为什么迄今为止所有的吊坠都使用控制器库?顺便说一句,我的服务器和客户端部分都将在 RPi4 上运行。
|
@karoria您具体要访问哪些 API?例如,尝试将 GCode 上传到该 API,我使用 Axios Node.js 模块生成我的发布请求。您可以在 Cncjs 程序的服务器代码中找到所有的 api 代码,这些代码向您展示了发布所需的参数。我也相信只要格式正确,您就可以使用控制器命令上传 gcode。 控制器库可以很好地执行诸如启动和停止程序之类的事情,如前所述,最好创建一个在 CNCjs 代码中多次演示的控制器实例,然后添加必要的控制器事件,这也在中进行了演示代码。我发现分析可视化器小部件一直很好,因为它处理启动和停止程序以及上传 gcode。 |
@Davies-Cavies |
描述
我正在寻找一个可以安装到 CNCjs 的小部件,它可以直接将 GCode 文件加载到 CNCjs,以及启动和停止程序并访问剩余时间等作业参数……我已经看到有API 可以做到这一点,并且已经在代码中找到了端点,但正在努力将它们实现到我的小部件中。我正在使用这个小部件与外部源进行通信,因此对于这个问题,我假设我已经在小部件中准备好 gcode 文件以供上传。
我对 Javascript 编程很陌生,所以如果这看起来很简单,我深表歉意。任何帮助将不胜感激。
版本
你如何安装CNCjs?
数控系统
硬件
操作系统