05-01-2007 11:45 AM
Hello,
Using Labview5 and traditional DAQs, I am trying to build a program which can control
and record three orthogonal principal stresses applied on a rectangular
prismatic rock specimen (sigma1 for long axis, sigma2 and sigma3 for lateral
axes) and strain in the direction parallel to sigma3 (epsilon 3).
During the loading, I want to let the program work for loading in the following
process.
First, the loads applying the three principal stresses are raised
simultaneously to the predetermined magnitudes. Then, while holding the sigma3
load constant, the sigma1 load is raised at a constant strain rate of epsilon3,
and at same time, the sigma2 load is also raised continuously by the half magnitude
of sigma1 increment so that increment of sigma1 = 2 * increment of sigma2.
To make this, the program is supposed to continuously read the current
magnitude of sigma1 in voltage, calculate the increment of sigma1 after the
onset of epsilon3 (and sigma1) increase in stress unit (MPa), divide it into
half, convert it (in MPa) to value in voltage, sum the current voltage of
sigma2 and the computed voltage increment of sigma2, and then output it to
increase sigma2 in MPa to the expected magnitude.
The attached program which I am now working on is consisted of 4 main units.
The left upper unit (within while loop) is for reading continuously all three
stresses and epesilon3 in voltage through the experiment. The left lower unit
within the case structure is to use the read current stress voltages, to
compute the expected magnitude of sigma2, and then output the computed expected
sigma2 using the continuous generation vi. The right upper unit (while loop) is
only for increasing the three stresses to predetermined magnitudes at a
constant rate during the first step of the loading path. The right lower unit
(case structure) is for increasing sigma1 at constant rate of epsilon3 after
the three stresses are reached to predetermined magnitudes, and this is in the
second step of loading process.
Among these main 4 units, the three units (left upper, right upper and lower)
are working right and I am sure that they are working well during an experiment
in the way which I want; however, the left lower unit which is supposed to
increase the sigma2 at specific rate is not working at all. It seems like that
the output function (continuous generation vi) within the case structure is not
sending any signal though the expected sigma2 is correctly calculated.
Therefore, my question is how I can modify the function (continuous generation
vi) which is supposed to increase the sigma2 by following the sigma1 increase
simultaneously.
Sincerely,
05-02-2007
02:21 PM
- last edited on
01-31-2025
10:08 AM
by
Content Cleaner
Greetings Rock Lab,
Sounds like you have a pretty neat application! Let me start off by saying that your version of LabVIEW is not officially supported...have you considered upgrading? There is a significant amount of features that have been added up to our most recent launch of LabVIEW 8.2.1, including the project, shared variable, and support for DAQmx.
That being said, however, I took a look at the code you posted and a couple things caught my eye. First, there are several broken wires in this code...it will not even run in this state. One of these broken wires is being fed into the AO Continuous Gen.vi that you mentioned was problematic. This VI is looking for an input called "waveform data" with a type of "1-D array of waveform". It looks like you are wiring a 1-D array of double into this input. The first thing you'll want to do is fix the broken wires, and wire up a 1-D waveform array to the waveform data input of this VI.
Hope that helps...
Regards,
Nicholas B, National Instruments
05-02-2007 03:31 PM
05-02-2007 04:04 PM
I am a bit surprised your application actually works.
when you start the output or input application, normally DAQ cannot allow you to do the inverse operation. unless you define in advance input and output channels or you use different cards. unless you do a AI read followed AO write single point (or waveform), meaning not continuous and not timed together. but be aware that between each such operation there some time lag, and you wont be able to switch faster than few KHz.
you did a nice piece of program there, but you could improve on it by orders of magnitude, by updating your LV version. already the 6i and 6.1 are a huge leap forward.
But on this version, there are few thing you might want to try: initialisation - try to use local variables, where you can define in advance the inital value by calling the local variable before other operations.
Sequences - make more profusion use of sequences, and in your case stacked sequence might be a good sol: in your case, you want to read, write, read, write, and in between use the info for calc what is the next write. if you do it properly i believe your question about the faulty unit will disapear by itself.
the formula node: put in the while loop will allow you to change rate online! might be usefull for you.
invisible controls: controls not to be touched can be set to be invisible, right-click on the terminal.
good luck
05-02-2007 05:11 PM
05-03-2007 10:53 AM
05-03-2007 12:29 PM