Jump to content

Neville D

Members
  • Posts

    752
  • Joined

  • Last visited

  • Days Won

    2

Posts posted by Neville D

  1. John,

    Make sure that the inrush current on the ovens is within the max current spec of the relays.

    In a similar FP application in the past, (hydrogen fueling station for fuel cell power plant) I had used the relay module to switch power to a second external relay with much higher current rating. Also add a diode to this second relay's input coil to avoid back emf problems.

    Neville.

  2. QUOTE (gonzo @ Apr 23 2008, 05:54 AM)

    Have you got any suggestions for the other coercion dot (the other diagram I uploaded), where dynamic data goes straight into a double display. I presume it is a similar issue that dynamic data is clustered. I have tried using the same approach with the unbundle function, but always get an array instead of a single double value.

    gonzo

    Dynamic data types introduced with the Express VI's are a bit murky and not clearly documented. But if you are getting an array when you unbundle, just extract out the first element with the index array function?

    Neville.

  3. QUOTE (tushar @ Apr 22 2008, 01:41 AM)

    Though readymade binary file saving is not available you can convert the U8 image into binary format.

    Please Find Attached Example

    In the example above i have shown image as 1D array, I hope Converting 2D image data to 1D array isnt big deal

    The approach is fine, but if you have the IMAQ package it is always better to use the IMAQ functions which are much faster and more memory efficient.

    Getting an image as a large array and then manipulating the array usually highlights the weaknesses of LabVIEW.. dealing with large amounts of data usually invokes the memory manager, or an inadvertent copy or two, which more than likely will slow things down.

    Like the previous poster suggested, threshold the image to produce a binary image using a number of available thresholding options for manual, automatic etc. from the IMAQ library.

    Neville.

  4. QUOTE (tmot @ Apr 7 2008, 10:08 AM)

    See Navitar Lens selection Wizard

    Keyence has a download on their website entitled "Helpful tips for Machine Vision Solutions Lens Selection Guide"

    Attached is a short technical reference from Fujinon. I have found it quite useful.

    Some brief pts:

    1 Choose "megapixel" or "machine vision" lenses. They are usually of better quality (and more expensive)! CCTV lenses are not that great.

    2 C-mount lenses are usually better quality than CS-mount. Most machine vision cameras will have a C-mount anyway (but you can order CS mount).

    3 Auto-focus or auto-zoom lenses are good ONLY for clean, lab-type environments are not to be used in an industrial 24-7 operation. The motorized mechanisms usually fail after a while.

    4 Choose lenses with lock screws on the manual adjustments.

    5 Choose lenses with large aperture (small f/number). They will allow more light into the camera, i.e. are "brighter" but will usually have more lens elements and be correspondingly heavier and more expensive; don't use large aperture if depth of field is important (usually isn't for machine vision apps).

    6 Always place the subject to be photographed at the centre of the lens. That is the area with the least chromatic aberration and distortion.

    7 Make sure subject plane is parallel to the plane of the lens.

    8 Experiment with lighting to get the best angles; more light available, the better, you can always decrease shutter speed.

    9 I have used Tamron, Fujinon and Pentax lenses. All are excellent quality and reasonably priced. Lenses from Edmund Optics, Schneider and Lynos are good too, but haven't used them.

    10 Lead times on some esoteric lenses can be quite long. Check with your supplier first before ordering.

    Neville.

  5. QUOTE (professor_rumsdiegeige @ Apr 5 2008, 02:24 AM)

    I agree with your mask idea, but still I would need to know which pixels have to be masked. I only know the boundary pixels, and I could mask them. But how do I know which pixels lie inside this boundary?

    Can you post some code to show what boundary you have got?

    Rough hint: Use the boundary to generate a Region of Interest and then use the ROI to Mask VI to generate the mask. If mask is swapped use IMAQ inverse to swap the masked and unmasked regions.

    Check out the mask examples as well.

    Neville.

  6. QUOTE (tmot @ Apr 7 2008, 07:38 AM)

    Depends on the specs you have ie. color? resolution? CCD size (2/3" 1/2" etc), frame rate ?

    I have had good experience with Prosilica and Basler cameras. In terms of price, most camera vendors are competitive and in the end it boils down to service and support.

    In my experience SONY cameras have the weakest mechanical design (though many other brands use Sony CCD's on the inside). I have seen many failures of SONY cameras when mounted in harsh environments.

    You don't need a frame-grabber with FW cameras, just a firewire card in your PC (around $40 to $100 at most) sometimes already built-in the PC.

    Don't forget to factor in the cost of a good lens ($100 to $500 if very special requirements).

    Ask if you need lens info too.

    Hope this helps

    Neville.

  7. QUOTE (professor_rumsdiegeige @ Apr 4 2008, 06:05 AM)

    Yes it does. See the Pallet: Vision & Motion/Vision Utilities/Image Manipulation/IMAQ Symmetry.vi

    QUOTE (professor_rumsdiegeige @ Apr 4 2008, 06:05 AM)

    I've got another question, though, and that is: assuming that one has a set of pixels that describe the boundary of an object in an image (i.e. one has the border pixels, e.g. obtained by a Sobel filter with subsequent thresholding), is it possible to compute the set of pixels "inside" this boundary?

    What do you mean compute? Histogram? count the number of pixels?

    Once you have the boundary, make it into a mask and then applying that mask to the image, do whatever you want with the pixels inside it.

    Neville.

  8. QUOTE (shoneill @ Mar 26 2008, 01:18 AM)

    Ps I just spotted NevilleD's post..... Can this "Decimate (Continuous)" function re-create the original array? Can't this lead to a race condition if other sub-arrays are also running around?

    Its not a function, its a VI with a dll call inside pointing to lvanlysis dll (which is part of the advanced package). So I guess your questions about sub-arrays are not relevant to it.

    Neville.

  9. Have you tried setting up a fresh build specification (not copied from LV 8.2 project)?

    Are you missing any dynamically called VI's in the build spec?

    Also in your projects view, click on the File tab, and look for any conflicts, missing VI's etc, and try to fix any issues there.

    Are you sure you loaded exactly the same LV packages as your original 8.2 LV version? i.e. LV toolkits, drivers etc?

    Have you tried building a very simple VI to see if creating an executable actually works on your new install of LV? Maybe your application builder got corrupted?

    Hope this helps,

    Neville.

  10. QUOTE(shoneill @ Feb 11 2008, 08:25 AM)

    Well that's true for sure. I'd expect the "problem" to get fixed though..... Any idea if the newer versions of the IMAQ functions are any different?

    Unfortunately I don't know ANYONE in Austin......

    Shane.

    I don't know what version of IMAQ you are using, but in my version (8.5) the dll calls to NI Vision in this VI are set to "run in any thread" (yellow call library function); this means calls to NI Vision are "thread-safe". This is the correct setup for re-entrant performance of VI's with dll calls. Calling IMAQ Array to Image in two different threads won't block each other.

    Now as to getting "double performance" for the parallel loops, there could be a range of reasons for that; sharing the same image buffer? same subVI? Who knows.

    Just making another copy of a VI with a dll call and re-naming it doesn't guarantee re-entrancy. NI Vision has been "thread-safe" for many versions atleast since 7 as far as I can remember.

    Neville.

  11. QUOTE(pallen @ Feb 8 2008, 08:58 AM)

    I'm not positive here, but what about copying the LabVIEW .ini file? (I'd make a backup first though)

    I don't think pallet info is stored there. I know some pallet info is in your /LabVIEW Data/8.5/pallets folder. I agree, it is quite annoying when you have multiple installations, and all the pallets are just slightly different enough to be frustrating.

    Neville.

  12. QUOTE(JustinThomas @ Feb 7 2008, 03:16 AM)

    Any ideas on how to estimate boot up times on a cRIO controller?

    My current solution is as follows

    I am currently deploying an executable to the controller with some tcp code to connect to a windows machine. I then monitor the time it takes for the tcp connection to get established after switching on the controller. But I am getting varying results every time I run the test. Also I have noticed that this time is dependent on the following

    1. NI software loaded on the controller

    2. Model of the controller

    3. Size of my executable.

    I am looking for any suggestions to accurately measure this boot time. Also it would help if I can get any suggestions to minimize the boot time.

    Regards,

    Justin Thomas

    Keep pinging it from the Windows machine for 2 minutes. When it responds, its booted up. If it doesn't its either crashed or not switched on.

    The boot up time does vary with all the variables you have mentioned.

    Neville.

  13. QUOTE(stamatios @ Feb 4 2008, 04:23 PM)

    This is a screen shot of my code.. I got the results but how can i compare them with the new picture...

    What do you mean new picture? where are you getting the new picture from? File? Camera?

    Put the case structure in a loop and put the new picture into the same buffer as the previous image.

    Thats all I can say given what you have shown in your screenshot.

    Try looking at some example code (Help>Find Examples> then type Vision or image from file ) to see how images are obtained from camera or file.

    Neville.

  14. QUOTE(Bhima @ Feb 5 2008, 03:59 AM)

    Thanks Mike, this worked the way you said it would. :)

    This app was made in 7.1 and I'm new to Labview, so I haven't spent much time in Labview 8.5. Now I wish I had... I don't think 7.1 works this way.

    Now if I could only convince 8.5 to make a Windows excutable as easily as 7.1

    In 8.x there are two separate steps to creating an executable.

    Building the Installer (which also gives you the option of including DAQmx settings, NI-MAX, LV-Runtime Engine etc. etc)

    Building the Exe

    This way you can repeatedly build the exe quickly instead of building the installer as well (like before).

    I would suggest start with a fresh build spec instead of trying to use the old 7.x one. Sometimes the old one gets corrupted, and at any rate, its pretty straightforward to just build an exe.

    Define the top level VI (include any dynamic VI's) direct where you want the result stored, the name of the exe and then build.

    Neville.

  15. QUOTE(Gabi1 @ Jan 25 2008, 01:24 PM)

    Ok Jhoskin gave the tip: right click on the chart itself and get the 'history' property. it still puzzle me tough, as i cant find it the usual way - see picture.

    http://lavag.org/old_files/monthly_01_2008/post-9210-1201295865.png' target="_blank">post-9210-1201295865.png?width=400

    Ben and Normandinf! Now i get it.now next step: why and how? why strict, what does it mean for a class specifier, and how to find it?Thanks a bunch!

    Fourth and last edit:

    one get the strict class specifier as a constant of a reference to the chart.

    That makes it very annoying for charts in clusters, but if strict is necessary, it is understandable there would be no other way. i dont get yet why it has to be strict tough. Doesnt make sense to me, as one has the reference to the specific control already.

    It would be great for a little online (while wiring) documentation on this type of limitations. would have saved me 50min of looking around.

    Why not just use Chart>right-click property>history? Is there anything wrong with using the easier way?

    Keep in mind performance implications if you are using the other way. Don't mess unnecessarily with references unless you have to. The cast doesn't work probably because you can have charts with various data types.. SGL, DBL, cluster, Array etc.

    Neville.

×
×
  • Create New...

Important Information

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