开源改变世界!!

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750

推推 grbl 2年前 (2023-02-05) 143次浏览
关闭
synman 打开了这个 issue 2022 年 12 月 17 日 · 23条评论
关闭

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显#750

synman 打开了这个 issue 2022 年 12 月 17 日 · 23条评论

评论

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750
贡献者

控制板

打开构建 BlackBox X32

机器描述

蜂王临

输入电路

N/A

配置文件

board: Open Builds BlackBox X32
name: BlackBox_X32_XYYZ-DOOR
meta: Handcrafted by Shell M Shrader
stepping:
  engine: RMT
  idle_ms: 255
  pulse_us: 2
  dir_delay_us: 1
  disable_delay_us: 0
  segments: 12
axes:
  shared_stepper_disable_pin: gpio.17:low
  shared_stepper_reset_pin: NO_PIN
  x:
    steps_per_mm: 200.0
    max_rate_mm_per_min: 3000.0
    acceleration_mm_per_sec2: 100.0
    max_travel_mm: 505.0
    soft_limits: true
    homing:
      cycle: 2
      allow_single_axis: true
      positive_direction: true
      mpos_mm: 0.0
      feed_mm_per_min: 100.0
      seek_mm_per_min: 2000.0
      settle_ms: 500
      seek_scaler: 1.1
      feed_scaler: 1.1
    motor0:
      limit_neg_pin: gpio.35
      limit_pos_pin: NO_PIN
      limit_all_pin: NO_PIN
      hard_limits: true
      pulloff_mm: 5.0
      standard_stepper:
        step_pin: gpio.12
        direction_pin: gpio.14
        disable_pin: NO_PIN
  y:
    steps_per_mm: 200.0
    max_rate_mm_per_min: 3000.0
    acceleration_mm_per_sec2: 100.0
    max_travel_mm: 505.0
    soft_limits: true
    homing:
      cycle: 2
      allow_single_axis: true
      positive_direction: true
      mpos_mm: 0.0
      feed_mm_per_min: 100.0
      seek_mm_per_min: 2000.0
      settle_ms: 500
      seek_scaler: 1.1
      feed_scaler: 1.1
    motor0:
      limit_neg_pin: gpio.34
      limit_pos_pin: NO_PIN
      limit_all_pin: NO_PIN
      hard_limits: true
      pulloff_mm: 5.0
      standard_stepper:
        step_pin: gpio.27
        direction_pin: gpio.26
        disable_pin: NO_PIN
    motor1:
      limit_neg_pin: NO_PIN
      limit_pos_pin: NO_PIN
      limit_all_pin: NO_PIN
      hard_limits: false
      pulloff_mm: 1.0
      standard_stepper:
        step_pin: gpio.33
        direction_pin: gpio.32
        disable_pin: NO_PIN
  z:
    steps_per_mm: 200.0
    max_rate_mm_per_min: 600.0
    acceleration_mm_per_sec2: 100.0
    max_travel_mm: 105.0
    soft_limits: true
    homing:
      cycle: 1
      allow_single_axis: true
      positive_direction: true
      mpos_mm: 0.0
      feed_mm_per_min: 100.0
      seek_mm_per_min: 300.0
      settle_ms: 500
      seek_scaler: 1.1
      feed_scaler: 1.1
    motor0:
      limit_neg_pin: gpio.39
      limit_pos_pin: NO_PIN
      limit_all_pin: NO_PIN
      hard_limits: true
      pulloff_mm: 5.0
      standard_stepper:
        step_pin: gpio.15
        direction_pin: gpio.2:low
        disable_pin: NO_PIN
kinematics:
  Cartesian: null
spi:
  miso_pin: gpio.19
  mosi_pin: gpio.23
  sck_pin: gpio.18
sdcard:
  cs_pin: gpio.5
  card_detect_pin: NO_PIN
control:
  safety_door_pin: gpio.16:pu
  reset_pin: NO_PIN
  feed_hold_pin: NO_PIN
  cycle_start_pin: NO_PIN
  macro0_pin: NO_PIN
  macro1_pin: NO_PIN
  macro2_pin: NO_PIN
  macro3_pin: NO_PIN
coolant:
  flood_pin: NO_PIN
  mist_pin: gpio.21
  delay_ms: 0
probe:
  pin: gpio.22:low
  check_mode_start: true
