Efficient way to modify control values?

Hello,
I have been using LabVIEW somewhat casually at work for the past couple of years, and have read at least a few times that there is usually a better way than using Local Variables.
In this case I have a setup file with ten different numeric controls for various power levels and frequencies. By choosing from a text ring I want to automatically fill in the "default" values for these numeric controls for each given value of the text ring.
The way I have this implemented now is I just have a case structure with multiple values. Based on the chosen value in the text ring I load ten constants into the ten local variable references.
Is there an easier/more efficient way to do this?
Thanks,
Steven
Solved!
Go to Solution.

To me this seems to be 'the' valid approach.
References can offer more flexebility, but suffer from worse performance. Performance won't be an issue for 10 numerics, only if you have somwhat larger arrays (a typical graph with 100 points you can notice the performance loss).
Only a terminal is faster than the local (assuming that you need to display the value, otherwise of course just use a wire). Some exotic usage of Control Val Set invoke note has shown a very good perormance, but I think this is a bit over-coded for just initializing controls.
Felix
www.aescusoft.de
My latest community nugget on producer/consumer design
My current blog: A journey through uml

Similar Messages

  • Efficient Way to calculate percentage value

    Hi all
    I need to calculate x % of y using ABAP coding .
    I am not sure what code i can use..can anyone
    help me ?

    You can just use normal calculation, like X divide by Y times 100.  or ues the function within query. 
    Good Luck,
    CL

  • FB70: How t o modify the value of BSEG-XREF before posting?

    Hi ABAP Gurus,
    Good day!
    I would like to know the correct way to modify the value of BSEG-XREF1 in FB70 (Prior to posting of document).
    Currently, I have tried using substitution. First, I copied RGGBS000 into ZRGGBS000 AND added form u300, which will modify BSEG-XREF1.  Second, I have added a step to an already existing substitution (COGS), which was set-up in transaction OBBH.  I have assigned u300 to BSEG-XREF1 (Refernce Key 1).
    The said step didn;t seem to work.  I was able to post a document and then I displayed the document.  Unfortuantely, BSEG-XREF1 hasn't been modified. So,  I tried debugging the form U300.  It doesn't stop inside that form, which means the logic that i put there was useless. By the way, the the formname that Im using can be found in two internal tables: (1) exits, and (2) etab.
    Kindly advise on what to do.   Thank you very much!
    <b>Best Regards.
    Brando</b>

    Check this sample code which i've used to substitute the field BSEG-ZUONR
    Also ensure that the callup point in <b>OBBH</b> is 2
    Don't forget to attach ur <b>ZRGGBS000</b> to the application area <b>GBLS</b> in the tcode <b>GCX2</b>
    FORM get_exit_titles TABLES etab.
      DATA: BEGIN OF exits OCCURS 50,
              name(5)   TYPE c,
              param     LIKE c_exit_param_none,
              title(60) TYPE c,
            END OF exits.
      exits-name  = 'U102'.
      exits-param = c_exit_param_field.
      exits-title = text-101.           " Ship-to-Party to Assignment field
      APPEND exits.
      REFRESH etab.
      LOOP AT exits.
        etab = exits.
        APPEND etab.
      ENDLOOP.
    ENDFORM.                    "GET_EXIT_TITLES
    FORM u102 USING zuonr TYPE bseg-zuonr.
      bseg-zuonr = <value>.
    ENDFORM.

  • A more efficient way to assure that a string value contains only numbers?

    Hi ,
    I'm using Oracle 9.2.0.6.
    I was curious to know if there was any way I could write a more efficient query to determine if a string value contains only numbers.
    Here's my current query. This SQL is from a sub query in a Join clause.
    select distinct cta.CUSTOMER_TRX_ID, to_number(cta.SALES_ORDER) SALES_ORDER
                from ra_customer_trx_lines_all cta
                where length(cta.SALES_ORDER) = 6
                and cta.SALES_ORDER is not null
                and substr(cta.SALES_ORDER,1,1) in('1','2','3','4','5','6','7','8','9','0')
                and substr(cta.SALES_ORDER,2,1) in('1','2','3','4','5','6','7','8','9','0')
                and substr(cta.SALES_ORDER,3,1) in('1','2','3','4','5','6','7','8','9','0')
                and substr(cta.SALES_ORDER,4,1) in('1','2','3','4','5','6','7','8','9','0')
                and substr(cta.SALES_ORDER,5,1) in('1','2','3','4','5','6','7','8','9','0')
                and substr(cta.SALES_ORDER,6,1) in('1','2','3','4','5','6','7','8','9','0')This is a string where I'm finding A-Z-a-z characters and '/' and '-' characters in all 6 positions, plus there are values that are longer than 6 characters. That's what the length(cta.SALES_ORDER) = 6 is for. Also, of course. some cells are NULL.
    So the question is, is there a more efficient way to screen out only the values in this field that are 6 character numbers or is what I have the best I can do?
    Thanks,

    I appreciate all of your very helpfull workarounds. The cost is a little better in all cases than my original where clause.
    To address the discussion that's popped up about design from this question, I can say a few things that should clear , at least, my situation up.
    First of all this custom quoting , purchase order , and sales order entry system WAS written by a bunch a of 'bad' coders who didn't document their work and then left. We don't even have an ER diagram
    The whole project that I'm only a small part of is literally trying to put Humpty Dumpty together again and then move it from a bad custom solution into Oracle Applications.
    We're rebuilding, documenting, and doing ETL. This is one of your prototypical projects from hell.
    It's a huge database project so we're taking small bites as a time. Hopefully, somewhere right before Armageddon hits, this thing will be complete.
    But until then,..., well,..., you know the drill.
    Thanks Again.

  • Team Foundation Server 2013 Refresh button not refreshing Custom Control values in TFS Templates

    Hi all,
    We have recently migrated from Team Foundation Server 2010 to Team Foundation Server 2013 Update 2. In TFS 2013 template design we found the refresh form control (inbuilt control of TFS) which is unable to refresh the custom control values that is built
    by us. Is there any way that we can programatically modify to enable the refresh button work with custom control.
    Please find below screenshot link for reference.
    http://postimg.org/image/z4mo3t8r9/
    SaranRam

    Hi SaranRam,
    The refresh button is there to allow the data that populated the work item to be refreshed. The data that you want refreshed is part of the rendering of the form and would only be refreshed when the browser refreshes. Refer to MrHinsh's reply in this
    page.
    Best regards,
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • Most efficient way to load XML file data into tables

    I have a complex XML file running into MBs. I want to load it's data into 7-8 tables.
    Which way will be better:
    1) Use SQL Loader to actually load directly into the 7-8 tables directly by modifying the control card.
    Is this really possible and feasible? I am not even sure about it
    2) Load data as XML Type in a table and register it. Then extract from there to load into various tables.
    Please help. I have to find the most efficient way of doing it.
    Regards,
    Sudhir

    Yes it is possible to use SQL*Loader to parse and load XML, but that is not what it was designed for and so is not recommended. You also don't need to register a schema, just to load/store/parse XML in the DB either.
    So where does that leave you?
    Some options
    {thread:id=410714} (see page 2)
    {thread:id=1090681}
    {thread:id=1070213}
    Those talk some about storage options and reading in XML from disk and parsing XML. They should also give you options to consider. Without knowing more about your requirements for the effort, it is difficult to give specific advice. Maybe your 7-8 tables don't exist and so using Object Relational Storage for the XML would be the best solution as you can query/update tables that Oracle creates based off the schema associated to the XML. Maybe an External Table definition works better for reading the XML into the system because this process will happen just once. Maybe using WebDAV makes more sense for loading XML to be parsed (I don't have much experience with this, just know it is possible from what I've read on the forums). Also, your version makes a difference as you have different options available depending upon the version of Oracle.
    Hope all that helps as a starter.
    Edited by: A_Non on Jul 8, 2010 4:31 PM
    A great example, see the answers by mdrake in {thread:id=1096784}

  • Adjust control values while VI is running

    Have another question, but its irrelevant to my other post so I thought i'd make a new one:
    I'm near complete with this VI, however i would like to add the ability to change my Control values in my front panel while the VI is running, either through some sort of feedback or w/e.  For example, if the power supply i'm running is at 10V during the time, i would like to bump it up to 20 v without having to start/stop the VI completely.
    Is there an efficient/good way to do this?
    Attachments:
    Sweeping Voltage v2.1.vi ‏116 KB

    Really not able to open your attached vi as most of its dependencies are not included. So without looking at it I would say that putting everything in an event structure, then having events trigger on changes to your controls would be the way to go. But without seeing the code ...
    Putnam
    Certified LabVIEW Developer
    Senior Test Engineer
    Currently using LV 6.1-LabVIEW 2012, RT8.5
    LabVIEW Champion

  • Is it better to use Invoke nodes or property nodes to set/get control values?

    I have a series of VI's that run in parallel, each to manage different functions- pumping, sensing, a fluid flow model, an experiment generator/runner.
    These need to exchange data, which I am currently doing using invoke nodes (that are all in subVIs), using methods "Set control value" and "Get control value". I find that every now and then (perhaps 1% of the time) the data isn't exchanged correctly and therefore the system doesn't work. I can imagine how "set" could go wrong if they happen simultaneously, and can devise ways of preventing this. However, the "Get" method suffers from the same problem. This is a major problem, because I want to leave it running for several hours.
    I could in
    principle achieve the same thing using property nodes and find myself wondering if this might be more reliable. But I don't want to change over only to find it makes no difference!
    Can anyone advise?

    You can use some kind of syncronization such as queues, occurances, or notifiers but I think the easiest way would be to create and action engine. This was only one action can execute at a time avoiding a "race condition". Possibly a write action and a read action might help. You also can add queues or notifiers into this concept. hope this helps.
    BJD1613
    Lead Test Tools Development Engineer
    Philips Respironics
    Certified LV Architect / Instructor

  • Modify control behavior in sub-vi

    I'm using a dual-slide control in several places to select a range of values. I've added behavior to the slider by forcing the value of the second slider to be greater than or equal to the first slider. I'm doing the limit calculations in a sub-vi by threading the control values through the vi. It all works fine but I've been trying to find a way to add the behavior in the Sub-VI without having to pass it back to the main. In other words, I want to add a control to a panel that has the appropriate behavior without adding the necessary code to the main diagram. I can imagine this being done by passing say a reference to the control to an appropriate sub-vi which then monitors the control and performs whatever limiting is necessary without having to wire it back to the calling VI.
    There are other instances where you want to customize control behavior so I'd like to see a better way to handle this. I've tried working with contol references but to no avail.

    Using a reference should be the answer. What was your problem with them?
    Right click the terminal and select Create>>Reference, then right click the reference and select Create>>Control. Copy this control (the reference) to the subVI and have it as part of the connector pane. On the BD, wire its terminal into a property node. Since you created it from a specific control, it should give you all the properties of that control. Place the subVI on your BD and wire the reference from the original control into it and it should work. If it doesn't, I suggest you post the code.
    Try to take over the world!

  • Is there any way to use Control Break in a SQL Query

    Hi,
    Is there any way to use a control break on Dept column in a SQL query to have a Output-2 instead of Output-1.
    Is there any way to modify the SQL query.
    SQL
    select dept, loc, count(*)
      from dept
    group by dept, locOutput-1
      Dept      Loc       Count(*)
      10         AA        1
      10         BB        2
      10         CC        2
      20         AA        2
      20         BB        2Output-2
      Dept      Loc       Count(*)
      10         AA        1
                 BB        2
                 CC        2
      20         AA        2
                 BB        2Thanks,
    Deepak

    DeepakJ wrote:
    Hi,
    Is there any way to use a control break on Dept column in a SQL query to have a Output-2 instead of Output-1.
    Is there any way to modify the SQL query.
    SQL
    select dept, loc, count(*)
    from dept
    group by dept, locOutput-1
    Dept      Loc       Count(*)
    10         AA        1
    10         BB        2
    10         CC        2
    20         AA        2
    20         BB        2Output-2
    Dept      Loc       Count(*)
    10         AA        1
    BB        2
    CC        2
    20         AA        2
    BB        2
    Yes, using the <tt>lag</tt> analytic function and specified ordering of the data:
    select
        nullif(d.deptno, lag(d.deptno) over (order by d.deptno, d.loc, e.mgr nulls first)) deptno
      , nullif(d.loc, lag(d.loc) over (order by d.deptno, d.loc, e.mgr nulls first)) loc
      , e.mgr
      , count(*) n
    from
        dept d
          join emp e
            on d.deptno = e.deptno
    group by
        d.deptno
      , d.loc
      , e.mgr
    order by
        d.deptno
      , d.loc
      , e.mgr nulls first;
    DEPTNO  LOC       MGR   N
        10  NEW YORK         1
                      7782   1
                      7839   1
        20  DALLAS    7566   2
                      7788   1
                      7839   1
        30  CHICAGO   7698   4
                      7839   1
        40  BOSTON    7698   2
                      7902   1

  • Most efficient way to track 3 states?

    In a program I am writing, I have an object with three states, which it progresses through during the corse of the program. Since the program uses a lot of these objects (potentially) I want to keep the size of them down. Here's the issue. How to store what state the object is in? a boolean won't work, of corse, since there are three states. So here's what I can up with:
    Either a Boolean (initial state is null, then false, then true)
    or a byte (any three values would work)
    I have a feeling that the byte is more efficient, but want to make sure. Also, if I'm missing an easy, efficient way to do this, tell me.

    Nearly there:
    <code>
    public abstract class State {
    abstract void handleState();
    abstract int getState();
    public class State1 extends State {
    void handleState() {
    //do state 1 specific stuff
    int getState() {
    return 1;
    public class State2 extends State {
    void handleState() {
    //do state 2 specific stuff
    int getState() {
    return 2;
    public class State3 extends State {
    void handleState() {
    //do state 3 specific stuff
    int getState() {
    return 3;
    public class StateController {
    private State currentState = new State1();
    public int getState() {
    return currentState.getState();
    public void handleState() {
    currentState.handleState();
    </code>
    might work ;)
    As to booleans... no they cannot be null actually... they are represented by a bit which is 0 or 1 (or if you prefer true of false).
    Boolean b = null;
    is not a null boolean, it is an uninitialised object.
    If you need an Object that you want to be a boolean then it is fine to use the Boolean class :)
    The reason boolean b: b == null doesn't compile is because you cannot compare different types.

  • Most efficient way to do some string manipulation

    Greetings,
    I need to cleanse some data in a string by replacing unsafe characters with encoded equivalents. (FYI, this is for the purpose of transforming "unsafe" characters into encoded values as data inside an XML document).
    The following code accomplishes the task:
    Note that a string "currentValue" contains the data to be cleansed.
    A string, "encodedValue" contains the result.
      for (counter = 0; counter < currentValue.length(); counter++)
        addChar = (currentValue.substring(counter,counter+1));
        if (addChar.equals("<"))
          addChar = "#60;";
        if (addChar.equals(">"))
          addChar = "#62;";
        if (addChar.equals("="))
          addChar = "#61;";
        if (addChar.equals("\""))
          addChar = "#34;";
        if (addChar.equals("'"))
          addChar = "#39;";
        if (addChar.equals("'"))
          addChar = "#39;";
        if (addChar.equals("/"))
          addChar = "#47;";
        if (addChar.equals("\\"))
          addChar = "#92;";
        encodedValue += addChar;
      } // forI'm sure there is a way to make this more efficient. I'm not exactly "new" to java, but I am learning on my own with no formal training and often take a "brute force" approach with my initial effort.
    What would be the most efficient way to re-do the above?
    TIA,
    --Paul Galvin
    Integrated Systems & Services Group

    im a c++ programmer so im not totally up on these java classes either but...from a c++ stand point you might want to consider using the if else statment.
    by using if else, you only test the character until you find the actual "violating" character and skip the rest of the tests.
    also, you might trying using something to check for alphaNumeric cases first and use the continue keyword when you find one. since more of your characters are probably safe than unsafe you can skip all the ifs/if else statement and only do one test on the good characters. (i just looked for a way to test that and i didnt find one. c++ has a function that does that by checking the ascii number range. dont think that works in java. but maybe you can find one, it would reduce the number of tests probably.)
    happy hunting,
    txjump :)

  • Most Efficient Way to Populate My Column?

    I have several very large tables, some of them are partitioned tables.
    I want to populate every row of one column in each of these tables with the same value.
    1.] What's the most efficient way to do this given that I cannot make the table unavailable to the users during this operation?
    I mean, if I were to simply do:
    update <table> set <column>=<value>;
    then I think I'll lock every row for writing by others until the commit. I figured there might be another way that makes better sense in my case.
    2.] Are there any optimizer hints I might be able to take advantage of here? I don't use hints much but with such a long running operation I'll take any help I can get.
    Thank you

    1. May be a better solution exists.
    Since you do not want to lock the table...
    Save the ROWID's of all the rows in that table in a temporary table.
    Write a routine which will loop through this temporary table and use the ROWID to update the main table and issue commit at regular intervals.
    However, this does not take into account the rows that would be added to main table after the temporary table has been created.
    2. Not that I am aware of.

  • Most efficient way to consume log files

    Hello everyone,
    I've been absent from the forums for awhile but I'm back at it now... 
    I have a question about the most efficient way to consume log files.  I read in Powershell in action, by Bruce Payette that using a switch statement with a regex worked pretty well, that being said I haven't tried it yet. Select-string is working pretty
    well for me but I have about 10 different entry types that I need to search logs for every 5 minutes and I'm scanning about 15 GB of logs at every interval.  Anyway, if anyone has information about how to do something like that as quickly as possible
    I'd appreciate it.
    1.  piping log files that meet my criteria to select-string
       - This seems to work well but I don't like searching the same files over and over again
    2. running logs through get-content and then building a filter statement
      - This is ok but it seems to use up a fair bit of memory
    3. Some other approach that I haven't thought of yet.
    Anyway, I know this is a relatively nebulous question, sorry about that.  I'm hoping that someone on here knows a really good way to find strings in logs files quickly.
    Hope that helps! Jason

    You can sometimes squeeze out more speed at the expense of memory usage, but filters are pretty fast. I don't see a benefit to holding the whole file in memory, in this case.
    As I mentioned earlier, though, C# code will usually blow PowerShell away in terms of execution time.  Here's a rewrite of what I just did (just for the INI Section pattern, to keep the post size down):
    $string = @'
    #Comment Line
    [Ini-Style Section Line]
    Key = Value Line
    192.168.0.1 localhost
    Some line that doesn't match anything.
    Set-Content -Path .\test.txt -Value $string
    Add-Type -TypeDefinition @'
    using System;
    using System.Text.RegularExpressions;
    using System.Collections;
    using System.IO;
    public interface ILineParser
    object ParseLine(string line);
    public class IniSection
    public string Section;
    public class IniSectionParser : ILineParser
    public object ParseLine(string line)
    object o = null;
    Match match = Regex.Match(line, @"^\s*\[([^\]]+)\]\s*$");
    if (match.Success)
    o = new IniSection() { Section = match.Groups[1].Value };
    return o;
    public class LogParser
    public static IEnumerable ParseFile(string fileName, ILineParser[] lineParsers)
    using (StreamReader sr = File.OpenText(fileName))
    string line;
    while ((line = sr.ReadLine()) != null)
    foreach (ILineParser parser in lineParsers)
    object result = parser.ParseLine(line);
    if (result != null)
    yield return result;
    $parsers = @(
    New-Object IniSectionParser
    $results = [LogParser]::ParseFile("$pwd\test.txt", $parsers)
    $results
    Instead of defining separate classes for each type of line and output object, you could probably do something more generic with delegates (similar to how I used ScriptBlock.Invoke() in the PowerShell example), but it might sacrifice some speed to do so.

  • Can I modify the value of an enviroment entry for an EJB without having to re-deploy.

    I wish to modify the value of an envrioment entry for an EJB. The entry already exists and has been created using
    <env-entry>
    <env-entry-name>myFlag</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>true</env-entry-value>
    </env-entry>
    I can access the value using code similar to the following:-
    InitialContext initialContext = new InitialContext();
    String value = (String) initialContext.lookup("myFlag");
    However if I try the following:-
    InitialContext initialContext = new InitialContext();
    initialContext.rebind("myFlag", "false");
    I get an OperationNotSupportedException thrown.
    Do I need to use LDAP directly (rather than through JNDI) to modify this value or is there another / better way? If I do need to use LDAP directly what would the code look like ?

    Hi,
    As per J2EE specification:
    Naming environment entries allow customization of a component during deployment or assembly without the need to access or change the component?s source code. The container implements the naming environment, and provides it to the component instance through a JNDI naming context.
    The Deployer can modify values of environment entries that have been previously set by the Application Component Provider and/or Application Assembler.
    Generally only those variables/properties are set in environment entries which are likely to be different on various Application server configurations/installations, so it is not required/advisable to change these entries programmatically. Any way iAS-6.0/6.5 doesn't support changing environment entries programmatically, it binds all the JNDI names during Server startup after reading it from the registry.
    For your purpose you can use a boolean variable in your code to set your flag, and may be put it into session.
    Please feel free to ask further questions.
    Sanjeev,
    Developer Support, Sun ONE Application Server-India.

Maybe you are looking for

  • How can I import to an external HD?

    In previous versions of iMovie, I could easily import a video to an iMovie event of my choice located on any connected hard drive. This is important because I make a lot of movies and keeping on my internal HD is impossible. iMovie 10.0.2 does not se

  • How to find a materail based on Sales Area ??

    Dear All, How to find a materail based on Sales Area ?? please let me know .. Thanks Venkat

  • Issue with Printing Labels using PrintToPrinter

    Hi, Recently we have upgraded our reports from crystal reports XI to crystal report 2008. We are currently facing problems with the labels printed through crystal reports. I've used the ReportDocument.PrintToPrinter(1, false, 0, 0); method to print t

  • Interface RFC destination Error

    Hi, while testing our interfaces we get this error, Stack>Error: Transaction IDX1: Port HED_020, client , RFC destination contain errors We have checked IDX1 and SM58/59 and cant find any error. Has anybody come across this before? Thanks

  • Best practice converting local laptop accounts to Mobile Accounts with PHD

    Hi, what is the best practice to convert local laptop users (with different UIDs than their network account) to mobile accounts? Especially when the local dir should not be synced in whole (just Documents, Library). Client and server are 10.5, networ