注释
|
你好@cheton, 以下宏假定在机器坐标 (G53) 的 [X-300 Y-300 Z-50] 处有一个触摸板(或其他 Z 探测方式)。 这是将 M6 命令替换为 GRBL 的程序:
请记住,以上不是 bCNC 中的宏,而是程序在运行时提供的。正如您所理解的,原因是有几个地方需要一些简单的计算(以及当前状态的保存/恢复)。
写完所有内容后,我明白它可能不太符合您的“程序播放器”的理念,需要进行相当多的修改。
如果您认为可行,请告诉我。 |
|
谢谢你的详细解释。您是否发现以下步骤有任何问题?
这里还有一个问题:你是否希望在遇到M6时手动选择一个用户自定义宏?这将在第 3 步之前显示一个弹出窗口。 |
|
你好@cheton, 是的,我认为这会很好:-) 最后,如果显示一条消息以便用户知道是时候更换工具并且不奇怪为什么程序停止了,那就太好了 |
|
我在gnea/grbl#91中提出了一个问题。工具编号对于自动选择工具更改宏也很有用。 |
|
不错的收获! |
|
如果现在实现了,我可以得到一个 Toolchange 的示例宏吗? |
|
它尚未发布。仍然是#139 1.9 Release Backlog 的一部分。 |
|
v1.9.4 支持在 % 符号后评估表达式(类似于 bCNC)。您可以用以下表达式手动替换 M6 命令。手动工具更改 UI 将在以后的版本中添加。
|
|
一些好消息! |
|
@mandrav一旦您有机会测试它,请发布您的宏。你有改变要测试吗? |
|
@AustinSaintAubin不,我还没有时间测试这个,但是,根据@cheton,据我了解,您必须手动替换 M6 命令(不支持使用宏或其他方式自动替换)。 |
|
我将要使用的宏类似于 bCNC 的手动换刀代码。您可以查看 CNC.py,如下所示: https://github.com/vlachoudis/bCNC/blob/master/CNC.py#L1642 #----------------------------------------------------------------------
# code to change manually tool
#----------------------------------------------------------------------
def toolChange(self, tool=None):
if tool is not None:
# Force a change
self.tool = tool
self._lastTool = None
# check if it is the same tool
if self.tool is None or self.tool == self._lastTool: return []
# create the necessary code
lines = []
lines.append("$g") # remember state and populate variables
lines.append("m5") # stop spindle
lines.append("%wait")
lines.append("%_x,_y,_z = wx,wy,wz") # remember position
lines.append("g53 g0 z[toolchangez]")
lines.append("g53 g0 x[toolchangex] y[toolchangey]")
lines.append("%wait")
if CNC.comment:
lines.append("%%msg Tool change T%02d (%s)"%(self.tool,CNC.comment))
else:
lines.append("%%msg Tool change T%02d"%(self.tool))
lines.append("m0") # feed hold
if CNC.toolPolicy < 4:
lines.append("g53 g0 x[toolprobex] y[toolprobey]")
lines.append("g53 g0 z[toolprobez]")
# fixed WCS
lines.append("g91 [prbcmd] f[prbfeed] z[-tooldistance]")
if CNC.toolPolicy==2:
# Adjust the current WCS to fit to the tool
# FIXME could be done dynamically in the code
p = WCS.index(CNC.vars["WCS"])+1
lines.append("G10L20P%d z[toolheight]"%(p))
lines.append("%wait")
elif CNC.toolPolicy==3:
# Modify the tool length, update the TLO
lines.append("g4 p1") # wait a sec to get the probe info
lines.append("%wait")
lines.append("%global TLO; TLO=prbz-toolmz")
lines.append("g43.1z[TLO]")
lines.append("%update TLO")
lines.append("g53 g0 z[toolchangez]")
lines.append("g53 g0 x[toolchangex] y[toolchangey]")
if CNC.toolWaitAfterProbe:
lines.append("%wait")
lines.append("%msg Restart spindle")
lines.append("m0") # feed hold
# restore state
lines.append("g90") # restore mode
lines.append("g0 x[_x] y[_y]") # ... x,y position
lines.append("g0 z[_z]") # ... z position
lines.append("f[feed] [spindle]")# ... feed and spindle
# remember present tool
self._lastTool = self.tool
return lines
|
|
@cheton我已经尝试过使用宏来更改工具,结果很接近,但我总是会出错。有时错误是由于语句无效,有时机器在工作过程中闲置并死机。似乎每当我 M0 M0 我不确定还有什么可以与您分享以提供帮助。 |
|
这 dataFilter: (line, context) => {
if (line === WAIT) {
const { sent, received } = this.sender.state;
log.debug(`Wait for the planner queue to empty: line=${sent + 1}, sent=${sent}, received=${received}`);
this.sender.hold();
return `G4 P0.5 (${WAIT})`; // dwell
}
return this.dataFilter(line, context);
}
你能试试下面的程序并检查它是否适合你吗?
|
|
@cheton |


你好,
有没有计划为 M6 命令添加“支持”(工具更改)?
当遇到对用户指定的宏的调用时,它可以像替换 M6 线一样“简单”(它将移动到预定义的位置以允许手动更改工具,然后在恢复之前探测以重置 z 高度).
老实说,我已经被 bCNC 提供的这个功能宠坏了
但是将我的控制权转移到 RPi 后,我使用 bCNC 不再方便,我开始更多地使用你的软件(很棒顺便说一句!)。
无论如何,感谢您考虑到这一点。