开源改变世界

2. Joystick串口,建议:调试功能 #29

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

2. Joystick串口,建议:调试功能#29

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

评论

2. Joystick串口,建议:调试功能 #29

嗨 Sven,
我或多或少确定我的操纵杆向串行端口发出命令。
只是在 GRBL-Plotter 中没有可见的反应。
手写笔不动,坐标不变。

你能否实现某种调试功能,允许字符串(或串行端口上接收到的任何内容)的可视化,也许最简单的方法就是进入 DIY 控制板的列表框?
会没事的。谢谢!
哈拉尔德

2. Joystick串口,建议:调试功能 #29
所有者

嗨 Harald,
每个收到的命令都会显示在窗口中。我刚刚将第二个 arduino 与 grbl 一起使用并收到了已知的重置启动消息,然后将其转发给 grbl – 这会导致错误(因为它不是常规 gcode)。
也许我需要提供停止位设置?
或者您可以尝试使用 grbl – com 设置吗?(8 个数据位,1 个停止位,无奇偶校验)

2. Joystick串口,建议:调试功能 #29
作者

嗨 Sven,
我的操纵杆使用“115200、8、1、n,无握手”,这只是 GRBL 使用的设置。

这是我在“白蚁”上设置的:

2. Joystick串口,建议:调试功能 #29

这是操纵杆和 GRBL 之间的通信:

2. Joystick串口,建议:调试功能 #29

COM14 是操纵杆,COM13 是 GRBL (V1.1f)。

只是有一个想法……为了在使用 Termite 进行调试时让 GRBL 满意,我发出“?” 操纵杆上的命令。
这可能会扰乱 GRBL-Ploter 和 GRBL 之间的通信。
我会停止“?” 在操纵杆上,因为那些“?” 由 GRBL-Plotter 发行。
我会报告…

哈拉尔德

2. Joystick串口,建议:调试功能 #29
所有者

您好 Harald,
在您的屏幕截图中我读到“$J=G91X 1F1000”-> 要成为常规 gcode,字符和数字之间不能有空格:“X 1”不是正确的 gcode – 据我所知。
要在保存站点上,我会在命令之间使用空格,例如“$J=G91 X1 F1000”
Sven

2. Joystick串口,建议:调试功能 #29
作者
德哈罗 评论了 2018 年 9 月 4 日  

嗨 Sven,
据我所知,GRBL 会丢弃 gcode 字符串中的空格。
但我可以按照您的建议进行更改。这将持续一段时间,因为我摆弄了指向结果字符串的指针以保持运行速度快。

反对您的想法的一个论据是,当朝负方向步进时,该空间被减号占用,并且该字符串也不会转发到 GRBL(或者至少它不会在 GRBL-Plotter 中显示)。
哈拉尔德

[编辑]
刚刚查了一下…
“-命令中允许使用空格和注释。这些已被预解析器删除。”
(来自https://github.com/gnea/grbl/wiki/Grbl-v1.1-Jogging

所以我会保留这些空间,在操纵杆上不做任何改变。
请验证 GRBL-Plotter 不会丢弃由命令和参数之间的空格组成的点动命令。
谢谢!
[\编辑]

2. Joystick串口,建议:调试功能 #29
所有者

您可能应该使用“CR anhängen”

2. Joystick串口,建议:调试功能 #29
作者
德哈罗 评论了 2018 年 9 月 4 日  

带或不带“CR”的 G 代码被视为相似。
我分别对 X 轴和 Y 轴有不同的实现(偶然,不是故意的 :),并且两者都没有显示在 GRBL-Plotter 中。

2. Joystick串口,建议:调试功能 #29

2. Joystick串口,建议:调试功能 #29
作者

与此同时,我放弃了发送“?” 在我自己的操纵杆上,但在 GRBL-Plotter 中没有变化。
在 GRBL-Plotter 中仍然没有可见的反应。

2. Joystick串口,建议:调试功能 #29
所有者

您是否像我一样尝试连接另一个 grbl?至少这应该有效……

2. Joystick串口,建议:调试功能 #29
作者
德哈罗 评论了 2018 年 9 月 4 日  

还没有…我会做并报告

[edit]
GRBL 报告如预期,那么现在呢?
有什么不同?

好的,用操纵杆进行新测试:
我激活 COM14(操纵杆端口)
-> 没有报告(没关系,我没有移动操纵杆)
我在 X 方向移动操纵杆
-> 没有报告(这不好,我希望“ $J=G91X-1F1000″)
我重置了操纵杆 arduino(通过点击 arduino 上的重置开关)
->(见图)
2. Joystick串口,建议:调试功能 #29

列表框内容说明:

  • 我关闭并重新打开端口以清除列表框 -> 这导致行“Open COM14”
  • 接下来我得到 “< $J=G91X 1F1000” 和另外两个
    $J=G91X 1F1000
    $J=G91X 1F1000
  • 然后两行
    ?$X
    < G4 P0.01

这是我通过将操纵杆触摸到负 X 方向很短的时间——在操纵杆复位之前——发出的输出,然后是两个 gcode 命令来复位 GRBL。

然后我显示一个操纵杆值循环以获得每个值的中间位置:
< 508; 520;505

< 507; 519; 522

我想我必须很好地丢弃这两个重置代码……
我会报告
[\edit]

2. Joystick串口,建议:调试功能 #29
作者
德哈罗 评论了 2018 年 9 月 4 日  

好的,没有任何改变(尽管现在省略了重置代码)。
在我重置操纵杆 arduino 之前,我再次一无所获。

我尝试在慢跑命令后附加一些东西(“CR”或“LF”或两者?),但按照我上面链接的慢跑教程,这不是必需的。

[编辑]
…我想,我已经附加了那些:

// konstruiere die Strings fuer die Jog-Befehle
//                  0.........1.........2.........3.........4.........5.........6.........7.........80	Abschaetzung HilfeBuf
//                  012345678901234567890123456789012345678901234567890123456789012345678901234567890
//                  |         |         |         |         |         |         |         |         |
// jogXChar[20] = {"$J=G91X-1F1000"};

// jogXChar[7]  								// Vorzeichen
jogXChar[8]  = '1';								// immer einen kurzen Step angeben
jogXChar[9]  = 'F';
jogXChar[10] = '1';
jogXChar[11] = '0';
jogXChar[12] = '0';
jogXChar[13] = '0';							
jogXChar[14] = '\r';							// Stringende Kennung
jogXChar[15] = '\0';							// statisch -> hier einfuegen

参见
jogXChar[14] = ‘\r’; // Stringende Kennung
jogXChar[15] = ‘\0’; // statisch -> hier einfuegen
[\编辑]

2. Joystick串口,建议:调试功能 #29
作者

好的,更进一步… :-)

