-
Posts
823 -
Joined
-
Last visited
-
Days Won
25
Content Type
Profiles
Forums
Downloads
Gallery
Posts posted by Norm Kirchner
-
-
- Popular Post
- Popular Post
Hi all,
I am wondering how to send messages between different projects. It seems (from the little testing I tried) that notifiers and semaphores cannot be passed between projects. So I am wondering what is the mechanism for doing this, or should I develop everything that would want to communicate within the same project.
Thanks,
EOF
There is a novel technique that I have seen and done a variety of times. It requires creating a wrapper for the "Send Notification" VI like this
http://screencast.com/t/zRDGaScM
What the video hopefully details is that you can create a VI that is in memory on Application A.
Inside of that VI is a shift register that holds the reference to the needed thing (semaphore, queue, user event and so on)
Then you pass that VI the data that you want to end up in the (semaphore, queue, user event, notifier, and so on) using Call by Reference Node
And then the VI fires the (Notifier, user event, EnQueue) with that data and the stored reference.
By doing that, you have successfully sent data to any other LV application regardless of whether it is another Application Instance, an executable, or a VI across the world.
Note: Scott Menjoulet (LAVA member w/ the Detroit Red Wings Avatar) is the originator behind this idea, and I have merely been it's rah -rah boy over the years and strange uncle to work it into a generic LVOOP based implementation in LVx
See the attached file for the VI's and projects used in the video
Step 1 is to open both projects, local and remote and then go from there.
-Norm
- 3
-
Gary,
Good questions.
I have one to follow it up as well that I'm curious about.
I've always had an expectation of Single Element Queues to be the most memory efficient and fastest way of getting information from point A to point B by reference.
And that if you do a modification of that element, by DeQ, modify, EnQ that you will be doing an in-place memory operation. This makes me think otherwise unless the compiler is as smart as we hope.
AQ?
-
Eugen,
I think I have found the best solution to your problem
because even on the old site, it only had that option at the bottom of the page which is sub-optimal
But unfortunately only if you use Firefox. The Back To Top plug-in
http://screencast.com/t/zqng7qCrfpu
Enjoy,
Norm
~,~
-
Really, in this case I need them.
Then you need to define an upper limit and do the fanciness of hiding/showing all tabs up to your limit and using tab-captions to dynamically re-name the visible tab names
(or do the hacky way of having a non-running VI present in the sub-panel that you can edit at runtime but not run)
If you resolve yourself to that, then you have a solution (which i'm sure plenty of others have done in the past to do this exact thing)
-
George
I would strongly suggest that you investigate another option involving sub-panels and utilizing a listbox to choose the appropriate 'Page' (something like the LV Options page)
Although tabs afford the user some good user interactivity points, it is limiting when attempting something more dynamic which it sounds like your doing.
You will find that a listbox with subpanels are extremely more flexible albeit a hair more exotic with the process of getting information from the subpanels back to the top level.... but that is another discussion altogether with a variety of very good solutions.
If you CAN NOT live without a tab control, you will still need to use sub-panels anyway and you would create the sub-panel VI on the fly with scripting and adding / removing tabs that way. (a creative yet very flawed solution)
Good luck
~,~
Norm Kirchner
- 2
-
Very cool Norm. Thanks for sharing that with us! Couple points/questions:
- Do you have an online source code repository or should we just make changes and post them here for review? (I think this tool would benefit from a plug-in architecture.)
- TRef Traverse for CursorContext.vi and TRef LocatorCallback.vi are both password protected. Just pointing that out in case it was unintentional.
- The Quick Drop package doesn't have the core package listed as a dependency.
- Why did you distribute it as an llb? I've noticed lots of tools continue to be distributed that way even though NI has depreciated them.
Code Repository: Should be arriving in the LAVA CR soon (less than a week)
Password protection: intentionally done at a time before scripting was not black market material. Uses some scripting stuff none of us had done before (thanks dnatt) and thought it prudent
Dependency: Because I'm using the OpenG Package Builder I have never been able to get the dependency enforcement working properly. Simply giving it the expected package name and version never did squat for me. (probably operator error)
LLB distribution: I have never made a "tools Menu" app before and this looked like the most straight forward way to get the kind of behavior I wanted. And wrt LLB's, I believe (not because I know) that they are not going to be disallowed any time soon so it was still a concise way of keeping a group of files together for the tools menu and simplified the packaging process which I'm still relatively new at.
I'll let DNatt make a nugget one of these days on the traverse code (or take it on if he deems me able to do so)
Thanks for relinking.
I've got one question. In my LV (8.62 Dev. and Scripting VI) I can't find the "GetActiveViRef".
I can copy it from your VI and It works fine, but why can't i find it in my PullDown Menu when I klick on it?
This is a 'Private' event and must still be hidden under the "RUSTY NAIL" clause of these things. I have never seen any specific documentation on it's pitfalls, perils and usages but I know for darn sure that all of my scripting tools rely on it's operation from what I have been able to understand of it. Let's hope it doesn't change functionality or go away because any tool that needs to know what was the last LV thing touched would then need to revert to a TopMostVI checking style routine which is a bit of a pain and still might not work for this kind of implementation.
If you want to know about the Private methods/functionalities, head to the rusty nails section to get the proper ini key.
Enjoy!
Having it only process commands when a configurable key is pressed would be sweet. Hold down ctrl to speak, for example.
I'm not sure I have explicitly state it yet, but I quickly found this also a requirement.
EVERYONE: FYI
In order to have a command detected you must hold down the control key and not just while you are speaking but for a fraction of a second after as well. The Microsoft API is constantly translating and only LV does the check "is Ctl pressed" after it gets the signal from the MS SAPI that something had been detected.
-
'K, I guess I'm gonna have to wait.
At the moment I don't have something I need which has a lot of messages, but I just wanted to check.
I have used this technique before which requires a new class for each command, but the added benefit is the ability to make sub-class tree of commands which comes in handy when dealing with a ton of commands.
I've found that it's really helpful if you define naming and file organization decisions before or early into the process of creating commands since making changes en-masse is a pain.
But other than making sure both sender and receiver are working on the same version it's a sound tactic.
The max number of commands I worked with was 17 and no issues. I was sending them across VI server using a Call By Ref node so there wasn't even any flattening to string needed.
Good Luck
~,~
Norm
-
- Popular Post
- Popular Post
Name: Tree Control API
Submitter: Norm Kirchner
Submitted: 02 Jul 2009
File Updated: 03 Jan 2011
Category: User Interface
LabVIEW Version: 8.2
License Type: BSD (Most common)
Copyright © 2007, Norman J. Kirchner, Jr.
All rights reserved.
Norman J. Kirchner, Jr.
Author:
Norman J. Kirchner, Jr
--see readme file for contact information
Description:
Package to provide smart tree functionality without assumption of type of data (ie, file paths or others)
Gives ability to modify contents, extract information and control the branches.
A good understanding of how the LV tree truly operates as a fancy multi-column listbox is very useful although not required.
An expample program if not present on the forums, will be in place soon.
Dependancies:
LV version above base package
Functions
Add Item
Modify Item
Remove Item
Get All Items
Get Top Level Items
Get Items Parent
Get Selected Item
Get Siblings
Get Children
Get Item Properties
Check Tag Valid
Convert Tag to Text
Find Tag from Text
Outdent at Item
Indent At Item
Expand
Collapse
Empty Tree
Notes
Capable of working w/ LV 7 or later but uploaded version is for LV 8.2. Please request previous version if necessary.
Good to recognize that the tree control is just a fancy multi-column listbox.
Version
1.0.0 Initial Release
1.0.1 Example program added
- 3
-
I don't want to burst your bubble on some of your code but you should checkout the VIs in
C:\Program Files\National Instruments\LabVIEW 8.6\vi.lib\Utility\traverseref.llb
there are two top level VIs that allow you to farm an array of all references of any type of LV object w/out worrying about traversing structures yourself.
In the end your code would still do the same thing, but be more robust and flexible for different types.
-
I think they just figured out here @ NI that eventually I would get into the code and turn the scripting lock back into an ini key.
So instead they just decided to legalize it.
Kind of like prohibition.... just doesn't work.
Now we just need to make sure they don't start putting sin-tax on the license.
-
Of all the 1% of 1% of people on this earth who are pilots, I'm probably 1% of those that has actually used the whiz-wheel as a general purpose calculator.
Think slide rule but wrapped around in a circle. Setup a ratio and look for the value you want to multiply by and look above it (or below it based on perspective) and you have your answer (w/ some decimal shifting).
Also flip it over and you can do trig with the wind speed angle correction insert.
Heck, it's so smart it's not even a calculator.... it's a computer
-
Give it a whirl by getting into the Callback VI in the LVSpeak engine.
I would say use the User Input VIs and either fire or don't fire the user event if the key is pressed.
Try it out, let me know if you like it, I suppose we could make it a configurable option.
-
QUOTE (TobyD @ Apr 3 2009, 12:20 PM)
I'm in love Norm. This is great! I just have a crappy desktop microphone and it picks up every command. I was talking to a coworker and happened to say "replace" during my normal conversation and up pops the dialog box to choose a new control.Very cool! :thumbup:
Actually, that's how Get Pizza came to life. I was getting heckled by my co-workers and they kept running by screaming 'Get Pizza'.
So I just made it actually do something. Now if I could only get their credit card #s it would really make them stop the harassment.
But I've found that a headset w/ a mic mute switch has helped. Actually I'll probably be making a foot switch if the ambient noise or hecklers gets too annoying.
To be fully honest, the previous version of my code, on vista, would enable the full vista speech system that had the capacity to close windows, hit keyboard keys, or do other system functions. Which is cool, but if you forget to shut the microphone off and turn around and have a conversation, you will find that your pc has been doing stuff since you walked away (like closing or opening windows you don't want closed or open)
The current version bypasses the Vista Environment Speech integration.
Actually if you do leave the voice system in Vista open and leave your laptop running next to a TV running a Bollywood movie, you'll find that it starts to outsource your coding (although the code is not documented and sloppy)
-
Finding out that XP is not liking the loading of the QuickDrop Grammar (the list of things that you can say)
So don't be surprised if it's not working in XP. (Stay tuned though)
-
QUOTE (Antoine Châlons @ Apr 2 2009, 03:51 PM)
Any idea if there is a way to pin up a sub palette programmatically ?ooooh, I'm thinking no on that one. Palette windows and their functionality are probably not that exposed/extensible.
There is probably a ton of C code behind them and little G hooks.
Maybe if we get Darren on this thread he'll qualify that statement. But for now I'll bet an NI week Beer that it's no.
-
ADVANCED AND BRAVE USERS ONLY
In other words, if this messes something up.... Don't call NI complaining.
Really the only thing that has the chance to break is the fact that this package replaces the installed Quick Drop VI (but it does make a backup)(or at least that's the way the package is setup)
Addon :: Voice Integration with Quick Drop
Download File:post-208-1238696190.ogp
CORE DEPENDENCY!!! (NEW VERSION!!! Must Install)
- 1
-
Actually wouldn't it be so much better if you just told LV what you wanted to do and that way you wouldn't need to move your hands from the mouse, or dig down through copious levels of menus?
Well if you're not sure... take my word for it, it is!
A side project of mine
LVSpeak and QuickEdit
http://forums.lavag.org/LVSpeak-tell-LV-wh...-do-t13687.html
You can now simply tell LV "Align Right" or "VI Properties" or even "Get Pizza" (the last one is functional and an inside joke but does work)
So although every functionality is not present, if you want something added, figure out how to automate it, and add it in!
-
-
Use in good health WITH NO WARRANTY OF USAGE.
This uses unsupported and possibly buggy features of LabVIEW that may or may not corrupt your code. (but I use it every day and so far haven't encountered any corruption issues)
Some commands operate on the premise of the selected objects, (alignment stuff)
Other commands operate on what you are hovering over (Create Control)
Other commands are context insensitive (show project , get pizza)
The ability to do "Create Constant, Create Control and Create Indicator is now enabled!!!! Yup, it's that damn cool
THIS IS NOT SUPPORTED BY NI
let me repeat
THIS IS NOT SUPPORTED BY NI
This is something that I was working on well before I got into the walls. This is in the hands of the community and we'll support it and tear it down/apart as needed
Most commands are for the block diagram at current but are as follows
BD:
Label Visible / Invisible
Align (left, right, top, bottom, horizontal center, vertical center
VI Properties
Create Control / Constant / Indicator
Show Project
Get Pizza
FP:
Label Visible / Invisible
VI Properties
Show Project
Graph Palette
Replace
Get Pizza
-
QUOTE (Neville D @ Mar 30 2009, 02:20 PM)
Very cool Norm!dunno what my co-workers in our cubicle-farm (all C guys) will think with me muttering commands all day..!
Neville.
I'll tell you what they will think. They will wonder what the F is going on, and then you show them that your using voice commands to make your programming go faster and they'll all go sweeeeeeet.
To be honest.... just show them the get pizza command in action and that should suffice.
-
One thing that you might not realize is that the signal goes right into a WLAN processing chip and the code on the chip was never made able to export signals. Instead it does it's function by taking the RF on the Analog Front End (AFE) and getting it into the bits that really need to be processed as efficiently and quickly as possible.
So although there is a downconverter (RF -> IF :: GHz -> MHz) and a A/D converter (Analog -> I-Qbits) you do not have access to those raw bits of data before they get put into the WLAN processing stack
A great place to learn more about RF is at
-
-
I have taken a few moments to re-factor LVSpeak and get it ready for the masses.
For those of you who haven't heard me rant on about talking to LV I'll take a moment to give you a backstory.
Back when LV scripting was unveiled in ~LV 7.0, I realized that we could merge the Microsoft Speech to Text API and LV scripting to aid us all in the process of coding.
The idea sat idle until QuickDrop came out in LV8.6, and I couldn't not do it.
Now, w/ the aid of this package, some rusty nails and the Microsoft Speech SDK, you can command LV with your voice w/ things like...
[DISCLAIMER] This is not foolproof code. BUT I use it on a daily basis (actually I refuse to program w/out it turned on)
Directions:
Download the Microsoft Speech SDK 5.1 and install it
Download and install the attached package to this post.
Restart LV and now in your 'Tools' menu, you should see Enable LVSpeak.
After you click it you will see two windows now floating whenever LV is active (untill you restart).
The commands that it accepts currently are shown in the image above.
[NOTE] They do not all work on both FP and BD. ex Alignment commands only work on the BD.
[NOTE] This does not include integration w/ Quick Drop (although I would expect it to be added soon)
I would recommend starting out w/ Saying things like
'V I Properties' ----------(both FP and BD)
'Align Left'----------------(on the BD)
'Graph Pallette'----------(on a FP graph)
To stop the programs, simply say "LabVIEW Speak Stop"
'LVSpeak Engine' simply sets up the link between LV and the MS Speech API
'Quick Edit' is the engine that does the editing (This is where the fun happens)
- 2
-
Ok, Just have my first confirmed addition to the tally
1 Birthday Beer to Jim Kring
1 Beer to ******* for ****** (3/17 you know who you are)
1 Beer to Nancy Hollenback for patiently being the recipient of a minor rant about concentration.
Communication between projects
in Application Design & Architecture
Posted
Mike,
STFF man! (search the freaking forum)
Someone came up w/ a very similar way as REx to use queues over a network or at least that's what I found on lava search.
>8^}>