Jump to content

Norm Kirchner

NI
  • Posts

    823
  • Joined

  • Last visited

  • Days Won

    25

Posts posted by Norm Kirchner

  1. It does work although I think it deserves a better example. This was Norm Kirchner's OO implementation. My original implementation (circa 2004/2005, ~LabVIEW 7.x) was not OO as native LVOOP did not exist in LabVIEW at the time and I have never used Endevo GOOP. I think it might be better to start with a non-OO example and then work up to OO as appropriate. I'll see if I can dig one up or put a simple one together.

    Mike,

    Norm and I were going to put a similar presentation together for NI Week one year, but it never made it off the ground. I'd be happy to collaborate on part of it with you. Just send me a PM if interested.

    -Scott

    I've been working on this and made improvements

    and yup... it definitely needs a better getting started example than whatever I have released previously.

    But luckily I have worked on it w/ ppl who haven't seen it before enough to finally put together some good getting started docs.

    Although the non-OO implementation is where this idea got it's roots at, I'm not sure if I would ever go back to that or recommend starting from that.

    I've weighed the pros against the cons in terms of needed understanding and difference in paradigm, but over the years that I've worked with/on it, all those minor improvements I've made would not have been easy and/or possible to include in anything that had already used it.

    In other words, you can start out w/out OO, but the minute you want to add some capability, fix a bug or get creative w/ your design.... you'll wish you hadn't made that tradeoff.

    Editors Commend: The LVx concept is definitely Scott's design (and is a work of genius! :worshippy: ) . I just took it an ran w/ it (some would say over the edge). But if you ever look into the guts of LVSpeak, every bit of interprocess messaging and even intraprocess messaging is done with LVx-OO and boy am I glad I did. I'll do what I can to sacrifice some sleep to get a long long long overdue package of this out.

    Hello All,

    I was wondering if anyone has any of the missing LVx posts that include the vi's and basic examples of its use.

    I am trying to put together a LVUG presentation on the general topic of messaging frameworks and would like to

    include LVx as well as some of the other interesting methods such as active vi's, event bus, etc.

    Thanks

    Don't forget the 'message pump' as well.

    Never did get to fully appreciate the capabilities of that but always felt that it was a strong contender to LVx although different in a couple key ways.

  2. Hi Norm,

    I got the 2001 package working and it just cracks me up!

    Is it possible to export just a text version of the list?

    I'm sorry Dave.... I can't do that.

    Had to do that :P But that aside, you absolutely can get that list in 'text' form.

    If you look into the Freaking Fast Drop plugin within <lv>\resource\QuickEdit\Plugins\FreakingFastDrop

    The each plugin overrides the parent QuickEditCommand(QEC) "Supported Commands.vi" and outputs the list of strings that are registered.

    For the case of FFD, it outputs all Contro/Function palette items and the QD shortcuts.

  3. Has anyone been able to, or even tried for that matter, to access one of the NI.LV.xxxxx contexts on a remote system?

    This would be particularly useful when you have developed a tool that runs in one of these hidden contexts (like NI.LV.Editor) and you need to send information to it remotely through VI server.

    Specifically, my use case is that A LOT of my development needs to happen on remote PXI systems that I Remote Desktop into.

    But there are select utilities that, because of my remote access, do not work through RmtDsktp.

    I could see this being useful beyond my own scope for things like remote monitoring or taking advantage of these other contexts as a 'services' layer instead of interacting with the running application context.

    Currently, any non-built-in context can be accessed by opening up, within that context, a unique TCP VI Server port to listen on.

  4. I think i'm going to write off being able to use LVSpeak on this laptop. I have tried changing the default microphone, turned off speech recognition, and nothing seems to help. i'm sure somewhere down the road someone will figure this out, and i'll be oh so happy then! Thanks for your help!

    Any chance you've got another PC to try it out on just to make sure there isn't something insidious going on? (bermuda triangle'ish kind of things)

  5. norm,

    yeah, i was holding down the ctl key, and i can get the QE window to open. when i have speach recognition turned on in windows, i can get random windows voice commands to work with labview, but nothing in the LVSpeak realm ... i can't seem to get windows to allow labview to take the commands. when i watch the block diagram, i don't ever see any speech fire off the event structure. however, if i say "create control" or "create anything" i get the VI Revision window opening up and asking me to put in comments on the latest revision of the current VI i'm working in.

    If you can for debug purposes, try turning off the built in windows speech recognition interface. Perhaps it's conflicting with the session that LVSpeak is in control of.

    Never heard of the VI revision dialog popping up before.... :blink:

    It sounds like LVSpeak is running just fine, but something is stopping it's MS SAPI engine instance from hearing you.

    I think it's either 1 of 2 things.

    The built in functionality in windows is overriding the LVSpeak engine ( which doesn't make a ton of sense because I had both setup at once, once upon a time)

    or that perhaps the speech engine instance that LVSpeak starts is looking at a different audio input on your system other than the one that the built in MS function engine is using (I've seen this on my system as I've connected/disconnected various forms of input)

    good luck

  6. Hi Norm,

    I hate to say this, but for some reason I can't get the last Space Oddyssey plug in to load. I get the zip and unzip it ok. But the unzipped file doesn't come up as .ogp and doesn't open the VIPM when I click it. I tried adding the directory straight from VIPM but that doesn't work either.

    But the rest of the tool is great and I appreciate the 2001 effort!

    Thanks again,

    Dave

    Dave,

    Something seems to happen with some browsers automatically casting the .ogp to a zip. then people unzip and then their lost on what to do.

    So try downloading the .ogp and if it d/l as a zip just re-extensionize it to .ogp and see what you get. (it's worth it)

  7. Has anyone run into any problems with getting everything installed ... seemingly properly ... and not having the code recognize any speech? the VI's all run with no errors, but i can't make labview recognize any commands. I"m running windows 7 64 bit, and the actually windows speech recognition commands work, i can start MS word and stuff, but nothing in labview ...

    I'm not sure if the 64 bit will cause any issue, but there is one minor point that sometimes gets lost... are you holding down the ctl key when you say the command and for a few seconds afterwards? ( that I now realize I need to be something like a pop-up after start to re-inform the person)

    The logic in the code is such that pressing the ctl key down does not enable speech, rather it tells the LVSpeak core that it's ok to fire the event that is associated with the speech recognized notification it is always getting from the MSAPI core. The speech recognizer is constantly translating and sending notification to LV. It's only when both speech is recognized, and then after which it looks for the Ctl key to be pressed ( thus necessitating for the purpose of debug, to ensure that you're holding down the ctl key for a long enough period after saying the command. )

    Try that and see if it works. As a sanity check, under the tools menu, you should also have an entry for Quick Edit. Under that menu, you should see an option to "Show QuickEdit Window". Double check that when you select that, that another window comes up and is already running.

    good luck

    -Norm

  8. My carpal tunnel and I thank you again.

    Take care and happy coding!

    Dave

    Dave,

    Does this mean that you now have it working?!

    Phenomenal!

    And just for your continued perseverence.... I've made a new plugin just for you

    <a href="http://content.screencast.com/users/NJKirchner/folders/Jing/media/25f5d353-449d-4b12-b365-230a93f445f0/2010-01-22_1133.png"><img'>http://content.screencast.com/users/NJKirchner/folders/Jing/media/25f5d353-449d-4b12-b365-230a93f445f0/2010-01-22_1133.png"><img class="embeddedObject" src="http://content.screencast.com/users/NJKirchner/folders/Jing/media/25f5d353-449d-4b12-b365-230a93f445f0/2010-01-22_1133.png" width="292" height="388" border="0" /></a>

    lavag_cr_LVS_QEC_2001-1.0.0-1.ogp

    Enjoy and make sure your speakers are turned up...

  9. I guess it's a matter of taste.

    I havn't run into issues of scaling, as I connect modules over the bus that have very little communication (like a temperature monitor that publishes the latest reading over the bus and some GUIs are displaying it and in some situations the GUI VIs themself send a new setpoint.

    Because of the loose coupling due to the string-type commands, the modules are pretty reusable (I've done it).

    An older app was using queues to communicate between 3 GUIs with a central 'handler'. That made 3 queues to send commands to the modules and 1 shared queue for the modules to call the handler (this in turn sends commands to the other modules). I feel that this architecture is on the limit with 3 modules, as one more queue would ask for one to many terminals on the ConPane of the central handler.

    Using a huge ComCluster to keep all kinds of queues, notifiers, events and event refnums resulted in spaghetti with a lot of stupid manual updating when I changed some of the Com Types.

    But from your posts I could read that you prefer several wires and not a bus as I do.

    Maybe LVOOP makes a big difference (I have just seen one OOP app using this bus so far).

    Felix

    Felix,

    I actually do this exact thing using LVOOP within LVSpeak. Each command is a child class of the parent command class and they send commands through the LVx pipe as the class and it requires no casting whatsoever. Well I suppose you need to go to more specific class or rely upon dynamic dispatching after you get the class data in the event structure.

    The basic idea (which has nothing to do with using your voice)is that each node (client or server) that needs to respond to a command, and potentially return a response, registers for a user event w/ the parent LVx class as the data type (so not exactly the concern of this thread). After which you just need to await the user event to be fired and handled appropriately. And the data type of the event is of LVx parent command type, and the specific child class defines the command to be executed, and the data inside of the class is the parameters and also eventually the return data which gets passed back to the requester within the LVOOP object itself.

    The reason this is of relevance to this thread is that without doing this technique, casting to another data type (like string)would be required. For things like the Simple TCP Messaging (STM) reference design (on ni.com), it does exactly that. Flattens to string, send across tcp, and then hope that you package it up and cast it back appropriately. LVx uses VI server and takes all that casting away from the programmer and lets the wire type stay smart (and allows you to talk across the internet,LAN, or application contexts too)

  10. Hi Norm,

    It turns out that in Office 2007 all the speech recognition functions will not work with XP.

    Here is the blurb from Microsoft:

    Note You can use speech recognition in Microsoft Office 2003 and 2002 programs in Windows XP. Versions of Microsoft Office programs that are earlier than Office 2002 do not support speech recognition. Windows XP does not support speech recognition in 2007 Microsoft Office programs.

    So apparently the good folks at MS don't give the option to install the speech engine at all in my configuration. I am trying to figure out how to get another engine or see if I can install an older version of Office.

    Dave, If you have XP, you must download the SAPI from Microsoft and it won't matter what you're using in office.

    If you downloaded the presentation about getting the LVSpeak process up an running you'll find the link for that download

    post-208-126391285365_thumb.png

    Once you have that installed you should have all necessary Microsoft parts ready to go in Windows.

    PS For all of you who had asked for earlier versions to be released, I still remember it and am trying to find time to get to it.

    Thanks for the patience

  11. Hi Norm,

    I am having a problem with the install on LVSpeak. I am running XP and LV2009. I worked through your video, got the three downloads and rebooted. I took the LV links from this Lava site, but for some reason none of the speech tools are coming up in either Control Panel or LV. I did do the Run option when I downloaded all the software.

    I took a look at Microsoft to see about the speech recognition engine in case it was a problem and took a stab at that as well but got nowhere.

    One thing that I did notice that differed from your video was that when I did the two LVSpeak downloads, niether started an install so I just downloaded them to a directory and unzipped them. I did do the Run option when I downloaded them.

    I am certain that I missed something very basic but can't seem to figure it out. Have you got any suggestions?

    A quick note on downloading from the NI site.

    It takes the VI packages and wraps them in .zip files.

    So make sure to find those .zip files downloaded or the .ogp files that were extracted from them.

    Make sure that VI package manager is successfully installed (full instructions on jkisoft.com)

    And if you do not have any speech item in your control panel, I have a feeling that something is awry.

    Are you viewing your control panel in classic or 'ehanced mode'

    PM me with a screen shot of the panel

  12. [quote name='Daklu' date='16 January 2010 - 07:45 PM' timestamp='1263692722' post='71183'

    Not on this project unfortunately. What happens when you try to wire a parent class user event and child class user event to the same output node in a case block?

    With the advent of DVR in 2009 it became necessary for terminals with typed references, that have objects as their data type, to permit the full hierarcy of decendants to be allowed to enter that terminal. But luckily, because it was required for DVR, every other type reference came along for the ride.

    So whereas pre 09, you could not have an input terminal to a VI be a QRef with a parent class as its data and wire in a QRef w/ a descendant class as its data, you now can in 2009.

  13. Norm,

    I just downloaded LVSpeak and I'm hooked. But I wanted to know how to say certain things to call VIs like GPIB Read, GPIB Wait. I saw they were listed in the FreakingFastDrop but I'm unsure how to say them.

    Thanks for a wonderful tool.

    ooth, I'm totally stoked to have another convert!

    The speech engine tries to figure out what GPIB sounds like as a word.....so needless to say that might be tough.

    The alternative that you want to do though is through the Quick Drop Shortcuts.

    Currently freaking fast drop also loads the shortcuts so you could make the shortcut for GPIB Read to be "g p i b read" (note the caps to be safe)

    I'll test it out here but it should work (based upon my command for VI properties being v i properties)

    Good luck,

    let me know how it goes

    -Norm

    PS Be sure to post when you buy your first pizza through it :lol:

    Hi Norm

    I got the same problem as Luiz and my windows 7 is English and LV2009.sad.gif

    Regards Bjarne

    Bjarne,

    What does the speech properties say under language (like I have in my picture)?

  14. I know its a subtly different case, but I will often flatten to XML first so that I end up with a data store that is automatically mutating (especially useful when it comes to "preference" objects) but at the same time is human readable / editable*.

    Shaun

    *Manually editing XML files can lead to the file getting corrupted so I usually will give a user a UI to change all settings, but it can still sometimes be very useful when debugging an application out in the wild :)

    And with your statement we shall all rise up against AQ and smite him down...

    Why? you may all ask......

    THIS IS WHY!!

    The Flatten Object to XML does not flatten all of the object. ***IT ONLY FLATTENS THE PARTS THAT ARE NOT THE DEFAULT VALUE***

    So although it's readable, you can have absolutely NO IDEA what is in the class if you don't know the default value.... which technically you only know IF YOU HAVE LV OPEN AND THE VERSION OF THE OBJECT IT WAS CREATED WITH!!! :throwpc: So having it readable gives you no value whatsoever. and it won't even translate the structure to the XML and just leave the values blank. It just simply omits them altogether. Does anyone see any value now in taking an object and flattening it to XML? I sure as hell don't.

    This is a warranted discussion on another thread, but felt necessary to vent here. Sorry about the caps

    </rant>

    So you may want to be careful when going to XML w/ an OBJ

    ~,~

    What do you mean by "handles"?

    Check out the class mutation section of the LV Help file under "Developing LabVIEW Classes"

    I have not really pushed the mutation algorithm, but have found it useful for simple additions and subtractions to the private class data structure.

  15. I've done it,

    it's cool

    and it's not too hard.

    You simply need to put some callable command in the exe which will look at a path for your new .lvclass and within that command, run the 'Get Default Class Data'.

    If that completes successfully, then your new class is loaded into memory and ready to rock and roll.

    Within LVSpeak I do this by scanning my Plugin directory for all .lvclass files, running the 'get default data' and then just as a sanity check, run a common method on all of those loaded default values. The same tactic would apply to an exe

    <a href="http://content.screencast.com/users/NJKirchner/folders/Jing/media/28e55bc6-47fd-42ff-a581-66ca58b37cb7/2009-12-30_1202.png"><img'>http://content.screencast.com/users/NJKirchner/folders/Jing/media/28e55bc6-47fd-42ff-a581-66ca58b37cb7/2009-12-30_1202.png"><img class="embeddedObject" src="http://content.screencast.com/users/NJKirchner/folders/Jing/media/28e55bc6-47fd-42ff-a581-66ca58b37cb7/2009-12-30_1202.png" width="364" height="190" border="0" /></a>

  16. I have written/read class data to from file and it worked great. Yes all references to LV resources (like queues etc) need to be recreated if they went invalidi ( I imagine you could get a ref toa queue stick it in a class data write to file read back and it still works if teh queue was kept alive elsewhere).

    Re: Writing to binary files

    I always imagined there was a flatten to string built-in to the Binary file operations. Is there a difference?

    Ben

    As far as if the bit files are different.... it's a mix between an elephant and a rhino.

    elephino

    But it's worth checking out. But would there be a reason why you would choose to flatten first requiring 2 VI instead of just writing to disk directly?

    Also, I don't know if the smart mutation is handled when unflattening from string.

  17. Perhaps I'm missing something, but have you simply tried the write to binary file?

    I've been standing on my soap-box around here every chance I get when someone says they want to store 'cluster like' data to disk.

    Now I know that this is not exactly what you're trying to do, but it shows how easy it is to save an object to disk.

    <a href="http://content.screencast.com/users/NJKirchner/folders/Jing/media/dab29e2e-3762-4d8b-872d-18d564aaf030/2009-12-30_0822.png"><img'>http://content.screencast.com/users/NJKirchner/folders/Jing/media/dab29e2e-3762-4d8b-872d-18d564aaf030/2009-12-30_0822.png"><img class="embeddedObject" src="http://content.screencast.com/users/NJKirchner/folders/Jing/media/dab29e2e-3762-4d8b-872d-18d564aaf030/2009-12-30_0822.png" width="331" height="128" border="0" /></a>

    So from what it sounds like you're talking about, I would not flatten to string or anything of the sort. Just write to disk.

    There are a myriad of added benefits to doing this. The LV back end handles the situation of the class definition saved to disk is different than that which you are re-populating the object with. Also, you can save an array of differing objects to disk this same way. I know there are a few more benefits, but they elude me at the moment and I gotta run.

    Good Luck

    ~,~

  18. Hello,

    I was trying to use LVS and I got the following error message:

    Error 1172 occurred at Error calling method System.Speech.Recognition.SpeechRecognitionEngine.LoadGrammar of ObjectId handle: 0x9E41668 for obj 0x30E9943[system.Speech.Recognition.SpeechRecognitionEngine] in domain [LabVIEW Domain for Run] and thread 4460, (System.Reflection.TargetInvocationException: Une exception a été levée par la cible d'un appel.

    Inner Exception: System.InvalidOperationException: The language for the grammar does not match the language of the speech recognizer.

    ) in MS_Speech - Load Grammar.vi->ENGINE - LVSpeak.vi

    This is problably because my Windows installation is in french but LabView is in english and I want to use LVS in english.

    Do you have an idea of how could I fix it?

    Thanks,

    Luiz.

    Luiz,

    I don't really have a trial system to test this out on, but have you looked into your speech settings in control panel?

    <a href="http://content.screencast.com/users/NJKirchner/folders/Jing/media/6e2f9260-dd2b-4d1f-9a7b-9875d70ca4a7/2009-12-29_0929.png"><img'>http://content.screencast.com/users/NJKirchner/folders/Jing/media/6e2f9260-dd2b-4d1f-9a7b-9875d70ca4a7/2009-12-29_0929.png"><img class="embeddedObject" src="http://content.screencast.com/users/NJKirchner/folders/Jing/media/6e2f9260-dd2b-4d1f-9a7b-9875d70ca4a7/2009-12-29_0929.png" width="475" height="331" border="0" /></a>

    Mine says English and I would imagine that in order for the engine to work, yours would need to be the same.

    Which version of windows are you on?

    Good luck

    Norm

    PS Thanks for your effort getting this going and sorry about the long response time

    I've been using LVSpeak version 1 for some while now. I like it and have added a function or two. I have not (yet) upgraded to LV 2009. So I wonder if you could prepare a retro version that works in LV8.6 for us taildraggers. Thanks.

    Conway,

    I don't know what the next few days hold, but I'll see what I get when I just do the run-o-the-mill save for previous. I think the only function that I use that is unique to 2009 is 'Preserve Runtime Class' for LVOOP. The work around for that shouldn't be to bad.

  19. Norm,

    Have you looked at the Ruag Icon editor hosted here?? It allows you to edit vis in a dir or llb, just by clicking on the name in a list. Includes a number of templates as well.

    Not sure if this is what you were talking about editing multiple at once or not.

    It's just the kind of thing I am looking for, but it does not handle the really difficult cases of LV Libraries (.lvlib and .lvclass) cascaded iconography or the usage of the current icon editor.

    So now the question is, modify the RUAG editor or start fresh.... hmmmmm

×
×
  • Create New...

Important Information

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