Jump to content

Norm Kirchner

NI
  • Posts

    823
  • Joined

  • Last visited

  • Days Won

    25

Everything posted by Norm Kirchner

  1. lEver wanted to communicate with VI which are across context boundaries? Those typical boundaries, are different LabVIEW project LabVIEW into LabVIEW EXE, EXE to EXE PC to PC across a network or even the internet Usually to get around these boundaries, we have to flatten to some easier transport mechanism like a string and then unflatten on the other end. There are a whole other host of situations and and reasons why cross context boundary communication is useful and not just a simple slam dunk using existing primitives in LabVIEW REx (Remote Export Framework) is a useful framework that you can take advantage of to eliminate the typical boundaries Instead of spend 45 minutes trying to describe it, see the linked videos below, (also in the PPT) until more written content gets made. Basic Demo - Current App http://screencast.com/t/JbW2mM3jx Creating & Using a New Command http://screencast.com/t/GhkE2CEx4Ip Send into EXE http://screencast.com/t/bxbI0B4l8Xs EXE to EXE http://screencast.com/t/xCJw2B39mFQr Debugging Ports / Services http://screencast.com/t/E0RXrgM3Yex Using Service Dump Info http://screencast.com/t/oTUSH5aFqo9S Network Communication http://screencast.com/t/KuTPTKA8rmC1 Rebuild of EXE (addendum) http://screencast.com/t/36oWmrybjRMj ******************* 1/12/15 Update: attached new VIPC which upgrades REx to 1.14.0.31 to address the issues w/ things not moving into the tools menu properly Remote Export – REx Framework.pptx REx Installation Full.vipc 01/31/22 Update: Added update to Error handling on response, required ni_lib_rex-1_15.0.30.vip
  2. Based on the limited information associated with the post, I would also recommend using a Queued Driven Message Handler (QDMH)(Template available via the 2012 sample/template projects) I presume you're a relatively new developer and as useful as the QDMH is in making sure your application can do what you want, it has a variety of key flaws for handling flow control, especially if it's event driven from the Front Panel. For simplicity sake, it might be best to defer to a basic state machine and simply index the enumeration +1 for each itteration of the loop. Also, based on experience, Shaun's response is probably not what you'd choose right now because you're likely sharing a variety of pieces of information between each one of the steps and you don't feel comfortable making each of these calls into their own unique SubVI or making a well structured TypeDef cluster to store all this information. However, on the latter point of my previous comment, whether or not you use a QDMH or a basic State Machine, I would HIGHLY recommend that you use a 'Mother Cluster' going through a shift register to share information from step to step of your sequence. The QDMH template project and TLB http://lavag.org/topic/14164-discuss-tlb-top-level-baseline/ are good examples of this practice. Best, Norm ~,~ ps. Good luck and straighten your wires out! They have too many random kinks in them. (people like to help people more who write cleaner code)
  3. What do you need to test on these devices? Are you a developer of these chipsets or are you simply using them and want to validate their performance? (I assume the latter) Or rather are you trying to ensure that the bits that you are sending out / receiving are correct? (not really measuring, just sending and receiving data) Also, what hardware do you have that can't be interfaced to LabVIEW? (there isn't much that is 'impossible' for LabVIEW to interface with) Are you simply saying that there are not LabVIEW drivers for what you are working with? Are there c or .NET dll? What modulation scheme are you planning to use with these transceiver? Which measurements do you want? Do you know how good of a piece of test equipment you need? I'd like to help, but we need some more information beyond what you've supplied to give valuable answers. Best Regards Norman Kirchner Senior RF Systems Engineer National Instruments ~,~
  4. Yeah, isn't finding available hot keys a real PITA?! Wouldn't it be easier if there was a more natural way to have a deep set of commands w/out needing to divine a magically unused hot key pairing? ~,~
  5. Due to many requests I have added the QSM evolution code shown in the video detailing why the common design pattern of the QSM is a faulty bridge. The attachment is added along w/ the original post up top
  6. Like this? http://screencast.com/t/jGDycjpVm Go here https://decibel.ni.com/content/groups/labview-apis/blog/2013/04/01/for-loop-pass-through-utility
  7. http://forums.ni.com/t5/LabVIEW-Idea-Exchange/Automated-creation-of-polymorphic-VIs/idi-p/2111968 Make sure to Kudo it ================== Now to the idea of generics, I think one thing that would be help along these lines, would be to be specific of the "Killer App" that's not even possible without generics in LV. One of these things that Brian Powell mentioned recently that made all the difference to me, is that we've got a limited number of things that we can focus on, and those can be the things that are not possible at all, or those things that we can do, but want easier. Sure, life would be grand if we could do everything, but this is a much much harder problem to solve than you might imagine. And when I say 'solve' I mean, do right, not make possible with a Multitude of bugs and limitations and gotchas (including corrupting your codebase) So when it comes to having this feature, it would likely take a huge chunk away from making the impossible, possible. But if you make a case where this is a huge benefit which is completely impossible, things start to get interesting. So if you've got one of those, or even several, Make Them Known. http://forums.ni.com/t5/LabVIEW-Idea-Exchange/Provide-a-better-way-to-implement-a-polymorphic-VI/idi-p/920487 http://forums.ni.com/t5/LabVIEW-Idea-Exchange/C-like-Class-templates-for-Labview-classes/idi-p/1714078 Wish I had a better answer, but as an aside, if this is something not going into a product and you'll just use to make your life developing other code possible.....you might want to ping me offline
  8. Jeff, I didn't realize that the version that I have is unreleased. I never liked the idea of forcing the copy of the AMC library into the templates and such, but has proven very useful over time. I think I only use the current version of the AMC in either the template creator or in the QuickView example. If it is wrecking your world then I suppose I could build a unique version that has no dependencies, but if we could do that just for you for the moment, that'll work. Hit me up w/ a PM and we can go from there. It should be quick enough for me ~Norm
  9. I was going through the process of modifying QuickVIew today and realized it was a prime opportunity to expose the thoughts and process for tweaking a program based on TLB` Video Part 1 http://screencast.com/t/MgrPRMq0a Video Part 2 http://screencast.com/t/ZgJ6yQmNxR16 I hope this helps you all understand how to do a minor modification to a program and how nice it is to separate the mental process of flow from what is going on in the system.
  10. The hallmark of an experienced LabVIEW developer is the usage of their or others templates which prevent the ubiquitous blank block diagram symptom where time is wasted doing the same thing that they have done before. Attached and linked you will find the TLB` (prime) template which, after a little learning what the parts are, can take you from zero to 60 in no time the next time you need to create a Top-Level application or interface. This template can be used from the ultra simple UI to a fairly complex application. Many questions and comments have been made about the original design (TLB) which is located here http://lavag.org/topic/14164-discuss-tlb-top-level-baseline/ This reason for the update in this design is detailed in the presentation "Rebirth of the LabVIEW State Machine" which is accessible here http://lavag.org/topic/16091-ni-week-2012-videos/page__view__findpost__p__97844 Installing and Creating http://screencast.com/t/vtlFgLhQqT Review of Examples http://screencast.com/t/XLIN0yjS Structure of Code http://screencast.com/t/5RtMhPVujS Basic Flow of Operational Code http://screencast.com/t/1QGFRRuSf0nT Adding a control to the system http://screencast.com/t/IJTxEQ28 Adding an action to the system http://screencast.com/t/5984lGlMjM <More to come soon> QSM Evolution.zip Code used in presentation video detailing why the typical QMH is fraught with issues that we have all run into Credit to Daklu for it's creation and sharing ni_tool_tlb`-1.2.0.23.vip Most up to date version of TLB` Rebirth of the LabVIEW State Machine.pptx TLB` Application Template.vipc
  11. I have looked at the code and can not determine why it's not working for you. The only thing that could be suspect is that I am invoking a recursive chain of VI in the closing, but all VI involved in the process are shared clones, so there should be no deadlocking. I don't doubt that you're seeing this, but I have as of yet to see it live on a system so it's making it hard for me to find the issue. Have you tried turning on debugging as well to see what you get? Also....technically speaking....although it's a hack.... you could just skip that call on the close. All it does is clean up event references and LV is about to terminate anyway so you can let its autocleanup deal with it for now. ~Norm
  12. I haven't tried it on an XP system. However if I'm not mistaken the API should still fly. I'm presuming you are holding down one of the hot key combinations while trying to say the commands? How long did you let release session run for? Sometimes the shutdown of the speech engine takes a long long time. However the release session shouldn't be doing anything other than closing references.... Do you have a win7 system you could try it on as well?
  13. And on behalf of the NI RF Team, once again I'll be offering up a flight around Austin, time weather and schedules permitting. You will get the chance to view our beloved Austin from the air and take the controls of N2817F, a High Performance Cessna Skylane 182. Any training on aviation, RF or PXI along the way is an extra kicker out of the kindness of my own heart.
  14. Just to kick this alive for those who care, I've released a very simple version of LVSpeak without quick edit. http://lavag.org/topic/15955-labview-speak-basic/ It delivers a very simple API for adding speech to any application. A future release will have the full featured capabilities and will have QuickEdit included. along with installer along with a command set along with more and more and more but for now, this is all ya get. ~,~
  15. Based on the squeaky wheel programming paradigm, I finally broke down and created a very very basic version of LVSpeak which simply enables speech detection in LabVIEW. Refresher This version of LVS is fully decoupled from the QuickEdit engine which enables you to speak common commands to LV and operate on GObjects (front panel and block diagram items) This should be packaged into a VIPM package but is not yet. It has imported its dependencies (ESF and REx) so that no other downloads are needed for the moment. Dependencies would be handled in the future through VIPM I'm posting for a specific person, but want to share w/ everyone. There are many more things that I have in the full version of the LVS Engine, but for simplicity sake, I wanted to boil this down to the least common elements. Enjoy, Norm ~,~ The Captain was hereLVS_Basic.zip
  16. Just bought mine. If you don't buy yours, you are missing on the chance possibly win a free flight around Austin. ~,~ The Captain was here
  17. You need to use the XY plot. You'll need to sort your data according to whatever you declare your X axis to be This VI will allow you to take an XY plot and order it by X points Order XY Points.vi This is an example of it in action on the XY Graph:Mouse Down event Create XY Plot.vi <!-- copy and paste. Modify height and width if desired. --> <a href="http://content.screencast.com/users/NJKirchner/folders/Jing/media/f2f65ae2-3013-4a8d-b30b-f046dbc98a45/2012-01-12_1530.png"><img'>http://content.screencast.com/users/NJKirchner/folders/Jing/media/f2f65ae2-3013-4a8d-b30b-f046dbc98a45/2012-01-12_1530.png"><img class="embeddedObject" src="http://content.screencast.com/users/NJKirchner/folders/Jing/media/f2f65ae2-3013-4a8d-b30b-f046dbc98a45/2012-01-12_1530.png" width="848" height="379" border="0" /></a> Good Luck, ~,~ The Captain was here <!-- copy and paste. Modify height and width if desired. --> <object id="scPlayer" width="796" height="746" type="application/x-shockwave-flash" data="http://content.screencast.com/users/NJKirchner/folders/Jing/media/e1f666fc-d269-4a1c-8cb7-5f6a9301740d/jingh264player.swf" > <param name="movie" value="http://content.screencast.com/users/NJKirchner/folders/Jing/media/e1f666fc-d269-4a1c-8cb7-5f6a9301740d/jingh264player.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#FFFFFF" /> <param name="flashVars" value="thumb=http://content.screencast.com/users/NJKirchner/folders/Jing/media/e1f666fc-d269-4a1c-8cb7-5f6a9301740d/FirstFrame.jpg&containerwidth=796&containerheight=746&content=http://content.screencast.com/users/NJKirchner/folders/Jing/media/e1f666fc-d269-4a1c-8cb7-5f6a9301740d/2012-01-12_1532.mp4&blurover=false" /> <param name="allowFullScreen" value="true" /> <param name="scale" value="showall" /> <param name="allowScriptAccess" value="always" /> <param name="base" value="http://content.screencast.com/users/NJKirchner/folders/Jing/media/e1f666fc-d269-4a1c-8cb7-5f6a9301740d/" /> <iframe type="text/html" frameborder="0" scrolling="no" style="overflow:hidden;" src="http://www.screencast.com/users/NJKirchner/folders/Jing/media/e1f666fc-d269-4a1c-8cb7-5f6a9301740d/embed" height="746" width="796" ></iframe> </object> Something like this? I know it doesn't look like your plot in excel, but your plot in excel is EXTREMELY misleading. In any Cartesian plot, an axis in 1 direction is Always increasing or Decreasing. Your plot in excel has the X axis be completely randomly ordered It almost sounds like you want 2 plots on the same graph, showing both Instr 1 and Force collectively vs sequence # But in either case you have an answer to both scenario <!-- copy and paste. Modify height and width if desired. --> <a href="http://content.screencast.com/users/NJKirchner/folders/Jing/media/970befbf-eaa8-4109-a5f0-08c6e4bb87b7/2012-01-12_1544.png"><img'>http://content.screencast.com/users/NJKirchner/folders/Jing/media/970befbf-eaa8-4109-a5f0-08c6e4bb87b7/2012-01-12_1544.png"><img class="embeddedObject" src="http://content.screencast.com/users/NJKirchner/folders/Jing/media/970befbf-eaa8-4109-a5f0-08c6e4bb87b7/2012-01-12_1544.png" width="1049" height="670" border="0" /></a> Best, Norm
  18. I can't answer your question specifically, but there is a great deal of knowledge on classes, inheritance and packed libraries contained here. I would give a 68% chance you'll find your answer in there Plug-in design using LVLIBP https://decibel.ni.com/content/docs/DOC-19176 Good Luck ~Norm
  19. It's ok, blame me for not getting it out earlier. Or for your penance, you can go ahead and implement reasonable error tracking
  20. When working with code that uses LVOOP property nodes, debugging becomes difficult because there is no easy way to go to the accessor code that runs when the property node executes. So in order to alleviate this I created the Property Popper. Run this floater helper VI (leave running during development) When you want to get to an accessor, select the property node Click 'Get Properties' on Pop Property.vi Double click on the property you want to get accessor access to Enjoy ~,~ The Captain was here See Video Detailing this <!-- copy and paste. Modify height and width if desired. --> <object id="scPlayer" width="892" height="708" type="application/x-shockwave-flash" data="http://content.screencast.com/users/NJKirchner/folders/Jing/media/e7471e93-bf0b-4801-b050-8e7c58d7a0fc/jingh264player.swf" > <param name="movie" value="http://content.screencast.com/users/NJKirchner/folders/Jing/media/e7471e93-bf0b-4801-b050-8e7c58d7a0fc/jingh264player.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#FFFFFF" /> <param name="flashVars" value="thumb=http://content.screencast.com/users/NJKirchner/folders/Jing/media/e7471e93-bf0b-4801-b050-8e7c58d7a0fc/FirstFrame.jpg&containerwidth=892&containerheight=708&content=http://content.screencast.com/users/NJKirchner/folders/Jing/media/e7471e93-bf0b-4801-b050-8e7c58d7a0fc/2012-01-10_1033.mp4&blurover=false" /> <param name="allowFullScreen" value="true" /> <param name="scale" value="showall" /> <param name="allowScriptAccess" value="always" /> <param name="base" value="http://content.screencast.com/users/NJKirchner/folders/Jing/media/e7471e93-bf0b-4801-b050-8e7c58d7a0fc/" /> <iframe type="text/html" frameborder="0" scrolling="no" style="overflow:hidden;" src="http://www.screencast.com/users/NJKirchner/folders/Jing/media/e7471e93-bf0b-4801-b050-8e7c58d7a0fc/embed" height="708" width="892" ></iframe> </object> pop property.vi
  21. John, I'm glad that you are questioning this methodology. First I would strongly recommend that you review this well written Field Architect blog about this very topic. There are many many skilled LV developers that have either based their entire architecture on this tactic or used it as a staple of their programs. These are actively running programs, and I would say there is no doubt as to the validity of this approach. However! There are many drawbacks and caveats and I truly believe that this practice of coding represents a style which in the future we'll look back like we look back at finger paintings from grade school (cute, simplistic and far from a desirable design) Personally speaking, I was bitten VERY recently when another developer used LV2 style globals and never took into consideration the idea of needing two of the same thing. What ended up happening when another of the same thing was needed, was that a developer just copied 'all VI' and appended a '2' to the end of the file names so that he could have 2 of the same thing. If chills didn't just run down your spine....you may want to think about that implication in a very large application. I'll avoid putting all my comments from the blog into this reply, but long story short, there are emerging ideas/techniques/frameworks that will help you accomplish your large application with a much more Scaleable, Modular, Reuseable, Extensible and Simple (SMoRES) . If you have the chance to start a design from scratch and don't need to inherit someone else's choices, I would highly recommend taking this chance to implement a LV2-Global free design and move to LV 2011 instead of '2'
  22. WARNING! With regards to placing an event registration node inside of a sub-vi or saving the reference in a class. An event registration reference can be used once and only once. Also I wouldn't put too much untested faith in the idea that each time a sub-vi runs w/an event reg node in it, that the executions of that node will be wholly unrelated. Although not the vector of this thread I felt it critical to mention at this juncture. I'm not saying don't do it, just test it thoroughly. And for my 2cents on the topic, since most destroy typed ref methods spit out a data type of that type, the destroy method on a non scope allowed vi on a class should cause a broken arrow.
  23. *Disclaimer* So far from a full implementation, but I wanted to get this into the wild to let you all have fun with it. I ran into a situation that pissed me off recently. I had a tab control that had a different graph on each tab. This tab was in a pane that I wanted to be re-size-able. Since LabVIEW does such a shitty job at helping us with this, I made a 'Brat VI' to help me with the process. Attached you will find the Brat and a piece of demo code. Basic assumption and requirements *Tab is not set to auto-grow (I don't handle shrinking tab and auto grown will cause tab to not maintain size w/ pane) *Tab is set to size with pane * Types of controls that are resized are currently limited, string, graphs, sub-panels, decorations, boolean (because I use the 'Many Cast' design pattern, adding more is not a difficult task) * Because this maintained sizing will only work while the VI is running, the Brat is bi-modal in a "Use cached Margins" or "use Saved margins" mode (see video for rational) ============ Basic operation and program flow ---> http://screencast.com/t/jqxWeqwxHcY Beyond getting started & caveats ---> http://screencast.com/t/iCDdQgPhJuDs How it would look & more features ---> http://screencast.com/t/S7Pm47JiD More features and use cases ---> http://screencast.com/t/W4uhAQY4HpbE How to start from scratch ---> http://screencast.com/t/JVOrc503 Tab Resize Tool (2).zip ============ Comments and ideas are welcome (but only if they come w/ good suggestions as well) ~The Captain Was Here PS ManyCast Design Pattern (used within) http://lavag.org/top...sts/#entry77999
  24. Is this a situation in which you only ever want to call the parent VI? If so, then just don't make that VI for the child. If, as you state " I want to force the child to call the parent method" Assuming that you want to selectively call the parent or the child, then you need to have and input to the VI that declares which one to call. Then from within that VI, take that input and either exectute what the child has for code in one case, or within the other case call the parent function using the 'Call parent method' primitive. This will give you exacly the type of behavior that your wanting, you just need to add an input to the function, or add a piece of private data to the parent and then call a function that sets that value, then within the function your trying to selectively choose, read that value and do the same kind of selective execution of code as mentioned above. Best ~,~
×
×
  • Create New...

Important Information

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