Jump to content

Norm Kirchner

NI
  • Posts

    823
  • Joined

  • Last visited

  • Days Won

    25

Posts posted by Norm Kirchner

  1. Oh, most definitely has room for improvement.

    Doing the string operations in-place is the best especially if you are doing color replacement, text replacement, or line moves; the user just has to keep a dictionary of 'desired element to offset' lookups.

     

    If the code for doing the color replacements or other high performance modification operations is desired, make the request here, and i'll add onto it.

     

    Double up on the recommendation for making 'layers of picture controls' to give the ability to show an element moving/ being modified, while the original stays in place.

    The application this came from had upwards of 5 layers for different things.

  2. 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

    • Like 2
  3. 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)

  4. 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

    ~,~

  5. 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

    • Like 1
  6. 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

  7. 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.

  8. 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

  9. 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?

  10. 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.

    ~,~

  11. 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 here

    LVS_Basic.zip

    • Like 1
  12. 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

×
×
  • Create New...

Important Information

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