这是 Studio 1.0.2 的手册,不是最新版本。 最新版本的手册

文档 1.0.2 接口参考

用发送软件连同匠自研内核

这一页写给想用自己的发送软件(bCNC、gSender 或 Universal G-code Sender,下称 UGS)、而不是用 Studio 来开 MC-1 的人。MC-1 的控制器是同匠自研内核(兼容 Grbl 1.1 串口协议,带现在的发送软件用的那些扩展),所以这几个发送软件都能用,只是要注意下面几处设置和限制。

这里写的都在 MC-1 的数字孪生上实测过;孪生跑的是和机床同一份控制器代码。真机上的核对还没做。测过的版本:bCNC 0.9.16、gSender 1.6.4、UGS Platform 2.1.27。

连接

连哪里怎么连
Studio 窗口里的孪生Studio 在 localhost:2323 等发送软件,一次只接一个,只对本机开放(启动 Studio 时加 --bind any,局域网里才连得上)。bCNC:端口填 socket://localhost:2323。gSender:选以太网,地址 127.0.0.1,端口 2323。UGS:tcp://localhost:2323。
MC-1 本身原生 USB:控制器在电脑上是一个串口(Windows 上是 COM*n*),选它就行。原生 USB 不看波特率,有的发送软件非要填一个,填 115200 即可。

控制器怎么报自己:

  • 欢迎行是 Grbl 1.1f ['$' or '$HELP' for help],和经典的 Grbl 控制器一样。发送软件靠以 “Grbl” 开头的欢迎行认出控制器重启了(见第 3 节)。
  • 名字在 $I 的回答里:[VER:Twinwright 1.1f.…]、[FIRMWARE:Twinwright]。会显示固件名的发送软件显示的是 “Twinwright”。

发送软件里选哪种固件

发送软件设置原因
bCNC 0.9.16控制器选 GRBL1bCNC 不读固件的名字。测的是 GRBL1。
gSender 1.6.4默认固件选 Grbl 以外的那一项gSender 靠 $I 里的名字认固件。我们的控制器报的是自己的名字,gSender 就按你设的默认固件工作。测的是那一项。
UGS 2.1.27固件选 GRBL测过:设置、跑程序、报警和复位后回零都正常,复位后不用多按 Soft Reset(第 3 节)。UGS 的另一种固件选项也能用,但复位后要多按一次 Soft Reset;点动只在那一项下测过。

报警和复位以后

  • 急停。 MC-1 的急停会断开动力接触器。松开急停,按机床上的启动按钮,再在发送软件里复位、回零。不按启动,报警(ALARM:10)清不掉。
  • ALARM:11(要回零)。 回零($H)。用 $X 解锁会被拒绝(error:46)。
  • ALARM:2(软限位)。 程序要求的移动超出了行程。回零以后 Z 停在行程的最高处(机床坐标 Z 0),比它再高的移动,比如 G53 G0 Z5,都会报 ALARM:2。复位,再回零或解锁。
  • bCNC 任何复位以后都能恢复:它认出以 “Grbl” 开头的欢迎行,丢掉复位前还在路上的那些行,所以 $H 发得出去。
  • bCNC 按“停止”之后。 bCNC 的停止是先进给保持、再复位。复位以后 bCNC 把停止前的模态(坐标系、单位、刀长补偿)用一两行发回控制器,有几种情况控制器会拒收,和别的 Grbl 控制器一样:刀长补偿 G43.1 生效时,那一行报 error:24(bCNC 头一次停止以后自己会补发一行 G43.1Z…,所以从第二次停止起每次都会遇到);在 G80 下,G43.1Z… 报 error:31;缩放 G51 生效时,G51:X 报 error:1。出了错,后面的 G 代码行都回同一个错,直到一个空行、一条 $ 命令或者复位。所以按了停止以后,先用 $G 和 $# 看坐标系、单位和刀长补偿对不对,再点动或者续跑。对不上就重新设零、重新量刀长(2026-10-06 在孪生上测过)。
  • UGS 选另一种固件时。 复位如果不是 UGS 自己发的——比如从 Studio 的窗口复位,或者控制器自己重启——回零之前要在 UGS 里再按一次 Soft Reset,不然按 Home 没有反应。原因是 UGS 选那种固件时,只把另一种欢迎行当作重启。用 UGS 自己的 Soft Reset 复位就没有这个问题。MC-1 本身没有复位输入、只有一个 USB 主机,机床上很少遇到这种复位。UGS 的固件选 “GRBL” 就没有这个问题:这种复位以后 UGS 显示 CONNECTING,接着直接按 Home 就能回零(2026-10-06 在孪生上测过)。

换刀(M6)

三个发送软件在默认设置下,都不会让 MC-1 换刀并量新刀:

发送软件默认的做法怎么办
bCNC跳过每一个 M6 行:下一把刀的活用主轴上原来那把刀切。换刀方式设成手动换刀(刀长补偿),在 MC-1 的对刀仪上量刀(第 5 节)。
gSender换刀方式是 “Ignore”:M6 当注释发出去,程序不停。换刀方式设成固定对刀仪(Fixed Tool Sensor),位置是 MC-1 的对刀仪(第 5 节)。
UGS自己处理 M6:抬刀、停主轴、让你换刀,但从来不量刀。换上的刀长一些,就会切得太深,真机上可能撞进工件。一个程序只用一把刀,每个程序前设好刀长或工件零点;或者带换刀的程序用 Studio 来跑。

