开源改变世界!!

DIY控制端口,不支持立即命令 #34

推推 grbl 2年前 (2023-02-09) 159次浏览
关闭
deHarro 打开了这个问题 2018 年 9 月 4 日 · 35条评论
关闭

DIY控制端口,不支持立即命令#34

deHarro 打开了这个问题 2018 年 9 月 4 日 · 35条评论

评论

DIY控制端口,不支持立即命令 #34

为了支持通过第二个 DIY 控制端口根据“GRBL V1.1 慢跑”使用专用操纵杆硬件进行慢跑,必须支持即时命令的处理。

这意味着:

  • GRBL-Plotter 中的接收线程必须通过串行端口接受单个字符
  • GRBL-Plotter不得等待 CR LF 处理接收到的字符
  • 相反,GRBL-Plotter 必须在到达时接受此端口上的每个字符,并立即将其转发到 CNC 端口上的 GRBL。

除此之外,为了防止意外转发点动命令,只要 CNC 作业正在运行,GRBL-Plotter 就必须阻止 DIYcontrol 端口上的输入。
我想,这已经得到保证,因为 GRBL-Plotter 中有“虚拟操纵杆”。

DIY控制端口,不支持立即命令 #34
所有者

我将实现这样的事情:
逐个字符接收字符,过滤字符 > 0x7F -> 发送实时命令,或收集更多字符直到达到 /r/n,然后通过常规函数发送。

DIY控制端口,不支持立即命令 #34
作者

可能有用,让我们看看它的表现如何…… :-)
谢谢!

DIY控制端口,不支持立即命令 #34
所有者

尝试测试版本https://github.com/svenhb/GRBL-Plotter/blob/master/GRBL-Plotter_1202_test.zip
我实施了我的建议。无法测试实时命令,因为没有可以发送的硬件,我希望它能工作。

DIY控制端口,不支持立即命令 #34
作者
德哈罗 评论了 2018 年 9 月 6 日  

出了点问题 :(
你将每个 Jog 命令加倍,而 GRBL 不明白这一点。

DIY控制端口,不支持立即命令 #34

DIY控制端口,不支持立即命令 #34

GRBL-Plotter 中的坐标不会改变。

不清楚实时命令是否转发给 GRBL。

(你说,你有一个备用的Arduino。你愿意在ebay上买一个摇杆
吗? 如果是这样,我很乐意把我的摇杆控制器的源码发给你测试。
但是我们可以一起调试,没问题)

[编辑]
对于您自己的测试,我可以为您的备用 Arduino 提供一个固件,该固件在触发开关时发送点动命令。
[/编辑]

DIY控制端口,不支持立即命令 #34
作者

这是我在开发计算机上的测试设备:
DIY控制端口,不支持立即命令 #34

DIY控制端口,不支持立即命令 #34

正确的 Arduino 在 X 轴上有一个步进器来获得步进时的感觉,因为有时我在开发时使用的不同应用程序中的数字变化会愚弄人。

左边的Arduino运行摇杆固件,我可以控制X和Y,Z在软件中固定居中。
如有必要,我可以附加一个按钮,拇指操纵杆通过按下旋钮提供一个 NO 开关。

DIY控制端口,不支持立即命令 #34
所有者

但是实时命令有效吗?

DIY控制端口,不支持立即命令 #34
作者

正如我所写,我无法验证这一点。
为了验证功能,GRBL-Plotter 和 GRBL 必须执行点动命令,然后点动取消可以切入并停止正在进行的运动。

只要点动命令没有正确转发……就没有机会测试。对不起。

DIY控制端口,不支持立即命令 #34
所有者
svenhb 评论了 2018 年 9 月 7 日  

尝试新版本,希望它能按预期工作:https
://github.com/svenhb/GRBL-Plotter/blob/master/GRBL-Plotter_1203_test.zip 也许看看问题#27#29#30#31 , #33如果可以就关闭它们

DIY控制端口,不支持立即命令 #34
作者

对不起,和以前一样的效果:

DIY控制端口,不支持立即命令 #34

DIY控制端口,不支持立即命令 #34
作者

好的,更进一步👍:-)
现在可以完美转发点动命令。

但是你有多确定 0x85 字符是异步传输并绕过已经采样的字符串(或字符串部分)?

据我所见,这部分工作有潜力……会说:那表现不佳。

我只是将非常小和缓慢但随后快速移动到 GRBL-Plotter 中的几秒钟,步进电机跟随。
到目前为止还好。
(解释:“非常小”:X=1 mm,“慢”:F=84,“快速跟随”:每 10 ms)

然后我松开操纵杆,应该发出点动中止命令(0x85)。
但是步进器愉快地移动了大约半分钟左右,然后更快的运动来到了 GRBL。
我什至改变了一段时间的旋转方向。大约一分钟后,它到达了我的马达。

这让我假设中止命令没有被转发通过已经采样的点动命令。

我试图设法将我的操纵杆中的字符动态地可视化到 GRBL-Plotter …

DIY控制端口,不支持立即命令 #34
作者

好吧,启动并运行了一个串行端口监视…
我发送了连续的点动命令,当松开操纵杆的旋钮时,发出一两个 0x85:

DIY控制端口,不支持立即命令 #34

到目前为止,我确信罪魁祸首在 GRBL-Plotter 的某个地方。

也许您设法在操纵杆的监听端口上处理得很好,但忘记处理绕过 GRBL 的发送端口?

DIY控制端口,不支持立即命令 #34
所有者

我今晚需要检查…

但是你有多确定 0x85 字符是异步传输并绕过已经扩充的字符串(或字符串部分)?
至少 0x85 显示在 DIY 控制窗口中,并带有解释文本?

DIY控制端口,不支持立即命令 #34
作者
德哈罗 评论了 2018 年 9 月 7 日  

嗨 Sven,
“至少 0x85 显示在 DIY 控制窗口中,并带有解释文本?” 在上面的评论中,你问我一个问题?

如果是这样,不,我在 DIY 窗口中没有看到任何“0x85 with explanation”。

这是我得到的:

DIY控制端口,不支持立即命令 #34

这是在关闭/打开两个端口(以清除窗口)并使用操纵杆执行短的正 X 移动之后直接进行的。

现在又是正 X 的短线移动:

DIY控制端口,不支持立即命令 #34

你看,有一个“?” 在第二步的第一个点动命令之前。
你看,这个“?” 在对 GRBL的下一个点动命令之前也被回显到 GRBL !(您可以计算两张图片中的点动命令以验证这一点)

[编辑]
我看到一个“?” 在两个窗口中的所有命令前面。
我用串行间谍工具检查了这一点:在第一个点动命令 ($J=G91X…) 之前,操纵杆没有发送任何字符。
[/编辑]

DIY控制端口,不支持立即命令 #34
所有者

我的意思是你 2 小时前的帖子:“我发送连续的点动命令,当释放操纵杆的旋钮时,发出一两个 0x85”
当你发送 0x85 时,在 DIY 控制窗口中看到它了吗?

DIY控制端口,不支持立即命令 #34
作者

不,我只看到我的慢跑命令和那些“?” 人物。

DIY控制端口,不支持立即命令 #34
所有者

这 ‘?’ 字符是否与您的 Jog-Stop 命令匹配?

DIY控制端口,不支持立即命令 #34
作者
德哈罗 评论了 2018 年 9 月 7 日  

我会说是的。
我不能确定,但​​从我提供给您的图片中,可以想象到这一点。
在间谍工具图片中,此时您可以看到“85”。

DIY控制端口,不支持立即命令 #34
作者

嗨斯文,
没有“?” 在输入/输出中,您现在在两个日志窗口中发出“0x3F 状态报告查询”。

希望这能引导我们找到解决方案,但现在点动命令仍未取消。

0x3F 不是我发送的,我发送的是 0x85(实际上我在代码中使用“Serial.write(133);”)。

那么,这个 0x3F Status Report Query 是从哪里来的呢?

DIY控制端口,不支持立即命令 #34
所有者

尝试在 0x85 以下发送另一个实时命令,例如“!” 或’〜’。那么会发生什么?也许您需要启用第 7 位才能发送?(我知道与 0x85 <-> 0x3F 不匹配)

DIY控制端口,不支持立即命令 #34
所有者

“0x3F状态报告查询”也许你真的发送’?’ 因为失误?

DIY控制端口,不支持立即命令 #34
作者

0x3F 是所有 7 位设置。
我的硬件发送所有位,查看串行间谍工具的输出:

DIY控制端口,不支持立即命令 #34

因为我发送了 133 而工具显示了 85,所以我认为这是正确的。

我会发送一些其他代码并报告…

DIY控制端口,不支持立即命令 #34
所有者

我作为实时命令转发的可能实时命令(除了 >0x7F 之外)是 0x18、’?’、’~’、’!’

