Contact me: hankecnc@gmail.com

B-cnc停止发送数据 #1108

推推 grbl 3年前 (2023-02-02) 207次浏览
关闭
sfinexer 打开了这个问题 2018 年 12 月 22 日 · 44条评论
关闭

B-cnc停止发送数据#1108

sfinexer 打开了这个问题 2018 年 12 月 22 日 · 44条评论

评论

B-cnc停止发送数据 #1108
贡献者
斯芬克斯 评论了 2018 年 12 月 22 日  

从视频中可以看出,数据累积在 Arduino 缓冲区中,尽管控制器会针对所有数据发送正确的响应。
停止发生在随机位置 G 代码。

http://cnc.tiven.ru/ssr-2018-12-22_18.27.31.mp4

代码阿杜伊诺:

void setup() {
    Serial.begin(115200);
}
void loop() {}

String inputString = "";  
void serialEvent() 
{
    while (Serial.available()) {
    char inChar = (char)Serial.read();  // get the new byte
    inputString += inChar;
    if (inChar == '\n') {
      //Serial.println(inputString);
      Serial.println("ok");
      inputString = "";
      delay(5);
      }
    }
}
B-cnc停止发送数据 #1108
合作者

我不知道这是如何工作的,也不知道这应该如何工作。原作者可能正忙着帮助我们。你能详细说明是怎么回事吗?

什么是arduino缓冲区?它存储在哪里?
你确定只回复“ok”就够了吗?GRBL 比简单的 arduino 草图复杂得多。
也许 bCNC 期望一些状态报告能占据一席之地。如果 bCNC 发送大量“?” 命令(它在后台自动执行)并且不接收状态报告,我想这可能会使缓冲区膨胀。

这是最近开始发生的事情吗?最后一个工作版本是什么?

B-cnc停止发送数据 #1108 哈维 补充道 漏洞 研究和代码清理 需要更多思考的长期想法发件人和串行连接 冻结 标签 2018 年 12 月 25 日
B-cnc停止发送数据 #1108
贡献者作者
斯芬克斯 评论了 2018 年 12 月 25 日  

@Harvie
我没有尝试过早期版本。
视频显示(最后)新团队正在超越,B-cnc 缓冲区正在移动。这证明没有备用选项。

grbl 缓冲区是自动的;当它被填满时,它停止传输“Ok”命令,从而也减慢了 B-cnc。

我的印象是“ok”命令执行得太快,B-cnc 没有时间接受或处理它们。

@Harvie是否有可能以某种方式将完整的请求日志输出到 grbl?要了解它向 grbl 发送了哪些请求?

B-cnc停止发送数据 #1108
合作者

我的印象是“ok”命令执行得太快,B-cnc 没有时间接受或处理它们。

为 arduino 代码添加延迟。

真正的 GRBL 会发生这种情况吗?如果不是,这个问题就无关紧要了。

B-cnc停止发送数据 #1108
贡献者作者
斯芬克斯 评论了 2018 年 12 月 25 日  

@Harvie不是。互联网上有许多离线 grbl 变体。但是grbl本身并没有提供这种运行方式。
有一个重新制作 grbl 的想法,以便有机会使用 SD 卡。为此,根据规范,grbl 在收到命令后用“ok”确认,因此必须模拟数据获取。
我实施了它,但由于我不知道的原因,数据停止发送。
通过这种方式,B-cnc 将能够一次将所有代码传输到一个缓冲区中,该缓冲区将独立于 B-cnc 执行。

此外,从视频中可以看出,数据保存在 B-cnc 中但没有发送,并且可以看到没有等待数据确认,因为新命令已正确传输。

B-cnc停止发送数据 #1108
合作者

您只是假设您的 GRBL 协议实现是正确的。但我认为情况可能并非如此。我认为 GRBL 不应该?ok. 而且可能还有更多我们不知道的类似案例。

B-cnc停止发送数据 #1108
贡献者作者

我将执行以下操作:
我将在 B-cnc 和 GRBL 之间实现一个集线器。然后我将获得通过协议到真正的 GRBL 的完整数据。

GRBL 的自主性与大规模生产的情况相关。

我认为到目前为止没有必要关闭这个分支,因为我相信在这种情况下 B-cnc 中存在一定的不准确性。但我可能是错的。

视频(最后)显示 B-cnc 的缓冲区中有几个命令;发送新命令时,缓冲区移动。
这表明系统正在运行,而不是处于等待响应的状态。

B-cnc停止发送数据 #1108
合作者
哈维 评论了 2018 年 12 月 26 日  

我将在 B-cnc 和 GRBL 之间实现一个集线器。然后我将获得通过协议到真正的 GRBL 的完整数据。

不需要。我们已经有了这个。查看有关 spy:// 处理程序的信息:
https ://pyserial.readthedocs.io/en/latest/url_handlers.html

B-cnc停止发送数据 #1108

它也记录在 wiki 和 README 中

B-cnc停止发送数据 #1108 Harvie 将此添加到 0.9.15里程碑 2018 年 12 月 29 日
B-cnc停止发送数据 #1108
合作者

