Jump to content

Grampa_of_Oliva_n_Eden

Members
  • Posts

    2,767
  • Joined

  • Last visited

  • Days Won

    17

Posts posted by Grampa_of_Oliva_n_Eden

  1. QUOTE (Bjarne Joergensen @ Feb 26 2009, 04:34 AM)

    Hi All

    Is there a way to find VIs where a specific VI is used, whithout loading all the VIs I might assume that call the specific VI?

    best regards

    Bjarne

    If the VI is in a project you can right-click and select find callers. I use this method to fix-up projects where someone turned on "auto-populate" with broken VI in the folders. THe missing links in the Depndencies can then be used to chase up the tree to the caller.

    Ben

  2. QUOTE (jdunham @ Feb 25 2009, 07:07 PM)

    It takes about a minute to go into C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\errclust.llb and remove the annoying "(no error)" part of the label (don't forget to fix both the classic and the 3D version). That's just about the second thing I do to a fresh copy of LabVIEW after turning off 'Lock Automatic Tool Selection', 'Automatic Wire Routing', and AutoGrow.

    :worship:

    Same routine here but I did NOT knw about the llb.

    Ben

  3. That image dovetails with a conversation I ws having with my buddy last night where we came away wondering if the days of the programable computer are numbered.

    WIth many people moving to hand held devices for phone twitter etc, gamers going to X-box like platforms, and video watcher going with Roku boxes to port videos to TVs the use of PC is being gradually eroded. Withe the recent advances of technology, we may see the reamining PC apps migrating to specialized hardware that fils the need possibly controlled by FPGAs r the like.

    So...

    THere may come a day when a a programable computer is going to become increasingly rare.

    Ben

  4. QUOTE (Val Brown @ Feb 24 2009, 01:20 PM)

    No I don't have a demo just the complete application. Lets see if this helps. I wrote a "Controls on the Fly" app that when in run mode took this form.

    http://lavag.org/old_files/monthly_02_2009/post-29-1235507532.png' target="_blank">post-29-1235507532.png?width=400

    Picture was seperate process that kept a picture control updated on the GUI.

    Object was one of a 100 widgets that could be dropped on the screen.

    Information was an engine that interfaced to the real world or a simulator.

    WHen a value changed, the correct instance of "Object" had to be updated.

    When a user clicked on a region of the picture allocated for the "Object" Picture had to tell the correct "Object" about the click.

    "Object" could decide to change itself (like a scrolling marque indicator).

    So "Object" exposed methods that where avaiable to Picture and Information but could also do internal methods.

    So where do I keep the data for an instance of "Object"? If I stuck it in Picture or Information then either one or the other would have to be interupted or invoked from the other. On top of that, to let the Object jiggle itself, then whoever owned the data would have to periodically touch the "Object" so it could do its thing.

    So rather than slamming the Object into one or the other I made it its own loop so it update itself any time it wanted.

    To expose the Methods "Mouse Move" "and "Update Value" the Object has a unique queue to accept the Method invokation. The LVOOP method a used by the Picture effectively queued up the Method requestod required a response, the queue had built into it, a response queue that the invoker could monitor for a message with the returned data.

    So the Picture used the queue ref for that instance of Object to request the method.

    This worked fine in my book with 100 indicators/controls updating at 10 Hz with only about 35% CPU usage.

    What I did not like about the final app was that I could only crate about 100 widgets before I ran out of memory. I would have liked to have done more but the customer was happy so I never dug deep enough to see if I changed the structure a little if the foot-print for every instance would be smaller.*

    Just trying to help and maybe learn something on the way,

    Ben

    * I have this suspicion that in one of my methods I was stashing away the entire screen instead of just the background of the Object. 100 copies of a huge monitor can fill memory fast.

  5. QUOTE (Kubo @ Feb 24 2009, 11:14 AM)

    I want an image in the background of a terminal. I made the terminal transparent but I cant figure out how to make it so the image is under the terminal instead of on top. I read somewhere that its in the Edit menu but I cant find it.

    I am working with 8.6.

    I'm lost as well but I'll guess.

    On your button bar (the bar with the run arrow) the far right button called "Reorder" may be what you want (after you select the object).

  6. QUOTE (Val Brown @ Feb 24 2009, 11:46 AM)

    Can you -- or someone else here -- clarify what would be "missing" from such a stance: ie what does "by-ref" add at a functional level that is not available with what you're reporting. Not being "deep" in OOPs I'd really like to hear this laid out as clearly as possible by those who know.

    Let me say this another way: if the native LVOOP really does "do it all" then I'm much more interested in pursuing OOP within LV. If not (yet?) then I might just wait to jump into the pool until the native implementation does "cover the waterfront". I don't want any "OOPs" or "gotchas" along with way.

    I'll give it a try since I have not been OOPing long enough to fall into the trap of using those fancy OOPish terms. ;)

    I understand the difference is the nature of the wire being passed around. IN LVOOP the data is in the wire. The "by-ref" version passes a reference to the data.

    So it is a question of where is the data. Since LVOOP is smart enough to work in-place it ends up being faster. The by-ref version requires moving the data (after getting a lock) to where it is manipulated and then putting it back. THe movement of data back and forth is what always kept me out of GOOP but the native LVOOP removed that limitaion.

    THe only limitation that I ran into is something that is an automatic in my design but not straight forward in LVOOP. I understand it to be called an "Active Object". These are objects that once created can go on by themselves doing their job while also offering services (methods) to other objects.

    Ben

  7. QUOTE (ASTDan @ Feb 23 2009, 11:05 AM)

    Hello,

    Does any know how to insert phi in LabVIEW?

    φ

    I tried typing the unicode (03C6) and cutting and pasting from word.

    Thanks

    Dan

    I thought this was a purely font issue. If the font you are using supports that character it will work. So check your font?

    Ben

  8. QUOTE (faisaldin @ Feb 23 2009, 10:42 AM)

    hi,

    i have to sense a x-y co-ordinates from a touch screen and send them to the PC.

    Do anyone have some idea about how a real-time co-ordinates can

    be generated on a just like a small screen(area) in labview.

    such that the small screen (area) in labview gives the sensed

    co-ordinates showing some kind of indication.

    and most specially it allows me in (real-time) to generate output from PC

    vice versa.

    such that if i draw something on the screen (area) within labview

    it generates the co-ordinates for the output.

    thanks....

    any tutorial any supportive material regarding it....please post

    Use an Event Structure configured to fire off "Mouse Move".

    Ben

  9. QUOTE (Aristos Queue @ Feb 23 2009, 04:48 AM)

    As a workaround to that, rename the class file, load the typedef, edit it, then rename the class back to its original name and open it. This shouldn't be necessary, but since you're working around the other bug, this workaround becomes useful.

    [TongueInCheek = True ]

    And I though the game of "Twister" was a part of history. :rolleyes:

    [TongueInCheek = False ]

    Ben

  10. QUOTE (Jim Kring @ Feb 21 2009, 01:11 PM)

    • ...The contents of the Event Structure frames for Event C and Event D should remain unchanged (they should not be swapped)

    Thank you very much for the heads up Jim! :thumbup:

    I wonder if that is realated to ?CAR# 117209 ? where edits of a type def cluster could show an analogous effects. :angry: The suggested work-around was to edit the type def with the callers closed and only open them after the change. I worked up a duplicate of your code in LV 8.5 and duplicated the bug you demoed.

    I converted it over to a type def version and achieved a similar effect by deleting an element from the type def hit apply changes, then did an un-do in the typed def and hit apply changes again.

    I then backed-up and tried the edit of the typed def with the caller closed and it did not mix up the events.

    So editing type def with callers closed may help you work-around/avoid this issue. Yes I am assuming you are using type defs in your real code.

    Just trying to help,

    Ben

  11. QUOTE (rolfk @ Feb 21 2009, 04:23 AM)

    No way. They exist since before the Picture control was released. But I guess the field edit option has a redrawing problem when dealing with transparent background.

    Of course deep down there is C code and to enable editing of the field they probably do use the trick of creating a temporary text entry field but fail to account for the case where the table background is transparent and simply copy the table background to the edit control in all cases, which would be certainly desired behavior for non transparent backgrounds.

    Rolf Kalbermatter

    I'll grant you that. My point is that Bob outlined the work being done somewhere and it could be re-written using the Picture control and we would not know the difference. I think its cool because it gives you a "if all else fails" option. :thumbup:

    Ben

  12. QUOTE (crelf @ Feb 20 2009, 04:49 PM)

    Try it yourself or look closely at this image (from LV 8.5)

    http://lavag.org/old_files/monthly_02_2009/post-29-1235167349.png' target="_blank">post-29-1235167349.png?width=400

    I typed in "CRELF" then (after entering the text) went back and deleted all of the character but did NOT complete the change ( did not hit enter of click outside). The text box for entry picked up the transparent color from the table background so you can see through and the text "CRELF" is still visable in the Picture behind the data entry box. This is the bug that leads me to believe that way down somewhere the table is really an XControl that renders the image using a picture control and shows/postions/hides a text box when a user clicks.

    Ben

  13. THere was (and may still be ) a bug in the table if you used a transparent background and then attempted to edit the contents of a cell. When editing you could see the old text behind where you were typing as if the table was really an XControl that help an image of the table contents in a picture and would show and possition a text box when you clciked on a cell so....

    I suspect Bob outlined what is really inside the table.

    Ben

  14. QUOTE (BobHamburger @ Feb 20 2009, 10:30 AM)

    I have a hairy, complex issue that I'll try to distill down to its basics.

    The system that I'm working with has three (3) cFP-1808's being controlled from a PXI-8106, running RT, via Modbus through Ethernet. I've taken the NI Modbus Library and written some nice wrappers around it to realize the basic FP functions like read and write, along with some configuration and scaling functions (this is a nice feature exposed through the Modbus interface). At the very bottom of the comm heirarchy are the familiar TCP primitives. I've constructed a cFP Polling Engine VI, which handles opening the TCP session and doing the cyclical reading and writing. The polling engine is set to take a tag list, and read from/write to a complete cFP stack every 100 mSec. It's been benchmarked to do everything it needs to do in about 55 mSec, so there's some headroom in the system. It's designed to handle any errors (56, 64, 66 and the like) by simply closing the reference and re-initiating a new comm session. The three 1808 stacks are serviced by three re-entrant copies of the Polling Engine; all of their respective subVIs are similarly re-entrant, so that everything can run in parallel. That's the intention, but in practice there are problems...

    1. When running under RT, about every hour or two, the system will show an Error 56 timeout (To=50 mSec) and perform a disconnect-reconnect cycle as designed. This works perfectly, with the reconnection cycle taking 10-12 mSec. The timeouts seem to be pretty evenly distributed between the three 1808 stacks. All well and good, BUT:

    2. After exactly 62 reconnections (which at the failure rates noted take 2-3 days of continuous operation) no more reconnections will occur. Neither can I connect to the 8106 RT controller via FTP. It's as if we've completely run out of TCP sockets. And yes, I've checked the very obvious: the old connection refnum is indeed closed before a new one is opened.

    3. Variation #1: if I take the parallel, asynchronous operation described above and run it from my PC host under Windows, none of the random disconnect-reconnect cycling occurs. The system is rock-solid.

    4. Variation #2: if I restructure the TCP Polling Engines so that they run serially rather than in parallel, and run this under RT, none of the random disconnect-reconnect cycling occurs. The system is rock-solid.

    Here's the ugly conclusion that I've arrived at: the TCP API cannot reliably support multiple, parallel, asynchronous calls in RT. Moreover, the TIMED_WAIT operation for holding and releasing ports/sockets doesn not seem to be reliably operating.

    Has anyone else in the community observed this kind of behavior in TCP comms under PXI-RT? Are we asking too much from RT that it works as well as Windows? Other than completely serializing the calls to the TCP API, so that we're only doing one at a time, are there any other methods for making multi-device TCP communications under RT reliable?

    Close but not exactly...

    If I did not share this and it ended up being the issue, I'd feel bad.

    The Modbus libraries that NI had their web-site where OK if that was all you were doing so they make a nice demo. They did not play well with other process. I went through and refactored them adding "zero ms wiats' to loops and some other stuff.

    Maybe instances are fighting with each other and can play nicer together if they just share the CPU better.

    Ben

  15. QUOTE (rolfk @ Feb 20 2009, 02:02 AM)

    ...This sounds more like an argument against releasing scripting right now.

    But a more realistic solution would be to write a flexible driver in the ways of Tag based addressing, where you do use the Device Names/Tag Names in your LabVIEW code and on start up load that list into a Vi that can do the TagName<->MemoryAdress translation.

    It's a bit of work to do that in a good way but hardly more than writing a tool that can read your address list and change all the VI code using scripting.

    Rolf Kalbermatter

    Thanks for the comments Rolf.

    Well right up until the crash is was an arguement for scripting.

    The translation had to happen fast* so I did benchmarks to determine the "optimum" code struture to accomplish the task.

    Ben

    *I was logging the entire memory space of SCRAMNet at up to 1KHz which roughly translates as 50,000 "channels" at 1KHz. So if the customer every really wanted to crank up the acq rate, it COULD be trying to log at 50MHz. ( In reality I don't think anyone would actully crank it up that high since I made sure they had to "work to cause that problem". Additionally, most of the memory space offered via SCRAMNet was static so I only had service interupts for values that changed. A latter version of this app will be spread across multiple CPU to "divide and conquer").

  16. QUOTE (Tom Bress @ Feb 18 2009, 03:15 PM)

    Hello! I've been away from the forums for some time now but now I'm back. I've been making the final push on my doctorate and I'm finally done! I defended my thesis on Monday and the committee passed me. I'm walking around in a state of shock. I've been working on this for a long time while holding down a full time job as support engineer/lab manager here at the University of Michigan and it is hard to believe that it is finally done. If anyone wants to know about how to use particle image velocimetry to measure the velocity vector fields of polymer melts during injection molding, I'm your man.

    This also means that I'll be starting a job hunt in the next month or so. I'll post something in the Jobs forum when I'm ready to start the hunt, but if anyone out there is interested in a mechanical engineering PhD/CLA/CPI/PE then PM me. But for now, I'm going to concentrate on catching up on all the sleep I've lost this past month or so.

    Congratulations!

    Try GE Plastics - The sell the plastic used in DVDs and consult with their customers on how to achieve the molds they need.

    Technicolor - (maybe bd memory) They make a lot of DVDs (talk about quality control, when your final check involves an AFM!)

    Ben

  17. QUOTE (wishfulthings @ Feb 12 2009, 06:18 AM)

    This is exactly what I want to do but I'm using 8.6 and can't seem to get access to the Block Diagram property node. Is there a similar method I can use for 8.6.

    This is my first post and I only have a few months Labview experience so hopefully this isn't a stupid question :)

    Could you please explain what you are trying to accomplish?

    A first LV project should not require advanced technique like Scripting. Maybe we can offer a simpler approach.

    Ben

  18. QUOTE (vugie @ Feb 16 2009, 09:53 AM)

    Can't this "feature" be used to overcome brut force protection for VIs? If someone will find a way to fill the cache with a number of passwords, it can be used to try multiple passwords almost at once without any artificial pause.

    At about LV 6.0 NI introduced a delay when entering a password programatically to make sure the brute force attack will take a millenium to complete.

    Ben

  19. QUOTE (Jim Kring @ Feb 12 2009, 03:03 PM)

    Hey Ben,

    Thanks for the info.

    Would any of your "young co-workers" have any info they'd like to share, too? Or, are they too busy Twittering and Facebooking with thier IM buddies? :laugh:

    -Jim

    Actually he is an XBoxer- call of Duty type. I asked him to think about writting something up after he started to rattle off a buch of stuff but stopped and said, It's really complicated!". He did say he would try to put something together.

    Ben

  20. QUOTE (Jim Kring @ Feb 12 2009, 02:28 PM)

    John,

    Thanks for stirring up that conversation. It was very enlightening.

    I'm curious: have you (or anyone else here at LAVA) had success in deploying web services in LabVIEW? The process seems very non-trivial and I'm wondering if those who have tried it have any advice, best practices, or list of gotchas that they could share.

    Thanks,

    I can't give you an exhaustive list but here are some notes (well at least one worth reading)

    1) Property nodes executed prior to the web-srever being fully up do not always work. We were setting the string for a ring control too early and they would not show up. Doing so after the server was running no issues.

    2) Whenever possible, find a young co-worker to develop the app. It saved me a lot of headaches.

    3) A sign on the side of the equipment cabinet reading something to the effect "Warning! Parking this cabinet over a high pressure steam vent is a very bad idea."

    Well at the least the first one was worth sharing.

    Ben

  21. QUOTE (OptimisticDan @ Feb 11 2009, 10:12 AM)

    I have only been using Labview for about a year, so there maybe some simple setting I changed that I am un-aware of. However this problem has me stumped. I have several large programs that send commands and received data using the COM port, and these have been working in the past. However, in December a static discharge on our equipment damaged my PC's COM port on the motherboard. For about a month, I was using a USB-Serial adapter with mixed results but last week the USB-Serial started failing constantly. I finally got around to replacing my motherboard and getting a true COM port back thinking that would solve the problem, but the COM port still fails. Windows and MAX both see the port, however if I attempt to configure the port using VISA, I always get "Is Port Connected? = False" This is element 10 in the property node of the VISA device.

    Our company has an independed software packaged to talk to our products using the same COM port and it works fine now that my motherboard has been replaced. Therefore I pretty sure All is well with Windows and the COM port hardware.

    I've been using 8.6 for several months, but I still have 8.5.1 installed from a prior update. I loaded an older serial port VI into 8.5.1 and it works just find. When I load the same VI into 8.6, it fails.

    I have used Close VISA.vi and Close Serial Driver.vi but they have no affect. It just seems that to my 8.6 installation of Labview, the COM ports are there, but not accessable. In MAX, I get the following error when I try to Validate the port; "Could not open a VISA session to "ASRL1::INSTR". VISA error code 0xBFFF0072. The resource is valid, but VISA cannot currently access it.

    Thanks for your help.

    Works in 8.5 but not 8.6, that just does not make sense. Try doing a repair on your LV 8.6 install (use the install disks, that is one of the options) to see if that helps.

    Ben

  22. QUOTE (PaulG. @ Feb 5 2009, 07:46 AM)

    :laugh: I've heard it more than once from non-LV programmers: "You LV guys do nothing but draw pictures all day". Usually joking, but sometimes with utter contempt.

    OK lets go back farther...

    Imagine the discusion regarding using Roman Numerals vs the scheme we use now (arabic?). The old timers that are used to the Roman numerals would say

    "

    Why would I want to write all of those characters to (1000) when I could just write "M", besides only mathamaticians can read those silly codes. Not to mention the confusion over the signifgence of what those funny characters mean! With Roman numerals I can cut and paste( not applicable to stone tablets) an "M" from this number to another number and it always produces the same number.

    "

    Not so long ago maybe 25 years ago I was talking to a software type (I was still hardware at that time) and he asked me

    "

    Why are you trying to learn "C" when you can do everything you want using Fortran?

    "

    I have been at this computer stuff for 33 years now and (note analogy for Jim) and have observed that

    "Riding the technology wave is like surfing, as long as you stay on the leading edge, you can ride it for years. Fall behind the edge and you could wipe-out or it will leave you behind."

    The moment I fisrt saw a LV diagram I felt a sense of dejavu to the conversation with that software guy about "C" year prior. In my mind eye, LV is the leading edge of software development environments and I hope to ride it all of the way to the beach (retirement).

    Ben

×
×
  • Create New...

Important Information

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