开源改变世界!!

执行g代码时重启 #699

推推 grbl 2年前 (2023-02-05) 109次浏览
关闭
AlexMoiseevs 打开了这个问题 2022 年 11 月 13 日 · 12条评论
关闭

执行g代码时重启#699

亚历克斯莫伊塞夫斯 打开了这个问题 2022 年 11 月 13 日 · 12条评论

评论

执行g代码时重启 #699

控制板

ESP32+OLED+SD 有无OLED不影响问题。

机器描述

驱动程序未连接。

输入电路

没有反应

配置文件

name: "ESP32 Dev Controller V4"
board: "ESP32 Dev Controller V4"

stepping:
  engine: RMT
  idle_ms: 255
  dir_delay_us: 1
  pulse_us: 2
  disable_delay_us: 0

axes:
  shared_stepper_disable_pin: gpio.13:high
  
  x:
    steps_per_mm: 17.777
    max_rate_mm_per_min: 100000
    acceleration_mm_per_sec2: 5000
    max_travel_mm: 1000
    homing:
      cycle: 2
      mpos_mm: 10
      positive_direction: false
    
    motor0:
      limit_all_pin: gpio.17:low:pu
      stepstick:
        direction_pin: gpio.14
        step_pin: gpio.12
    motor1:
      null_motor:

  y:
    steps_per_mm: 17.777
    max_rate_mm_per_min: 100000
    acceleration_mm_per_sec2: 5000
    max_travel_mm: 1000
    homing:
      cycle: 2
      mpos_mm: 10
      positive_direction: false

    motor0:
      limit_all_pin: gpio.4:low:pu
      stepstick:
        direction_pin: gpio.15
        step_pin: gpio.26
    motor1:
      null_motor:

  z:
    steps_per_mm: 800
    max_rate_mm_per_min: 2000
    acceleration_mm_per_sec2: 25
    max_travel_mm: 1000
    homing:
      cycle: 1
      mpos_mm: 10
      positive_direction: true

    motor0:
      limit_all_pin: gpio.16:low:pu
      stepstick:
        direction_pin: gpio.33
        step_pin: gpio.27
    motor1:
      null_motor:

spi:
  miso_pin: gpio.19
  mosi_pin: gpio.23
  sck_pin: gpio.18

sdcard:
  cs_pin: gpio.5
  card_detect_pin: NO_PIN

启动消息

FluidNC v1.2.0 using COM4
Exit: Ctrl-C, Ctrl-Q or Ctrl-], Clear screen: CTRL-W
Upload: Ctrl-U, Reset ESP32: Ctrl-R, Send Override: Ctrl-O
$ss
[MSG:INFO: FluidNC v3.0.x (noGit)]
[MSG:INFO: Compiled with ESP32 SDK:v4.4.1-1-gb8050b365e]
[MSG:INFO: Local filesystem type is spiffs]
[MSG:INFO: Configuration file:config.yaml]
[MSG:INFO: Machine ESP32 Dev Controller V4]
[MSG:INFO: Board ESP32 Dev Controller V4]
[MSG:INFO: SPI SCK:gpio.18 MOSI:gpio.23 MISO:gpio.19]
[MSG:INFO: SD Card cs_pin:gpio.5 detect:NO_PIN]
[MSG:INFO: Stepping:RMT Pulse:2us Dsbl Delay:0us Dir Delay:1us Idle Delay:255ms]
[MSG:INFO: Axis count 3]
[MSG:INFO: Shared stepper disable gpio.13]
[MSG:INFO: Axis X (10.000,1010.000)]
[MSG:INFO:   Motor0]
[MSG:INFO:     stepstick Step:gpio.12 Dir:gpio.14 Disable:NO_PIN]
[MSG:INFO:  X All Limit gpio.17:low:pu]
[MSG:INFO:   Motor1]
[MSG:INFO: Axis Y (10.000,1010.000)]
[MSG:INFO:   Motor0]
[MSG:INFO:     stepstick Step:gpio.26 Dir:gpio.15 Disable:NO_PIN]
[MSG:INFO:  Y All Limit gpio.4:low:pu]
[MSG:INFO:   Motor1]
[MSG:INFO: Axis Z (-990.000,10.000)]
[MSG:INFO:   Motor0]
[MSG:INFO:     stepstick Step:gpio.27 Dir:gpio.33 Disable:NO_PIN]
[MSG:INFO:  Z All Limit gpio.16:low:pu]
[MSG:INFO:   Motor1]
[MSG:INFO: Kinematic system: Cartesian]
[MSG:INFO: Using spindle NoSpindle]
[MSG:INFO: STA SSID is not set]
[MSG:INFO: AP SSID FluidNC IP 192.168.0.1 mask 255.255.255.0 channel 1]
[MSG:INFO: AP started]
[MSG:INFO: WiFi on]
[MSG:INFO: Captive Portal Started]
[MSG:INFO: HTTP started on port 80]
[MSG:INFO: Telnet started on port 23]
ok

