Go through the log and look the PE: lines, and pay attention to the values just after a gcode line is echoed back from the firmware (beginning of movement) to the lies just before (ok) that indicates that line of gcode is finished.
In the simulator with the random encoder noise turned off, I see the PE rise in the first one or two records (400mS) and stay pretty much constant until the gcode is finished. I thought that the PID loop would work to reduce that position error, but it doesn’t seem to get zeroed out until the sled comes to rest.
So a 10ipS run carries about .3mm error its full length. The amount of error is proportional to the speed (logica, I supposel) in the range of 0.28mm per 10ipS.
When successive gcodes line up in the same direction, the error rises as in this run which starts slow and speeds up then repeats in the other direction:
G20 G90
G1 X0 Y0 Z0 F50
G4 P2000
G1 X1 Y0 Z0 F10 [PE: -0.29, 0.29...]
G1 X2 Y0 Z0 F20 [PE: -0.58, 0.58...]
G1 X3 Y0 Z0 F30 [PE: -0.88, 0.87...]
G1 X4 Y0 Z0 F40 [PE: -1.17, 1.14...]
G1 X5 Y0 Z0 F50 [PE: -1.45, 1.39...]
(G4 P2000)
G1 X4 Y0 Z0 F10 [PE: 0.32, -0.29...]
G1 X3 Y0 Z0 F20 [PE: 0.58, -0.58...]
G1 X2 Y0 Z0 F30 [PE: 0.87, -0.86...]
G1 X1 Y0 Z0 F40 [PE: 1.16, -1.14...]
G1 X0 Y0 Z0 F50 [PE: 1.41, -1.41...]
If I start fast and decrease speed, the error starts high and decreases, still in proportion, and still not correcting. This run rises in speed in the first group and starts fast and decreases in the second:
G20 G90
G1 X0 Y0 Z0 F50
G4 P2000
G1 X1 Y0 Z0 F10 [PE: -0.30, 0.30...]
G1 X2 Y0 Z0 F20 [PE: -0.58, 0.58...]
G1 X3 Y0 Z0 F30 [PE: -0.88, 0.86...]
G1 X4 Y0 Z0 F40 [PE: -1.16, 1.14...]
G1 X5 Y0 Z0 F50 [PE: -1.45, 1.38...]
(G4 P2000)
G1 X4 Y0 Z0 F50 [PE: 1.45, -1.38...]
G1 X3 Y0 Z0 F40 [PE: 1.17, -1.13...]
G1 X2 Y0 Z0 F30 [PE: 0.87, -0.87...]
G1 X1 Y0 Z0 F20 [PE: 0.58, -0.58...]
G1 X0 Y0 Z0 F10 [PE: 0.30, -0.29...]
So all in all, I think there’s a built-in position error in the PID loop, that won’t be corrected by acceleration planning. Putting a very short pause between gcode lines ‘G4 P200’ would probably trick the firmware into zeroing the error doesn’t help, the error is still proportional to the feedrate.