开源改变世界

冻结某些程序 #1965

推推 grbl 3年前 (2023-01-31) 193次浏览
打开
arabel1a 打开了这个问题 2022 年 8 月 27 日 · 7条评论
打开

冻结某些程序#1965

arabel1a 打开了这个问题 2022 年 8 月 27 日 · 7条评论

注释

冻结某些程序 #1965

以下是我重现该问题所遵循的步骤:

  1. 在没有 libmodbus 的情况下安装和构建 linuxcnc-dev,–with-realtime=uspace
  2. 使用标准 9 轴 sim 配置,但将所有 ini 参数从轴 A 复制到轴 B(因此 B 成为公共轴,而不是锁定分度器)
  3. 将软限制增加到一个大数字(+-100000 应该足够了)
  4. 添加一个 M 函数 M166、M167、M152、M151、M106(无论它们做什么,即使它们只是回显“某事”并退出 0,也会出现 bug apperas
  5. 打开文件“bad.ngc”

这是我期望发生的事情:

获取错误或正确的程序预览

这是发生了什么:

打开附加程序后,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

冻结某些程序 #1965

好吧,这个程序有一个无限循环,所以冻结是可以的。但是为什么会占用这么多内存呢?

冻结某些程序 #1965
合作者
彼得赖因霍尔特森 评论了 2022 年 8 月 27 日 通过电子邮件
冻结某些程序 #1965

得不到层出不穷的指令

这应该是因为你没有定义 M151,所以解释器首先停止 M151 :
—> Unknown m code used: M151
—> N24001 M151
—> 19 N….. ON_RESET()

当我执行“rs274 -g bad.ngc”时,它的输出与你的相同。我如何指定 M-func 文件夹到 rs274?

冻结某些程序 #1965
作者
阿拉贝尔1a 评论了 2022 年 8 月 27 日  

好吧,看看这个文件:(类似于之前的文件,但没有 M 和 T 代码)
当我执行“rs274 -g bad.ngc”时,它会在无限循环中生成字符串,就像它应该的那样,内存使用量保持不变。
当我在 axis gui 中打开它时,它冻结,增加了它的内存使用量(大约 50 MB/秒),所以几分钟后它填满了所有 RAM 并交换而没有机会关闭和清空内存,所以我必须重新启动。
坏的.ngc.zip

冻结某些程序 #1965
合作者
彼得赖因霍尔特森 评论了 2022 年 8 月 27 日 通过电子邮件
冻结某些程序 #1965

[arabel1a]
好吧,我用 M 和 T 函数注释了所有行并运行“rs274 -g bad.ngc”。它属于无限循环(因为它应该这样做)但不会增加内存使用量。所以,看起来这个问题是由轴预览引起的,而不是由 rs274 后端引起的。
如果出现死循环,会导致axis的内存占用,axis从RS274解析器读取指令…

— Happy hacking Petter Reinholdtsen

听起来合乎逻辑,但可能需要某种内存使用限制或无限循环检测器:)

冻结某些程序 #1965
合作者
彼得赖因霍尔特森 评论了 2022 年 8 月 27 日 通过电子邮件

免费注册 在 GitHub 上加入此对话。已有帐户? 登录评论
标签
还没有
项目

还没有

发展

没有分支机构或拉取请求

2名参加者
冻结某些程序 #1965冻结某些程序 #1965

喜欢 (0)