用户界面软件

没有反应

发生了什么?

浏览器连接esp 32,执行大G代码时,一切OK结束。如果您退出浏览器,那么当您完成从 SD 卡读取后(条带结束),系统将重新启动。发生在 3.4.4 之后的版本上。

其他信息

另一个观察:从手机启动时,禁用 Wi-Fi 后,执行停止。然后崩溃。

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
闪存读取错误,1000
ets_main.c 371
ets 2016 年 6 月 8 日 00:22:57

rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip:0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
时钟模式:DIO 1
负载:0x3fff0030,len:1184
负载:0x40078000,len:12812
负载:0x40080400,len:3032
条目 0x400805e4

[MSG:INFO Init OLED SDA:gpio.21 SCL:gpio.22]
[MSG:INFO: FluidNC v3.0.x (noGit)]
[MSG:INFO: Compiled with ESP32 SDK:v4.4.1-1-gb8050b365e]
[MSG:INFO: Local filesystem type is spiffs]
[MSG:INFO: Configuration file:config.yaml]
[MSG:INFO: Machine ESP32 Dev Controller V4]
[MSG:INFO: Board ESP32 Dev Controller V4]
[MSG:INFO: SPI SCK:gpio.18 MOSI:gpio.23 MISO:gpio.19]
[MSG:INFO: SD Card cs_pin:gpio.5 detect:NO_PIN]
[MSG:INFO: Stepping:RMT Pulse:2us Dsbl Delay:0us Dir Delay :1us 空闲延迟:255ms]
[MSG:INFO: 轴计数 3]
[MSG:INFO: 共享步进器禁用 gpio.13]
[MSG:INFO: X 轴 (10.000,1010.000)]
[MSG:INFO: Motor0]
[MSG:INFO: stepstick Step:gpio.12 Dir:gpio.14 Disable:NO_PIN]
[MSG:INFO: X All Limit gpio.17:low:pu]
[MSG:INFO: Motor1]
[MSG:INFO: Y 轴(10.000,1010.000)]
[MSG:INFO: Motor0]
[MSG:INFO: stepstick Step:gpio.26 Dir:gpio.15 Disable:NO_PIN]
[MSG:INFO: Y All Limit gpio.4:low:pu]
[ MSG:INFO: Motor1]
[MSG:INFO: Z 轴 (-990.000,10.000)]
[MSG:INFO: Motor0]
[MSG:INFO: stepstick Step:gpio.27 Dir:gpio.33 Disable:NO_PIN]
[MSG:信息:Z All Limit gpio.16:low:pu]
[MSG:INFO: Motor1]
[MSG:INFO: Kinematic system: Cartesian]
[MSG:INFO: Using spindle NoSpindle]
[MSG:INFO: STA SSID is not set]
[MSG:INFO: AP SSID FluidNC IP 192.168.0.1 mask 255.255.255.0 channel 1]
[MSG:INFO: AP started]
[MSG:INFO: WiFi on]
[MSG:INFO: Captive Portal Started]
[MSG:INFO: HTTP在端口 80 上启动]
[MSG:INFO: Telnet 在端口 23 上启动]

Grbl 3.0 [FluidNC v3.0.x (noGit) (wifi) ‘$’ for help]
[MSG:INFO: ‘$H’|’$X’ to unlock]
[MSG:INFO: Channel 自动报告间隔设置为 100 ms]
[MSG:INFO: 通道自动报告间隔设置为 100 ms]
[MSG:INFO: 注意:已解锁]

在核心 1 上的 PC 0x401a224f 处调用了 abort()

Backtrace:0x40085e25:0x3ffb22d00x4008f3b5:0x3ffb22f0 0x4009534d:0x3ffb2310 0x401a224f:0x3ffb2390 0x401a2296:0x3ffb23b0 0x401a205b:0x3ffb23d0 0x401b997d:0x3ffb23f0 0x4010c3ff:0x3ffb2410 0x4010e961:0x3ffb2430 0x400ed211:0x3ffb2450 0x400d561d:0x3ffb24b0 0x400d5766:0x3ffb24d0 0x400edada:0x3ffb2500 0x400edb79:0x3ffb2520 0x400e1d68:0x3ffb2540 0x400dc0b9:0x3ffb2560 0x400dc70e :0x3ffb2580 0x400e1dc1:0x3ffb25a0 0x400dafd2:0x3ffb25c0 0x400eb818:0x3ffb2680 0x400ec71a:0x3ffb26a0 0x400e1bed:0x3ffb27e0 0x40110ffb45:0x3

ELF 文件 SHA256:0000000000000000

