Dynamically call a demon or an actor VI in TestStand

Hi all

The context:

  • I have a non-reentrant VI that must run in parallel to a sequence
  • This VI is opened and closed several times during the tests.
  • I close the VI sending him a pending request as it closes.

It seems to me that there are two ways to start the VI:

  • Have TestStand call a LabVIEW VI that launches the dynamic VI. This could be the static node in the CGRA or an invoke node using a ref VI.
  • Use the asynchronous step "Run VI" in TestStand type.

Right now I use the step "Run VI" asynchronous. I do not use the option "Reserve loaded live for execution", and once from time to time I get the crash 'TestStand sequence editor has stopped working ".

My questions:

  1. With regard to memory management, which is the best way to put in place my use case? Is it better to have LabVIEW make the dynamic call or TestStand call dynamic?
  2. What is the difference in between both of these memory management works?

Thanks a lot - suggestions are appreciated.

Mr. Jim

Let us know how it goes with the movement of the sous-suite.

Basically the call run VI Asynch just dynamically create a sous-suite and qualifying in a new thread.  You can view it in the definition of step Type in one of the PreSteps.  But using the subsequence you eliminate the part of the dynamic generation of it (I've seen topics with, similar to what you describe).

Good luck

Tags: NI Software

Similar Questions

  • With the help of dynamically called screw in TestStand deployment

    I write code to interface with a & Rohde Schwarz ZNB Network Analyzer.  I use LabVIEW 8.2 and TestStand 3.5.  For reference the ZNB driver is available here: R & S of ZNB Driver.  I use a slightly older version of the driver, some before they needed to LabVIEW 2009.  I am writing all the code on a development machine that has the full version of TestStand/LabVIEW and it works on another machine that has the TestStand deployment license.

    This driver is dynamically linked to some things he needs.  I am able to operate with simple LabVIEW EXEs but not in TestStand deployments.  The following excerpt comes from their documentation, explaining a little about how the driver works and how to use in LabVIEW EXEs.

    3.4.2 How to generate executables or libraries in LabVIEW driver kernel drivers instrument based on attributes is dynamically bound to any VI performed during execution. This can be recognized by the LabVIEW application builder. The LabVIEW application builder follows all the static dependencies and include them in the package distributed at the generation of an executable file.

    To create an executable in LabVIEW, please manually add all the screws in the \PREFIX \_utility\callbacks folder to the LabVIEW project. In the case of project based please add private to your project folder. With this reference manual, the driver core is included in the compilation and the driver core is accessible during execution.

    I can't get this to work in TestStand deployments at all.  I can't even connect to the device since the VI Init has these issues.  I get the same error for all the various attempts that I made.  The same error is that when you add manually the screws for the LabVIEW EXE.

    Error-1073807346

    Property in Rohde & Schwarz Vector Analyzer.lvlib:rsidr_core_session_fgv.vi-> network node

    Rohde & Schwarz Vector Network Analyzer.lvlib:rsidr_core_check_error.vi->

    Rohde & Schwarz Vector Network Analyzer.lvlib:rsidr_core_attribute_write_int.vi->

    Rohde & Schwarz Vector Network Analyzer.lvlib:rsidr_core_attribute.vi:3->

    Rohde & Schwarz Vector Network Analyzer.lvlib:rsvna.vi:2->

    Example 1 setting of the Instrument 24Default .vi:1->

    Rohde & Schwarz Vector Network Analyzer.lvlib-> efault Instrument Setup.vi

    Rohde & Schwarz Vector Network Analyzer.lvlib:Reset.vi->

    Rohde & Schwarz Vector Network Analyzer.lvlib:Initialize.vi->

    Connection of ZNB testing.VI

    VISA: (Hex 0xBFFF000E) the given reference of session or the object is not valid.

    So far, I tried the following, all solutions producing this same error.  I struggled with this and turned off for awhile then maybe there are other solutions attempts I forget.

    (1) it looked like a lot of the report to go to the private folder were finished in SupportVIs.  I manually pasted the rest there, too.

    (2) I added all driver files on my workspace and included in the files with the rest of my deployed screws.

    (3) I added all driver files on my workspace and said pilot TestStand to deploy them to the original location in Program Files.

    Someone at - it ideas?  R & S didn't even know what was TestStand, so that they could not help me.

    I was finally able to solve this problem on mine, the other day.  I brought the Network Analyzer to my office and did a lot of tests in this way.  Eventually, I discovered that I needed to include the folder private pilot deployment, what I was doing in one of previous attempts.  It turns out that you must also maintain the original of this file directory structure when you include it, otherwise dynamic calls are not looking in the right place.  Once it worked on my PC, I got it on the machine test and worked as well.

  • dynamically called vi, PDM invalid file reference

    Hello

    I can't explain a strange behavior, I hope someone can give me a hint.

    First of all, do not ask why I need this way to go, I would like to understand why this is happening.

    We have a FGV which has 3 actions: Init, write data and close. It works on the TDMS files. The action of the init creates a TDMS file reference that is stored in a shift register to be prepared, used by writing and finally narrow cases.

    Everything is OK, if I use this FGV simply in a main VI directly from the block diagram. So that I can init, write data and finally close the PDM file.

    However, for some reason, appeared a new requirement: to be able to 'Init' and 'Close' the TDMS file using the FGV, but within a dynamically called VI (a pop-up window that may not stop the execution of the appellant).

    So in primary VI, I call dynamically VI one another by using the asynchronous call (flag x 80, "call and forget" method), and it dynamically called VI fires the FGV TDMS.

    When I probe the reference of TDMS files, I can see that it gets its value correctly after the case 'Init' of fire. After this 'init' which happened (from Dynamics called VI), a location in the MAIN VI starts calling this FGV with enum action 'Write '. I can see via sensors, the case of writing Gets the same number of REF TDMS file which has been stored in the shift register after the case 'Init '.

    But even so, the VERY first function TDMS write throws an error msg "TDMS file invalid reference '! How is it possible, if the file reference is OK and the same as that created by the function 'File open TDMS' in case 'init '?

    Again, if I execute 'init' action also directly the main VI, not a third dynamically called VI, everything is OK, it works.

    I hope that my explanation is not too bad

    Thanks for the tips and if no idea, I'll try to recreate/replicate this behavior in a test project that is small, and I'll post it...

    The problem is that when the dynamic called vi stops all references that he open invalid.

    To see what I want to say, change the dynamics vi delay like 30 seconds before she stops, the savings loop works fine until the dynamics vi stops, then the error returns.

    Mike...

  • Switch on the dynamic call

    I use packet sniffer example in my code with a few changes to calculate the delay of my data.

    I need to make a dynamic call to run this VI at some point my main code and stop at another point.

    Just to test I put some delays between market, stop and get the time as below:

    But in VI that I call, the stop button is inside a structure of event... like here:

    So... even if I try to stop the VI in my dynamic appeal, it seems that my VI will not read this change... only read if I manually stop the VI.

    so I try to stop at the first VI but does not stop... what could be a solution for this?

    Thank you

    Thai

    Problem solved. I just inserted the stop button in the same case where is Timeout, now I can guarantee you that this value will be read.

  • Re-use of dynamically called code of target in real-time on PC

    I have a code that is deployed on a target in real time what I call dynamically. I also want to use the same code dynamically on a PC in the same project.

    This works very well when you run interpreted code in form. However, I can't add the dynamic called VI to build on my PC specification if the VI is under the aim of RT in the project. I can only include it in the build specification that is in conjunction with the software to the target of the RT.

    How can I use this VI dynamically in the ad for the construction specifications and places without having two copies of it?

    I actually found a way using a static reference of vi:

    Rather than providing a path to the file of the 'open' vi reference, simply load the VI statically and I then enter its name to open an instance, re-entering. This approach has the advantage of process Dynamics called VI as if it was dropped on the block diagram - I don't have to explicitly include the vi file in the build specification.

  • Dynamically call DBMS_XMLINDEX to delete the setting and exit with the exception

    Hi all

    I am trying to create a procedure to dynamically call DBMS_XMLINDEX.dropparameter.
    If the parameter doesn't exist no then gracefully exit with the exception as "the parameter does not exist.
    But I keep getting errors because of the dynamic passing.
    Procedure is something like:


    Create PROCEDURE drop_parameter (p_parameter IN VARCHAR2)
    IS
    no_parameter EXCEPTION;
    PRAGMA EXCEPTION_INIT(no_parameter,-12004);
    BEGIN
    RUN IMMEDIATELY ' DBMS_XMLINDEX.dropparameter ("| p_parameter |") ';
    dbms_output.put_line ('abandoned parameter');
    EXCEPTION
    WHEN no_parameter THEN
    dbms_output.put_line ('parameter does not exist');
    END drop_parameter;

    For the implementation we can try to create the parameter in the form:

    BEGIN
    DBMS_XMLINDEX. () REGISTERPARAMETER
    'Param1 ',.
    ' PATH TABLE PathTB1
    Paths (INCLUDE (/ a/b / c))
    / d/e/f
    ))
    ');
    END;
    /

    The setting above should be deleted or if not existing, then exit gracefully.
    Please suggest.

    Thank you...

    You test the incorrect error code...

    ORA-12004: http://docs.oracle.com/cd/E11882_01/server.112/e17766/e9858.htm#sthref3299

    Try with ORA-44737, for example:

    SQL> set serveroutput on
    SQL>
    SQL> BEGIN
      2  DBMS_XMLINDEX.REGISTERPARAMETER (
      3  'Param1', 'PATH TABLE PathTB1 PATHS (INCLUDE ( /a/b/c /d/e/f ))');
      4  END;
      5  /
    
    PL/SQL procedure successfully completed
    
    SQL>
    SQL> CREATE PROCEDURE drop_parameter(p_parameter IN VARCHAR2)
      2  IS
      3    no_parameter EXCEPTION;
      4    PRAGMA EXCEPTION_INIT(no_parameter,-44737);
      5  BEGIN
      6    DBMS_XMLINDEX.dropparameter(p_parameter);
      7    dbms_output.put_line('Parameter dropped');
      8  EXCEPTION
      9    WHEN no_parameter THEN
     10        dbms_output.put_line('Parameter does not exist');
     11  END;
     12  /
    
    Procedure created
    
    SQL> exec drop_parameter('Param1');
    
    Parameter dropped
    
    PL/SQL procedure successfully completed
    
    SQL> exec drop_parameter('Param1');
    
    Parameter does not exist
    
    PL/SQL procedure successfully completed
     
    

    (and even once, you do not need code dynamics)

  • Dynamically spawning cRIO demons using 'open VI ref' and ' Start Asynchronous Call?

    Hello

    I am creating a cRIO application that must lay a dynamic number of processes based on events that occur during execution. On the Windows platform, it's relatively simple, just get a VI reference or reference of vi of typedef'ed static, strict, etc., then run. works like a charm. I can't get this to work on the cRIO.

    Someone can tell me quickly or to the list, the restrictions (if any) and proposed the method to achieve this?

    Thank you!

    Q

    Hi q:

    Can you give us an overview of how you are trying to do now?  I ask because you should be able to use the same method that you used on the Windows.

    If your project contains your main VI as well as the screws, you want to call dynamically, all screws must be in the same place.  So, you should be able to provide the path to the dynamic VIs using the method of access to your VI main road and replacing the main name of VI with the dynamic name of VI.  So that it works, make sure you deploy all the screws under your cRIO controller.

    There are no restrictions, I see then this gives a shot and let us know if you have more trouble with it.

  • passage of queue to dynamically called VI

    In my application, I have two screws. IIn a VI I create a queue and then I spend the Ref. of the queue for the other VI and launch this VI dynamically.

    While running any VI can stop regardless of the status of the other VI.

    but as soon as I stop the VI who created the queue. the Ref. of the queue becomes invalid. and dynamic VI cannot use the queue more

    I want to the queue to be eliminated that after I explicitly call has queue function.

    How can I achieve that

    Hey Tushar,

    You can create a "functional Global ' which encapsulates the function Create tail and buffer the reference to the queue in a registry to offset.  The VI may have two modes of operation: CreateQueue and ReadReference.  The top-level VI he would run in Design Mode, and the VI dynamically saying would just continue to use the playback mode.  Since this VI remains a VI performance left even after the parent process ends, the queue reference, allocations will remain valid.

    See you soon!

  • Unanticipated delays, the closure of dynamically called VI

    LV10.0 / WXP

    A VI is called dynamically by Method VI Run (wait until done = FALSE, Auto have Ref = TRUE).

    Queues are used to Exchange data with the main VI.

    Closing (the main VI "stop" message), the LabVIEW VI hangs for about 25 seconds (!) with one of the processors of the machine dual-core at 100%.

    Someone else met this strange behavior? Any ideas?

    Thanks in advance


  • can we use service legend to dynamically call business service in OSB

    My requirement is: contact service issue. moments of for - each loop in OSB. Node road that we cannot use in the foreach loop.

    can we use service legend to call business several times? and how can we pass endpoint url to business service using the legend of service.

    Please help me.

    Yes you can use routing options to override the legend service endpoint url. See

    http://docs.Oracle.com/CD/E23943_01/admin.1111/e15867/proxy_actions.htm#i1315299

    The action of routing Options can be used when the context variable $outbound is valid. It can be added to the following actions:

    • Publish
    • Dynamic publishing
    • Publish the Table
    • Legend of service
    • Routing
    • Dynamic routing
    • Routing table
  • Dynamic call VI without FP bug leak

    When a leak memory in our application debugging, I discovered this leak.

    It turns out, is not our problem in this project, but it is nevertheless an undesirable situation.

    I did a sample project to demonstrate the discovery flight.

    The following combinations are possible:

    Remove the (default) FP + do not show FP when it is called (by default) = leaks

    Remove the FP + FP show when it is called no = no leak

    Do not remove FP + do not show FP when called doesn't = no leak

    Do not remove FP + show FP when called doesn't = no leak

    The problem is demonstrated and discovered in LV2011, but also appears in LV2012.


  • Why can I not use a DVR, dynamically called VI

    Hi all

    I created the two screws. Next place in the same folder and open testDVR.vi.

    Run it with bCallMode = false once and once = true and see what happens...

    Why can I access and use the DVR when using the call by reference node and not when you use "Run VI"(resulting in error 1556)?

    As you can see the reference to the DVR is always the same, regardless of how the DVR_generator.vi has been called.

    Thanks in advance

    Christian


  • Dynamic call procedures

    Hi all

    I need to call the procedure based on a single parameter, example

    If parameter1 = Screen1 then call proc1

    screen2... .proc2

    SCREEN3... proc3

    so now

    So, I intend to put this configuration in a table and write another common procedure that will accept the input parameter "x screen" then Setup table query to get the called procedure.

    We must pass parameter to proc1, proc2, proc3... as well. That can also be passed to common proc as one parameter separated by delimiter and can be analyzed in the common procedure.

    as

    common_proc ("screen1",'arg1 |) Arg2 | Arg3');

    It is: procedure has a different number of arguments and data types. How to handle this?

    Could you please give some suggestion for managing this problem or any other suggestion of design to manage.

    Thanks in advance

    It depends on.  What are the data in the XML file?  If you are just using XML to pass different "styles" of entry for the procedure, then again, it's bad design.  The entrance to a procedure should be of a design/style known.  It seems that you're just trying to get some ideas of workarounds to try your solution of ' procedure simple wrapper ", but the solution to have a procedure unique wrapper is wrong when you provide APIs for application developers.  If there is a need to create 5 API of for developers of applications for different purposes, then give the 5.  If it requires 10, gives then 10, 20 or 30 or 50 etc but many are required.  Don't try and create a single API, which forces them to understand 50 ways to encapsulate the parameters to pass, that does no sense and is not easy to manage.

  • Dynamically calling sequence of table column

    Hi all
    CREATE TABLE  DYNAMIC_SEQ
      (
        SEQ_NAME VARCHAR2(20 BYTE)
      )
    
    
    insert into DYNAMIC_SEQ values ('SEQUENCE1');
    insert into DYNAMIC_SEQ values ('SEQUENCE2');
    insert into DYNAMIC_SEQ values ('SEQUENCE3');
    CREATE SEQUENCE  "SEQUENCE1" MINVALUE 1 MAXVALUE 999999 INCREMENT BY 1 START WITH 21 CACHE 20 NOORDER CYCLE ;
    CREATE SEQUENCE  "SEQUENCE2" MINVALUE 1 MAXVALUE 999999 INCREMENT BY 1 START WITH 10 CACHE 20 NOORDER CYCLE ;
    CREATE SEQUENCE  "SEQUENCE3" MINVALUE 1 MAXVALUE 999999 INCREMENT BY 1 START WITH 15 CACHE 20 NOORDER CYCLE ;
    Is it possible to get the nextval of these sequences dynamically. For example, with a loop using dbms_output to show the result? In certain conditions of use the sequnce1.nextval in the other - sequence2.nextval? Is - it possible to store sequences in a table?



    Version:
    Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Prod
    PL/SQL Release 10.2.0.4.0 - Production
    "CORE     10.2.0.4.0     Production"
    TNS for Linux: Version 10.2.0.4.0 - Production
    NLSRTL Version 10.2.0.4.0 - Production
    Thanks in advance,
    Bahchevanov.

    Edited by: bahchevanov on February 8, 2012 12:15 AM

    Maybe NOT TESTED!

    declare
    
      v_res varchar2(2000);
      v_val number := 0;
    
    begin
    
      for i in (select * from dynamic_seq where seq_name like 'SEQUENCE%')
      loop
    
        v_res := 'begin select ' || i.seq_name || '.nextval into :v_val from dual; end;';
    /*
        v_res := 'begin :v_val := ' || i.seq_name || '.nextval; end;';
    */
        execute immediate v_res using out v_val;
    
        dbms_output.put_line(v_val);
    
      end loop;
    
    end;
    

    Concerning

    Etbin

  • The use of reflectors to dynamically call objects

    Hello

    I have a class that has two methods and each method takes two parameters (method 1 takes entire / 2nd takes Double) and returns and integer. I would like to call these methods using Java.Reflectors, so I could do the instantiations of the dynamics and the method call.

    I generated a class as shown experimental test harness below...

    *========================================================*
    public static void main(String[] args) {
            try {
                // Getting a Class available in the Pachage to Class Instance
                Class cls = Class.forName("testreflection.ClassMethods");
                
                // Instance of Current Class
                Main o_Obj = new Main();
                
                // Get the declared methods in the Class instand "cls"
                Method[] m_Methods = cls.getDeclaredMethods();
                            
                for(int i=0; i<m_Methods.length; i++){
    
                    // Obtain the parameter types of each method
                    Type[] typ_MethodParameterTypes = m_Methods.getGenericParameterTypes();

    // Int array for Random Integer inputs as Parameters
    int[] i_Prameter = new int[typ_MethodParameterTypes.length];
    Random r_RandomInt = new Random();

    for(int j=0; j<typ_MethodParameterTypes.length;j++){
    // Just Display the Input Type
    System.out.println(typ_MethodParameterTypes[j].toString());

    i_Prameter[j]=r_RandomInt.nextInt();
    //Display the Input value to the above type
    System.out.println(i_Prameter[j]);
    }
    // Trying to invke the 1st Method in the Mehtod array
    m_Methods[0].invoke(o_Obj, i_Prameter);
    }
    } catch (IllegalArgumentException ex) {
    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    } catch (InvocationTargetException ex) {
    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    //} catch (InstantiationException ex) {
    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    } catch (ClassNotFoundException ex) {
    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }

    }
    *==============================================================*
    
    
     THen I am getting the following error.... Can any one help me...
    
    
    int
    -1680302169
    int
    -1149051431
    Mar 30, 2011 11:02:53 AM testreflection.Main main
    SEVERE: null
    java.lang.IllegalArgumentException: object is not an instance of declaring class
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at testreflection.Main.main(Main.java:52)
    
    Edited by: EJP on 30/03/2011 12:17: added the code tags. Please use them.
    
    Edited by: JLearner on Mar 29, 2011 6:18 PM
    
    Edited by: JLearner on Mar 29, 2011 6:20 PM                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                

    m_Methods [0] .invoke (obj, i_Prameter);

    m_Methods [0] .invoke (obj (Object []) i_Prameter);

    Complicated to explain why a beginner.

    As Kayaman, I'm curious to know the assumptions and no error check here.

Maybe you are looking for