开源改变世界!!

如何调试宏 #430

推推 grbl 2年前 (2023-02-02) 115次浏览
关闭
chuyskywalker 打开了这个问题 2019 年 3 月 19 日 · 12条评论
关闭

如何调试宏#430

chuyskywalker 打开了这个问题 2019 年 3 月 19 日 · 12条评论

注释

如何调试宏 #430
天行者 评论了 2019 年 3 月 19 日  

描述

寻找有关如何评估宏以及在出错时如何调试它们的信息。

版本 cncjs 桌面 osx 1.19.17
数控系统 Grbl
硬件 笔记本电脑
操作系统 操作系统

细节

我有一个宏,我正在尝试确定它应该能够通过探测圆形切口内的三个点来找到 WCS 设置的中心。但是,当我运行它时,我最终得到如下信息:

G0 XNaN YNaN

由于我对 Javascript 有一定的了解,它是 JSpeak,意思是“你用数字做了坏事,我很困惑”。

但是,当我将所有这些值插入浏览器的 JS 控制台时,一切都很好。

所以,虽然我喜欢有人说“Oy,第 54 行有错误 X”来修复我的宏,但我认为可能更有帮助的是:如何调试宏?他们是如何评价的?

(根据#250中的答案,括号之间的数据看起来就像[]eval()ed?我不太清楚代码库在哪里执行此操作以理解它…)

这是有问题的宏:

;Start with probe in hole, BELOW Z surface

; Wait until the planner queue is empty
%wait

; Set user-defined variables
%PROBE_DISTANCE = 20
%PROBE_FEEDRATE_A = 150
%PROBE_FEEDRATE_B = 50

; for restoration at the end
%UNITS=modal.units
%DISTANCE=modal.distance

G91 ; Relative positioning
G21 ; Use millimeters

G10 L20 X0 Y0 ; set current position as xy zero for now

; Probe rear, slight right
G38.2 X1 Y[PROBE_DISTANCE] F[PROBE_FEEDRATE_A]
G1 Y-2 F[PROBE_FEEDRATE_B] ; back off a bit
G38.2 Y3 F[PROBE_FEEDRATE_B] ; probe again, slowly
%p1x = [posx] ; set the x/y coords for later
%p1y = [posy]

; set back to absolute mode and return to original spot
G90 
G0 X0 Y0
G91

; Probe 45deg
G38.2 X[PROBE_DISTANCE] Y[PROBE_DISTANCE] F[PROBE_FEEDRATE_A]
G1 X-2 Y-2 F[PROBE_FEEDRATE_B] ; back off a bit
G38.2 X3 Y3 F[PROBE_FEEDRATE_B] ; probe again, slowly
%p2x = [posx] ; set the x/y coords for later
%p2y = [posy]

; set back to absolute mode and return to original spot
G90 
G0 X0 Y0
G91

; Probe slight rear, far right
G38.2 X[PROBE_DISTANCE] Y1 F[PROBE_FEEDRATE_A]
G1 X-2 F[PROBE_FEEDRATE_B] ; back off a bit
G38.2 X3 F[PROBE_FEEDRATE_B] ; probe again, slowly
%p3x = [posx] ; set the x/y coords for later
%p3y = [posy]

; Figure out proper center https://stackoverflow.com/a/30106470 and set it
%ma = [(p2y - p1y) / (p2x - p1x)]
%mb = [(p3y - p2y) / (p3x - p2x)]
%cx = [(ma * mb * (p1y - p3y) + mb * (p1x + p2x) - ma * (p2x + p3x)) / (2 * (mb - ma))]
%cy = [(-1 / ma) * (cx - (p1x + p2x) * 0.5) + (p1y + p2y) * 0.5]

; Return to origin, move to new center, set center
G90 
G0 X0 Y0
G91
G0 X[cx] Y[cy]
%wait
G10 L20 X0 Y0

[UNITS] [DISTANCE] ;restore unit and distance modal state
如何调试宏 #430
合作者

每行以 为前缀的%是一个 JavaScript 语句,您不需要用方括号将表达式括起来[ ],否则该值将被视为数组。

尝试从您的宏中删除所有方括号,如下所示:

%p1x = posx
%p1y = posy
%p2x = posx
%p2y = posy
%p3x = posx
%p3y = posy
%ma = (p2y - p1y) / (p2x - p1x)
%mb = (p3y - p2y) / (p3x - p2x)
%cx = (ma * mb * (p1y - p3y) + mb * (p1x + p2x) - ma * (p2x + p3x)) / (2 * (mb - ma))
%cy = (-1 / ma) * (cx - (p1x + p2x) * 0.5) + (p1y + p2y) * 0.5
如何调试宏 #430
合作者
奇顿 评论了 2019 年 3 月 19 日  

为了避免获取工作位置时的延迟,我建议您添加一个停留时间以确保计划程序队列为空并且机器处于空闲状态:

; A dwell time of one second
G4 P1
%p1x = posx
%p1y = posy
; A dwell time of one second
G4 P1
%p2x = posx
%p2y = posy
; A dwell time of one second
G4 P1
%p3x = posx
%p3y = posy
如何调试宏 #430 奇顿 添加了 问题 标签 2019 年 3 月 19 日
如何调试宏 #430
作者

以 % 为前缀的每一行都是一个 JavaScript 语句

啊,好的,谢谢。我一直在抄袭一些@neilferreri孔定心方面的工作有很多:

G38.2 Y-5 F[PROBE_FEEDRATE_B] ;Slow Probe
%Y_BTM = [posy]
%Y_CHORD = [Y_TOP - Y_BTM]
G0 Y[Y_CHORD/2]
%Y_CENTER = [posy]

并认为[]‘ 表示“在这些中执行 javascript”。

为了避免获取工作位置时的延迟,我建议您添加一个停留时间以确保计划程序队列为空并且机器处于空闲状态:

有理由使用它而不是%wait吗?

如何调试宏 #430

@chuyskywalker哈!看到这个帖子后,我才开始删除一些括号。

%wait 只是停留 0.5 秒

如何调试宏 #430
作者

我终于在代码中找到了它,是的,它只是一个方便的帮手。谢谢,今晚我会试一试。

如何调试宏 #430
作者

工作起来很有魅力,谢谢!