开源改变世界!!

bCNC 在运行 gcode 文件时因 ValueError 而崩溃。 #622

推推 grbl 2年前 (2023-02-01) 217次浏览
关闭
rhfinch 打开了这个问题 2017 年 7 月 26 日 · 14条评论
关闭

bCNC 在运行 gcode 文件时因 ValueError 而崩溃。#622

rhfinch 打开了这个问题 2017 年 7 月 26 日 · 14条评论

注释

bCNC 在运行 gcode 文件时因 ValueError 而崩溃。 #622

大约 15 分钟后,bCNC 停止向 grbl 发送 gcode。Grbl 仍处于活动状态并连接终端程序并输入 ? 如果空闲则返回状态。

失败时 Python 屏幕显示以下内容:

线程 Thread-5 中的异常:
Traceback(最近调用最后一次):
文件“C:\Python27\lib\threading.py”,第 801 行,在 __b
self.run()
文件“C:\Python27\lib\threading.py”中py”, line 754, in run
self.__target(*self.__args, **self.__kwargs)
File “C:\bCNC-master\Sender.py”, line 1007, in serial
CNC.vars[“my”] = float(word[2])
ValueError:float() 的无效文字:-121.04-0.500

失败并不总是在文件中的同一个地方。相同的 gcode 脚本与 UGS 一起运行数小时而没有失败。

这是gcode。

bcnc测试.txt

bCNC 在运行 gcode 文件时因 ValueError 而崩溃。 #622

看起来您的串行通信正在丢失字符。您的 Arduino 是否有 CH340G USB 转串口芯片?之前使用 CH340G 的克隆已经看到此类问题。

bCNC 在运行 gcode 文件时因 ValueError 而崩溃。 #622
作者

感谢回复。

没有串口转USB。笔记本电脑 com 端口通过电平转换器连接到 arduino Rx Tx 引脚。你是说 BCNC 可能正在从 arduino 读取损坏的数据?bcnc 在发送文件时读取什么数据?我在终端窗口中看不到它的迹象。

bCNC 在运行 gcode 文件时因 ValueError 而崩溃。 #622

是的,bCNC 似乎从 Arduino 收到了损坏的数据。Sender.py 代码的那部分正在处理接收状态报告和解析它们(您的行号与当前代码不完全匹配,但它在同一区域):https ://github.com/vlachoudis/bCNC/ blob/master/Sender.py#L1007

上面异常输出中 grbl 的状态响应是“-121.04-0.500”——它看起来已损坏,因为它至少缺少(我相信)Y 和 Z 坐标之间的逗号。因此 bCNC 在解析 MPos Y 值的无效数字时出错。

也许您的笔记本电脑正在努力跟上串行数据,或者电平转换器可能会丢失偶尔的位并导致数据损坏。或者可能只是由于电噪声而丢失了一些位。

bCNC 在运行 gcode 文件时因 ValueError 而崩溃。 #622
作者
rhfinch 评论了 2017 年 7 月 27 日  

好的。感谢那。现在我知道要寻找什么了。

bCNC 在运行 gcode 文件时因 ValueError 而崩溃。 #622

我的等离子切割机也有同样的问题。我的等离子切割机发送高压以用金属板启动等离子。此时,消息可能已损坏。
您可以添加几行代码(尝试:…除了 ValueError:…继续)来拒绝损坏的消息。见下文:
如果 word[0] == “MPos”:
尝试:
CNC.vars[“mx”] = float(word[1])
CNC.vars[“my”] = float(word[2])
CNC。 vars[“mz”] = float(word[3])
except ValueError:
print “garbage receive MPos:” , line
continue
CNC.vars[“wx”] = round(CNC.vars[“mx”]-CNC.vars [“wcox”], CNC.digits)
CNC.vars[“wy”] = round(CNC.vars[“my”]-CNC.vars[“wcoy”], CNC.

self._posUpdate = True

elif word[0] == “F”:
try :
CNC.vars[“curfeed”] = float(word[1])
except ValueError:
print “garbage receive F:” , line
continue

elif word[0] == “FS”:
try :
CNC.vars[“curfeed”] = float(word[1])
CNC.vars[“curspindle”] = float(word[2])
except ValueError:
print “垃圾接收 FS:”, 行
继续

elif word[0] == “Bf”:
try :
CNC.vars[“planner”] = int(word[1])
CNC.vars[“rxbytes”] = int(word[2])
except ValueError:
print “垃圾接收 Bf:” ,行
继续

elif word[0] == “Ov”:
try :
CNC.vars[“OvFeed”] = int(word[1])
CNC.vars[“OvRapid”] = int(word[2])
CNC.vars[” OvSpindle”] = int(word[2])
除了 ValueError:
print “garbage receive Ov:” , line
continue

elif word[0] == “WCO”:
try :
CNC.vars[“wcox”] = float(word[1])
CNC.vars[“wcoy”] = float(word[2])
CNC.vars[” wcoz”] = float(word[3])
除了 ValueError:
print “garbage receive WCO:” , line
continue

bCNC 在运行 gcode 文件时因 ValueError 而崩溃。 #622
作者

谢谢格兰伯特!那太棒了。我现在正在运行。

bCNC 在运行 gcode 文件时因 ValueError 而崩溃。 #622
所有者

谢谢@ghlambert我已经在代码中添加了