我附加了“0x0D,0x0A”(即 CR LF),命令出现在 DIYcontrolPad 的列表框中。

那么接下来会发生什么?
GRBL-Plotter 中的坐标不会改变。

2. Joystick串口,建议:调试功能 #29
所有者

好的,至少 GRBL-Plotter 收到了一些东西。今晚我将检查串口配置——也许 rx-buffer 与 grbl-comport 不同。

2. Joystick串口,建议:调试功能 #29
所有者

这两个函数处理接收到的数据(与 grbl com 端口相同)。
命令行应以 \r\n (CR LF) 结尾才能被识别为一个命令。

    private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {   while ((serialPort.IsOpen) && (serialPort.BytesToRead > 0))
        {   rxString = string.Empty;
            try
            {   rxString = serialPort.ReadTo("\r\n");              //read line from grbl, discard CR LF
                this.Invoke(new EventHandler(handleRxData));        //tigger rx process 
                while ((serialPort.IsOpen) && (isDataProcessing)) ;  //wait previous data line processed done
            }
            catch (Exception errort)
            {   serialPort.Close();
                logError("Error reading line from serial port", errort);
            }
        }
    }

    private void handleRxData(object sender, EventArgs e)
    {
        rtbLog.AppendText(string.Format("< {0} \r\n", rxString));
        OnRaiseCommandEvent(new CommandEventArgs(rxString));
        isDataProcessing = false;
    }
2. Joystick串口,建议:调试功能 #29
作者

更新:
不确定是什么原因,但现在我可以用操纵杆慢跑了。

我发出了“重置”命令 ,现在与 GRBL 的通信似乎正常运行。
2. Joystick串口,建议:调试功能 #29

现在我可以开始调整步长和速度以适应棒的偏差。
到目前为止非常感谢!!!

2. Joystick串口,建议:调试功能 #29
所有者

非常好!我也很高兴!

2. Joystick串口,建议:调试功能 #29
作者

还有一个问题:
您是否将 GRBL 的“ok”响应镜像到 DIYControl 端口?(我自己还没有检查过)
这对于尽可能多地填充慢跑队列至关重要。

2. Joystick串口,建议:调试功能 #29
作者

如果我在处理操纵杆端口时遇到问题,我应该提出一个新问题吗?
(或在此主题中报告它们?)

2. Joystick串口,建议:调试功能 #29
所有者

所有发送的消息都将显示在 DIY 控制窗口中 – 每个 grbl 消息都在括号“[]”中,但没有“确定”。
我宁愿打开一个新问题并关闭这个问题——因为现在沟通正常——对吗?

2. Joystick串口,建议:调试功能 #29
作者
德哈罗 评论了 2018 年 9 月 4 日  

顺便问一下……
你如何处理来自操纵杆的即时命令?
发出点动中止命令时,没有像 CR 和/或 LF 这样的东西,只有 0x85 本身。

好吧,我明白你做了什么(或者更好的是你不做什么)。
就像更改之前的命令一样,中止命令保存在输入队列中(我假设是 GRBL-Plotter),然后转发到下一个点动命令前面的列表框(和 GRBL?)(请参阅红圈):

2. Joystick串口,建议:调试功能 #29

要让慢跑按预期工作,您还必须实施一种处理这些即时命令的方法。
副作用:如果你做到了,将不再需要用 CR LF 完成点动命令。

2. Joystick串口,建议:调试功能 #29
作者

Hi Sven,
my question aims not on the listing, but on whether the “ok” is forwarded to my joystick arduino.

This is essential for me, when it comes to holding the jog queue stuffed.
When jogging continuously, it can happen, that the machine cannot keep up with the jog commands.
To prevent sending commands when the queue of GRBL is full, I have to stop sending commands.

喜欢 (0)