Asynchronous call vi path

I am trying to implement a splash screen that calls my main VI asynchronously and displays messages while the VI loads.  It all works properly in development system but it's not the case as an EXE.  This is my first attempt at calling a VI like this so i am sure that i am missing something simple. 
See the attached image.  The static reference points to a location on my server but I want to run the VI that is "Always Included" in my EXE build, not the VI from the server.  The VI Path returned here is a combination of the server path and the build location which is obviously not correct. 
What's really strange to me is that the main.vi does actually run, even though the path is wrong.  The splash screen shows messages received from main but when it gets to the loading config settings, it fails because the vi path is c:\program files\tester\main.exe\z\labview\tester and it can't find my INI file.  How do i load this VI dynamically and still be able to pass my notification refnum into it for my splash screen and return the proper VI path?  I tried removing the path property node below and just adding a path constant with main.vi as the value.  But it seems to be getting the path from the strict type reference (which i understand is for type only). 
Solved!
Go to Solution.

You don't want to use a static VI reference - that defeats part of the purpose of having a splash screen! A static VI reference causes the referenced VI to be loaded into memory, and usually when you use a splash screen, you're expecting that it will take a while to load that VI and you want something visible on the screen while you're waiting. Instead of using a strict VI reference, create a constant from that reference, which will give you a VI type without referring to any specific VI (a bit like if you create a reference to a control, then create a constant from that reference). Although, if you do use a static VI reference, you can avoid all this by wiring a string containing "main.vi" instead of a path (Open VI Reference will also accept a string input). The fact that you're using a static VI reference, instead of a type specifier, explains why the Path property is valid.
The "funky" path is actually to be expected. LabVIEW now maintains relative paths within an executable, which allows multiple VIs with the same name to exist within an application (a requirement for supporting LabVIEW classes). A side effect is that since your VI is on a separate drive, you're getting what looks like an absolute path embedded within the EXE. This is now the normal behavior. If you don't want that, check the build options box that says "Use 8.x file layout."

