Hi,
I've been experimenting with printing using arcs (G2/G3) and have stumbled upon what seems like two bugs. I'm running RRF3.2 on a Duet2 Maestro with a normal cartesian printer.
First (possible) error occurs when printing an exact semicircle using the G3 Xnnn Ynnn Rnnn format. In the testcode (attached below) it is expected to print a semicircle from X=121.107 to X=113.893 with a radius of 3.607. Note that 113.893+2*3.607=121.107 so this should be fine. However, the firmware complains "Error: G2/G3: bad combination of parameter values". Increasing the radius to 3.608 makes the error disappear, which makes me think it is a problem with floating point precision.
Second worry is that if i run a simulation (!) there is actual, physical, movements happening when the error is detected. This only seems to happen when the axes are homed. The relevant error message in the console is "Error: SetPositions called when DDA ring not empty". Needless to say, physical movements during simulation (even if it is a failed one) is scary.
This is my stripped down test file:
G28 ; Home all axes
G21 ; set units to millimeters
G90 ; use absolute coordinates
M83 ; use relative distances for extrusion
G1 Z20.000 F7800.000
G1 F1800.000
G1 X121.107 Y128.804 E0.15037
G3 X113.893 Y128.804 R3.607 E0.42650
M0 ; Stop print
If relevant, here is my config.g
code_text; Configuration file for Duet Maestro (firmware version 3)
; executed by the firmware on start-up
;
; generated by RepRapFirmware Configuration Tool v3.1.1 on Wed Jun 03 2020 11:09:23 GMT+0200 (centraleuropeisk sommartid)
; General preferences
G90 ; send absolute coordinates...
M83 ; ...but relative extruder moves
M550 P"Anatidae" ; set printer name
M918 P1 E-4 F2000000 ; configure direct-connect display
; Network
M552 P0.0.0.0 S1 ; enable network and acquire dynamic address via DHCP
M586 P0 S1 ; enable HTTP
M586 P1 S1 ; enable FTP
M586 P2 S0 ; disable Telnet
; Drives
M569 P0 S0 ; physical drive 0 goes backwards
M569 P1 S0 ; physical drive 1 goes backwards
M569 P2 S1 ; physical drive 2 goes forwards
M569 P3 S0 ; physical drive 3 goes backwards (BMG Direct Drive)
M584 X0 Y1 Z2:4 E3 ; set drive mapping
M350 X16 Y16 Z16 E16 I1 ; configure microstepping with interpolation
M92 X80.00 Y80.00 Z400.00 E415.00 ; set steps per mm
M566 X{8*60} Y{8*60} Z{1*60} E{5*60} ; set maximum instantaneous speed changes (mm/min)
M203 X{150*60} Y{150*60} Z{5*60} E{100*60} ; set maximum speeds (mm/min)
M201 X500.00 Y500.00 Z100.00 E5000.00 ; set accelerations (mm/s^2)
M906 X500 Y500 Z500 E400 I30 ; set motor currents (mA) and motor idle factor in per cent
M84 S30 ; Set idle timeout
; Axis Limits
M208 X-8 Y-10 Z0 S1 ; set axis minima
M208 X235 Y225 Z260 S0 ; set axis maxima
; Endstops
M574 X1 S1 P"xstop" ; configure active-high endstop for low end on X via pin xstop
M574 Y1 S1 P"ystop" ; configure active-high endstop for low end on Y via pin ystop
M574 Z1 S1 P"zstop" ; configure active-high endstop for low end on Z via pin zstop
; Z-Probe
M558 P9 C"^zprobe.in" H3 F100 T6000 ; enable Z probe
M950 S0 C"zprobe.mod" ; connect to mod pin
G31 X-25 Y-1 Z2.0 P500 ; offset from nozzle
M557 X25:205 Y25:205 S45 ; define mesh grid
; Bed leveling
M671 X-28:263 Y0:0 F1.5 ; Position of the lead screws
; Heaters
M308 S0 P"bedtemp" Y"thermistor" T100000 B4092 A"Bed" ; configure sensor 0 as thermistor on pin bedtemp
M950 H0 C"bedheat" T0 ; create bed heater output on bedheat and map it to sensor 0
M307 H0 B1 S1.00 ; enable bang-bang mode for the bed heater and set PWM limit
M140 H0 ; map heated bed to heater 0
M143 H0 S120 ; set temperature limit for heater 0 to 120C
M308 S1 P"e0temp" Y"thermistor" T100000 B4725 C7.06e-8 A"Nozzle" ; configure sensor 1 as thermistor on pin e0temp
M950 H1 C"e0heat" T1 ; create nozzle heater output on e0heat and map it to sensor 1
M307 H1 B0 S1.00 ; disable bang-bang mode for heater and set PWM limit
M143 H1 S285 ; Max nozzle temperature 285C
; Fans
M950 F0 C"fan2" Q500 ; create fan 0 on pin fan2 and set its frequency
M106 P0 S0 H-1 ; set fan 0 value. Thermostatic control is turned off
M950 F1 C"fan1" Q500 ; create fan 1 on pin fan1 and set its frequency
M106 P1 S1 H1 T45 ; set fan 1 value. Thermostatic control is turned on
; Tools
M563 P0 D0 H1 F0 ; define tool 0
G10 P0 X0 Y0 Z0 ; set tool 0 axis offsets
G10 P0 R0 S0 ; set tool 0 active and standby temperatures to 0C
; Custom settings
; Set pressure advance
M572 D0 S0.1
; Set firmware retraction parameters
M207 S1 F1500 Z0 ; 1mm 25mm/s, no lift
; Load the overrides file
M501