我刚刚尝试在我的机器上运行大作业,它在大约 45k 行 g 代码后停止发送。
现在正在尝试 UGS 平台发送器,但到目前为止一切顺利……
我想我们必须弄清楚这一点……

B-cnc停止发送数据 #1108
贡献者作者
斯芬克斯 评论了 2018 年 12 月 29 日  

我刚刚尝试在我的机器上运行大作业,它在大约 45k 行 g 代码后停止发送。
现在正在尝试 UGS 平台发送器,但到目前为止一切顺利……
我想我们必须弄清楚这一点……

我还没有使用间谍验证命令。
但一定要去做。

与移动的平均值相比,我在门户移动更远的时候停止了。(我的 G 代码平均超过 350k 行)

B-cnc停止发送数据 #1108
合作者
哈维 评论了 2018 年 12 月 29 日  

一些阅读:

https://github.com/gnea/grbl/wiki/Grbl-v1.1-Interface#streaming-ag-code-program-to-grbl
https://github.com/gnea/grbl/blob/master/doc /script/simple_stream.py
https://github.com/gnea/grbl/blob/master/doc/script/stream.py

https://github.com/grbl/grbl/wiki/Interfacing-with-Grbl#streaming-ag-code-program-to-grbl
https://github.com/grbl/grbl/blob/master/doc/script /simple_stream.py
https://github.com/grbl/grbl/blob/master/doc/script/stream.py

简而言之。有 3 种方法可以将命令流式传输到 GRBL(每种方法都有一些限制):

流协议:简单发送响应 [推荐用于 Grbl v0.9+]
流协议:字符计数 [推荐并保留]
流协议:通过流量控制 (XON/XOFF) [仅适用于某些 USB 串行转换器]

B-cnc停止发送数据 #1108
合作者
$ grep -ri RX_BUFFER_SIZE *py
bCNC.py:RX_BUFFER_SIZE = 128
__main__.py:RX_BUFFER_SIZE = 128
Sender.py:RX_BUFFER_SIZE = 128
Sender.py:		return self._sumcline * 100. / RX_BUFFER_SIZE
Sender.py:			if tosend is not None and sum(cline) < RX_BUFFER_SIZE:

字符计数在 GRBL1.py 中有所准备:

elif word[0] == "Bf":
        try:
                CNC.vars["planner"] = int(word[1])
                CNC.vars["rxbytes"] = int(word[2])
B-cnc停止发送数据 #1108
合作者
哈维 评论了 2018 年 12 月 29 日  

我刚刚尝试在我的机器上运行大作业,它在大约 45k 行 g 代码后停止发送。

问题是我再次尝试但无法重现错误:-/
我使用不同的 arduino,一旦我回到同一台机器,我会再试一次。
也许这不是 bCNC 的错。

此外,发件人代码并没有真正记录在案,所以我在弄乱了一两个小时后并没有真正找出任何明显的问题。

也许“终端”选项卡中的 GRBL$C Check G-code功能可能很有用,因为它可用于流式传输大量 g 代码,而无需等待电机。但我不确定在这种模式下是否会触发错误,因为现在我根本无法重现。此外,在这种模式下 GRBL rx 缓冲区被清空得非常快,并且规划器缓冲区根本没有被填满。

B-cnc停止发送数据 #1108
仓鼠65 评论了 2019 年 1 月 4 日  

你好,

我是“CNC初学者”,似乎我也有这个问题。

  • 当我尝试将设置写入 eeprom 时,bCNC 只是停止/永远等待,而 UGS 平台可以正常工作。

  • 我用 flatten 插件创建了一个简单的 gcode。它在随机时间后停止。示例:
    单击开始按钮
    G90
    ok
    M3S12000
    ok
    G4P3
    ok
    G0Z10
    ok
    g0z3
    ok
    g0x229.1425y2.8575
    ok
    g1z0f500
    ok
    cnc mill 永远坐在那里

GRBL 仍然有效。我可以对此进行测试,因为我已经构建了一个硬件解决方案来“注入”慢跑和其他命令。当我转动吊坠上的旋钮时,电机移动并且 bCNC 显示“JOG”并更新位置。所以通信正常,但它不处于运行状态并且不发送 gCode。
同样的 Gcode 文件用 UGS 平台运行到最后。

我测试了 bCNC 的 git 版本和 10 月 17 日的版本。

B-cnc停止发送数据 #1108
合作者
哈维 评论了 2019 年 1 月 4 日  

那是你遇到麻烦的g代码吗?还是更长?

G90
M3S12000
G4P3
G0Z10
g0z3
g0x229.1425y2.8575
g1z0f500

这对我来说只是运行并成功结束……

B-cnc停止发送数据 #1108
合作者

http://cnc.tiven.ru/ssr-2018-12-22_18.27.31.mp4

@sfinexer为什么视频中的bcnc总是说“未连接”?尝试解决这个问题。

数据累积在 Arduino 缓冲区中