Similar Messages

  • How to move files in background (asynchronous call)?

    Hello
    I would like to make an an Asynchronous call to the Move.vi for moving files as a background process.
    I am having the following problems:
    - The static VI Reference as input to the Open VI Reference function asks for a path to the VI to be called, but I can't find it. Where exactly is Move.vi located?
    - The Type Specifier VI Refnum node accepts VIs via drag and drop, but only from an explorer window, not from the LabView VI palette. Again, I need to know where to find Move.vi. Or is there another way to specify the connector pattern?
    It all works, if I call Move.vi from within a wrapper VI (because I know where to find that), but for the sake of simplicity I would like to avoid that step.
    I'd appreciate any suggestions, also alternative approaches for moving files in the background.
    Sebastian

    Move is not a VI, but a primitive, so you can't call it like that. As you've seen, the wrapper method works.
    Try to take over the world!

  • Asynchronous call deployment

    I need to deploy an executable to a customer's computer and for the first time I have the need to use  an asynchronous call in my program I am not sure how i am going to keep the file path to the "Open VI Reference" valid after I build and deploy the application.  The Obvious manner would be to use a configuration file to allow me to set the path independently of the LabVIEW Application.  However, when you include A VI in the "Always include" it is not An EXE thus not include as a file in the build folder, making it had to reference on the host computer.  
    Some educational tips on how to do this would be very help full for learning how to deploy this application
    Attached is a code snippet of how i am currently stating an asynchronous call
    Thanks
    Mark R.
     

    Actually, what you're referring to is a "type specifier VI Refnum", which is only used for type, but doesn't have any other information about the VI really. I've run in to bugs before where I changed the connector pane on a VI, but the type-only references I had in my code didn't update because there's no link to the VI, just the pane...
    So really there are three different forms of a VI reference. Normal, Strict, and Type-only. Strict encapsulates both the normal reference and the type-only reference.

  • Is there a way to process multiple asynchronous calls individually (instead of all at once)?

    Hello,
    I have a function that saves a record using a RPC call (asyncToken with a new responder).  When I save an individual record (pressing "s" key), it works fine.  However, when I attempt to save multiple records simultaneously (bound to "v" key) (I have a for loop running through the selectedItems in the datagrid), it performs strangely.
    For anyone who hasn't experienced this, the successive calls seem to get stacked (literally - i.e. using a stack) and processed at the end of all operations in that block of code (I had trace functions before and after the call that were executed before I saw the result confirming this).
    What I would like to do is to simulate multiple AsyncToken usages with a single click, but still have them all occur individually since right now, the function saves the last item in the stack 8 times instead of saving each of the 8 items separately.
    OR
    Is there another means of RPC using something like "interruptToken" as opposed to asyncToken?  (In most other areas I've seen, asynchronous calls are performed as interrupts and dealt with immediately, thats why this procedure confused me for a bit)
    Thanks in advance,

    The second paragraph you posted is definitely worthwhile - still figuring out some of the inner workings of Flex calls (not just RPC stuff) that I use as I am pretty new to flex.
    I don't have the code with me at the moment, but I think I have to use separate calls to the save function.  My situation is this (and I plan on updating with code on Monday if necessary):
    I have a datagrid that is populated using a single RPC (which is loaded into an arrayCollection first then the datagrid).  Changes are made to the datagrid through a copy/paste function that I made, but these changes are only reflected on the datagrid (i.e. not in the dataprovider).  When the user hits "save", the selected line (selectedItem actually - i.e. not an index but the object itself) is passed to another class which contains a modified version of my "modify data" function (brings up a dialog after choosing a given line allowing editting/validation of certain fields regarding the selectedItem).  This changed version of "modify data" is then called and immediately closed effectively saving this record (without allowing the user to alter fields - so they don't have to hit save twice).
    With the copy/paste function, I make all of these changes en masse and then have a loop that goes something like
    for each (_object:Object in myDatagrid.selectedItems)
         callSaveFunction(this, _object);
    which ideally loops through the data and saves each item that has been changed.  If there is a way to save all of the data in the datagrid simultaneously, I would appreciate a bit of help there (perhaps dealing with the bindings - right now I have the object I save as the destination and the source is myDatagrid.selectedIndex.[field name]).
    Good to know about the other stuff, though - my understanding was a little bit lacking before

  • How can we tell if a VI is already running before calling Start Asynchronous Call?

    The new Start Asynchronous Call node is awesome for spawning multiple instances of reentrant VIs.  However, I've stumbled a bit in using it for non-reentrant VIs.  The old practice of using the "Run VI" method would allow us to check the Execution.State of the VI before invoking the method to run it.  That way if the State was Running or Run Top Level, we could skip the invoke node and just use a property node to open its front panel.  WIth the Start Asynchronous Call node, it looks like we have to use a strictly typed static VI reference, and when we open the VI reference, the VI gets reserved and its Execution.State = Running.  So, how can I tell if it is not just reserved by the thread but actually executing before making a redundant Start call?
    By the way, the redundant Start has interesting behavior.  It will actually cause the targeted VI to be executed again after it stops.  Even if you hit the Abort button on the target VI, it will immediately execute again and again equal to the number of times the Start Asynchronous Call node was run.  There's nothing wrong with that, and I suppose the simple answer is to just go back to using the old "Run VI" method.  It's just that the ability to wire up those inputs directly to the connector pane is so nice.  Perhaps I am missing something obvious.  Oh, I am referring to the Call and Forget mode (0x80).
    Thanks,
    Dan
    Solved!
    Go to Solution.

    Just throwing it out there, I know I'm a year.5 late on this but if it's a psuedo-modal dialog or some other window that you only want a single instance visible at one time, you can check the FP.State property on the strictly typed vi reference. If it's loaded and visible to the user it will be "Standard", if it was closed or not opened prior then the state will be "Closed".
    I think the standard behavior of serializing execution on another thread would be great for doing a pre-set number of iterations with a sub vi in a non-blocking sort of way but for sub vi's meant for UI interaction checking FP.State works.
    Philip
    CLD

  • Notify an application user that an asynchronous call of a bi publisher report has been completed

    Hi experts,
    We have an ADF application (11g) from where we call BI Publisher (11g) reports by using bi publisher web services.
    I have the following 2 requirements:
    Run the reports asynchronously
    Notify each user that the report which has been asynchronously called has been completed.
    My thought was to use the scheduleReport web service which is asynchronous by default.
    My problem is how to notify only the specific user using "http notification" that the report is ready.
    http://docs.oracle.com/cd/E28280_01/bi.1111/e22259/reporttriggers.htm#BIPDV008
    Can you please help me on this?
    Regards,
    Dimitris

    I've converted the Blob to a Clob but still can't get it to appear in the BI Report. It shows up in the XML file as a bunch of text character, but in the report if I use the fo: instructions it remains blank, and if I don't, it shows the same text data that is in the XML file.
    Perhaps BI Reports aren't meant to show database images? Is there another tool I can use instead (data is in APEX 4.0) 11g.?

  • Asynchronous call in OSB

    Hi, I was trying to call a business service in an asynchronous way. I used publish action but I can´t get the response of the service. It seems it just work with one-way services like a file adapter. Any help please.

    When you say you are making an asynchronous call, then you would not care about the response.
    If you are looking for a response from the service then you should use a service callout instead.
    Let me know if my understanding is incorrect.
    Thanks,
    Patrick

  • SOAP Receiver Adapter (Asynchronous Call)

    Hi All,
    Scenario is  Proxy to Webservice asynchronous call.
    Scenario configuration is done as follows.
    1) Imported the WSDL and using as a asynchronous inbound interface.
    2) SOAP receiver channel is configured with the target URL & soapAction as given in the WSDL as (soap address & soap Action).
    3) Configured the proxy server details as required.
    SOAP channel is successfully sending the message to the application as DLVD.
    But the issue is target application  not receiving the data. What could be the reason ? I am wondering , i have tried with the external tool like Altova XML Spy & SOAP UI  sending data to the webservice & it's  working fine.
    Please suggest me if anything which can help to resolve this issue.
    Thanks
    Ashwin

    In this case you can do the following:
    1. start your tcpmon or TCPGateway, add there a listener e.g. on port 9090
    2. configure the target URL in TCPGateway for this listener
    3. configure the target URL in your XI SOAP Receiver Adapter to http://<ip of TCPGateway>:9090
    4. now execute the scenario again in XI
    (make sure XI can reach your TCP Gateway, e.g. check Proxy)
    I have used this method successfully for error tracking. In some cases it is necessary to add 2 listeners in TCPGateway and route e.g. 9090 to 9191 and from there to the end (I did not analyse why).
    Then you will be able to see what XI is really sending and you will see the full response from the partner side. You can then compare the XI request data with those which are sent via soapUI. This should give a clue about the problem.
    CSY

  • Unexpected loop behaviour with asynchronous call

    I am having trouble with loop behaviour when using an asynchronous call.
    I am building an application to record simultaneously temperature (NI USB-TC01 thermocouple), displacement (DC voltage, read from an Agilent 34401a) and resistivity (using a Keithley 2400 sourcemeter).
    I am using a voltage sweep function on the Keithley 2400 to alternate current direction in a sample and measure the voltage drop - this is a common technique for eliminating thermal emf from resistance measurements. But what you need to know is that I set the number of current cycles I want and then wait for the instrument to measure and return the meausurements - up to 50 samples, which takes nearly 30 seconds. With the other two measurements, I have to programmatically call a measurement vi for each sample I want.
    I have set up my application to asynchronously program the resistivity measurement and then wait for the response, and I want to in parallel measure temperature and position until the resistivity is done. I then want to record the mean and standard deviation for each signal. I used an event structure to interrupt the temperature and position measurements when done.
    The problem I am running into is that after the first resistivity measurement is completed and I go to do the second one, the loop that measures temperature and displacement only runs twice, so I only get two samples, regardless of how many resistivity samples I want to collect. For example, if I want 50 resistivity samples at a time, the first iteration will measure rougly 40 samples of temperature and displacement, but any subsequent iterations will only measure twice.
    I know this is probably overwhelming to understand the operation, but can anyone help? I have attached my code ('Delatometer') as well as a test vi I built that uses the same structure but has no interactions with instruments ('asynchronousCall').
    The
    Attachments:
    Delatometer.zip ‏221 KB
    asynchronousCall.zip ‏29 KB

    I forgot to mention...the test vi that I uploaded executes as expected, so I am thinking that maybe its an issue with the instrument calls? I also found that if I run the Delatometer program in 'highligh execution mode' it runs properly, and it is my understanding that in 'highlight execution mode' there is no multi-threading.

  • Problem about asynchronous call: subVI front panel doesn't pop up when called.

    Dear All,
    I'm new to LabVIEW, and this is the first time I try to use the asynchronous call.
    I'm using LabVIEW 2011.
    I want to build a directory for several VIs, and it should allow users to open more than one of the VIs at the same time by pushing the buttons. Before building this directory, I simply tried to use asynchronous call to call a VI form another VI, but found a big problem.
    I followed the steps in the help file, created a strictly typed reference, set the option to x80 because I don't need the return. When I run it for the first time, it worked fine: the subVI popped up and run. Then I closed the subVI. But for the sencond time and on, when I run the caller VI, the subVI didn't pop up, instead it seemed to run silently on background because when I manually opened it from the file I found it running. Besides, I didn't find any option like "show front panel when called" of the asynchronous call.
    The caller VI and subVI are attached. The address of subVI in caller VI should be changed accordingly.
    What should I do to make it work properly? Thanks very much for  any idea!
    Solved!
    Go to Solution.
    Attachments:
    asynchronous_call.vi ‏8 KB
    boolean.vi ‏7 KB

    Jeff·Þ·Bohrer wrote:
    A better approach is to set the vi properties programaticly like this:
    Jeff, you will be happy to know that I used this tactic in full force on a project recently (lots of dialogs in this program).  Not sure how many LabVIEW reboots it has saved me from.  Reuse VIs made it even easier to do.
    There are only two ways to tell somebody thanks: Kudos and Marked Solutions
    Unofficial Forum Rules and Guidelines

  • Asynchronous call to web servie using pl/sql

    1) How do I make an aynschronous call uisng pl/sql. I am currently using utl_http.
    But it is expecting me to get repsonse using utl_http.get_response.
    Is there anyway I can make asynchronous call to web service? Please give me examples if any.

    Web services are NOT asynchronous as the HTTP application protocol is not asynchronous. A web service cannot (as an sync callback event) initiate a call to the web browser (client app) - as the web browser does not have a tcp listening endpoint. The web service must respond using the EXISTING tcp session established via a connect() call from the browser.
    PL/SQL code executes in a dedicated or shared server process. Execution is serialised. So asynchronous calls are not supported and non-existent. Again, async processing requires some from of notification (callback event, message handler or signal interrupt handler) to inform the main process  (while it is executing code), that the async call has completed.
    And this does not exist in PL/SQL processing for very good reasons. (Oracle would have been one of the most unstable products on the market if it did support async PL/SQL processing, as 99% of developers would not understand how to use it correctly, and would have severely violated the fundamental concurrency and MVCC principles)
    What can be done via PL/SQL (and SQL) is parallel processing - not to be confused with async processing. The API in PL/SQL to use for that is DBMS_PARALLEL_EXECUTE. You can also self roll this using DBMS_JOB or DBMS_SCHEDULER.
    No default IPC exists for inter process communication between parallel processes. If IPC is needed, it needs to be manually coded using a standard SQL table (where row locking provides for mutexes and semaphores), or something like DBMS_PIPE.

  • Error handling / logging with asynchronous calls

    Hi,
    I want to log every error my app might throw. I thought it would be sufficient to surround either the launch method or the start method with a try...catch. But it doesn't work as excepted.
    If an error occurs in an asynchronous call, e.g. in a button click, the exception is never caught.
    Do you have an idea, how to solve this?
    Example:
    import javafx.application.Application;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.layout.VBox;
    import javafx.stage.Stage;
    public class TestApp4 extends Application {
        public static void main(String[] args) {
            launch(args);
        public void start(final Stage stage) throws Exception {
            try {
                final VBox root = new VBox();
                Button button = new Button("Click");
                button.setOnAction(new EventHandler<ActionEvent>() {
                    @Override
                    public void handle(ActionEvent actionEvent) {
                        int i = 0;
                        int a = 5 / i;
                root.getChildren().add(button);
                Scene scene = new Scene(root);
                stage.setScene(scene);
                stage.show();
            } catch (Exception e) {
                // do logging here
                e.printStackTrace();
    }

    I'm not 100% sure how it works, but what I am pretty sure is that these Exceptions in EventHandlers are caught by JavaFX itself inside the JavaFX thread. They have to, because if they let the exception bubble up to the top, the FX thread would end (and with it, all response in the UI). It is probably caught at the level where Events are triggered somewhere (my guess is inside the QuantumToolKit).
    Anyway, these exceptions are printed to System.err -- if you can redirect that stream to a log file or whatever you can have them all in one place. The error stream can be set in your application simply by calling System.setErr().
    Note also that exceptions occuring in a Task are stored in the exception property -- sometimes these can be hard to find as they are put there silently -- you'll need to check your Tasks for exceptions and print them.

  • What is a gateway proxy?? what are synchronous and asynchronous calls?

    bapis are rfc enabled. but are there any other rfc's  available in sap? what is a gateway proxy?? what are synchronous and asynchronous calls?

    Hello:
    Lets st art at the beginning.
    There are NO documented viruses that affect a Mac running OS X - none (there are instances of Malware).
    Gateway GEO-IP/BOTNET Alert
    This is a Youtube video that explains what you have (I assume you installed it somehow) on your computer:
    http://www.youtube.com/watch?v=JwRi2me2hSk
    For openers, I would uninstall any A/V software you have put on your system.  It is certainly possible that that junk has put some other stuff on your computer.
    I'm also afraid my computer might have been hacked?
    Highly unlikely.
    Barry

  • Does JAM help making synchronous and asynchronous calls to CICS

    I want to integrate mainframes and j2ee application. Does JAM provide synchronous and as well as asynchronous call to CICS from j2ee and vice-versa
              

    I want to integrate mainframes and j2ee application. Does JAM provide synchronous and as well as asynchronous call to CICS from j2ee and vice-versa
              

  • Asynchronous call with OO4O

    Hello,
    I have a problem. The asynchronous call worked faultlessly under Oracle DB 10.2 and Oracle client 9.2. After the rearrangement to Oracle client 10.2 the VB6 function cannot be ended correctly. If I install the call OraStmt.Cancel explicitly, the function gets stuck directly at cancels. The Stored Procedure is very extensive. It consists from cursors and Object type.
    Can one help me at this problem?
    Many thanks in advance!
    Benedikt Taube
    Important data:
    Development environment:     VB6
    OO4O:                     10.2.0.2.20
    Oracle Client:               10.2.0.1.0
    Oracle Net:               10.2.0.1.0
    Oracle-DB:                10.2
    Function (...)
    Set colCrefos = Nothing
    Set colKapitel = Nothing
    Set colEntscheider = Nothing
    lngRetCode = 0
    objConnection.DB.Parameters.Add "RET", ORACLE_KO, ORAPARM_OUTPUT, ORATYPE_NUMBER
    objConnection.DB.Parameters.Add "CREFOS", Null, ORAPARM_OUTPUT, ORATYPE_VARRAY, (SCHEMAOWNER & ".CCRF_ORGANISATIONS")
    objConnection.DB.Parameters.Add "KAPITEL", Null, ORAPARM_OUTPUT, ORATYPE_VARRAY, (SCHEMAOWNER & ".CCRF_KAPITELS")
    objConnection.DB.Parameters.Add "ENTSCHEIDER", Null, ORAPARM_OUTPUT, ORATYPE_VARRAY, (SCHEMAOWNER & ".CCRF_ENTSCHEIDERS")
    objConnection.DB.Parameters("NAME").Value = objTools.String2Varchar(strName)
    objConnection.DB.Parameters("HAUSNUMMER").Value = objTools.String2Varchar(strHausnummer)
    Set OraStmt = objConnection.DB.CreateSql("Begin :RET := " & SCHEMAOWNER & ".CRF_SUCHE.ANSCHRIFT( :RETCODE, :NAME, :RECHTSFORM, :PLZ, :ORT, :STRASSE, :HAUSNUMMER, :CREFOS, :KAPITEL, :ENTSCHEIDER); end;", ORASQL_NONBLK)
    On Error GoTo err_asynchron
    Dim stat As Long
    stat = OraStmt.NonBlockingState
    While (stat = ORASQL_STILL_EXECUTING And Me.Cancel = False) 'ORASQL_SUCCESS
    DoEvents
    stat = OraStmt.NonBlockingState
    Wend
    err_asynchron:
    err.Clear
    On Error GoTo Anschrift_Err
    'OraStmt.Close
    'Set OraStmt = Nothing
    If Me.Cancel = True Then
    Anschrift = True
    Else
    lngRetCode = objConnection.DB.Parameters("RETCODE").Value
    If lngRetCode = ORACLE_KO Then
    Call err.Raise(objConnection.DB.LastServerErr, sFnc, objConnection.DB.LastServerErrText)
    End If
    Anschrift = IIf(objConnection.DB.Parameters("RET").Value = ORACLE_OK, True, False)
    If Anschrift = True Then
    Set colCrefos = objConnection.DB.Parameters("CREFOS").Value
    Set colKapitel = objConnection.DB.Parameters("KAPITEL").Value
    Set colEntscheider = objConnection.DB.Parameters("ENTSCHEIDER").Value
    End If
    End If
    Anschrift_Ex:
    For i = 1 To objConnection.DB.Parameters.Count
    objConnection.DB.Parameters.Remove 0
    Next i
    Exit Function
    Anschrift_Err:
    Resume Anschrift_Ex
    End Function

    Hi Babu,
    That is the problem with AltovaXMLSPY, it always expect a resonse..and if don't get one it will shown empty headers..
    check moni and see if you have only one entry then your scenario is working and it is working in async mode
    Regards
    Suraj

Maybe you are looking for