Help with Personal labview project

First off, i want to make sure readers understand, this is not a team project.

I’m working on making a program to pull data from a USB Geiger-Mueller counter that i was given.

the programing specs are as folows:

[quote]Interfacing a GM-10 / GM-45 Radiation Detector

Writing your own software to take readings from a GM-10 or GM-45 is very easy. The RS-232 versions are self powered off of the DTR and TX Data lines of the serial port. Open the serial port (usually the handshake lines are correctly asserted automatically by the computer) at 57,600 baud, 8 data bits, one stop bit.

Each time a particle is detected, a pulse is sent down the serial line, which is interpreted by the serial port in the computer as byte. So if you count the number of bytes received per minute, you have the Counts Per Minute (CPM). Likewise you can count the number of bytes over any time period you wish. The value of the byte received is not defined, just count the bytes.

The USB version of the GM-10 and GM-45 are also self powered. Drivers for MacOS, Mac OS X, and Windows are provided to make it emulate a standard serial port, so the software interface is the same. Visit our Linux Details page for specific Linux information. [/quote]

i’ve gotten labview to get the first byte of data, but the system seems to stop running after that (the geiger counter turns off)

I’m wondering if anyone could help:

what i need is a program that displays the CPM (counts per minute) and a continuous counter (with reset)

i’m frustrated as to how to get this to work.

i’ve attached what i have so far.

if anyone has any ideas, please tell me!

thanks so much

-Z

radmeeter.vi (18.7 KB)


radmeeter.vi (18.7 KB)

I’ve attached an image of a slightly modified VI. I cleaned up the wires, got rid of the timeout setting that was redundant, and put a loop around the serial read. Does the loop make sense? If you only run the node once, you can only read one byte.

Greg McKaskle

Picture 1.png


Picture 1.png

WOW thanks, i can’t believe i missed that!

Now i’m having troubble figuring out how to have the system count cpm’s (which requires counting the number of counts in the past 60 seconds)

i’m not sure how to do this, and can’t find any help in the help files

thanks,

-Z

With counts and millisecs, you can get cpm by taking count * the number of millisecs in a minute divided by the millisecs you have. Or count * 60,000 / millisecs. Put that expression in the loop.

If you want an instantaneous reading, think about how often you want it to update, then look at keeping an array of values in an accumulator, sum the array, rotate and replace. I’ll explain in more detail if you decide you want to do it, but I’ll give you a chance to do it first.

Greg McKaskle

i still haven’t figured out how to use arrays… so an explanation would be extremely helpful,

also, it only needs to update once a minute (CPM), but the data comes in quite randomly, and there are times where the program may have to deal with values in the 100,000 CPM range (uranium chips in science class)

thanks for the help!

-Z

If you want it to run for a minute before giving a result, you will not need to use arrays. You can eyeball it, or change the while loop to stop after xxx millisecs.

If you want to instantaneous readout, look at some of the array examples, specifically things like circular buffers – built up from arrays.

As for the upper range, you are by default using 32 bit ints so that won’t be an issue. You can switch to doubles for the accumulator if you like. I don’t remember if I initialized the shift register that was accumulating, but that is where you would make it a double if you like. It should also be initialized to zero or it will continue counting from where it last left off. Be sure your serial is configured to a fast enough rate.

Greg McKaskle