评论
|
我不知道这是如何工作的,也不知道这应该如何工作。原作者可能正忙着帮助我们。你能详细说明是怎么回事吗? 什么是arduino缓冲区?它存储在哪里? 这是最近开始发生的事情吗?最后一个工作版本是什么? |
为 arduino 代码添加延迟。 真正的 GRBL 会发生这种情况吗?如果不是,这个问题就无关紧要了。 |
|
@Harvie不是。互联网上有许多离线 grbl 变体。但是grbl本身并没有提供这种运行方式。 此外,从视频中可以看出,数据保存在 B-cnc 中但没有发送,并且可以看到没有等待数据确认,因为新命令已正确传输。 |
|
您只是假设您的 GRBL 协议实现是正确的。但我认为情况可能并非如此。我认为 GRBL 不应该 |
|
我将执行以下操作: GRBL 的自主性与大规模生产的情况相关。 我认为到目前为止没有必要关闭这个分支,因为我相信在这种情况下 B-cnc 中存在一定的不准确性。但我可能是错的。 视频(最后)显示 B-cnc 的缓冲区中有几个命令;发送新命令时,缓冲区移动。 |
不需要。我们已经有了这个。查看有关 spy:// 处理程序的信息: 它也记录在 wiki 和 README 中 |
|
我刚刚尝试在我的机器上运行大作业,它在大约 45k 行 g 代码后停止发送。 |
我还没有使用间谍验证命令。 与移动的平均值相比,我在门户移动更远的时候停止了。(我的 G 代码平均超过 350k 行) |
字符计数在 GRBL1.py 中有所准备:
|
问题是我再次尝试但无法重现错误:-/ 此外,发件人代码并没有真正记录在案,所以我在弄乱了一两个小时后并没有真正找出任何明显的问题。 也许“终端”选项卡中的 GRBL |
|
你好, 我是“CNC初学者”,似乎我也有这个问题。
GRBL 仍然有效。我可以对此进行测试,因为我已经构建了一个硬件解决方案来“注入”慢跑和其他命令。当我转动吊坠上的旋钮时,电机移动并且 bCNC 显示“JOG”并更新位置。所以通信正常,但它不处于运行状态并且不发送 gCode。 我测试了 bCNC 的 git 版本和 10 月 17 日的版本。 |
|
那是你遇到麻烦的g代码吗?还是更长?
这对我来说只是运行并成功结束…… |
|
@sfinexer为什么视频中的bcnc总是说“未连接”?尝试解决这个问题。
Arduino 缓冲区不在 bCNC 中。它在阿杜伊诺。bCNC 的工作是不再发送任何命令,而 arduino 缓冲区已满。因为 arduino 只有很少的内存,如果你继续发送命令,它只会用完空间,所以你只发送很少的命令到 arduino 缓冲区,一旦 arduino 完成它们,它就会有空间来存储更多命令。只有这样你才能继续发送更多命令。所以如果缓冲区中还有东西,那是arduinos的错。 但是 bCNC 可能会丢失对 arduino 缓冲区中内容的跟踪。 |
|
@Harvie |
|
我遇到了同样的问题。它随机停在一个随机位置。终端显示最后一条消息为“ok”,状态切换到空闲但 bcnc 缓冲区中仍有行。似乎从来都不是同一行,所以它可能与 gcode 无关。在 Pi 3 B+ 上运行,在带有 CNC Shield 的 Uno 上运行 GRBL 1.1f。 |
|
@sfinexer正如我所料,您的 arduino 代码有问题。我制作了自己的在 Linux 上运行的虚拟 grbl 模拟器(不需要 arduino): 这是重要的代码:
每次你收到“?” 字节,你应该发送状态报告。bCNC 在发现处于空闲模式的 grbl 之前不会停止流式传输。 另外我认为你可以只使用 |
|
我想知道这是否相关:pyserial/pyserial#345 |
|
有时我觉得 EMF 可能有问题,或者关于 arduino(或 USB)的串行线接触不良。你换过USB线吗?你使用带 DIP 插座的 arduino 吗?我的一个 arduino 上的串行线路出现了奇怪的问题,修复所需的一切就是移除 atmega 芯片并将其重新插入插座……你有适当的 EMF 屏蔽吗? |
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 没有完成发送代码。 好的 |
|
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;
}
}
}
|
|
如果您删除暂停,那么一切正常。 |



从视频中可以看出,数据累积在 Arduino 缓冲区中,尽管控制器会针对所有数据发送正确的响应。
停止发生在随机位置 G 代码。
http://cnc.tiven.ru/ssr-2018-12-22_18.27.31.mp4
代码阿杜伊诺: