[FluidNC Issue#1571] Problem: invalid_arc does not account for multiple turns to calculate safe limits?

未分类 bolang 4个月前 (10-14) 42次浏览

Issue #1571 | 状态: 已关闭 | 作者: Popeyef5 | 创建时间: 2025-09-23


Wiki Search Terms

G2/G3

Controller Board

I’m using a Jackpot2 CNC Controller

https://docs.v1e.com/electronics/jackpot2/

Machine Description

Gantry router with dual Y motors, cartesian setup, mechanical endstops.

Input Circuits


Configuration file

board: Jackpot V2 TMC2226
name: HoldMaker
meta: 07-10-2025 RyanZ
planner_blocks: 32
stepping:
  engine: I2S_STATIC
  idle_ms: 255
  pulse_us: 2
  dirdelayus: 1
  disabledelayus: 0
uart1:
  txd_pin: gpio.16
  rxd_pin: gpio.4
  rtspin: NOPIN
  baud: 115200
  mode: 8N1
axes:
  sharedstepperdisablepin: NOPIN
  x:
    stepspermm: 200
    maxratemmpermin: 9000
    accelerationmmper_sec2: 200
    maxtravelmm: 300
    soft_limits: true
    homing:
      cycle: 2
      positive_direction: false
      mpos_mm: 0
      feedmmper_min: 300
      seekmmper_min: 1500
      settle_ms: 500
      seek_scaler: 1.1
      feed_scaler: 1.1
    motor0:
      limitnegpin: gpio.25:low
      limitpospin: NO_PIN
      limitallpin: NO_PIN
      hard_limits: false
      pulloff_mm: 4
      tmc_2209:
        uart_num: 1
        addr: 0
        cspin: NOPIN
        rsenseohms: 0.11
        run_amps: 0.8
        homing_amps: 0.8
        hold_amps: 0.7
        microsteps: 8
        stallguard: 0
        stallguard_debug: false
        toff_disable: 0
        toff_stealthchop: 5
        toff_coolstep: 3
        run_mode: StealthChop
        homing_mode: StealthChop
        use_enable: false
        direction_pin: i2so.1
        step_pin: i2so.2
        disable_pin: I2SO.0
  y:
    stepspermm: 200
    maxratemmpermin: 9000
    accelerationmmper_sec2: 200
    maxtravelmm: 300
    soft_limits: true
    homing:
      cycle: 2
      positive_direction: false
      mpos_mm: 0
      feedmmper_min: 300
      seekmmper_min: 1500
      settle_ms: 500
      seek_scaler: 1.1
      feed_scaler: 1.1
    motor0:
      limitnegpin: gpio.33:low
      limitpospin: NO_PIN
      limitallpin: NO_PIN
      hard_limits: false
      pulloff_mm: 4
      tmc_2209:
        uart_num: 1
        addr: 1
        cspin: NOPIN
        rsenseohms: 0.11
        run_amps: 0.8
        homing_amps: 0.8
        hold_amps: 0.7
        microsteps: 8
        stallguard: 0
        stallguard_debug: false
        toff_disable: 0
        toff_stealthchop: 5
        toff_coolstep: 3
        run_mode: StealthChop
        homing_mode: StealthChop
        use_enable: false
        step_pin: i2so.5
        direction_pin: i2so.4
        disable_pin: I2SO.7
    motor1:
      limitnegpin: gpio.35:low
      limitpospin: NO_PIN
      limitallpin: NO_PIN
      hard_limits: false
      pulloff_mm: 4
      tmc_2209:
        uart_num: 1
        addr: 3
        cs_pin: i2so.14
        rsenseohms: 0.11
        run_amps: 0.8
        homing_amps: 0.8
        hold_amps: 0.7
        microsteps: 8
        stallguard: 0
        stallguard_debug: false
        toff_disable: 0
        toff_stealthchop: 5
        toff_coolstep: 3
        run_mode: StealthChop
        homing_mode: StealthChop
        use_enable: false
        step_pin: i2so.13
        direction_pin: i2so.12
        disable_pin: I2SO.15
  z:
    stepspermm: 200
    maxratemmpermin: 1200
    accelerationmmper_sec2: 80
    maxtravelmm: 147
    soft_limits: true
    homing:
      cycle: 1
      positive_direction: true
      mpos_mm: 147
      feedmmper_min: 300
      seekmmper_min: 800
      settle_ms: 500
      seek_scaler: 1.1
      feed_scaler: 1.1
    motor0:
      limitnegpin: NO_PIN
      limitpospin: gpio.32:low
      limitallpin: NO_PIN
      hard_limits: false
      pulloff_mm: 4
      tmc_2209:
        uart_num: 1
        addr: 2
        cspin: NOPIN
        rsenseohms: 0.11
        run_amps: 0.8
        homing_amps: 0.8
        hold_amps: 0.7
        microsteps: 8
        stallguard: 0
        stallguard_debug: false
        toff_disable: 0
        toff_stealthchop: 5
        toff_coolstep: 3
        run_mode: StealthChop
        homing_mode: StealthChop
        use_enable: false
        step_pin: i2so.10
        direction_pin: i2so.9
        disable_pin: I2SO.8
i2so:
  bck_pin: gpio.22
  data_pin: gpio.21
  ws_pin: gpio.17
spi:
  miso_pin: gpio.19
  mosi_pin: gpio.23
  sck_pin: gpio.18
sdcard:
  cs_pin: gpio.5
  carddetectpin: NO_PIN
  frequency_hz: 20000000
probe:
  pin: gpio.36:low
  toolsetterpin: NOPIN
  checkmodestart: true
start:
  must_home: false
coolant:
  floodpin: NOPIN
  mistpin: NOPIN
  delay_ms: 0
control:
  safetydoorpin: NO_PIN
  resetpin: NOPIN
  feedholdpin: NO_PIN
  cyclestartpin: NO_PIN
  macro0pin: NOPIN
  macro1pin: NOPIN
  macro2pin: NOPIN
  macro3pin: NOPIN
  faultpin: NOPIN
  estoppin: NOPIN
macros: {}
user_outputs:
  analog0pin: NOPIN
  analog1pin: NOPIN
  analog2pin: NOPIN
  analog3pin: NOPIN
  analog0_hz: 5000
  analog1_hz: 5000
  analog2_hz: 5000
  analog3_hz: 5000
  digital0_pin: gpio.26
  digital1_pin: gpio.27
  digital2_pin: gpio.2
  digital3pin: NOPIN
uart2:
  txd_pin: gpio.15
  rxd_pin: gpio.12
  rtspin: NOPIN
  ctspin: NOPIN
  baud: 1000000
  mode: 8N1
uart_channel2:
  reportintervalms: 75
  uart_num: 2

Startup Messages

$ss
[MSG:INFO: FluidNC v3.9.5 https://github.com/bdring/FluidNC]
[MSG:INFO: Compiled with ESP32 SDK:v4.4.7-dirty]
[MSG:INFO: Local filesystem type is littlefs]
[MSG:INFO: Configuration file:config.yaml]
[MSG:INFO: Machine HoldMaker]
[MSG:INFO: Board Jackpot V2 TMC2226]
[MSG:INFO: UART1 Tx:gpio.16 Rx:gpio.4 RTS:NO_PIN Baud:115200]
[MSG:INFO: UART2 Tx:gpio.15 Rx:gpio.12 RTS:NO_PIN Baud:1000000]
[MSG:INFO: uart_channel2 created at report interval: 75]
[MSG:INFO: I2SO BCK:gpio.22 WS:gpio.17 DATA:gpio.21Min Pulse:2us]
[MSG:INFO: SPI SCK:gpio.18 MOSI:gpio.23 MISO:gpio.19]
[MSG:INFO: SD Card cspin:gpio.5 detect:NOPIN freq:20000000]
[MSG:INFO: Stepping:I2S_STATIC Pulse:2us Dsbl Delay:0us Dir Delay:1us Idle Delay:255ms]
[MSG:INFO: User Digital Output: 0 on Pin:gpio.26]
[MSG:INFO: User Digital Output: 1 on Pin:gpio.27]
[MSG:INFO: User Digital Output: 2 on Pin:gpio.2]
[MSG:INFO: Axis count 3]
[MSG:INFO: Axis X (0.000,300.000)]
[MSG:INFO:   Motor0]
[MSG:INFO:     tmc2209 UART1 Addr:0 CS:NOPIN Step:I2SO.2 Dir:I2SO.1 Disable:I2SO.0 R:0.110]
[MSG:INFO:  X Neg Limit gpio.25:low]
[MSG:INFO: Axis Y (0.000,300.000)]
[MSG:INFO:   Motor0]
[MSG:INFO:     tmc2209 UART1 Addr:1 CS:NOPIN Step:I2SO.5 Dir:I2SO.4 Disable:I2SO.7 R:0.110]
[MSG:INFO:  Y Neg Limit gpio.33:low]
[MSG:INFO:   Motor1]
[MSG:INFO:     tmc_2209 UART1 Addr:3 CS:I2SO.14 Step:I2SO.13 Dir:I2SO.12 Disable:I2SO.15 R:0.110]
[MSG:INFO:  Y2 Neg Limit gpio.35:low]
[MSG:INFO: Axis Z (0.000,147.000)]
[MSG:INFO:   Motor0]
[MSG:INFO:     tmc2209 UART1 Addr:2 CS:NOPIN Step:I2SO.10 Dir:I2SO.9 Disable:I2SO.8 R:0.110]
[MSG:INFO:  Z Pos Limit gpio.32:low]
[MSG:INFO: X Axis driver test passed]
[MSG:INFO: Y Axis driver test passed]
[MSG:INFO: Y2 Axis driver test passed]
[MSG:INFO: Z Axis driver test passed]
[MSG:INFO: Kinematic system: Cartesian]
[MSG:INFO: Connecting to STA SSID:Fibertel WiFi340 2.4GHz]
[MSG:INFO: Connecting.]
[MSG:INFO: Connecting..]
[MSG:INFO: Connecting...]
[MSG:INFO: Connected - IP is 192.168.1.118]
[MSG:INFO: WiFi on]
[MSG:INFO: Start mDNS with hostname:http://fluidnc.local/]
[MSG:INFO: HTTP started on port 80]
[MSG:INFO: Telnet started on port 23]
[MSG:INFO: Probe gpio.36:low]
ok

User Interface Software

WebUI

What happened?

Home axis
G1 X10 F1000
G3 X0 Y10 I-10 P2 F500

I’d expect (since this is an arc with a full rotation before arriving at the destination) for the controller to either reject the command as invalid or to trigger the soft limits when moving. Hard limits disabled on purpose to exhibit the behavior.

Instead the axes crash against the endstops losing steps and then stopping after the command is supposedly complete

GCode File

Other Information

YouTube short of the sequence described above.

I came across this issue when I was investigating the viability of adding G10 L2 R- support. The trickiest bit seemed to be validating helical moves generated by G2/3 to fit in the rotated rectangle. That’s when I saw that invalidarc does not take into account the pwordrotations, so I think it may be calculating the extremes of the arc as if less than a full rotation was always happening. As the limitschecked flag in pldata is set to true in the invalidarc routine, it does not trigger a validity check for each of the arc’s segments during the successive calls to mclinear.


评论 (4)

#1 – Popeyef5 于 2025-09-23

happy to create a PR if it helps btw


#2 – MitchBradley 于 2025-09-23

Please PR a fix if you have one.


#3 – MitchBradley 于 2025-09-30

If you have a fix, please submit a PR so we can get it in the next release.


#4 – Popeyef5 于 2025-10-01

Yes, I got busy with work but the fix is ready. I just need to test it in my machine before submitting the PR. I think I can get it done tonight.


原始Issue: https://github.com/bdring/FluidNC/issues/1571

喜欢 (0)