Ah - I think that bug can be handled. It'sa bit silly, and indeed Mach has a bug in it. However, per Peter Homann's advice, I was able to conceal the problem. The following is what I THINK is happening.
Mach should but does not read the Linearity.dat file before the first M3 is executed. A bug.
Mach does NOT know what speed the spindle can do at full power either. You have no way of telling Mach about this afaik.
Mach does read the pulley speed you have set up, and the first time it scales the requested speed to this value.
So ... if you tell Mach that Pulley 1 has a top speed of 3000 RPM, and then you request 3000 RPM, Mach will output a full-scale signal to the spindle. However, if 'full scale' really gives 3700 RPM, that's what you will get.
So, first find out what the max spindle speed is. You may have to rev the system a bit to get this.
Then tell Mach that the max speed for Pulley 1 is that speed, NOT what you want as top speed. In the case above, you tell Mach that the max pulley speed is 3700 RPM.
Now, when you fire up with S3000, you should actually get about 3000 RPM.
There can be another problem here. If you have told your spindle driver electronics to only go to a lower output than it can manage, the high end of the range is going to be a bit confused. In my case, the peak driver output voltage is around 200V DC, but the motor is only rated to 180 V DC. so the driver output will ramp up towards 200 V DC but it will get clipped at 180 V DC. That makes setting the peak speed a bit more tricky. You will have to try requesting speeds of (say) 1000, 2000 & 3000 RPM from the MDI line and noting the results. If actual speed comes out a bit high, by (say) 5%, push the Pulley speed up by 5%. A couple of cycles of this will get you close enough.
Cheers
Roger