macros:
  startup_line0: null
  startup_line1: null
  macro0: null
  macro1: null
  macro2: null
  macro3: null
start:
  must_home: true
  deactivate_parking: false
  check_limits: false
parking:
  enable: false
  axis: Z
  target_mpos_mm: -5.0
  rate_mm_per_min: 800.0
  pullout_distance_mm: 5.0
  pullout_rate_mm_per_min: 250.0
user_outputs:
  analog0_pin: NO_PIN
  analog1_pin: NO_PIN
  analog2_pin: NO_PIN
  analog3_pin: NO_PIN
  analog0_hz: 5000
  analog1_hz: 5000
  analog2_hz: 5000
  analog3_hz: 5000
  digital0_pin: NO_PIN
  digital1_pin: NO_PIN
  digital2_pin: NO_PIN
  digital3_pin: NO_PIN
arc_tolerance_mm: 0.002
junction_deviation_mm: 0.01
verbose_errors: false
report_inches: false
enable_parking_override_control: false
use_line_numbers: false
planner_blocks: 16
PWM:
  pwm_hz: 5000
  direction_pin: gpio.4
  output_pin: gpio.25
  enable_pin: gpio.13
  disable_with_s0: false
  s0_with_disable: true
  spinup_ms: 30000
  spindown_ms: 10000
  tool_num: 0
  speed_map: 0=0.000% 0=30.000% 6000=30.000% 24000=100.000%
  off_on_alarm: false

启动消息

