A web-based interface for CNC milling controller running Grbl, Marlin, Smoothieware, or TinyG.
CNCjs

CNCjs 是一款功能完整的基于 Web 的 CNC 控制器界面,支持运行 Grbl、Marlin、Smoothieware 或 TinyG。
如需更完整的介绍,请参阅 Wiki 页面的 介绍 部分。

功能
- 支持的控制器
- 适用于 Linux、Mac OS X 和 Windows 的桌面应用
- 6 轴数显(DRO)
- 刀具路径 3D 可视化
- 同时与多个客户端通信
- 针对设备宽度小于 720px 的小屏显示提供响应式视图
- 可自定义工作区
- 自定义组件(自 1.9.10 起)
- 自定义 MDI(Multiple Document Interface)命令按钮(自 1.9.13 起)
- 我的账户
- 命令
- 事件
- 键盘快捷键
- 轮廓 ShuttleXpress
- 多语言支持
- 监视目录
- 换刀(自 1.9.11 起)
- Z 轴探针
自定义小部件
- cncjs-widget-boilerplate - 为 CNCjs 创建自定义小部件。
手持控制器
模板代码
- cncjs-pendant-boilerplate - 开发 cncjs 手持控制器的最简示例。
现有手持控制器
- cncjs-pendant-keyboard - 一款适用于 CNCJS 的简易手持控制器(使用无线键盘或 usb)。
- cncjs-pendant-numpad - 一款适用于 CNCJS 的简易手持控制器(使用无线数字键盘或 usb)。
- cncjs-pendant-lcd - 用于 Raspberry Pi 触摸显示屏的 CNCjs 网页控制台。
- cncjs-pendant-ps3 - 用于 CNCjs 的 Dual Shock / PS3 蓝牙远程手持控制器。
- cncjs-pendant-raspi-gpio - 用于 CNCjs 的简易 Raspberry Pi GPIO 手持控制器。
- cncjs-pendant-alexa - 通过自定义 Alexa 技能实现语音点动控制(“Alexa, ask mill x plus 20”),支持各轴行程限制和受状态约束的点动。
平板界面
- cncjs-pendant-tinyweb - 适用于小型 320x240 LCD 显示屏的精简网页控制台。

