I was referring to output functions. Obviously you need the CTRIO for encoder feedback, but that is an input function and is not directly related to the outputs.
There is nothing wrong with using the CTRIO for the things you are wanting to use it for, provided it works, but you are trying to use 3 output functions, but only have resources for 2....so you need an alternative. Conveniently, only 1 of the output functions you require are actually using CTRIO outputs, which means the same behavior can be created elsewhere.
Preset tables are designed to trigger outputs at rates faster than the PLC scan will allow. They were not designed to be a general purpose functions like PLC instructions...they are output functions and that's why you need to attach them to an output. The fact that we report the status of the output in the PLC image register doesn't change their purpose, and the PLC image register value just contains the output status as of the last reporting by the CTRIO...not a real time result. I got the impression that you were trying to drive a drum or something like that, which doesn't sound like it is a) using an output on the CTRIO, or b) requires the high speed of the CTRIO. But you also said that you need to set a bit on a preset match of an input that is running at 12kHz. I'm not sure this is going to do what you want. At 12khz the pulse rate is 83us, much faster than the scan time of the CTRIO. What it can do is to fire the CTRIO's onboard output within +1 scan time of the module when the input is greater than or equal to the preset. What you will see in the PLC is the output status at the greater of the PLC or CTRIO scan time...several hundred microseconds at best. Depending on whether you are content with detecting what has already happened (count passed a preset) or whether you need to do something very close to the time something else happens (fire an output when the count equals a preset) will dictate whether the behavior needs to be internal to the CTRIO or can be done by the PLC. If the PLC will suffice, then you can code the preset behavior there.
While it is possible to use the closed loop pulse output to control your VFD, as you have demonstrated...the function is a *pulse* output. Like the preset function, we happen to be reporting the current velocity for status purposes, but it was not designed to do what you are doing...it is not a VFD motion controller...it is a pulse output. Since you have already proven that the PLC scan time is fast enough to control the VFD, so it is clear that the VFD control function could be performed by logic, hence, you don't need the pulse output function.
So again, the only output function that you are doing that does require the CTRIO is the stepper controller. The VFD control can easily be done by logic in the PLC, and the preset behavior may or may not depending on timing requirements.