Poly Meca,
When you are dealing with hardware-timed buffered analog input, there are several things going on. The rate at which the hardware samples the channels in your task will be dictated by the rate you set on the DAQmx Timing VI. Basically this rate controls a clock on your device. When this clock pulses, all of the channels in your task will be sampled (the exact timing of your samples will vary depending on whether you are using an M-Series, E-Series, or S-Series device). But your hardware will give you a sample on all of your channels every time this clock pulses. This will be a very constant rate. Once the sample is taken, it passes through a FIFO on the device, over the PCI bus, and into a buffer on your computer. This transfer of data can take varying amounts of time, depending of factors such as your data transfer request condition, your data transfer mechanism, the amount of bus traffic, and so on. When you call read, the Read VI will transfer data out of the buffer on your computer, and return it to you.
From reading your question, you wrote, " tried it with a rate of 10000 kHz and it works but the rate is not exactly constant, sometimes it seems to be 10000kHz, but sometimes it jumps 3ms." Are you referring to the amount of time that your loop with the read function inside takes? If so, keep in mind that this can be very drastically affected by other factors, such as whether the operating system gives processor time to some other process in the middle of your loop, does LabVIEW have to re-draw indicators on your front panel etc... Keep in mind however, that your device is still acquiring data at the sample rate you specified. If your loop rate is less than than your sample rate, eventually the buffer which sits between your DAQ device and your program will fill up, and I would expect that you would see a buffer over-write. While you can use DAQmx Configure Input Buffer.vi to increase the size of your input buffer, you will still eventually over-write if your loop rate does not keep up with your sample rate.
What I would recommend that you do, is go back to using an 'NSamp' version of read. These will be more efficient than then '1Samp' versions (ie... less function call overhead, less arbitration of the buffer between the device writing into the buffer, and your application reading from it, etc). This will also allow you to read your data with a lower loop rate than using the '1Samp' method. Or is there a reason why you must use the '1Samp' read flavor?
I realize that was a bit of a long explanation, however I hope that it explains what you are seeing. Please post again if it does not clear up your questions.
Hope this helps,
Dan