Mark Balla Posted October 25, 2007 Report Share Posted October 25, 2007 The original topic on creating a tool to automatically wire a FP to the Connector pane was started here. My thanks to JDave for starting it. I started a new topic to track the progress of the SubVI Fixer. Here is Version 3 using the VI Activation Event that PJM showed me. Version 3 works the same as Version 2 but is much more stable. the Video is located Here QUOTE(PJM_labview @ Oct 17 2007, 06:46 PM) David:2) Best attempt at connection will do the following (in order of priority): Connect error clusters (if present) to lower left and lower right respectively (regardless of the connector pane pattern). If references are present (like ref in, ref out), connect them on the upper left and upper right respectively. Connect any control/indicator pair having the same name pattern (ex: data in; data out or data in; data dup) at the same level on the connector pane respectively on the left and right side. Connect the remaining controls like they are mimicking the connector pane (see example below). The next thing I want to do with this tools is implement PJM's suggentions. In the Settings_Change.vi I added a array of Clusters. The Clusters have two items a match pair type and an array of wirring priorities. My current plan this The next thing I need to figure out is how do I determine what controls match from their references. I could do it by label name only and I probably will to start with but I would like to do it by type. Does anyone have an Idea how to uniquely identify a FP item via reference. The goal is to differentiate (cluster of different components from each other, References of different types and objects of different classes). Quote Link to comment
Aristos Queue Posted October 25, 2007 Report Share Posted October 25, 2007 QUOTE(mballa @ Oct 23 2007, 10:50 PM) If references are present (like ref in, ref out), connect them on the upper left and upper right respectively. LabVIEW classes should generally get the same treatment. When there are multiple classes on the same conpane, each with an "in" and an "out" terminal, the preference should be if the VI is owned by a given class then that class gets preferential treatment for being in the upper left and upper right. Otherwise, mimic the panel layout. Quote Link to comment
silmaril Posted October 25, 2007 Report Share Posted October 25, 2007 QUOTE(mballa @ Oct 24 2007, 05:50 AM) Here is Version 3 using the VI Activation Event that PJM showed me. This is a really nice tool! Thank you very much for all the time you put into this! :worship: The tool works very nice, as long as the name of the main VI starts with an underscore. I copied it into my projects directory and removed that underscore to get a Tools menu item for this. Now I get a funny problem: every time the tool changes the window focus to itself, it seems to detect the VI Activation event and sets "Target VI" to itself, which makes it impossible to use the tool anymore. The straight-forward solution to this seems to work fine here: I didn't upload the complete VI, since it's a really small change, and I suspect, you already have made much bigger changes in your own version. Quote Link to comment
Mark Balla Posted October 26, 2007 Author Report Share Posted October 26, 2007 QUOTE(silmaril @ Oct 24 2007, 05:01 AM) This is a really nice tool!Thank you very much for all the time you put into this! :worship: Thankyou for the feedback and trying out the tool. I hope it saves you some time. QUOTE(silmaril @ Oct 24 2007, 05:01 AM) The tool works very nice, as long as the name of the main VI starts with an underscore. I copied it into my projects directory and removed that underscore to get a Tools menu item for this. Now I get a funny problem: every time the tool changes the window focus to itself, it seems to detect the VI Activation event and sets "Target VI" to itself, which makes it impossible to use the tool anymore. Well it looks like I continue to be one of the most file upload challenged members in LAVA. I see I have yet again forgot to include a file. The file that is missing is called “FIX SUBVI.vi” and is the one that is you are suppose to see in the tools menu. It's main function is to remove the toolbars and scroll bars from the Main vi as well as call it. I have seen the problem where the main keeps bringing focus to itself. I put a quick and dirty fix in the “Active VI_Get Active VI From Global.vi”. By renaming the Main you disabled my fix and the problem returned. Here is my new and improved fix. Here is Version 4 it has the fixes above plus some icon cleanup. Quote Link to comment
silmaril Posted October 26, 2007 Report Share Posted October 26, 2007 QUOTE(mballa @ Oct 25 2007, 08:32 AM) Thankyou for the feedback and trying out the tool. I hope it saves you some time. I'm shure it will! QUOTE(mballa @ Oct 25 2007, 08:32 AM) By renaming the Main you disabled my fix and the problem returned. :headbang: Oh yeah! I like this kind of problems QUOTE(mballa @ Oct 25 2007, 08:32 AM) Here is Version 4 it has the fixes above plus some icon cleanup. Yes, this one works nicely, but I'm sorry to say that I found two more little things that should be fixed. In _FIXER Subvis Main.vi there should be a "This VI" reference at the beginning. Without this, I always get error 1026. http://lavag.org/old_files/monthly_10_2007/post-7932-1193296538.png' target="_blank"> The OpenG SubVI was designed very carefully. If you don't wire a reference to it's input, it opens it's own reference and makes shure it is closed again at the end of the VI. Also there is still a breakpoint in the engine, that gets hit everytime I use the "Set as Required" button. Looking at your code, one question comes to my mind: What exactly does the method "FP.Set Close If Lonely" do? Quote Link to comment
Mark Balla Posted October 26, 2007 Author Report Share Posted October 26, 2007 QUOTE(silmaril @ Oct 25 2007, 02:25 AM) Yes, this one works nicely, but I'm sorry to say that I found two more little things that should be fixed. In _FIXER Subvis Main.vi there should be a "This VI" reference at the beginning. Without this, I always get error 1026. The OpenG SubVI was designed very carefully. If you don't wire a reference to it's input, it opens it's own reference and makes shure it is closed again at the end of the VI. Ok I fixed this problem by sequencing the FP State Property before the OpenG vi. QUOTE(silmaril @ Oct 25 2007, 02:25 AM) Also there is still a breakpoint in the engine, that gets hit everytime I use the "Set as Required" button. fixed for the next rev QUOTE(silmaril @ Oct 25 2007, 02:25 AM) Looking at your code, one question comes to my mind: What exactly does the method "FP.Set Close If Lonely" do? This is a scripting node that will setup the vi to close if it is the only vi opened. I now relalize that it is not doing what was indended. Because the FIX SUBVI.vi and the _FIXER Subvis Main.vi are setup to both be opened and running I always have at least two vis opened. I will add this to the fixit list. Thanks a lot for the feedback and keep it comming. LAVA ROCKS Mark Quote Link to comment
Mark Balla Posted October 29, 2007 Author Report Share Posted October 29, 2007 QUOTE(Aristos Queue @ Oct 23 2007, 11:36 PM) LabVIEW classes should generally get the same treatment. When there are multiple classes on the same conpane, each with an "in" and an "out" terminal, the preference should be if the VI is owned by a given class then that class gets preferential treatment for being in the upper left and upper right. Otherwise, mimic the panel layout. If I have a reference to a class control what is the best method to determine what it's class name is? The property and invoke nodes don't seem to have any way to extract class information. Quote Link to comment
Aristos Queue Posted October 29, 2007 Report Share Posted October 29, 2007 QUOTE(mballa @ Oct 27 2007, 09:19 PM) If I have a reference to a class control what is the best method to determine what it's class name is? The property and invoke nodes don't seem to have any way to extract class information. I posted VIs to do exactly this just a couple weeks ago. See the thread in the GOOP forum.QUOTE(mballa @ Oct 25 2007, 11:17 AM) This is a scripting node that will setup the vi to close if it is the only vi opened.I now relalize that it is not doing what was indended. Because the FIX SUBVI.vi and the _FIXER Subvis Main.vi are setup to both be opened and running I always have at least two vis opened. "Close If Lonely" checks for VIs that are not "Close If Lonely". If the only VIs that are open are all marked as Close If Lonely, then all those VIs will close. It requires a sociable VI to keep the lonely VIs company.I can't check the code right at the moment, but I recall that an open project window will serve to keep a lonely VI company, too. Quote Link to comment
Mark Balla Posted October 30, 2007 Author Report Share Posted October 30, 2007 QUOTE(Aristos Queue @ Oct 28 2007, 09:48 AM) I posted VIs to do exactly this just a couple weeks ago. See the thread in the GOOP forum. The "Is This Control Of This LabVIEW Class" would be useful If I had a way to take a reference to a LabVIEW Object control and extract the LVClass Refnum out of it Any recommendations on how best to do this? F.Y.I. In 8.5 I have tried several ways to create a LabVIEWClassControl Ref Control and every method seems to crash LabVIEW. I also tried them in 8.2 and they work fine. Create control, Create SubVI, Select Class I briefly checked the LAVA bug list and 8.5 known issues list and didn't see this problem. I will file a bug report this week when I get time. QUOTE(Aristos Queue @ Oct 28 2007, 09:48 AM) "Close If Lonely" checks for VIs that are not "Close If Lonely". If the only VIs that are open are all marked as Close If Lonely, then all those VIs will close. It requires a sociable VI to keep the lonely VIs company.I can't check the code right at the moment, but I recall that an open project window will serve to keep a lonely VI company, too. Thanks for the clarification, I added the "Close if lonely" node in the Caller and they both shut down when no other "sociable" vis are present. Quote Link to comment
Aristos Queue Posted October 30, 2007 Report Share Posted October 30, 2007 QUOTE(mballa @ Oct 29 2007, 12:59 AM) The "Is This Control Of This LabVIEW Class" would be useful If I had a way to take a reference to a LabVIEW Object control and extract the LVClass Refnum out of it Any recommendations on how best to do this? Post the conpane of a VI that has the inputs/outputs that would be most useful to you and I'll see if I can put something together. Quote Link to comment
Mark Balla Posted October 30, 2007 Author Report Share Posted October 30, 2007 QUOTE(Aristos Queue @ Oct 29 2007, 04:24 AM) Post the conpane of a VI that has the inputs/outputs that would be most useful to you and I'll see if I can put something together. Here is ultimatly What I would like to see. Download File:post-584-1193669937.vi the "Qualified Name Out" indicator is the one that I Need the most. Thanks for your help. Quote Link to comment
Michael Aivaliotis Posted November 1, 2007 Report Share Posted November 1, 2007 I haven't been following all the posts so forgive me if this has been mentioned already. One use-case I have is when using the "create sub-VI" function. I don't know about y'all but this feature sucks b***s. Issues: LabVIEW gives you a con-pane that matches exactly the number of inputs and outputs you have. For example, if you have 2 inputs and 2 outputs it gives you a con-pane with 4 terminals. I would like to see a standard con-pane and it use only some of the inputs and outputs. If you have an error in and an error out I would like it to position the error in and error out in the right place AND name the error in to "Error IN" NOT something stupid like error out. So perhaps this cleanup tool in progress can run automatically after a "create sub-VI" action or something? Like a "disconnect all and reconnect correctly" function. Quote Link to comment
Mark Balla Posted November 1, 2007 Author Report Share Posted November 1, 2007 QUOTE(Michael_Aivaliotis @ Oct 30 2007, 10:35 PM) LabVIEW gives you a con-pane that matches exactly the number of inputs and outputs you have. For example, if you have 2 inputs and 2 outputs it gives you a con-pane with 4 terminals. I would like to see a standard con-pane and it use only some of the inputs and outputs. I totally agree and this is one the top reasons why I started this tool. QUOTE(Michael_Aivaliotis @ Oct 30 2007, 10:35 PM) If you have an error in and an error out I would like it to position the error in and error out in the right place I'm currently working on a function that searches selected FP items for matching pairs and applies wiring rules to them. QUOTE(Michael_Aivaliotis @ Oct 30 2007, 10:35 PM) AND name the error in to "Error IN" NOT something stupid like error out. In the settings of the fixer you can apply prefixes and suffixes to controls or indicators. It's an all or nothing setting though so if you set indicators to use a prefix of "Out" then all indicators will be set that way. QUOTE(Michael_Aivaliotis @ Oct 30 2007, 10:35 PM) So perhaps this cleanup tool in progress can run automatically after a "create sub-VI" action or something? Like a "disconnect all and reconnect correctly" function. I like it. Any Idea how to detect when the "create sub-VI" function has been called? Quote Link to comment
Mark Balla Posted November 2, 2007 Author Report Share Posted November 2, 2007 I've made enough improvements to make it worth posting the latest version 5. Here is the list of improvements from version 4 Change FP Layout Fixed the close if lonely problem. The fixer should now close if it is the only vi running. Improved the Active VI detection. In ver 4 you had to click on a vi while the fixer FP was opened for it to find it. Now its keeps track in the background. Added a recommended button. Since you can now set LabVIEW to make all input required by default this function is needed. The hot keys to popup the Main FP can now be set in the settings window. Default is still Ctrl-Shift-Spacebar. LV 8.5 LV8.2 Thanks again for all the feedback and ideas. Quote Link to comment
Michael Aivaliotis Posted November 5, 2007 Report Share Posted November 5, 2007 QUOTE(mballa @ Oct 31 2007, 07:02 AM) I like it. Any Idea how to detect when the "create sub-VI" function has been called? Well, it doesn't need to detect that but even if I ran the tool right after manually then that would be good too. Quote Link to comment
Aristos Queue Posted November 5, 2007 Report Share Posted November 5, 2007 QUOTE(mballa @ Oct 29 2007, 09:02 AM) the "Qualified Name Out" indicator is the one that I Need the most. I posted new versions of the tools on the ni.com page. Download the new VIs and see if the pieces you need are now available. I redid the block diagrams so that more was un-password proteced. I don't think there's any way to get an LVClass Refnum in LabVIEW other than the app methods Open or Create, but perhaps what I've exposed for you will get you enough from the class names. Quote Link to comment
Aristos Queue Posted November 6, 2007 Report Share Posted November 6, 2007 Here's even better... actual code... Quote Link to comment
Robbie Gehbauer Posted November 6, 2007 Report Share Posted November 6, 2007 Actually, that VI is in the palettes. It's in the Cluster, Class, & Variant palette. Quote Link to comment
Aristos Queue Posted November 7, 2007 Report Share Posted November 7, 2007 QUOTE(Robbie Gehbauer @ Nov 5 2007, 03:04 PM) Actually, that VI is in the palettes. It's in the Cluster, Class, & Variant palette. The inverse of that VI is in the palettes -- the one that goes from path to class. The one that goes from class to path is not in the palettes. [One of the dangers of working with unreleased versions of LV; can anyone guess what will be in the palettes in the next release? :-) ] Quote Link to comment
Mark Balla Posted November 7, 2007 Author Report Share Posted November 7, 2007 QUOTE(Aristos Queue @ Nov 5 2007, 02:58 PM) Here's even better... actual code... http://lavag.org/old_files/monthly_11_2007/post-5877-1194296310.png' target="_blank"> Thanks for finding this for me. I've been playing with the "GetLVClassInfo.vi" and there is an indicator I need clarified. What is the "Fully Qualified LV Class Name" represent and why is it an array. eveything I've tried so far will only output one item in the array which is the class name. In what circumstances will I see more than on item? Quote Link to comment
Aristos Queue Posted November 7, 2007 Report Share Posted November 7, 2007 QUOTE(mballa @ Nov 6 2007, 09:36 AM) What is the "Fully Qualified LV Class Name" represent and why is it an array. eveything I've tried so far will only output one item in the array which is the class name. In what circumstances will I see more than on item? That's explained in the description of the VI that converts from array to flat string. Quote Link to comment
Mark Balla Posted January 8, 2008 Author Report Share Posted January 8, 2008 QUOTE(PJM_labview @ Oct 17 2007, 05:46 PM) 1) I hardly ever have controls on my FP that I do not want to connect to the connector pane.2) Best attempt at connection will do the following (in order of priority): Connect error clusters (if present) to lower left and lower right respectively (regardless of the connector pane pattern). If references are present (like ref in, ref out), connect them on the upper left and upper right respectively. Connect any control/indicator pair having the same name pattern (ex: data in; data out or data in; data dup) at the same level on the connector pane respectively on the left and right side. Connect the remaining controls like they are mimicking the connector pane (see example below). 3) If there are controls/indicators I don't want to connect, I am not sure what the best approach is. Maybe if the controls/indicators are not in the visible window frame, it should not be connected (yes I think I like this). PJM OK PJM this one is for you. I've implemented a pairs matching and wiring program. Using Aristos' program I was able to create a program to categorize controls and indicators so they could be compared to each other. If two items match and one is a control and the other an indicator they are paired up and placed in a pairs array. All items that do not match up are placed in a controls or indicator array. Starting with the pairs array the program gets the highest item in a priority and tries to find it the array. When the array item is found it is wired to the connector pain according to a wiring list. When all the pairs are wired, the program moves on to the single controls array and then to the single indicators. So for most FP arrangements it's down to three button presses. "Select All", "By Pairs" , "Arrange and Cleanup" You will only have to move the controls or indicators that are in the wrong place. After starting the Fixer and creating a subvi do the following. 1: Select a control or indicator on the FP of the vi to fix 2: Bring up the SubVI fixer. Ctrl-Shift-Space (default) 3: Press the "Select All Controls" button to select all controls on the FP 4: Press the "By Pairs" button to automatically wire the FP items. 5: If the connection to the connector pain are not to your liking move the out or place ones to the correct location and press the "By Arangement" button 6: When all connection are good press the "Arrange & Cleanup" button to finish. Here are a couple of videos to demonstrate. Download File:post-584-1199684719.swf I would like to have people test this and see if it is stable and works for most programmers. The priority list may not be what every one likes. So if you open the _Subvis for FIXER\Pairs\Pairs_Catagory Priority Array.vi you will see instructions on how to change the wiring priority. Other added features Have FP center in monitor 1 on startup Added Max FP size setting in the Settings panel. Last folder selected to save in is remembered and is used next time. (Needs Testing) Here is the newest version. Just as a reminder to place the 3 items in your National Instruments\LabVIEW 8.5\project\ folder. Open LabVIEW and call the "FIX SUBVI" item from the tools menu. Press Ctrl-Shift-SpaceBar to have the fixer popup. Download File:post-584-1199685943.zip Download File:post-584-1199686110.zip QUOTE(Aristos Queue @ Oct 23 2007, 10:36 PM) LabVIEW classes should generally get the same treatment. When there are multiple classes on the same conpane, each with an "in" and an "out" terminal, the preference should be if the VI is owned by a given class then that class gets preferential treatment for being in the upper left and upper right. Otherwise, mimic the panel layout. QUOTE(Michael_Aivaliotis @ Oct 30 2007, 10:35 PM) So perhaps this cleanup tool in progress can run automatically after a "create sub-VI" action or something? Like a "disconnect all and reconnect correctly" function. I'll work on these next. Thanks again everyone for your Ideas, Code and Inspiration. Please keep your Comments, Suggestions, and Critiques coming. Mark. Quote Link to comment
PJM_labview Posted January 8, 2008 Report Share Posted January 8, 2008 This look very promissing. I will try to give it a shot next "free" time I got. PJM Quote Link to comment
LAVA 1.0 Content Posted November 29, 2008 Report Share Posted November 29, 2008 QUOTE (mballa @ Nov 28 2008, 08:08 AM) In responce to a question about the SubVI Fixer I found http://forums.lavag.org/-t12460.html&view=findpost&p=54671' target="_blank">here I created a Jing video. I hope this clears up some of the confusion.More videos to come. Verry nice Video/Tool! :worship: Quote Link to comment
Michael Aivaliotis Posted November 29, 2008 Report Share Posted November 29, 2008 Hey Mark, I just got your tweet about the video and just finished watching it. Great Job! Two thumbs up!! Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.