Send: $startup/show
Recv: [MSG:INFO: FluidNC v3.6.5]
Recv: [MSG:INFO: Compiled with ESP32 SDK:v4.4.1-1-gb8050b365e]
Recv: [MSG:INFO: Local filesystem type is spiffs]
Recv: [MSG:INFO: Configuration file:config.yaml]
Recv: [MSG:INFO: Machine BlackBox_X32_XYYZ-DOOR]
Recv: [MSG:INFO: Board Open Builds BlackBox X32]
Recv: [MSG:INFO: SPI SCK:gpio.18 MOSI:gpio.23 MISO:gpio.19]
Recv: [MSG:INFO: SD Card cs_pin:gpio.5 detect:NO_PIN]
Recv: [MSG:INFO: Stepping:RMT Pulse:2us Dsbl Delay:0us Dir Delay:1us Idle Delay:255ms]
Recv: [MSG:INFO: Axis count 3]
Recv: [MSG:INFO: Shared stepper disable gpio.17:low]
Recv: [MSG:INFO: Axis X (-505.000,0.000)]
Recv: [MSG:INFO:   Motor0]
Recv: [MSG:INFO:     standard_stepper Step:gpio.12 Dir:gpio.14 Disable:NO_PIN]
Recv: [MSG:INFO:  X Neg Limit gpio.35]
Recv: [MSG:INFO: Axis Y (-505.000,0.000)]
Recv: [MSG:INFO:   Motor0]
Recv: [MSG:INFO:     standard_stepper Step:gpio.27 Dir:gpio.26 Disable:NO_PIN]
Recv: [MSG:INFO:  Y Neg Limit gpio.34]
Recv: [MSG:INFO:   Motor1]
Recv: [MSG:INFO:     standard_stepper Step:gpio.33 Dir:gpio.32 Disable:NO_PIN]
Recv: [MSG:INFO: Axis Z (-105.000,0.000)]
Recv: [MSG:INFO:   Motor0]
Recv: [MSG:INFO:     standard_stepper Step:gpio.15 Dir:gpio.2:low Disable:NO_PIN]
Recv: [MSG:INFO:  Z Neg Limit gpio.39]
Recv: [MSG:INFO: safety_door_pin gpio.16:pu]
Recv: [MSG:INFO: Kinematic system: Cartesian]
Recv: [MSG:INFO: PWM Spindle Ena:gpio.13 Out:gpio.25 Dir:gpio.4 Freq:5000Hz Period:8191]
Recv: [MSG:INFO: Using spindle PWM]
Recv: [MSG:INFO: Mist coolant gpio.21]
Recv: [MSG:INFO: Probe Pin: gpio.22:low]
Recv: [MSG:INFO: Connecting to STA SSID:SHELLWLAN]
Recv: [MSG:INFO: Connecting.]
Recv: [MSG:INFO: Connected - IP is 10.151.51.35]
Recv: [MSG:INFO: WiFi on]
Recv: [MSG:INFO: Start mDNS with hostname:http://blackbox-x32.local/]
Recv: [MSG:INFO: SSDP Started]
Recv: [MSG:INFO: HTTP started on port 80]
Recv: [MSG:INFO: Telnet started on port 23]

用户界面软件

CNCjs 和 WebUI

发生了什么?

我看到 acks 跨越“通道”边界。来自 webui / telnet pop 的 OKs on serial 反之亦然。

这是一个视频:

https://youtu.be/-xPGeBrDXko

其他信息

没有反应

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750

这在 InputThread 分支中得到修复。我不知道我们什么时候会把它提升到主线。

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750
贡献者作者

我可能只是拉它并构建它。如果使用 platformio 构建 FluidNC 的难度只有 Grbl_Esp32 的一半,那么这是显而易见的。

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750

请尝试一下。我们需要对该分支进行一些外部测试。我一直在我的机器上使用它。

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750

它尝试在一个内核上执行所有 UI IO——网络、串行等等——在另一个内核上执行 gcode 和踩踏。原则上这对我来说似乎是个好主意,但我必须解决几个同步问题才能使其正常工作。

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750
贡献者作者

哇,这个分支里有很多。

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750
贡献者作者
同步人 评论了 2022 年 12 月 23 日  

@MitchBradley

您希望我如何报告/解决此分支 (InputThread) 中的回归问题?

例如,我们从 $CD 中得到了一些格式错误的 yaml:

stepping:<cr><lf>
  engine:RMT<cr><lf>

名称/值对中的名称后应始终有一个空格,如下所示:

stepping: <cr><lf>
  engine: RMT<cr><lf>

当 yaml 解析器尝试处理这样的事情时,它会变得更加复杂:

  shared_stepper_disable_pin:gpio.17:low<cr><lf>

如果这样做,它将通过语法检查并正确解析gpio.17:low为值:

  shared_stepper_disable_pin: gpio.17:low<cr><lf>

在预处理/接收配置数据时,我现在已经解决了这个问题:

self.lastResponse = self.lastResponse + (lastResponse.replace(":", ": ", 1) if not ": " in lastResponse else lastResponse) + "\n" 
问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750
贡献者作者
同步人 评论了 2022 年 12 月 23 日  

一些额外的观察:

从 3 个界面(串行、WebUI 和 telnet)中的任何一个:

  • $CD响应被回显到 telnet 和 WebUI
  • $Settings/List响应被回显到 telnet 和 WebUI
  • 响应等其他命令$axes会回显到 telnet 和 WebUI
  • 状态报告?响应/acks 留在他们的频道中——没有泄漏
  • 解析器状态$G响应/确认保留在请求者的通道中——没有泄漏

最后一个标注特定于 WebUI,仅供参考。它不会显示任何状态报告请求的确认 (ok),包括自动报告和您触发的报告。它似乎确实在向他们展示其他一切。

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750
贡献者作者

我明天会做几份工作(可能会为此腾出空间),如果有任何奇怪的事情发生,我会报告。

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750
贡献者作者
同步人 评论了 2022 年 12 月 23 日  

00af513

很好……我会把它拉进来并退出我自己的黑客

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750

最后一个标注特定于 WebUI,仅供参考。它不会显示任何状态报告请求的确认 (ok),包括自动报告和您触发的报告。它似乎确实在向他们展示其他一切。

根据 GRBL 协议,状态报告是单字符“实时”命令,其处理方式不同于面向行的命令。ok acks 仅适用于行。

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750

相对于线路协议,实时字符是“带外”的。

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750
贡献者作者

明白了。之所以调用它,是因为我无法在 WebUI 中验证它们的 acks。我明白为什么他们被压制了……终端窗口将每隔一行快速填满无用的“ok”消息。

其他实时命令,如 feed hold 和 resume(!和 ~)的行为相同……我确实验证了它们也在它们的通道内。

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750
贡献者作者
同步人 评论了 2022 年 12 月 23 日  

看一下这个:

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750

我认为 cycle start 是一个实时命令……它绝对不需要 \r 但它吐出一个 OK。我会在 nea 站点复习一下。

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750
贡献者作者
同步人 评论了 2022 年 12 月 23 日  

呃,我想通了…..用户错误。我在那里有点困惑。

我正在点击进入。循环开始的那个 ok 是由我在它之前发送的 \r 触发的。这没东西看。

这实际上对我一直在挠头的事情真的很有帮助……

我的发件人只做面向行的处理。我终于明白为什么我的实时命令没问题了……它们后面跟着 /r!

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750

bf002a2

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750
贡献者作者

当我回家时得到以下信息。我没有任何启动线路

Send: $H
Recv: [MSG:ERR: Startup line: Bad GCode number format]
Recv: [MSG:ERR: Startup line: Bad GCode number format]

来自这里:

void settings_execute_startup() {
    Error status_code;
    for (int i = 0; i < config->_macros->n_startup_lines; i++) {
        String      str = config->_macros->startup_line(i);
        const char* s   = str.c_str();
        if (s && strlen(s)) {
            // We have to copy this to a mutable array because
            // gc_execute_line modifies the line while parsing.
            char gcline[256];
            strncpy(gcline, s, 255);
            status_code = gc_execute_line(gcline);
            // Uart0 << ">" << gcline << ":";
            if (status_code != Error::Ok) {
                log_error("Startup line: " << errorString(status_code) << " " << gcline);
            }
        }
    }
}

config->_macros->startup_line(i) 为空:

Recv: [MSG:ERR: Startup line: Bad GCode number format for line: [0] gcline: [NULL] contents: [null]
Recv: [MSG:ERR: Startup line: Bad GCode number format for line: [1] gcline: [NULL] contents: [null]

让我们检查一下我的启动行:

Send: $N
Recv: $N0=null
Recv: $N1=null

我无法清除它们:

Send: $N0=
Recv: error:3

我的猜测是这只需要检查是否为 null 并将其视为没有启动行。我很好奇你是如何重置它们的。假设我做了 $N0=G91。…我该如何撤消它?

警报和消息 ([MSG:) 正在广播到所有频道。我认为这是一件好事。像这样的东西:

[MSG:INFO: Disabling all motors]
[MSG:INFO: Enabling all motors]
[MSG:INFO: Caution: Unlocked]
[MSG:INFO: Soft limit on X target:50.000]
ALARM:2
[MSG:INFO: Reset to continue]

Grbl 3.6 [FluidNC v3.6.5-pre2 (InputThread-bf002a23-dirty) (wifi) '$' for help]
[MSG:INFO: '$H'|'$X' to unlock]
[MSG:ERR: Startup line: Bad GCode number format]
[MSG:ERR: Startup line: Bad GCode number format]
[MSG:ERR: Startup line: Bad GCode number format]
[MSG:ERR: Startup line: Bad GCode number format]
问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750

正确的说法是:

macros:
  startup_line0:
  startup_line1:
  macro0:

不是

   startup_line0: null

FluidNC 配置文件格式不是真正的 YAML。它根本没有数据类型,所以没有“null”关键字这样的东西。就配置解析器而言,每个值只是一个字符串。将该字符串解释为数字或其他任何内容由单个项目完成,而不是在解析器级别。

你可能会争辩说,我在某种程度上同意你的观点,提到它与 YAML 的相似性是一种误导。另一方面,假装它是 YAML 确实有许多编辑器和显示代理会着色并帮助缩进的优势。

我个人在我的文件中使用扩展名 .flnc,而不是 .yaml,但其他扩展名并不那么挑剔。

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750

Re $N0=G91(例如)-目前更改启动行的唯一方法是发送,例如

$/macros/startup_line0=G0 X0 Y0

那不是持久的;要坚持下去,您必须更改配置文件。

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750
贡献者作者
同步人 评论了 2022 年 12 月 27 日  

null 可能是通过 python yaml 解析器插入的。我也在我的“已解析”配置文件中的其他几个地方看到它:

kinematics:
  Cartesian: null
...
macros:
  startup_line0: null
  startup_line1: null
  macro0: null
  macro1: null
  macro2: null
  macro3: null

我现在可能可以通过一些替换/替换逻辑来解决这个问题。另一个想法是在 FluidNC 中过滤掉它们。拥有像配置文件这样的“yaml”并不是那么吸引人,因为它不能很好地与像 python 那样的强化解析器一起工作。

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750
贡献者作者

我现在已经在我自己的客户端/发件人中清理了这个。我讨厌必须在任何地方解析文字“null”的想法。

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750
合作者

我们完了吗?我们可以关闭这个吗?

问题:FluidNC v3.6.5 奇怪的 ack 跨通道回显 #750
贡献者作者

是的!