DIY控制端口,不支持立即命令 #34
作者
德哈罗 评论了 2018 年 9 月 7 日  

好的,我会先用“!”试试

[编辑]
当我发送“Serial.write(‘!’);”时 你收到 0x21:

DIY控制端口,不支持立即命令 #34

到目前为止完美…
我现在使用相同的程序发送 0x85。

这导致 0x3F。嗯…
“~”是0x7E …在DIY端口列表框中显示为“<0x7E Cycle Start / Resume”

我从操纵杆发送133并用“Termite”记录我的COM端口14的读数:

DIY控制端口,不支持立即命令 #34

所以我会说,我的 Arduino 发送的所有代码都是 8 位的。

DIY控制端口,不支持立即命令 #34
所有者

好的,现在我将 unicode 转换为字节 – 希望现在正在读取正确的值:https ://github.com/svenhb/GRBL-Plotter/blob/master/GRBL-Plotter_1206_test.zip

DIY控制端口,不支持立即命令 #34
作者

对不起,还是0x3F

DIY控制端口,不支持立即命令 #34

DIY控制端口,不支持立即命令 #34
作者

嗨 Sven,
你有没有遇到以下来源:
SerialPort Encoding

简而言之:“您有两种选择;一种是使用处理 byte[] 并绕过 Encoding 的 API,或者使用正确的编码。但是找到正确的编码有点棘手……”

DIY控制端口,不支持立即命令 #34
所有者

不,我不知道,我会检查。
我从函数“serialPort.ReadTo(“\r\n”);”开始 在其他串行窗口中使用。但是有了这个我无法过滤实时命令。然后我切换到“serialPort.ReadExisting()”(返回一个字符串)但是,正如我们发现的那样,0x7F 以上的字符是一个问题。
下一个尝试是填充字节数组的“SerialPort.Read”。我希望这能解决问题(明天)。

DIY控制端口,不支持立即命令 #34
所有者

尝试过“SerialPort.Read”:https
://github.com/svenhb/GRBL-Plotter/blob/master/GRBL-Plotter_1207_test.zip 希望现在已修复…

DIY控制端口,不支持立即命令 #34
作者
德哈罗 评论了 2018 年 9 月 8 日  

嗨,斯文,
我想,我们快结束了:-)

处理所有点动命令(绿色箭头)并且点动取消命令取代所有待处理的点动命令(从右到左的红色箭头)。到目前为止还不错:

DIY控制端口,不支持立即命令 #34

您的端口现在可以识别大于 0x7F 的字符并将它们转发到 GRBL(据我解释两个列表框的输出)。

只有 GRBL 不会立即停止,而是继续移动直到发出的点动命令结束。

所以我认为,现在你必须看看针对 GRBL 的发送方。
也许您必须在将 0x85 转发到 GRBL 后立即刷新(或删除或更好地清除) GRBL-Plotter(!) 的输出队列?

DIY控制端口,不支持立即命令 #34
所有者

太糟糕了……我还发现了另一个问题:在流暂停期间慢跑不再起作用……
你可以遵循这个,以避免发送太多慢跑命令:https ://github.com/gnea/grbl /wiki/Grbl-v1.1-Jogging#how-to-compute-incremental-distances

DIY控制端口,不支持立即命令 #34
作者

这将解决部分问题,但据我了解慢跑,GRBL 甚至能够中止正在进行的慢跑命令(假设我发出 $J=G91X100F100,这将需要一些时间才能到达终点)。
如果 GRBL 在执行该命令时遇到点动中止,它将使机器减速并在到达该点动命令的终点之前停止。

仅通过避免过多的点动命令就可以做到这一点吗?
好的,我会试试这个。但我担心,到那个时候我需要一些时间:-)

顺便说一下,我希望你能解决在流暂停中慢跑的问题!

DIY控制端口,不支持立即命令 #34
所有者

问题已解决,0x85 还将清除我的内部缓冲区
https://github.com/svenhb/GRBL-Plotter/blob/master/GRBL-Plotter_1208_test.zip

DIY控制端口,不支持立即命令 #34
作者

嗨 Sven,
似乎工作完美,非常好!

我正在根据操纵杆的投掷实现步长、速度和适当命令频率的数学运算。希望 AtMega 足够快……

svenhb 添加了引用此问题的提交 2018 年 11 月 6 日

DIY控制端口,不支持立即命令 #34
喜欢 (0)