- cncjs-shopfloor-tablet - 为 cncjs 打造的简化 UI,针对生产(车间)环境中的平板电脑进行了优化。
浏览器支持
![]() Chrome |
![]() Edge |
![]() Firefox |
![]() IE |
![]() Opera |
![]() Safari |
|---|---|---|---|---|---|
| 支持 | 支持 | 支持 | 不支持 | 支持 | 支持 |
支持的 Node.js 版本
| 版本 | 支持级别 |
|---|---|
| <= 10 | 不支持 |
| 12 | 支持 |
| >= 14 | 推荐 |
快速开始
Node.js 安装
推荐使用 Node.js 14 或更高版本。你可以安装 Node Version Manager 来管理多个 Node.js 版本。如果你已安装 git,只需克隆 nvm 仓库,并检出最新版本:
git clone https://github.com/creationix/nvm.git ~/.nvm
cd ~/.nvm
git checkout `git describe --abbrev=0 --tags`
cd ..
. ~/.nvm/nvm.sh
将这些行添加到您的 ~/.bash_profile、~/.bashrc 或 ~/.profile 文件中,以便在登录时自动加载:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
安装完成后,您可以使用以下命令选择 Node.js 版本:
nvm install 14
nvm use 14
也建议将 npm 升级到最新版本。如需升级,请运行:
npm install npm@latest -g
安装
请以非 root 用户身份安装 cncjs,否则 serialport 模块可能在 Raspberry Pi 等某些平台上无法正确安装。
npm install -g cncjs
如果需要使用 sudo 或 root 权限安装 cncjs,请指定 --unsafe-perm 选项,以便以 root 账户运行 npm。
sudo npm install --unsafe-perm -g cncjs
查看 https://github.com/cncjs/cncjs/wiki/Installation 了解其他安装方法。
升级
运行 npm install -g cncjs@latest 安装最新版本。要查询版本,请使用 cncjs --version。
用法
运行 cncjs 启动服务器,并访问 http://yourhostname:8000/ 查看 Web 界面。向 cncjs 传递 --help 以查看更多选项。
pi@rpi3$ cncjs -h
Usage: cncjs [options]
Options:
--version output the version number
-p, --port <port> Set listen port (default: 8000)
-H, --host <host> Set listen address or hostname (default: 0.0.0.0)
-b, --backlog <backlog> Set listen backlog (default: 511)
-c, --config <filename> Set config file (default: ~/.cncrc)
-v, --verbose Increase the verbosity level (-v, -vv, -vvv)
-m, --mount <route-path>:<target> Add a mount point for serving static files
-w, --watch-directory <path> Watch a directory for changes
--access-token-lifetime <lifetime> Access token lifetime in seconds or a time span string (default: 30d)
--allow-remote-access Allow remote access to the server (default: false)
--controller <type> Specify CNC controller: Grbl|Marlin|Smoothie|TinyG|g2core (default: '')
-h, --help output usage information
Examples:
$ cncjs -vv
$ cncjs --mount /pendant:/home/pi/tinyweb
$ cncjs --mount /widget:~+/widget --mount /pendant:~/pendant
$ cncjs --mount /widget:https://cncjs.github.io/cncjs-widget-boilerplate/v1/
$ cncjs --watch-directory /home/pi/watch
$ cncjs --access-token-lifetime 60d # e.g. 3600, 30m, 12h, 30d
$ cncjs --allow-remote-access
$ cncjs --controller Grbl
与其为 --watch-directory、--access-token-lifetime、--allow-remote-access 和 --controller 传递命令行选项,你可以创建一个包含以下 JSON 格式配置的 ~/.cncrc 文件:
{
"mountPoints": [
{
"route": "/pendant",
"target": "/home/pi/tinyweb"
},
{
"route": "/widget",
"target": "https://cncjs.github.io/cncjs-widget-boilerplate/v1/"
}
],
"watchDirectory": "/path/to/dir",
"accessTokenLifetime": "30d",
"allowRemoteAccess": false,
"controller": ""
}
为排查故障,请运行:
cncjs -vvv
配置文件
配置文件 .cncrc 包含与 cncjs 命令行选项等效的设置。该配置文件存储在用户的主目录中。要确定主目录的实际位置,请执行以下操作:
-
Linux/Mac
echo $HOME -
Windows
echo %USERPROFILE%
示例配置文件可在此处查看。
文件格式
详细解释请参阅 https://github.com/cncjs/cncjs/issues/242#issuecomment-352294549 。
{
"ports": [
{
"path": "/dev/ttyAMA0",
"manufacturer": ""
}
],
"baudrates": [115200, 250000],
"mountPoints": [
{
"route": "/widget",
"target": "https://cncjs.github.io/cncjs-widget-boilerplate/v1/"
}
],
"watchDirectory": "/path/to/dir",
"accessTokenLifetime": "30d",
"allowRemoteAccess": false,
"controller": "",
"state": {
"checkForUpdates": true,
"controller": {
"exception": {
"ignoreErrors": false
}
}
},
"commands": [
{
"title": "Update (root user)",
"commands": "sudo npm install -g cncjs@latest --unsafe-perm; pkill -f cncjs"
},
{
"title": "Update (non-root user)",
"commands": "npm install -g cncjs@latest; pkill -f cncjs"
},
{
"title": "Reboot",
"commands": "sudo /sbin/reboot"
},
{
"title": "Shutdown",
"commands": "sudo /sbin/shutdown"
}
],
"events": [],
"macros": [],
"users": []
}
文档
示例
示例 目录下有多个 *.gcode 文件。你可以使用 GCode 组件加载 GCode 文件并进行试运行。
如果你没有 CAM 软件,可以试用 jscut 从 *.svg 创建 G-Code。它是一个运行在浏览器中的简单 CAM 软件包。
可在 http://jscut.org/jscut.html 查看在线演示。
贡献
请使用 GitHub issues 提交需求。
欢迎提交 Pull requests!了解如何参与贡献。
本地化
你可以协助将 app 和 server 两个目录中的资源文件从英语翻译成其他语言。查看本地化指南了解如何开始。如果你不熟悉 GitHub 开发,可以创建 issue或将你的翻译发送至 cheton@gmail.com。
| Locale | 语言 | 状态 | 贡献者 |
|---|---|---|---|
| cs | 捷克语 | ✔ | Miroslav Zuzelka |
| de | 德语 | ✔ | Thorsten Godau, Max B. |
| es | 西班牙语 | ✔ | Juan Biondi, hasecilu |
| fr | 法语 | ✔ | Simon Maillard, CorentinBrulé |
| hu | 匈牙利语 | ✔ | Sipos Péter |
| it | 意大利语 | ✔ | vince87 |
| ja | 日语 | ✔ | Naoki Okamoto |
| nb | 挪威语 | ✔ | Stian Kristensen |
| nl | 荷兰语 | ✔ | dutchpatriot |
| pt | 葡萄牙语 | ✔ | Cheton Wu |
| pt-br | 巴西葡萄牙语 | ✔ | cmsteinBR |
| ru | 俄语 | ✔ | Denis Yusupov |
| uk | 乌克兰语 | ✔ | khvalera |
| tr | 土耳其语 | ✔ | Ali GÜNDOĞDU |
| zh-cn | 简体中文 | ✔ | Mandy Chien, Terry Lee |
| zh-tw | 繁體中文 | ✔ | Cheton Wu |
捐赠
如果您想支持本项目,可以通过 PayPal 进行捐赠。感谢!
贡献者
本项目的存在,得益于所有贡献者的付出。[参与贡献].
支持者
感谢所有支持者!🙏 [成为支持者]
赞助商
通过成为赞助商来支持本项目。您的 Logo 将显示在这里,并附带上您网站的链接。[成为赞助商]
许可证
本项目根据 MIT License 授权。
Introduction
基于网络的界面,适用于运行Grbl、Marlin、Smoothieware或TinyG的数控铣床控制器。【此简介由AI生成】








