Remove local variables

I have created a custom edit step (LabVIEW VI) in which the user can create a Local, StationGlobal or FileGlobal variable to store some data in.  When the user hits the "add" button an event is triggered and the variable is created.  I want the user to be able to hit the "remove" button and cause an event to be triggered that removes the variable.  Is this possible, or do I need to specify that the user removes the variable manually?  The front panel and add portion of the block diagram is attached.
Solved!
Go to Solution.
Attachments:
Front Panel.gif ‏16 KB
Block Diagram.gif ‏21 KB

Hi,
Try to use DeleteSubProperty
Check out example
Hope this helps
juergen
=s=i=g=n=a=t=u=r=e= Click on the Star and see what happens :-) =s=i=g=n=a=t=u=r=e=
Attachments:
DeleteVariable.seq ‏6 KB

Similar Messages

  • Best way to remove local variables

    Hello,
    I have been told that I need to remove all the local variables in my VI, because they are slow.  I can not seem to find a good option for replacing them but keeping the same functionality.
    What I am using the local variables for is to update 3 different graphs on the front panel from 3 different sources.  Each of these sources are located in while loops so that data can be acquired asynchronously.  In closing these 3 while loops is a case statement.  The case statement is for switching between acquiring and saving the data or just acquiring data.  The local variables are used to update the indicators and graphs from the acquiring and saving data case.  It is these local variables that I need to remove.
    Does anyone have any suggestions?
    -- Z

    Zurvan wrote:
    I have been told that I need to remove all the local variables in my VI, because they are slow.
    Who told you that?
    As others have said, local variables typically don't cause slowdown (They cause additional datacopies in memory, have the potential of causing race conditions and cause messy code).
    What is "slow" in your definition? (missing data, cannot keep up with the instrument, slugging UI, etc.).
    What is the CPU use when your program runs?
    So apparently you have a loop that updates all indicators from local variables. What is the loop rate of that display loop? Do you spin that millions of times per second or pace it at a reasonable rate? How much data is in the graphs?
    Remember, a graph does not need to update unless the data changes.
    LabVIEW Champion . Do more with less code and in less time .

  • Control buttons in local variables

    hi,
    i have been trying to do this for a long time. i just never learned how to make it work. can someone please guide me?
    i have this program with many many local variables and i know that this forum absolutely hate LOCAL VARIABLES.
    I want to program this the right way, so can you guys please help take a look at my code and see what i can do in order to REMOVE local variables if possible?
    Best regards,
    Krispiekream
    Attachments:
    test.vi ‏768 KB

    does this work?
    i split up the zip file to 2.88mb each.
    i think there is a file size limit of 5mb
    can you rename test01.zip to test.z01
    can you rename test02.zip to test.z02
    Best regards,
    Krispiekream
    Attachments:
    test.zip ‏1078 KB
    test01.zip ‏2847 KB
    test02.zip ‏2847 KB

  • Error in assigning value to local variable

    i am writing a stored procedure in which i have pass parameter if parameter value is zero then i assign a previously declared variable null else that value
    syntax is this
    create or replace
    PROCEDURE usp_Add_Update_Insurance
    p_CityID IN NUMBER DEFAULT NULL
    as
    v_CityID number(10,0);
    begin
    IF p_CityID = 0 THEN
    BEGIN
    v_CityID := NULL;-----giving error in this line
    else
    v_CityID:=p_CityID;
    END;
    END IF;
    end
    begin
    ///some query
    end
    please help someone

    I think there is no added value by putting those Begin/End.
    The simplest solution is just remove them
    Create Or Replace
    Procedure Usp_Add_Update_Insurance (
         P_Cityid In Number Default Null
    ) As
         V_Cityid Number(10,0);
    Begin
         If P_Cityid = 0 Then    
              V_Cityid := Null;
         Else
              V_Cityid:=P_Cityid;
         End If;
         -- do something with V_Cityid    
    End; The only reason for having Begin/End is if you want to catch some exceptions or perform some strange local variable declarations. But it does not seems to be case here.
    MJ

  • How to set multple values in cluster with local variable?

    Hello all,
    Ok, I've made my way through Labview for everyone, and have some basic concepts down. I can see with a cluster, if acting directly upon it, you can unbundle, change values, rebundle, etc.
    I'm trying something a bit more complex...and just not sure how to get started on this.
    I have a drop down menu ring. I have set this up as a typedef, with 4 values.  I have used this typedef 7 times, plus some LED bools, in a cluster. I have made this cluster a typedef.
    So, in my main vi I"m starting to design, I've set up an example posted here....and in it, I have two instantiations of the cluster typedef, Left Selector and Right Selector.
    I have dropped into this vi, a copy of the menu ring typedef (same typedef as in the clusters, same values)....called reset all tubes.
    I'm trying now, to figure out how, with an event on the change of value for 'reset all tubes'....that I can start with the left selector, and change all the tubes (these are the menu ring selector)  to the same value as what has been selected with the 'reset all tubes' menu ring.
    I've created a local variable for the left selector. It is set to read values. (I'll be doing the same with the right one too, but just starting with the left).
    In examples I've seen where directly accessing a cluster, you could unbundle the cluster...loop through and change the values...maybe pull out all of the 'tubes' into an array and move through that to update the values.  And when you bundle or unbundle the cluster...you can see the values, etc, when you stretch them out on the block diagram.
    With the local variable..I can't see to 'stretch' it out like I was expecting..so I can access the values for the 'tubes'...and set them all to the value of the 'reset all tubes' ring menu value.
    Can someone put me on the path on the best way to do this....or is there a structure of component I'm missing here ?  Am I on the right track to begin with here?
    This would seem pretty basic to me, but I'm just missing something here on how to start...
    Thank you in advance,
    cayenne
    Solved!
    Go to Solution.
    Attachments:
    example_select_dropdown.ctl ‏5 KB
    public_selector_cluster.ctl ‏6 KB
    laptop_test_public.vi ‏12 KB

    nathand wrote:
    You can't do this with a for loop the way the cluster is structured, but why make it so complicated?  Just bundle the new value into the cluster as shown below:
    If you do want to use a for loop, consider restructuring your cluster.  Group the ring and a boolean into a cluster, then drop 7 of those into the selector cluster.  Then you can use "cluster to array" and "array to cluster" since all elements in the outer cluster will be of the same type.
    Also, be careful using rings as type definitions.  You probably want to use an enumeration instead.  The items in a ring do not update when you update the type definition because they're considered to be cosmetic; the items in an enumeration type definition do update, because the items in an enumeration are considered part of the data type.
    Oh my goodness!!
    What was MUCH easier than I was trying to make it!!
    I was attempting to do this reset, in an incremental fashion, as that later, I'm going to need to change values in this cluster by individual elements....and was using this as a way to try to understand how to iterate between cluster elements, and change the values of each one.
    This solution works much better for this 'reset' all solution.
    One question on this....with regard to the enum vs the ring menu.
    I was actually going to go with the enum, however, I could not find a way to make it LOOK like the ring menu...with the arrow to the side that a user would know to click to present the menu list of choices.
    I see with the enum, that you can remove the increment/decrement indicator.....and if the user clicks the control, it will indeed pop up a menu of choices...but there is no 'arrow' on that control to indicate to the user that it is a menu choice there.....
    Is there a way to make and enum look like a ring with the "drop down menu" control look?
    Again, thank you !!
    This helps!
    C

  • Local variable for an Array of fixed size

    Hello,
    I have a two multirate loops in a VI. 
    In one loop, I want to refer an fixed sized array initialized in the other loop.
    But I coudn't name the array, so I can't refer it.
    Is there any way to refer it?
    Thanks,
    Young.

    If you need a local variable, there is no other way than to create an indicator for it.
    In LabVIEW there is no "fixed length" array : you can always add or remove an array element, and you don't need to declare it as in other languages. They are intrinsic dynamic objcets. Of course, the memory manager has to cope with this, that's why it's often better to initialize an array, to give it its final size immediately, resulting in faster running programs. However, this is only noticeable with relatively large arrays (> 10000-100000 elements).
    May be you should explain in more details what you intend to do, because trying to reproduce a C approach in LV is probably not the best thing to do. For instance, you said that you are initializing your array in a first loop. You mean that you re-initialize the array at each iteration ? I suppose no, so may be you could put the initialize step out of the loop, and wire the array to your two parallel loops.
    Remember also that local variables are not always good programming solutions, since using them will generate copies of their content each time they are refered to. And that can low down your program very significantly...
    Message Edité par chilly charly le 11-05-2005 05:05 PM
    Chilly Charly    (aka CC)
             E-List Master - Kudos glutton - Press the yellow button on the left...        

  • Dbx: Can't evaluate local variables in optimized functions

    I turned on the optimization for the whole product. Now I found that I can not print the local variables declared in side the main funciton or inside the function locals.
    eg.
    int factorial (int n)
    int factorial = 1;
    while (n > 1)
    factorial *= n--;
    return factorial;
    When I tried to print n or factorial, I would not able to do so...
    Is there any way can I get the local variables printed?
    Is there any compiler options to overcome this problem and printing the local variables...
    I know this is an difficult question becuase the locals go to Register instead of memory. By reverting it back to memory, I may loose the efficiency I gained with this optimizations.
    options : -fast -xtarget=ultra3 -xarch=v8plusa -g0
    Please let me know....
    #include <iostream>
    #include <string>
    #include <unistd.h>
    #include <stdio.h>
    using namespace std;
    int main(int argc, char **argv)
    FILE *fp=freopen("myfile.txt","w",stdout);
    int bytes_read;
    char buffer[10000];
    std::cout<<"##This should be 0 15238.0.172435 written in to the 1 file with out any HICK-UPs"<<endl;
    FILE *myfp=fopen("myfile.txt","r");
    cerr<<"This goes to std error file"<<endl;
    fseek(myfp, 0, SEEK_END);
    int len = ftell(myfp);
    fseek(myfp, 0, SEEK_SET);
    fread(buffer,len,1,myfp);
    fclose(myfp);
    fclose(fp);
    string mystring(buffer);
    std::string::size_type location=mystring.find("15238.0.172435",0);
    std::string::size_type location1=mystring.find("116530640358374636",0);
    if(location != std::string::npos )
    cerr<<"Buffer Read that is read from file inside the if condition \n<\n"<<buffer<<"\n>"<<endl;
    if(location1 != std::string::npos )
    cerr<<"Buffer Read that is read from file inside the if condition and location1 \n<\n"<<buffer<<"\n>"<<endl;
    remove("myfile.txt");
    return 0;
    stopped in main (optimized) at line 8 in file "fileex.cc"
    8 int main(int argc, char **argv)
    (dbx) cont
    This goes to std error file
    stopped in main (optimized) at line 27 in file "fileex.cc"
    27 int len = ftell(myfp);
    (dbx) print len
    dbx: Can't evaluate local variables in optimized functions

    Dbx typically cannot show auto variables in optimized code. The reason is that the variables typically do not have a stable location, or might be eliminated altogether. Similarly, source code lines don't have a stable relationship to object code. The debug data emitted by Sun compilers is not enough to keep track of these issues.
    We plan to provide better debugging of optimized code in a future release.
    Dbx can show the value returned from a function, which in your case might be enough.

  • Sun Sudio C++: Local Variables and Watches Values Not Initialized in Debug

    Hi All,
    I am trying to debug my program (using dbx). I have put break points in various functions. However, I have the following problems:
    - when the program runs to the break points, all arguments have in the functions shown in the callstack have values '???';
    - NOTHING is shown in the 'Local Variables' windows;
    - if I put the local variables in the 'Watches' window, the 'value' simply says <unset value>;
    what am I doing wrong?
    Thanks in advance

    Well, first things that comes to my mind is that your app was not compiled with debug info. Could you please post output of the following three commands here:
    $ dwarfdump -l <your app> | wc -l
    $ dumpstabs -s <your app> | wc -l
    $ file <your app>
    (if the first two would print small number, remove "wc -l" and post real output here, please)

  • Local Variables and INLINING

    LV2013SP1
    When making a VI that originates a TYPEDEF'ed cluster, I have always used a local variable of that output cluster, and a BUNDLE BY NAME function to insert the various pieces.
    Like this:
    Now, when I try to INLINE the VI that does this, I get an error message: "This object is not allowed in a VI on which you enable inlining".
    I can replace it with a constant easily enough:
    My questions are these:
    1... Why is the first method illegal?  I suspect something to do with thread-switching into the UI thread, is that it?  Or maybe there really isn't a front panel if it is INLINEd?
    2... Is the constant pattern better, in terms of memory usage?
    3... Is the constant pattern better, in terms of speed of execution?
    4... Should I adopt that pattern anyway, regardless of INLINE or not?
    Steve Bird
    Culverson Software - Elegant software that is a pleasure to use.
    Culverson.com
    Blog for (mostly LabVIEW) programmers: Tips And Tricks

     the exact why is not explained
    I believe the "why" IS explained. This all makes sense to me now.
    There can be no instance of the control/indicator, because it's never been placed on the caller's panel.
    If it existed, it would have to have properties like POSITION and BOUNDS, and those have never been set.
    They COULD NOT be set, since they would have to be set (differently) for each instance of the inlined VI.
    The INLINEd VI requires REENTRANCY, that means there is a separate dataspace for each instance.
    I suppose that dataspace now would come from the caller.
    The point of the INLINE is to connect the caller's output wire to the VI's input wire AS IF the VI's code were copied into the caller.
    That means that the CONTROL/INDICATOR is totally unnecessary, and can be removed.
    It therefore cannot be accessed.  Not by property nodes. Not by local vars.
    AND, ON A HUNCH, I tested this:  NOT BY REFERENCE.
    With a REFERENCE to a control/indicator on an INLINEd VI, I get the same error: this object is not allowed in a VI on which you enabled INLINING.
    Because it doesn't exist.
    The control/indicator is a metaphor for the interface between the code and the screen display.  It ceases to exist when INLINEd.
    Steve Bird
    Culverson Software - Elegant software that is a pleasure to use.
    Culverson.com
    Blog for (mostly LabVIEW) programmers: Tips And Tricks

  • Debugger: Watchpoint on local variable is triggered upon entering routine?

    Hi
    My problem is perhaps best illustrated in this small program:
    REPORT  zzkc_watchpoint.
    PERFORM form1 USING 'AB'.
    PERFORM form1 USING 'CD'.
    PERFORM form1 USING 'EF'.
    PERFORM form1 USING 'GH'.
    FORM form1  USING    value(p_1).
      DATA: lv_local(3)     TYPE c.
      IF 1 > 2.        <----
    Watchpoint triggered here - regardless of condition
      ENDIF.
      lv_local = p_1.
      IF 1 > 2.       <----
    And here when condition is met.
      ENDIF.
    ENDFORM
    I set a conditional watchpoint (all Module Instncs) on variable lv_local, condition: lv_local = 'EF', BUT: The watchpoint is whenever form form1 is entered. It's also triggered when lv_local eventually is set to 'EF", but why is it triggered upon entering form1???
    Best regards
    Kenneth

    This happens because the visibility of local variable is only in the subroutine. When system calls the subroutines subsequently, it reassigns the content of the local variable. If you watch the watchpoints (Watchpoints tool in the Break/watchpoints), you will see that for each subsequent call, system creates a new data reference and assign it to the Current Variable and Old variable. And it has the similar content (blank value) in the Current Value & Old Value.
    FORM form1 USING value(p_1).
      DATA: lv_local(3) TYPE c.
      IF 1 > 2. " At this point, Current Value and Old Value in the Watch points are same, BLANK.
      ENDIF.
      lv_local = p_1.   " here, After this statement Current Value would change to value of the P_1
      IF 1 > 2.
      ENDIF.
    ENDFORM.
    If you change the variable scope by changing it as the STATICS, it would only stop when it reaches to the EF.
    Check the last section:
    http://help.sap.com/saphelp_erp2005/helpdata/EN/f1/792442db42e22ce10000000a1550b0/frameset.htm
    In the OLD debugger, as soon as the validity of the variable changes, system would remove the watch point on that variable.
    Regards,
    Naimesh Patel

  • What is difference between local variable and property node ?

    What is difference between local variable and property node ?
    " 一天到晚游泳的鱼"
    [email protected]
    我的个人网站:LabVIEW——北方客栈 http://www.labview365.com
    欢迎加入《LabVIEW编程思想》组——http://decibel.ni.com/content/groups/thinking-in-labview

    To make things clear, here are two small examples that show how nasty locals and value properties can be to the naive programmer.
    - Open the diagram of the race condition.vi before running it and try to predict what will be the values of the two counters after the third run.
    - Use the Compare Locals Properties and Wires.vi to find out how slow locals and value properties can be (times 1000+).
    This being demonstrated, I must add that I use globals and value properties quite often, because they are often very convenient
    Chilly Charly    (aka CC)
             E-List Master - Kudos glutton - Press the yellow button on the left...        
    Attachments:
    Race condition.vi ‏9 KB
    Compare Locals Properties and Wires.vi ‏18 KB

  • How to use local variable in member formula?

    Hi Expert,
    We would like to use a {local variable} in a member formula, so that it can pick up the prompt from webform upon save. Would like to know if it is possible to do? If so, what is the correct syntax?
    We attempted to use brace {scenario}, blacket [scenario], blacket with quote ["scenario"]. None of these work.
    We are using 11.1.2.1 version, EPMA, Hyperion Planning.
    Thanks in advance for your help!

    One other pointer. Where did you define your variable? Hopefully you went into Calc Manager and selected <Tools>, <Variables>. From there, navigate to your application or database. Right-click on your application or database and select "New". In the bottom panel, you'll need to select your Variable Type. Make sure you select "Member", and not "Members". You cannot pass "Members" (plural) to a web input form. Also, if you want to define a variable for a custom dimension, you'll need to do it at the database level. Standard dimension member variables can be defined at the app level. (Not sure why this is the case, especially when my custom dimension exists in all plan types . . . . )
    Anyway, hope this helps,
    - Jake

  • Default initialisation of member variables and local variables

    I don't understand why member variables are initialized with default values by Java.
    Objects are initialized with "null" and primitives with "0", except boolean, which is initialized with "false".
    If these variables are used locally they are not initialized. The compiler requires them to be initialized by the programer, for example "String s = null".
    Why? What is the use of that difference?
    And why are arrays always initialized with default values, no matter if they are member variables or local variables? For example String[] s = new String[10]; s[0] to s[9] are initialized with "null", no matter if "s" is a local or member variable.
    Can someone please explain that strange difference, why it is used? To me it has no sense.

    Most of the time I have to initialize a local variable
    with "String s = null" in order to use it because
    otherwise the compile would complain. This is a cheap
    little trick, but I think everyone uses it.
    I wouldn't agree with "most of the time". The only cases where it is almost necessary to do that is when the variable should be initialized in a loop or a try-catch statement, and that doesn't happen too often.
    If local variables were initiliazed automatically without a warning it would be a Bad Thing: the compiler could tell when there is a possibility that a variable hasn't been assigned to and prevent manymanymany NullPointerExceptions on run time.
    And you didn't answer me why this principle is not
    used with arrays if it is so useful as you think.
    Possibly it is much more difficult to analyse the situation in the case of arrays; what if values are assigned to the elements in an order that depends on run time properties such as values returned from a random number generator.
    The more special rules one has to remember, the more
    likely one makes errors.I agree, but what is the rule to remember in this case?

  • Data Acquisition - using local variables to write data to a file

    Hello,
    I am running a Data Acquisition vi (currently in LabVIEW 7.1 but soon to be updated to 8.2) that collects ~100 parameters of data from several sources contained in a while loop. The current configuration (which I did not write) uses very few subVIs and writes to ~100 local variables to store each parameter. It then reads all the local variables and builds an array of all the strings, converts then to a spreadsheet string, then uses the write characters to file function to append to a datafile. I am trying to clean things up and have came up with subVIs to collect the data from the following sources:
    8 serial port sources collecting btwn 8 and 20 parameters each
    ~15 thermocouple readings
    ~10 analog inputs
    ~20 parameters read off an ARINC 429 bus.
    I have come up with a subVI to read each of the sources and have placed the subVIs in the while loop. Each subVI outputs the data that it collects in array or cluster form. I was wondering how best to write each parameter to a CSV file at between 1 and 10 Hz. Should I write each subVI output to a LV and then read them off as was done before (the difference being that I have reduced the # of LVs to ~10 vs >100?
    I should add that precise timing is not that important, so if all the subVIs are not collecting simultaneously (which I understand that they won't be), it does not really matter.
    Thanks.

    Hi jilla,
    jilla wrote:
    What I think that you are saying is to turn the outputs of the 4 subVIs into inputs of a 5th subVI that writes to the data file. Correct?
    Yes.  It may sound like a fine-point, but I beileve it's better to create a VI specifically for formatting data - in your example, 4 arrays IN, a single string OUT.  Then write the string to file as a seperate operation.  GUI-displayed data can go through a similar transformation, the four arrays wired to a subVI which builds output-structures specifically for display.  It's a beginner's mistake to put lots of individual controls and indicators on the screen when groups of them are naturally related (in an object-oriented sense.)  Use clusters to group related controls - this will keep the diagram much cleaner.
    One more question: at what point (either # of data points or frequency of data collection) does it become necessary to use queues? Thanks.
    Well, there's not really a clearly definable "point".  I'd say if your update-rate climbs above 100Hz, or you witness poor program or system performance, then it's time.  The scenario you've described is a fairly simple acquire/display&log loop - and simple is good.   Then-again people can't see/react-to updates faster than about 10Hz - so it doesn't make sense to sacrifice performance - if performance becomes an issue.
    Re: queues:  Queues are sometimes used to buffer data that's "produced" in one place and "consumed" in another.
    Here, if/when logging data, you're logging with every DAQ.  I wouldn't recommend using a queue to transport data from a "DAQ loop" to a "Logging-loop" - those functions can be in the same loop.  Should/could a queue be used to get data from a "DAQ loop" to update the GUI at a lower frequency?  Sure, but a Notifier might be a better choice.   Further, in the (simple?) program you've described, you might use a case structure (True/False) to only update FP indicators every "X" iterations - a simple solution that doesn't require Queues or Notifiers.
    Cheers!
    "Inside every large program is a small program struggling to get out." (attributed to Tony Hoare)

  • How can I Change data in a type def control containing a Xcontrol with a local variable

    Hello
    I made a Xcontrol and I inserted this control in a type def.
    When I want to change the control's data with a local variable in a VI, the VI change nothing. The change of data isn't perform
    How can I correct this issue?
    Thanks for your help
    Solved!
    Go to Solution.

    Hello,
    What's your LabVIEW version ? Do you have a simple example program which demonstrates this behavior ?
    I found another discussions related to your issues with Xcontrols:
    updating type defs in Xcontrol Facade
    No Data Change event generated for a XControl in a Type Def
    XControl facede.vi 
    Hope this helps.
    Regards, 
    Steve M.
    National Instruments France
    #adMrkt{text-align: center;font-size:11px; font-weight: bold;} #adMrkt a {text-decoration: none;} #adMrkt a:hover{font-size: 9px;} #adMrkt a span{display: none;} #adMrkt a:hover span{display: block;}
    >> Vidéo-t'chats de l'été : présentations techniques et ingénieurs pour répondre à vos questions

Maybe you are looking for

  • OPEN SAVE option not coming for attachments

    Hi Experts,                 we are showing the different types of attachments for Purchase order and Purchase requisition in our web dynpro abap application. when the user opens a PO and clicks on attachment button using my custom designed web dynpro

  • Default Environment layer ?

    Hey, does anyone know how I can specify which Environment layer gets new objects if/when they're created by Track->Create Multiple... ? I've played around with inserting and deleting layers, and I haven't yet found a reliable way to control where the

  • HELP!! I can't access my macintosh HD when Booted!

    Hi, I am new at this forum, so bear with me guys Anyway, i am experiencing some problems with my Macbook 15" i7 2012 model.. I just bougt it on april 5th 2012.. I have installed windows 7 on bootcamp, and currently running max os Lion currently i am

  • Going backwards from 2012R2 to 2008R2

    I have a situation in our environment (application compatibility) where I may need to migrate printers from 2012R2 to 2008R2. Can anyone tell me if the Microsoft Print Migration tool will let me do this or if there is a better way?  We'd originally p

  • Help help!!  Disk Utility reported can't repair my HD

    Hello all I used Disk Utility (version 10.5.5) that comes with Mac OS X 10.4.6 to check my hard drive. The diagnostic returned a message that my drive needed to be repair. So I booted up with installation disc and did the repair. One of the log says