Jump to content

Jeff Plotzke

Members
  • Posts

    144
  • Joined

  • Last visited

Posts posted by Jeff Plotzke

  1. I have an RT PXI system which has 8 cards in it. When I look in MAX after it gives default names to all the cards, it seems to randomize if it gives a "Dev x" label or a "PXISlot x" label to a device. Does anyone know how it chooses this? Sometimes, the PXISlot x doesn't always line up with what slot the card is actually in.

    For example, I have these cards in my system:

    Slot 1: 8196 Controller

    Slot 2: 6704 AO

    Slot 3: 6515 DIO

    Slot 4: 6238 M-Series DAQ

    Slot 5: 6225 M-Series DAQ

    Slot 6: 6225 M-Series DAQ

    Slot 7: 6225 M-Series DAQ

    Slot 8: 6220 M-Series DAQ

    Attached, you can see MAX's default names. (Yes, somehow it found 2 6238 cards when I only have one)

    Thanks for any help you can give!

    ~Jeff

    post-4078-1169501041.jpg?width=400

  2. You might want to have a look at http://forums.lavag.org/index.php?s=&s...ost&p=23027.

    Herbert

    Thanks, Herbert! It sounds like TDMS may be a good choice, since I'm just writing 2D numeric arrays.

    Curious... with TDMS, should I still save up data so it's a multiple of 512 for a faster disk write? Also, would you suggest open/write/close for every time I write to the file, or a open/close once at the beginning and end and then many write/flushes in between?

    Thanks again!

  3. I need to stream a lot of data to disk quickly with a LVRT system running on PXI. The data is being acquired at up to 5kHz from my DAQ card of about 350 channels. (So, if all the data was SGL's, it's up to 7 MB/sec)

    Right now, I have my data aquisition running in a timed loop and writing the data to RT FIFOs. The FIFOs are then read by a consumer loop which will write the data to files.

    My question is -- What's the best way to write this data to file to make sure that the rest of my application doesn't die? I can write in pure binary, but I know that I need to wait for 512-byte chunks. What about TDMS? Since the 'S' stands for streaming, is this optimized for streaming data to disk? Will it automatically do the 512-byte chunks for me?

    Has anyone had luck with TDMS and fast data? Can you share any experiences?

    Thanks for all your help!

  4. Yes, it really should. If you filter away 0 Hz component, which is the same thing as DC component, you end up with signal that has no DC component. So if you band pass filter your signal to include only frequencies of certain region and 0Hz doesn't belong to this region, you do not get any DC in you filtered signal.

    Doh! Now that you say that, it makes perfect sense!

    Thanks!

    ~Jeff

  5. I'm trying to take a waveform and do a bandpass filter with corner frequencies 7k and 9k to extract an 8k component. However, when I run the VI, it extracts the necessary frequency, but it re-centers my signal around 0. I've attached a screenshot of my problem.

    Should this happen? I really want to keep it centered around what my 8k component should be. I could find the avg DC value on the original waveform and add it to the resultant waveform, but that wouldn't be mathematically correct and would only give me an approximation.

    For details, I'm using the Filter Express VI configured as a 10th order Butterworth IIR Filter (I don't care about phase shifting -- I'm looking for steep corner frequencies)

    So, I guess I'm looking for a way either to explain these findings and/or a way to get LabVIEW to keep my DC offset value.

    Thanks!

    ~Jeff

    post-4078-1158765339.jpg?width=400

  6. Yes, every time you write to the Value (Sgnl) property, you'll fire the event structure, regardless of if the value actually changed.

    To keep the same architecture as you have now, you'll want to compare the old value (within the boolean control) to the DAQ value, and only change the boolean control on a change. I've posted an example for you.

    ~Jeff

    post-4078-1157471213.jpeg?width=400

  7. Hi Gary,

    While I'm not sure on why conditional probes are only available for certain types -- I'll tell you that nothing has changed in LV8.

    Of course, there's a few more conditional probes for non-numerics (which are in LV 7, too) -- Strings, Booleans, Error Clusters. Anytime I want a conditional probe on a numeric which isn't I32/U32/DBL I normally split the wire and convert the offshoot to DBL and then make that wire go to a structure (which I don't use) and use a conditional probe on that one new DBL wire. That way, I'm not messing with the original wire's data type, but of course, it's a bit quirky...

  8. I'm having a problem where I'm trying to connect via TCP/IP and TCP Connect gives me error 42 (Generic Error).

    I have 5 different TCP connections simultanously, and normally, my program will work OK for the first several runs of the program. I always make sure to do a TCP Close before I exit the program. Then, after about the 4th or 5th time running the program, all TCP Connects will give error 42 without any wait (I have 10 sec timeout wired)... Subsequent times will yield the same results. During this time, I can ping the other IPs that I'm trying to connect to OK and I can even connect to them with other programs (non-LV).

    I'm using LV 8.0, so maybe this is a new feature... It seems as if LV stops handling TCP/IP connections after a while. Has anyone else seen this before?

    Thanks!

    ~Jeff

  9. I've found a 'workaround', however definitely not memory-efficient. You basically need to do something in the inner loop which will cause LV to re-create the array in memory. It seems that LV is using the same memory pointer for the input and output tunnels of the inner loop, thus causing the uninitialized shift register effect.

    In my quick example, I take my array, convert to a variant, then back, and throw it into Replace Array Element. The VI works OK now.

    ~Jeff

    Download File:post-4078-1142978780.vi

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.