Arduino 缓冲区不在 bCNC 中。它在阿杜伊诺。bCNC 的工作是不再发送任何命令,而 arduino 缓冲区已满。因为 arduino 只有很少的内存,如果你继续发送命令,它只会用完空间,所以你只发送很少的命令到 arduino 缓冲区,一旦 arduino 完成它们,它就会有空间来存储更多命令。只有这样你才能继续发送更多命令。所以如果缓冲区中还有东西,那是arduinos的错。

但是 bCNC 可能会丢失对 arduino 缓冲区中内容的跟踪。

B-cnc停止发送数据 #1108

@Harvie
gCode 更长。我现在正在运行几个测试。我怀疑来自 GRBL 的“ok”没有到达运行 bCNC 的计算机,但另一方面,控制台上的最后一条消息是“ok”。

B-cnc停止发送数据 #1108
连巴赫 评论了 2019 年 1 月 5 日  

我遇到了同样的问题。它随机停在一个随机位置。终端显示最后一条消息为“ok”,状态切换到空闲但 bcnc 缓冲区中仍有行。似乎从来都不是同一行,所以它可能与 gcode 无关。在 Pi 3 B+ 上运行,在带有 CNC Shield 的 Uno 上运行 GRBL 1.1f。

B-cnc停止发送数据 #1108
合作者
哈维 评论了 2019 年 1 月 5 日  

@sfinexer正如我所料,您的 arduino 代码有问题。我制作了自己的在 Linux 上运行的虚拟 grbl 模拟器(不需要 arduino):
https ://github.com/vlachoudis/bCNC/blob/master/tests/fake-grbl.sh

这是重要的代码:

[ "$byte" = '?' ] && echo "<Idle|MPos:0.000,0.000,0.000|FS:0,0|WCO:0.000,0.000,0.000>"

每次你收到“?” 字节,你应该发送状态报告。bCNC 在发现处于空闲模式的 grbl 之前不会停止流式传输。

另外我认为你可以只使用$C库存 GRBL 模式……这应该为你和你的 arduino 草图服务。

B-cnc停止发送数据 #1108
合作者

我想知道这是否相关:pyserial/pyserial#345

Harvie 添加了引用此问题的提交 2019 年 1 月 7 日

B-cnc停止发送数据 #1108
合作者
哈维 评论了 2019 年 1 月 13 日  

有时我觉得 EMF 可能有问题,或者关于 arduino(或 USB)的串行线接触不良。你换过USB线吗?你使用带 DIP 插座的 arduino 吗?我的一个 arduino 上的串行线路出现了奇怪的问题,修复所需的一切就是移除 atmega 芯片并将其重新插入插座……你有适当的 EMF 屏蔽吗?

B-cnc停止发送数据 #1108
贡献者作者
斯芬克斯 评论了 2019 年 2 月 16 日  

@Harvie

void setup() {
    Serial.begin(115200);
}
void loop() {}
String inputString = "";  
void serialEvent() 
{
    while (Serial.available()) {
    char inChar = (char)Serial.read();  // get the new byte
    inputString += inChar;
    switch(inChar) {
      case '\n':  Serial.println("ok");
         inputString = "";
         delay(25);
         break;
      case '?':   Serial.println("<Idle|MPos:0.000,0.000,0.000|FS:0,0|WCO:0.000,0.000,0.000>");
         delay(25);
         break;
     }
   }
}

B-cnc 没有完成发送代码。

好的
G0Z1
好的
<空闲|MPos:0.000,0.000,0.000|FS:0,0|WCO:0.000,0.000,0.000>

B-cnc停止发送数据 #1108
贡献者作者
斯芬克斯 评论了 2019 年 2 月 17 日  

SD卡上的代码与原来的G代码不符

#include <SPI.h>
//#include <SD.h>
#include "SdFat.h"
SdFat SD;
#define SD_CS_PIN 4
File myFile;
float in[128], out[128];
int i;
void setup() {
    Serial.begin(115200);
    Serial.print("Initializing SD card...");
  if (!SD.begin(SD_CS_PIN)) {
    Serial.println("initialization failed!");
    return;
  } 
  myFile = SD.open("test6.txt", FILE_WRITE | FILE_READ); 
  myFile.seek(0);
  Serial.println("initialization done.");
}
void loop() {}
String inputString = "";  
void serialEvent() 
{
    while (Serial.available()) {
    char inChar = (char)Serial.read();  // get the new byte
    switch(inChar) {
      case '\n': {
         Serial.println("ok");
         myFile.println(inputString);
         inputString = "";
         delay(25);
         break;
       }
      case '?':   {
        Serial.println("<Idle|MPos:0.000,0.000,0.000|FS:0,0|WCO:0.000,0.000,0.000>");
         delay(25);
         break;
        }
      case '!':   {
        myFile.close();
       }
      default :
        inputString += inChar;
     }
   }
}
B-cnc停止发送数据 #1108 sfinexer 重新打开了这个 2019 年 2 月 17 日
B-cnc停止发送数据 #1108
贡献者作者

如果您删除暂停,那么一切正常。