Jump to content

Norm Kirchner

NI
  • Posts

    823
  • Joined

  • Last visited

  • Days Won

    25

Everything posted by Norm Kirchner

  1. A while ago I was told that there is a VI that accomplishes this that we can use in vi.lib. I can't find the information that directed me towards it, but hold out and someone should be able to direct us to it.
  2. A related thought that might be good for this thread. A mass icon editor user interface. One that would easily let you, for any library (LVOOP or otherwise), see ALL the icons displayed and easily allow you to edit them simply by double clicking I've done a mock-up for this but still incomplete, but really should be quite simple if someone runs with it. The basic idea is that you have an interface that you point at a library. It displays all icons at once so you can make sure that you have a library iconography that all matches and if you need to edit some, 1, all icons.... you now have an interface that might allow that to happen. There are too many times that I set up a library and only after the fact of some minor change, something goes haywire in propagating nested library icons and some/all get messed up. So if there was a way to see all icons at once and easily change 1/some/all managing library based icons would be Sooooo much easier. y'all agree??!
  3. There is nothing about the XControl that says you can't have another shift register on the while loop. Or another technique is to utilize the 'Close' ability of an XControl to clear state data that you don't want retained.
  4. One thing that really really really .....wait.... wait for it..... really really really... bothers me about the marrying of XControls to classes is that the minute you have an XControl on a FP that uses a class, the class is locked. I agree that this is a worthwhile idea, and I've already kudo'd it, but the difficulty developing under this paradigm when doing this needs to be addressed. (or am I wrong)
  5. Good question my friend. And it is for this reason, it doesn't work as well because if the person moves the mouse faster than LV can move the panel then everything gets out of whack and you lose the drag. I started by doing it that way. I actually don't like having to revert to polling but it was the only way to get consistent, repeatable and responsive interaction. On a very fast PC w/ nothing going on I would imagine that you 'might' not notice it. But if you were to change the algorithm and move the mouse quickly, you'll find that you lose the drag w/ out much effort.
  6. This should help DraggableFP.zip <object width="786" height="600"> <param name="movie" value="http://content.screencast.com/users/NJKirchner/folders/Jing/media/e383f68c-f6e5-4966-a51b-45a46b0d8724/jingh264player.swf"></param>'>http://content.screencast.com/users/NJKirchner/folders/Jing/media/e383f68c-f6e5-4966-a51b-45a46b0d8724/jingh264player.swf"></param> <param name="quality" value="high"></param> <param name="bgcolor" value="#FFFFFF"></param> <param name="flashVars" value="thumb=http://content.screencast.com/users/NJKirchner/folders/Jing/media/e383f68c-f6e5-4966-a51b-45a46b0d8724/FirstFrame.jpg&containerwidth=786&containerheight=600&content=http://content.screencast.com/users/NJKirchner/folders/Jing/media/e383f68c-f6e5-4966-a51b-45a46b0d8724/2009-12-08_1805.mp4"></param> <param name="allowFullScreen" value="true"></param> <param name="scale" value="showall"></param> <param name="allowScriptAccess" value="always"></param> <param name="base" value="http://content.screencast.com/users/NJKirchner/folders/Jing/media/e383f68c-f6e5-4966-a51b-45a46b0d8724/"></param>'>http://content.screencast.com/users/NJKirchner/folders/Jing/media/e383f68c-f6e5-4966-a51b-45a46b0d8724/"></param> <embed src="http://content.screencast.com/users/NJKirchner/folders/Jing/media/e383f68c-f6e5-4966-a51b-45a46b0d8724/jingh264player.swf" quality="high" bgcolor="#FFFFFF" width="786" height="600" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/NJKirchner/folders/Jing/media/e383f68c-f6e5-4966-a51b-45a46b0d8724/FirstFrame.jpg&containerwidth=786&containerheight=600&content=http://content.screencast.com/users/NJKirchner/folders/Jing/media/e383f68c-f6e5-4966-a51b-45a46b0d8724/2009-12-08_1805.mp4" allowFullScreen="true" base="http://content.screencast.com/users/NJKirchner/folders/Jing/media/e383f68c-f6e5-4966-a51b-45a46b0d8724/" scale="showall"></embed> </object>
  7. I'm seeing this same issue. Has anyone found a plausible work around? I see it in chrome, firefox and IE
  8. An issue has been identified on some peoples systems that have had previous versions of LVS installed. This issue is identified by everything looking like everything should work, you see your commands reflected in the LVS widget but nothing happens. The updated package is 2.0.5-1 attached to this post lavag_cr_LVSpeak-2.0.5-1.ogp The issue is due to errors in the plug-ins To ensure this is not a problem Use the VI Package Manager to simply uninstall both packages, Check the directory C:\Program Files\National Instruments\LabVIEW 2009\resource\QuickEdit\Plugins Clear the contents of that directory re-install both packages After which only qualified and tested plugins should be present and your system should be operational
  9. I think you misunderstood. The clock is not something that I have created. It is a google gadget. But if you look at LabVIEW Speak you will see that I mimic this click/drag ability combined with right click menus and notify icons (System Tray Icons)
  10. Now that is flattery....no that was a google widget that I've been trying to make my stuff look like
  11. An easy way to accomplish this is through VI server and the usage of Re-entrant Front Panels or the use of *.vit 's First step is to make a VI that will be cloned over and over for each new note. Flag the open with option 0x08 and it will open a new VI with each call. <object width="1020" height="628"> <param name="movie" value="http://content.screencast.com/users/NJKirchner/folders/Jing/media/5fc68419-458d-495e-a4fe-582888c1dcf6/jingh264player.swf"></param>'>http://content.screencast.com/users/NJKirchner/folders/Jing/media/5fc68419-458d-495e-a4fe-582888c1dcf6/jingh264player.swf"></param> <param name="quality" value="high"></param> <param name="bgcolor" value="#FFFFFF"></param> <param name="flashVars" value="thumb=http://content.screencast.com/users/NJKirchner/folders/Jing/media/5fc68419-458d-495e-a4fe-582888c1dcf6/FirstFrame.jpg&containerwidth=1020&containerheight=628&content=http://content.screencast.com/users/NJKirchner/folders/Jing/media/5fc68419-458d-495e-a4fe-582888c1dcf6/2009-12-07_1054.mp4"></param> <param name="allowFullScreen" value="true"></param> <param name="scale" value="showall"></param> <param name="allowScriptAccess" value="always"></param> <param name="base" value="http://content.screencast.com/users/NJKirchner/folders/Jing/media/5fc68419-458d-495e-a4fe-582888c1dcf6/"></param>'>http://content.screencast.com/users/NJKirchner/folders/Jing/media/5fc68419-458d-495e-a4fe-582888c1dcf6/"></param> <embed src="http://content.screencast.com/users/NJKirchner/folders/Jing/media/5fc68419-458d-495e-a4fe-582888c1dcf6/jingh264player.swf" quality="high" bgcolor="#FFFFFF" width="1020" height="628" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/NJKirchner/folders/Jing/media/5fc68419-458d-495e-a4fe-582888c1dcf6/FirstFrame.jpg&containerwidth=1020&containerheight=628&content=http://content.screencast.com/users/NJKirchner/folders/Jing/media/5fc68419-458d-495e-a4fe-582888c1dcf6/2009-12-07_1054.mp4" allowFullScreen="true" base="http://content.screencast.com/users/NJKirchner/folders/Jing/media/5fc68419-458d-495e-a4fe-582888c1dcf6/" scale="showall"></embed> </object>
  12. Sydney, Your in luck wrt the event timeout error case. You accidentally wired the error wire under the structure <object width="944" height="488"> <param name="movie" value="http://content.screencast.com/users/NJKirchner/folders/Jing/media/1bcbcd14-4133-4cbe-b55c-b926cdc518f8/jingh264player.swf"></param>'>http://content.screencast.com/users/NJKirchner/folders/Jing/media/1bcbcd14-4133-4cbe-b55c-b926cdc518f8/jingh264player.swf"></param> <param name="quality" value="high"></param> <param name="bgcolor" value="#FFFFFF"></param> <param name="flashVars" value="thumb=http://content.screencast.com/users/NJKirchner/folders/Jing/media/1bcbcd14-4133-4cbe-b55c-b926cdc518f8/FirstFrame.jpg&containerwidth=944&containerheight=488&content=http://content.screencast.com/users/NJKirchner/folders/Jing/media/1bcbcd14-4133-4cbe-b55c-b926cdc518f8/2009-12-07_0953.mp4"></param> <param name="allowFullScreen" value="true"></param> <param name="scale" value="showall"></param> <param name="allowScriptAccess" value="always"></param> <param name="base" value="http://content.screencast.com/users/NJKirchner/folders/Jing/media/1bcbcd14-4133-4cbe-b55c-b926cdc518f8/"></param>'>http://content.screencast.com/users/NJKirchner/folders/Jing/media/1bcbcd14-4133-4cbe-b55c-b926cdc518f8/"></param> <embed src="http://content.screencast.com/users/NJKirchner/folders/Jing/media/1bcbcd14-4133-4cbe-b55c-b926cdc518f8/jingh264player.swf" quality="high" bgcolor="#FFFFFF" width="944" height="488" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/NJKirchner/folders/Jing/media/1bcbcd14-4133-4cbe-b55c-b926cdc518f8/FirstFrame.jpg&containerwidth=944&containerheight=488&content=http://content.screencast.com/users/NJKirchner/folders/Jing/media/1bcbcd14-4133-4cbe-b55c-b926cdc518f8/2009-12-07_0953.mp4" allowFullScreen="true" base="http://content.screencast.com/users/NJKirchner/folders/Jing/media/1bcbcd14-4133-4cbe-b55c-b926cdc518f8/" scale="showall"></embed> </object> Also with regards to your second question, right click each of the list-boxes and look at each 'Selection Mode' That setting declares what kind of data type the MCL is. If it declared to be 0 or 1, then it will be a scalar. If it is one of the 'x or more' then it will be an array. So really for the code that your doing in the MCL sub-vi (from what I can tell) you don't need to strict any of those references and realize that those kind of coercion dots are ok good luck
  13. Let me know if your interested in a google wave invitiation and I'll make the call to hand out as possible. There are lots of up and coming LV Architecture questions forming
  14. It sounded like you are new to the entire process of using LabVIEW. If this is true, I would highly recommend looking into the NI courses that are offered. Above and beyond the courses offered by NI, LabVIEW for everyone is a great book that covers a TON of topics from beginner to advanced (although I' not sure how much OO it covers) But once you get past just the basics the I would recommend reading some beginner OO books that might not even be LV oriented. AristosQueue has a slew of recommendations on those.
  15. What kind of Eb/No and signal are you working with? Digital/Analog, constant envelope, Peak/Average ratio. I would imagine you would do a power vs time analysis and just look for the power edge.
  16. Just thought I would also Link the files here for simplicity sake The current LVS version is 2.0.5 The current QEC Plugin Pack is 2.0.0 They can be found below (because I could not properly edit this post) lavag_cr_LVS_QEC_PluginPack-2.0.0-1.ogp lavag_cr_LVSpeak-2.0.4-1.ogp
  17. LabVIEW Speak(LVSpeak) 2.0 has been officially released! There is an article in the NI Instrumentation Newsletter about it and a follow up post on the NI Communities with getting started videos and the current packages. http://decibel.ni.com/content/groups/labview-apis/blog/2009/11/19/labview-speak--programming-lv-through-voice-commands But I've decided to support the independent LV community and keep the discussion on LAVA. So hopefully we can get some dark-siders to come over to the light. >8^}> I welcome any feedback and keep an eye out for another LAVA topic to be posted regarding building QuickEdit Plugins and another for building LVSpeak Clients ~,~ The Captain Was Here
  18. I say this from a standpoint of that I have never heard of anything that ensures that they will be ordered properly. There is most likely a high likelihood that they will, but this only highlights that people write programs that assume this. If AQ or someone in R&D pipes up and says that it is ensured, then I'll fully retract that. But I will never recommend that anyone write a program that depends on having multiple Val(signl) strung together to execute the events in that order for all those reasons above. San, As a point of information, what is your skill/experience level in LV?
  19. I suppose I'll clarify my point for just a sec, then I'll try to follow my own points (about to be given) and provide alternatives. I think using (not even abusing) the Val(signaling) property is far far worse than globals depending on usage. Hence the fervor. I don't expect pretty code out of the gate but I don't know how to stop a newbie from adopting poor practices out of the gate other than striking the fear of god into them. Agreed, using dynamic events 'as truly dynamic events' is not a beginner topic, but I believe the use of 'user events' are beginner material which only requires knowledge of the mechanics of wiring them up. and summing up those last few points: I think that a smarter person than I would not need the 'fear-o-god' tactic to discourage poor techniques. Rather it would be much more classy and eloquent to give knowledge to them through some simple example programs demonstrating the bad aspects and demonstrations of better ways to do it. Now onto my attempt at eloquence: Jim Carmody did a great job with exactly what I think San was gunning for so I'll try not to replicate that First on some of the dangers of using the Val(signaling) Some simple programs are created that are fully reactive (waiting for some event to happen) and you will see this as just an event structure in a while loop. <a href="http://content.screencast.com/users/NJKirchner/folders/Jing/media/8689b74b-ac72-44c8-952e-80c386e03c21/2009-11-29_1536.png"><img'>http://content.screencast.com/users/NJKirchner/folders/Jing/media/8689b74b-ac72-44c8-952e-80c386e03c21/2009-11-29_1536.png"><img class="embeddedObject" src="http://content.screencast.com/users/NJKirchner/folders/Jing/media/8689b74b-ac72-44c8-952e-80c386e03c21/2009-11-29_1536.png" width="448" height="226" border="0" /></a> And depending on the scope of the code, this can get the job done just fine and avoid extra coding that may never be utilized. But the problem, and this sounds much closer to what San was looking at, is what happens when you now need to invoke the code within this state without the user hitting a button? By default, if the user doesn't know any better, they'll use the Val(Signaling) property. This is typically because it will require almost no extra code to be written other than dropping that property node. Well this starts to snowball into a bigger issue when someone decides that they just don't want to execute that one event state, but rather I need 4 states executed and I want that state to always be the second of the 4. What typically happens, is that the end user just starts stringing together multiple Val(signaling) properties for multiple controls to call multiple event states. This is particularly bad because there is no guarantee that as you string together Val(signaling) properties that they'll execute in that order, so you've just introduced potential bad logic in your vi. Now it gets even trickier if you like to use property nodes all over you code because if you need to better understand the flow of the program, how do you know who and what is controlling the state firing? Search for Val(signaling): you get all usages of that property (fail). Search for all property nodes of a given control: you now find every property of a control and you only find the property nodes that are directly linked to that control and you miss any non-linked property node. <a href="http://content.screencast.com/users/NJKirchner/folders/Jing/media/54b79210-0b47-42d6-9770-4be1f36bbe13/2009-11-29_1555.png"><img'>http://content.screencast.com/users/NJKirchner/folders/Jing/media/54b79210-0b47-42d6-9770-4be1f36bbe13/2009-11-29_1555.png"><img class="embeddedObject" src="http://content.screencast.com/users/NJKirchner/folders/Jing/media/54b79210-0b47-42d6-9770-4be1f36bbe13/2009-11-29_1555.png" width="437" height="142" border="0" /></a> And just to re-itterate. Don't underestimate the need to understand the flow of a program. You will someday need to re-learn what you wrote. Someone's LAVA tagline is perfect for this "Imagine the next person to work with your code is a deranged psychopath and knows where you live" So now onto some alternatives and notes about the Val(Signaling) property. Its intent in life is to provide that 'if all else wont work' kind of functionality to the LV language. An example of this is when using the data terminal of an event case. In this case you want that data on the terminal and the only way to programatically fire that event and still have that data is through the Val(signaling) property <a href="http://content.screencast.com/users/NJKirchner/folders/Jing/media/41648ccd-13e7-4e07-9cce-b867b4dc6821/2009-11-29_1605.png"><img'>http://content.screencast.com/users/NJKirchner/folders/Jing/media/41648ccd-13e7-4e07-9cce-b867b4dc6821/2009-11-29_1605.png"><img class="embeddedObject" src="http://content.screencast.com/users/NJKirchner/folders/Jing/media/41648ccd-13e7-4e07-9cce-b867b4dc6821/2009-11-29_1605.png" width="448" height="223" border="0" /></a> Now the alternative or smarter architecture associated with this, is to have the event cause a reaction in some other piece of code somewhere else that you have more control over than an event structure. This is where a solid event driven producer consumer design pattern comes in handy. I won't go into the architecture of this here but what this does allow you to do is have the code to be executed in a place that can be easily invoked programatically or interactively. Do the amount of wires increase? yes. Does the architecture increase in complexity? yes. Do you have a much more flexible and debuggable piece of code for just a little more effort? No question about it absolutely. So for the how-to-do-it portion of the code. San, It sounds like you are monitoring your code for the 0xFF Byte and want some other part of code to react when this happens. The code that Jim sent is about spot on and the only other thing that you'll need to do is share the reference to that newly created user event around your codebase. <a href="http://content.screencast.com/users/NJKirchner/folders/Jing/media/6f18fd2d-c4a3-4e6b-9c38-c62bac86edf8/2009-11-29_1617.png"><img'>http://content.screencast.com/users/NJKirchner/folders/Jing/media/6f18fd2d-c4a3-4e6b-9c38-c62bac86edf8/2009-11-29_1617.png"><img class="embeddedObject" src="http://content.screencast.com/users/NJKirchner/folders/Jing/media/6f18fd2d-c4a3-4e6b-9c38-c62bac86edf8/2009-11-29_1617.png" width="316" height="265" border="0" /></a> The part of code that needs to fire the event, will use the 'Generate User Event' vi <a href="http://content.screencast.com/users/NJKirchner/folders/Jing/media/8a8cf0e9-cc0d-445d-acf9-b9483e37fbcf/2009-11-29_1619.png"><img'>http://content.screencast.com/users/NJKirchner/folders/Jing/media/8a8cf0e9-cc0d-445d-acf9-b9483e37fbcf/2009-11-29_1619.png"><img class="embeddedObject" src="http://content.screencast.com/users/NJKirchner/folders/Jing/media/8a8cf0e9-cc0d-445d-acf9-b9483e37fbcf/2009-11-29_1619.png" width="235" height="488" border="0" /></a> And all parts of the code that need to respond to that event need to dynamically register for that event and then have an event case that registers for it. <object width="810" height="612"> <param name="movie" value="http://content.screencast.com/users/NJKirchner/folders/Jing/media/e17f4a92-a2a5-428a-b981-2393f28ebc2a/jingh264player.swf"></param>'>http://content.screencast.com/users/NJKirchner/folders/Jing/media/e17f4a92-a2a5-428a-b981-2393f28ebc2a/jingh264player.swf"></param> <param name="quality" value="high"></param> <param name="bgcolor" value="#FFFFFF"></param> <param name="flashVars" value="thumb=http://content.screencast.com/users/NJKirchner/folders/Jing/media/e17f4a92-a2a5-428a-b981-2393f28ebc2a/FirstFrame.jpg&containerwidth=810&containerheight=612&content=http://content.screencast.com/users/NJKirchner/folders/Jing/media/e17f4a92-a2a5-428a-b981-2393f28ebc2a/2009-11-29_1624.mp4"></param> <param name="allowFullScreen" value="true"></param> <param name="scale" value="showall"></param> <param name="allowScriptAccess" value="always"></param> <param name="base" value="http://content.screencast.com/users/NJKirchner/folders/Jing/media/e17f4a92-a2a5-428a-b981-2393f28ebc2a/"></param>'>http://content.screencast.com/users/NJKirchner/folders/Jing/media/e17f4a92-a2a5-428a-b981-2393f28ebc2a/"></param> <embed src="http://content.screencast.com/users/NJKirchner/folders/Jing/media/e17f4a92-a2a5-428a-b981-2393f28ebc2a/jingh264player.swf" quality="high" bgcolor="#FFFFFF" width="810" height="612" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/NJKirchner/folders/Jing/media/e17f4a92-a2a5-428a-b981-2393f28ebc2a/FirstFrame.jpg&containerwidth=810&containerheight=612&content=http://content.screencast.com/users/NJKirchner/folders/Jing/media/e17f4a92-a2a5-428a-b981-2393f28ebc2a/2009-11-29_1624.mp4" allowFullScreen="true" base="http://content.screencast.com/users/NJKirchner/folders/Jing/media/e17f4a92-a2a5-428a-b981-2393f28ebc2a/" scale="showall"></embed> </object>
  20. Bad bad bad jgcode. Bad! San... Please disregard the any mention of the (signaling) property. This is something that is VASTLY abused and should be avoided at all costs. let me repeat, DON"T USE THE SIGNALING PROPERTY unless no other way of doing it. Newbies use this methodology in excess and end up really regretting it down the line. This tactic is not easily traceable, debuggable or extendable (going N+1) Just look at some of the stock examples that come with LabVIEW for user events and dynamic events. Your effort will pay off 20 times easily in better code. Long story short, if you want reactive code to a user input, utilize an event structure to respond to that action. If you want reactive code to a group or types of controls/indicators look into dynamic event registration If you want code to react to programatically to different parts of programs (without user input) then look into user events. and once again BAD JGCODE!
  21. I as well am using 2009 and with Win 7 and all is well with my usual user defined value of 38. I'm thinking something is hosed on your system LeCroy. I hate to mention it.... have you though of uninstall/re-install?
  22. HEY! Don't go telling me I'm in marketing....that's just not right. That aside ****BIG NOTICE**** LVSpeak 2.0 has been officially released and is currently available on the dark side http://decibel.ni.com/content/groups/labview-apis/blog/2009/11/19/labview-speak--programming-lv-through-voice-commands There are getting started videos that detail the install/troubleshoot and commands along with the code and a presentation highlighting the process I have submitted the material to LAVA CR un-certified and we'll see how that goes over the next few weeks to get certified Thank you all for your feedback that has made this such a great program.
  23. Francois, Great job on this. Especially the variety of icons you've got setup. Any chance you're planning to get more of them into the system Icon style? Also, I now realize that I've duplicated some of the exact work you've done on the fade in/out and the only difference is that I've found that an exponential rather than linear fade has a nicer visual effect. Any thoughts to that?
  24. The same thing was happening on my system.... Looks like it's a trip down to floor 3 on Monday to stand up on some desks of the LV R&D fold and let out my quarterly rant. So theoretically.... that should do it, would you agree? Also if your willing to edit the code, there is no reason why I need to use the dynamic register for events. (this may aleviate the problem) so if you edit that up, let us know what you get. ~,~
×
×
  • Create New...

Important Information

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