注释
作者
好吧,这个程序有一个无限循环,所以冻结是可以的。但是为什么会占用这么多内存呢? |
合作者
这可能与问题#1146有关吗?我使用“rs274 -g bad.ngc”进行了测试,但没有得到无穷无尽的指令流:executing 1 N….. USE_LENGTH_UNITS(CANON_UNITS_MM) 2 N….. SET_G5X_OFFSET(1, 0.0000, 0.0000, 0.0000 , 0.0000, 0.0000, 0.0000) 3 N….. SET_G92_OFFSET(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000) 4 N….. SET_XY_ROTATION(0.0000) 5 N….. SET_YZ(FECAN_REFERENCE) 6 N….. ON_RESET() 7 N1000 消息(“MAINPROGRAMMENUMBER,P1”) 8 N2000 消息(“DIMENSIONSOFSHEET:0.80X407X1250”)9 N3000 消息(“材料 ID:ST37-08”)10 N10000 消息(“** *RUND10–10.00***”) 11 N11000 MESSAGE(” ***SQUARE10.0–10.00***”) 12 N12000 MESSAGE(” ***RECHTECK37X5–37.00–5.00***”) 13 N13000 MESSAGE(” ***RECHTECK76.2X5–76.20–5.00***” )14 N15000 USE_LENGTH_UNITS(CANON_UNITS_MM)15 N16000 SET_FEED_RATE(108167.0000)16 N16000 NICHITHERTEARD_FEED(0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000,0.0000)17 N19000 MESSEAL M151 N24001 M151 19 N….. ON_RESET() 20 N….. ON_RESET() 我没有使用您描述的所有其他设置进行测试。也许你可以做一个类似于 tests/interp/g71-endless-loop/ 的测试用例来触发错误?ON_RESET() 我没有测试你描述的所有其他设置。也许你可以做一个类似于 tests/interp/g71-endless-loop/ 的测试用例来触发错误?ON_RESET() 我没有测试你描述的所有其他设置。也许你可以做一个类似于 tests/interp/g71-endless-loop/ 的测试用例来触发错误?
|
作者
这应该是因为你没有定义 M151,所以解释器首先停止 M151 : 当我执行“rs274 -g bad.ngc”时,它的输出与你的相同。我如何指定 M-func 文件夹到 rs274? |
作者
好吧,看看这个文件:(类似于之前的文件,但没有 M 和 T 代码) |
合作者
[阿拉贝尔1a]
好吧,我用 M 和 T 函数注释了所有行并运行“rs274 -g bad.ngc”。它属于无限循环(因为它应该这样做)但不会增加内存使用量。所以,看起来这个问题是由轴预览引起的,而不是由 rs274 后端引起的。
如果出现死循环,会导致axis的内存占用,从RS274解析器读取指令…
|
作者
听起来合乎逻辑,但可能需要某种内存使用限制或无限循环检测器:) |
合作者
[阿拉贝尔1a]
听起来合乎逻辑,但可能需要某种内存使用限制或无限循环检测器:)
我对代码的了解不足以说明解决它需要什么。但第一步是按照我的建议编写一个可以重现问题的测试,就像我为 G71 所做的那样。它允许那些了解代码的人轻松触发问题并希望找到解决方法。
|
以下是我重现该问题所遵循的步骤:
这是我期望发生的事情:
获取错误或正确的程序预览
这是发生了什么:
打开附加程序后,linuxcnc 使用 100% 的 CPU、整个内存(RAM 和 Swap)冻结。当光标在轴窗口上方时,它看起来像一个“加载”圆圈。单击“关闭按钮”并确认关闭后,axis 窗口消失,但 linuxcnc 并未关闭。终端没有错误。内存和 CPU 仍在加载,linuxcnc 进程不响应 SIGTERM。看起来我写了不正确的程序,但无论如何这不是正确的行为恕我直言。
重新启动后,尝试再次打开该程序。错误仍然存在,但在终端中给出:
`Tkinter 回调回溯中的异常
(最近一次调用最后一次):
文件“/usr/lib/python3.10/tkinter/init .py”,第 1921 行,调用 返回 self.func ( *args) 文件“/home/arabella/progs/linuxcnc-dev/bin/axis”,第 156 行,在 General_Halt if not root_window.tk.call(“nf_dialog”, “.error”, _(“Confirm Close”) ,文本,“警告”,1,_(“是”),_(“否”):_ tkinter.TclError:无法调用“抓取”命令:应用程序已被破坏 无法读取“数据(页面) “: 执行时没有这样的变量 ”
(程序“NoteBook::_destroy”第 5 行)
从
“NoteBook::_destroy.#BWidget.#Class#NoteBook”
(命令绑定到事件)中
调用无效命令名称“139654618640960error_task”
,同时执行
“139654618640960error_task”
(“之后”脚本) 在执行 “139655025579136update” (“之后”脚本)时
命令名称“139655025579136update” 无效.ngc !!!interp_error=1 result=0 last_sequence_number=115 task: 64804 cycles, min=0.000006, max=0.009901, avg=0.001101, 0 延迟偏移 (>10 倍预期周期时间 0.001000 秒)
Tkinter 回调回溯中的异常
(最近一次调用最后一次):
文件“/home/arabella/progs/linuxcnc-dev/bin/axis”,第 1286 行,在 open_file_guts
结果中,seq = o.load_preview(f, canon, initcodes, interpname )
文件“/home/arabella/progs/linuxcnc-dev/lib/python/rs274/glcanon.py”,第 1870 行,在 load_preview
结果中,seq = gcode.parse(f, canon, *args)
RuntimeError: parse_file interp_error
在处理上述异常的过程中,又出现了一个异常:
追溯(最近一次通话最后一次):
文件“/home/arabella/progs/linuxcnc-dev/bin/axis”,第 1303 行,在 open_file_guts
notifications.add(“error”, str(e))
File“/home/arabella /progs/linuxcnc-dev/bin/axis”,第 342 行,在添加
self.place(relx=1, rely=1, y=-20, anchor=”se”)
文件“/usr/lib/python3.10 /tkinter/ init .py”, line 2477, in place_configure
self.tk.call(
_tkinter.TclError: can’t invoke “place” command: application has been destroyed
在处理上述异常的过程中,又出现了一个异常:
回溯(最近调用最后):
文件“/usr/lib/python3.10/tkinter/init.py ”,第 1921 行,调用返回self.func (*args) 文件“/home/arabella/progs/linuxcnc- dev/bin/axis”,第 2233 行,在 open_file 命令中。open_file_name(f) 文件“/home/arabella/progs/linuxcnc-dev/bin/axis”,第 2252 行,在 open_file_name open_file_guts(f) 文件“/home/ arabella/progs/linuxcnc-dev/bin/axis”,第 1314 行,在 open_file_guts root_window.tk.call(“destroy”,“.info.progress”) _tkinter.TclError:无法调用“destroy”命令:应用程序有已被销毁 ^C正在关闭并清理 LinuxCNC… ^CTraceback(最后一次调用):
文件“/home/arabella/progs/linuxcnc-dev/bin/axis-remote”,第 28 行,在
导入 tkinter文件
“/usr/lib/python3.10/tkinter/init .py”,第 44 行,在 TkVersion = float(_tkinter.TK_VERSION) KeyboardInterrupt Shutting down and cleaning up LinuxCNC… ^Cshutting down and cleaning up LinuxCNC… ^Cshutting down and cleaning up LinuxCNC… 注意:使用 POSIX 非实时 ^Cshutting down and cleaning up LinuxCNC … ^Cshutting down and cleaning up LinuxCNC… ^Cshutting down and cleaning up LinuxCNC… 注意:使用 POSIX 非实时 ^Cshutting down and cleaning up LinuxCNC… 注意:使用 POSIX 非实时
^CShutting down and cleaning up LinuxCNC…
注意:使用 POSIX 非实时
`
在此之前它工作正常:
是的,它通常会打开一个更简单的程序
有关我的硬件和软件的信息:
非实时内核,没有额外的硬件,也没有真正的机器——只是普通 pc 上的 linuxcnc
坏的.ngc.zip