UGS 和 M6 还有几点:

  • 注释里的 “M6” 它也当成换刀,比如 FreeCAD 写的 ( M6 T1 )。
  • 刚换完一次刀,紧跟着的下一个 M6 可能被它漏掉,直接发给控制器。控制器于是停在换刀状态(Tool),等一个 UGS 永远不会发的确认,UGS 窗口里的按钮从此都按不了。MC-1 上只能按急停收场:按下、松开、按启动,再在 UGS 里 Soft Reset、回零。
  • UGS 跑程序途中、还没到 M6 时控制器被复位,UGS 可能把作业记成“已完成”,可它的换刀对话框照样会弹出来;把它按掉,整个程序可能从头再跑一遍。作业中途复位以后,先在 UGS 里关掉文件再往下做。

在 MC-1 的对刀仪上量刀长

对刀仪在工作台左后角,G59.3 存的就是它正上方的位置。

  • bCNC,手动换刀(刀长补偿)。 换刀位置在对刀仪上方,探测位置 G59.3;探测距离 50 mm,快探 200 mm/min,慢探 25 mm/min(MC-1 的 $342–$344),探测命令 G38.2。跑程序之前先按“校准”量第一把刀,之后每换一把刀,bCNC 都会设 G43.1。
  • gSender,固定对刀仪。 对刀仪位置 G59.3,在向导里先量初始刀。之后每换一把刀,gSender 不用刀长补偿,而是用 G10 L20 挪工件的 Z。它按探到以后轴停下的位置定刀长,不按控制器报的触发点,所以每换一次刀都可能差一点。在孪生里换刀时用 1 倍速:gSender 隔一段固定的短时间才去读这个位置,孪生跑得比实时快,它读到的可能还是停下之前的。
  • 换刀开始时,Z 至少要比最高处低 0.1 mm(机床坐标 Z −0.1 或更低)。这两个发送软件量完刀都会回到这个高度。如果就从最高处开始,量刀那一点点散布可能让回去的目标高出软限位,作业还没开切就停在 ALARM:2。

用测头定工件零点

  • UGS(它的探测模块)按控制器报的触发点([PRB:])算零点,这是对的做法。
  • gSender(3D 测头)和 bCNC(探测页,再按 Z=0、X、Y 按钮)把零点设在探到以后轴停下的地方。机床总要越过触发点走一小段才停住,最后一下探得越快,越过得越多。最后一下要慢;或者用 Studio 的测头循环定零点,它按触发点算。
  • UGS 的孔中心(探测模块的 Hole Center):从你放下测头的地方起,向 −X、+X、−Y、+Y 各探“填的孔径的一半”,取两次慢探的触发点的中点,孔中心就设在那里。它能探多远取决于填的孔径:起点离孔中心最多 =(填的孔径 − 实际孔径)/2 + 测球半径。照实填孔径时,起点要放到离中心不到一个测球半径(Ø2 的球就是 1 mm);把孔径填大几毫米(孔 20 填 24 到 26),就给手放留出了余量。
  • UGS 的孔中心探不到孔壁时(发现 192,UGS 自己的行为):那一下报 ALARM:5,UGS 停下。但它在开探之前已经把 G54 的 X0 Y0 设在了起点,循环没走完,G54 就留在起点。解锁以后一定先重新定零点,再加工。它的探测循环也卡在半路,断开再连上才能再用。另外,控制器报的没碰到的探测点([PRB:…:0]),它也照样当触点收下。
  • 先标定测头(Studio 的测头循环:环规)。没标定的测头量孔会偏大、量凸台会偏小,偏两个预行程。

另外要知道的

  • bCNC 走网络。 Windows 上 bCNC 读 TCP 连接大约每 2 秒才一次,它显示的可能是 2 秒前的状态。bCNC 显示“空闲”不等于机床已经停了。走 USB 没有这个延迟。
  • gSender 的 M0。 程序前 10 行里的 M0 不会暂停(gSender 把它改成了注释)。M1 总会暂停。
  • gSender 的连续点动。 按住点动按钮在 MC-1 上会被拒绝(error:15),因为 gSender 要的是一段超出行程的长点动。用一步一步的点动。$40=1(限制点动命令)在有的 Grbl 控制器上会让长点动停在软限位上、不拒绝;MC-1 的控制器还不认这个设置,照样拒绝(2026-10-06 在孪生上和 gSender 一起试过)。
  • UGS 的长行。 超过 127 个字符的行 UGS 永远不发,作业就无声地停住。行要短一些(UGS 会先去掉注释再算长度)。
  • UGS 和 M30。 UGS 会去掉 M30。靠 M30 来停主轴和冷却的程序,跑完后主轴、冷却还开着:程序结尾在 M30 前写上 M5 和 M9。
  • UGS 和注释。 一行里有两段注释时,UGS 连它们中间的代码也一起删掉。
  • 作业中断开连接。 控制器会把已经收到的行照样跑完。gSender 和 UGS 断开时什么停止都不发,机床接着走,主轴也接着转。断开之前先停下作业。bCNC 断开前会先进给保持、再复位。
  • 注释里的非 ASCII 字符(中文、“Ø”、“–” 等):三个发送软件发送前都会去掉注释,这些字到不了控制器。控制器自己把注释里和 (MSG,...) 里的 UTF-8 字当文字读,从不当实时命令。