First lets math it out.
1145 RPM / (60 sec/min) = 19.083 Rev/Sec
@ 1 pulse per rev gives 0.052 secs from pulse to pulse
@ 4 pulse per rev gives 0.013 secs from pulse to pulse
So on the fast end you need to be scanning fast enough not to miss a 13ms event.
105 RPM / (60 sec/min) = 1.75 Rev/sec
@ 1 pulse / rev gives 0.571 secs from pulse to pulse
@ 4 pulse / red gives 0.143 secs from pulse to pulse
So your response will be limited to essentially a 150ms sampling rate of the speed at the slow end.
I would say it is a very promising setup. All should be perfectly fine to perform with traditional ladder coding. You might even consider going to two pulses/rev because it will make inaccuracies associated with the scan time less of a percentage of your value.
I would definitely use the "time measurement" method.
I would still bring your prox into one of the high speed inputs though.
The 3000 Hz spec on the prox is good, so no worries there.
I would not trust using a timer for this.
The better bet is to use the free running clock (S:4).
I don't remember if you can do an interupt driven subroutine with the ML1500, but if you can that would be optimal.
Create three registers
N:OLD_VALUE, N:NEW_VALUE and N
eriod
Every time you see a positive transition of the prox first move N:NEW_VALUE into N:OLD_VALUE and then move S:4 into N:NEW_VALUE.
Then subtract N:OLD_VALUE from N:NEW_VALUE and this will give you the time seen between pulses in units of 0.0001 seconds.
Then, it is just a matter of math.
You will have to decide whether you care to convert back to RPM for debug purposes, or convert directly to your voltage output signal.
We know that at 4 pulses per rev your 1145 RPM will give 0.013secs.
This corresponds to roughly 130 counts of N
eriod.
We know that at 7 pulses per rev your 105 RPM will give 0.143secs.
This corresponds to rouhgly 1430 counts of N
eriod.
So now use the scale function block SCL to convert that to whatever your analog out value counts are. Probably 0 to 32767 counts.
Then that number can be fed into whatever the output O:X file register is for that channel you are using.
CONSIDERATIONS:
If conventient make the flag you are picking up create a 50% duty cycle with the prox.
Make the flag you are picking up very consistent. Since you are measuring time between pulses, any error in angle from one "knob" to the next will be seen as a speed fluctuation by the prox.
The "knobs" obviously have to be big enough that they stay on long enough for the PLC to see the pulse.
You will need some extra code to ingore the times when the OLD value is larger than the NEW value.
You will want some extra code to handle what happens when things are not running at the "minimum" speed you specified.
You will want some extra code to check that values are within valid ranges.
You will want a "watchdog timer" to monitor the prox to make sure when you are at a high speed that if you all of the sudden stop seeing prox pulses you recognize there is something wrong with the prox pickup system and bring the speed back down forcibly.
Depending on your down stream equipment, you may also consider adding slew/ramping to your output signal as opposed to just stuffing the number directly into your voltage output.
Good luck.