Dear NI Community,
I am currently involved in a project where we work with a PXI 4072 for 2-wire and 4-wire measurements and I encountered an issue which heavily influences the execution time of the measurement process. After successfully setting up the system to perform one measurement, our main goal for the moment is to reduce the time of a single measurement as much as possible, as during the execution of the whole process around 8000 measurements will be carried out (thus reducing the time for one measurement will have a huge impact on the speed of the whole process). After looking at timing data from the built-in LabVIEW profiler, I saw that the niDMM Initialize VI takes the most time in a single measurement, so I decided to put the initialization process in front of the loop. After this step my execution time was reduced drastically, but the DMM is now not capable to gather the data after the second iteration of the loop.
The measurement system contains one PXI 4072 DMM and nine PXI 2535 Switch Matrices, all built in an NI STS T2. The application is written in LabVIEW 2012.
As you can see on the images below, I am working with a state machine architecture to ensure that the order of execution is correct. All the three states are also described.
NOTE: The images are not of the actual VI that I am working with, as I am not entitled to share those.
Figure 1. Initial, working, setup - slow execution time due to constant initialization
Figure 2. Very fast execution time, incorrect data
Ultimately, my question would be if it is possible or not to avoid constant re-initializations of the DMM every time I need to measure. I have tried substituting the niDMM Read VI with the sequence of niDMM Initiate, Fetch and Abort, but it resulted in the same problem. A solution that I have found was to always reset the DMM after every measurement, using the niDMM Reset VI, however, it did not decrease the execution time (reseting took as much time as initializing). I have also tried introducing a delay between loop iterations, but without any success.
I hope my explanation was clear enough, but if there are any uncertanties, let me know and I will try to clarify it.
Thank you for your help.
This is Vasileios, an applications engineer at NI.
From looking at the screenshots you provided us, I can say you did well by having the niDMM Initialize and niDMM Configure Measurement Digits outside of the For Loop. Furthermore, you could just have a while loop (instead of the For loop) with a conditional loop counter. This might make the VI a bit faster.
I would also like to ask you the reason you are using DMM and not a DAQ device. Is it accuracy you want or acquitision time you would like to achieve? If it is time you want to achieve then you might want to use a DAQ card as generally DMMs are quite slow instruments. DAQ for example can achieve higher samples and lower acquisition time (faster). The acquisition from the DMM depends also from the accuracy of the sample you are measuring as well. Is there any particular reason you are using the DMM?
Moreover, as you are using NI STS T2, I believe, you may be entitled to NI Support, if not you directly, then someone from your company. If you are entitled to a NI Support, I would suggest to contact your local NI branch and create a service request. By this way, you will experience a far better overall support.
Firstly I would like to thank you for your response. Secondly, I would like to address the part with the DAQ device. I am not very familiar with DAQ cards, at least not with the larger, industrial ones. After doing some fast research, I have seen that configuring a DAQ device for resistance measurement is more complicated than having a DMM, but please correct me if I am wrong, I based this idea on 5 minutes of internet browsing. The system that I am using was purchased a while ago in order to perform 2-wire and 4-wire resistance measurements on a larger scale (thus the 9 switch matrices). The basic idea behind the measurement is that we cover an array of connections and then measure them pair by pair to check whether the connection exists or not based on the measured resistance value.
As far as I have understood, due the system being older, we are not entitled anymore to NI Support, as it expired a while ago, that is why I decided to post the issue on the forum.
Since I have wrote this post, I have tried a couple of different setups, but without any success. I have tried configuring a multi-point measurement with software triggering, immediate triggering, but the same issue seems to come up. The first measurement is always performed (gives a value) but every other that follows returns a Not-A-Number (NaN). When having the setup from Figure 1 above, the constant re-initialization, then every measurement is good, but it takes around 40-50 seconds to measure the whole array. Due to the fact that we would like to measure multiple arrays, around 200-300, it would be important to reduce the execution time as much as possible for a single array. When using the second setup, I have managed to achieve an execution time of 2-3 seconds for the whole array, but unfortunately with incorrect results. I have also tried adjusting the Settling Time(ST) of the DMM, giving it 10 times more ST than required, based on the specification file of the PXI 4072, but it did not help. Another thing that I have tried is introducing some delays between the different states, to assure that the connection are made before I start to measure, but nothing.
One thing that seems a bit odd is that when doing a manual measurement, meaning that I connect the required channels in the switch matrices manually, then perform a 2-wire (or 4-wire) measurement, after which I disconnect the channels has a similar problem. After finishing the first measurement, I go on and connect the channels for the second, but if I don't close the DMM panel in NI MAX after the first measurement and then re-open it, I am not able to carry out the second one. A trick that we figured is that instead of closing the panel, we just switch to temperature measurement, then back to resistance and then it works. I am thinking that by changing the measurement type, we re-initialize the DMM in a way.
There is one more thing I have not tried, and that I saw on the forums, is to check the handshaking setting between the DMM ans the switch matrices. Although I don't think that it can help, as the order of the execution is assured with the help of the state machine. Moreover, the issue seen at the manual measurement suggests that it is a problem beyond the sequence of execution.
Last but not least, thank you for your suggestion with the While loop, I will look into that and see if it causes major improvements or not. I hope these clarifications can help in understanding the problem that we have.