重新启动…
ets 2016 年 6 月 8 日 00:22:57

rst:0xc(SW_CPU_RESET),boot:0x13(SPI_FAST_FLASH_BOOT)
configsip:0,SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
模式:DIO,时钟div 1
负载:0x3fff0030,len:1184
负载:0x40078000,len:12812
负载:0x40080400,len:3032
条目 0x400805e4

[MSG:INFO Init OLED SDA:gpio.21 SCL:gpio.22]
[MSG:INFO: FluidNC v3.0.x (noGit)]
[MSG:INFO: Compiled with ESP32 SDK:v4.4.1-1-gb8050b365e]
[MSG:INFO: 本地文件系统类型为 spiffs]
[MSG:ERR: 由于恐慌而跳过配置文件]
[MSG:INFO: 使用默认配置]
[MSG:INFO: Axes: 使用默认值]
[MSG:INFO: 机器默认值 (试驾)]
[MSG:INFO: Board None]
[MSG:INFO: SPI not defined]
[MSG:INFO: No SD Card CS Pin]
[MSG:INFO: See http://wiki.fluidnc.com/en/配置/sd_card#sdfallbackcs-access-sd-without-a-config-file%5D
[MSG:INFO: Stepping:RMT Pulse:4us Dsbl Delay:0us Dir Delay:0us Idle Delay:255ms]
[MSG:INFO: Axis count 3 ]
[MSG:INFO: X 轴 (-1000.000,0.000)]
[MSG:INFO: Y 轴 (-1000.000,0.000)]
[MSG:INFO: Z 轴 (-1000.000,0.000)]
[MSG:INFO: 运动系统: Cartesian]
[MSG:INFO: Using spindle NoSpindle]
[MSG:INFO: STA SSID is not set]
[MSG:INFO: AP SSID FluidNC IP 192.168.0.1 mask 255.255.255.0 channel 1]
[MSG:INFO: AP 已启动]
[ MSG:INFO: WiFi on]
[MSG:INFO: Captive Portal Started]
[MSG:INFO: HTTP started on port 80]
[MSG:INFO: Telnet started on port 23]

Grbl 3.0 [FluidNC v3.0.x (noGit) (wifi) ‘$’ 寻求帮助]
[MSG:INFO: ‘$H’|’$X’ 解锁]

执行g代码时重启 #699 AlexMoiseevs 更改了标题 问题: 执行g代码时重启 2022 年 11 月 13 日
执行g代码时重启 #699
合作者
米奇布拉德利 评论了 2022 年 11 月 16 日  

我想我知道为什么会这样。我会尽快修复它。问题与 websocket 连接消失有关。

执行g代码时重启 #699

找到异常的发生点。发布 FluidNC-3.6.5-pre2
最初,崩溃发生在第 149 行的文件 Protocol.cpp 中输出消息时
*chan << “[MSG:” << infile->path() << ” file job succeeded ]\n”;
在第 140 行的 Report.cpp 文件中进一步删除它时
channel.ack(status_code);
我删除了这些排水管——一切正常。我还没有注意到任何其他错误。
我在另一个项目中也遇到过类似的情况。在中断中执行大量代码时,发生内核超时异常。也可能是栈溢出造成的。

执行g代码时重启 #699

好吧,赶上。如果退出 Web 界面然后暂停并结束程序——也会崩溃。在第 641 行满足 Protocol.cpp
infile->getChannel() << “[MSG:”
<< “Reset during file job at line: ” << infile->getLineNumber();

执行g代码时重启 #699

这些与 websockets 的过早关闭是一致的。

执行g代码时重启 #699

遗留一个问题:在执行过程中重新连接时,G 代码
周期性崩溃。我还没有找到模式。
并且在 3.6.5pre 2 版本中,文件不会上传到 SD。

执行g代码时重启 #699

文件上传问题在 WebUI 代码中。我几天前修复了它,但还没有发布。

重新连接是一个很难解决的问题。问题是,当您重新连接时,FluidNC 必须通过 HTTP 将 index.html.gz 发送到浏览器。index.html.gz 存储在 FLASH 文件系统中,因此发送它需要大量的 FLASH 访问。与 RAM 访问相比,FLASH 访问非常慢。此外,FluidNC核心代码也基本存储在FLASH中;ESP32 上几乎没有足够的 RAM,尤其是指令 RAM (IRAM) 不足以容纳所有 FluidNC 代码。即使从 FLASH 中取代码,ESP32 也能通过缓存保持较高的指令执行率。不幸的是,当 ESP32 在中断处理程序中并且正在对数据进行 FLASH 访问时,缓存未命中不会正常工作,就像您尝试发送 index.html 时发生的那样。

可以标记中断例程,以便将它们永久缓存在有限数量的 IRAM 中。不幸的是,xtensa C++ 编译器存在缺陷,虚拟方法的 vtable 以及 switch 语句的跳转表都留在闪存中,而不是将它们缓存在 RAM 中。因此,如果您在 ISR 处理程序中调用虚拟方法或编写 switch 语句,当 FLASH 控制器正忙于从 index.html.gz 访问数据时,如果您碰巧在 vtable 或跳转表上发生缓存未命中,则可能会导致崩溃.

我们使用的一种缓解措施是自定义链接器脚本,该脚本将某些 vtables 强制放入 RAM。这真的很难维护,因为没有简单的方法可以找到所有必须特殊封装的模块。由于链接器脚本中的一些命名更改,当我们更改为新的编译器和框架版本时,它完全崩溃了。

另一个缓解措施是,我这样做是为了在运行时尝试重新加载 WebUI,只是将您重定向到一个页面,上面写着“抱歉,现在无法重新加载”。但有时我会关闭它,这样我就可以进行完全重新加载,以期找到需要移动的虚表。

即使使用重定向,也有很小的崩溃概率,因为必须从 FLASH 访问重定向页面 – 但它非常小,因此崩溃窗口更小。

ESP32 通过一系列技巧实现其非凡的成本/性能,当您尝试使用它构建复杂的实时系统时,很难避免掉入这些技巧之间的裂缝之一。

另一种缓解方法可能是选择从 SD 获取 index.html.gz – 但是当您尝试从一个 SD“同时”访问 index.html.gz 和 GCode 时,您可能会遇到 GCode 计时故障的可能性。它可能有效,但我可以想象一个全新的微妙问题层,让我撕掉更多的头发 – 而不会增加微小的捐赠率,这甚至不支付我在 FluidNC 上工作时喝的咖啡的费用。

另一种可能性是从主机获取 index.html.gz。这有其自身的一系列问题。

执行g代码时重启 #699

哦,哎哟。这是一个多处理器同步问题。当来自浏览器的 websocket 关闭时,websocket disconnect 事件触发,从活动 IO 通道列表中删除 websocket 对象,然后删除该对象。与此同时,另一个 CPU 核心正在轮询所有活动的 IO 通道,以查看是否有任何通道要发送状态,并且另一个核心上的代码已经从列表中获取了 websocket 对象指针,因此它调用了一个已删除的对象. 我必须考虑解决这个问题的最佳方法。

执行g代码时重启 #699

感谢您的全面回答!

Offtop,我已经找了两天了,无论如何都找不到:如何在程序结束时从 G 代码中禁用步进电机?

执行g代码时重启 #699

嗯,你太小看我了……

G代码

G90
G1 X720 F100000
G1 X0

G90
G1 X720 F100000
G1 X0

$MD

命令

$SD/Run=/test2.g
<空闲|MPos:280.981,0.000,0.000,0.000|FS:0,0|Pn:A>
<空闲|MPos:280.981,0.000,0.000,0.000|FS:0,0 |Pn:A|SD:0.00,/sd/test2.g>
[MSG:INFO: Disabling all motors] <——– does not turn off!!!!!!!!!!! !
[MSG:/sd/test2.g 文件作业成功]
<Idle|MPos:280.981,0.000,0.000,0.000|FS:0,0>
$LocalFS/Run=/macro1.g
<Idle|MPos:280.981,0.000, 0.000,0.000|FS:0,0|Pn:A|WCO:281.000,0.000,0.000,0.000|SD:0.00,/spiffs/macro1.g>
[MSG:INFO: 禁用所有电机] <—– — 手动关闭!!!!!!!
[MSG:/spiffs/macro1.g 文件作业成功]
<Idle|MPos:280.981,0.000,0.000,0.000|FS:0,0>

执行g代码时重启 #699
作者

想通了,需要暂停一下:G04 P1

ps
并没有什么好处。看起来像拐杖。。。

执行g代码时重启 #699

需要暂停的原因是因为 $MD 不是 GCode 命令 – NIST 标准 GCode 语言对电机一无所知。由于MD不经过GCode解释器处理,因此无法自动同步到GCode执行顺序。您需要明确地将 GCode 执行与暂停同步。

处理 GCode 行时,在获取、解析并传递给运动规划器之前,一行不会完成。预读对于确保速度和方向变化时的平稳运动是必要的。否则,机器将不得不在每个运动段之间加速和减速直至停止。

MitchBradley 添加了引用此问题的提交 2022 年 11 月 21 日

执行g代码时重启 #699 米奇布拉德利 补充道 已解决等待发布 我们有一个尚未发布的修复程序标签 2022 年 12 月 3 日
执行g代码时重启 #699 bdring 关闭此 作为 完成 0e5d2d5 2022 年 12 月 9 日
喜欢 (0)