VISA Session BeginWrite Waits

Based on the VB.NET SimpleAsynchronousReadWrite example, I'm able to perform BeginRead for my VISA session (TCP/LAN instrument, VXI-11). As expected, BeginRead returns immediately and then my callback gets called when the instrument responds or when a timeout error occurs. I'm even able to use the session Terminate method to abort the operation using the IAsyncResult returned by BeginRead.
But calling BeginWrite doesn't return immediately. It waits for the operation to finish or time out. My callback does get called and the operation does execute and complete properly but the overall behavior isn't async. What is going on?
I'm using Measurement Studio 2013 for Visual Studio 2010, NET Framework 4.

For VXI-11, a VISA session BeginWrite turns into a RPC device_write request to the instrument's core port. The instrument is supposed to respond with a device_write reply. You can see these packets using a protocol analyzer like Wireshark. What should happen is BeginWrite should wait asynchronously (return immediately) for the device_write reply, allowing the host to perform other processing (Windows GUI etc). During this time, I should also be able to use the VISA session Terminate function to cancel the pending write (host sends RPC device_abort request to instrument's abort port).
For VISA async reads, BeginRead ends up sending a RPC packet device_read request then asynchronously waits for the instrument to send a device_read reply. Unlike BeginWrite, BeginRead does return immediately allowing the host PC to do other things. If the instrument fails to send the device_read reply, VISA correctly waits in the background and allows my application code to send VISA terminate (correctly sends packet to abort port) or terminates on its own due to a timeout.
So it appears BeginWrite doesn't implement the correct async behavior for the initial RPC device_write request but instead synchronously waits for the device_write reply. I would like BeginWrite to have the same behavior as BeginRead.

Similar Messages

  • Error in using TCPIP/Inst​r class to open a VISA session

    I use the TCPIP/Instr class session to open a VISA session to Agilent 86140B Optical spectrum Analyser and I get an Error - VISA open in Appln.vi.Help me to fix this problem.
    I am able to access the instrument on LAN through a Telnet session.
    Vijayalakshmi.
    Attachments:
    OSA_Close.vi ‏28 KB
    OSA_Reset.vi ‏27 KB
    OSA_Initialize.vi ‏63 KB

    Thanx for the reply.The instrument is VXI-11 compliant.The error I am getting is Instrument timeout -1073807339 (BFFF0015) and I am using LabVIEW on Linux.
    I have another problem.I am able to see the instrument using a Telnet session but not using http//192.168.10.2 on a web browser.It is giving an error that the host may be down and try some time later.

  • Lot of sessions with wait event - jobq slave wait

    Hi All,
    My db version is 10.2.0.4.0
    I have scheduled jobs through dbms_scheduler with repeat_interval of 20 mins(this for refresh of mviews).
    Now the job is in running state for a long time. then i checked the sessions..
    I have five session with wait event - "jobq slave wait"
    I check job_queue_parameter - 10
    select count(1) from dba_jobs;
    COUNT(1)
    8
    Now the job is in running state for a long time...
    Can someone help me how to proceed...
    Thanks,
    Suresh S.

    Post Operating System (OS) name & version for DB server system.
    Post results of
    SELECT * from v$version
    does following SQL return any rows? If so, they point to problem area.
    SELECT DECODE(request,0,'Holder: ','Waiter: ')||sid sess,
    id1, id2, lmode, request, type
    FROM V$LOCK
    WHERE (id1, id2, type) IN
    (SELECT id1, id2, type FROM V$LOCK WHERE request>0)
    ORDER BY id1, request
    /

  • Visa session problem

    Hello,
    I am quite new to LabView. I have to control a Nikon microscope TE2000E with a RS-232. Before writing the program I have opened a VISA session with MAX (basic I/O) to check that I can communicate with the microscope. But when I type a command (e.g. [r][S][P][R][CR], [r]=status request, SPR = function, CR=delimiter) the microscope send an error. I think that this is because I don't write the question in the correct format. Does anybody know the correct format for sending commands?
    Thanks in advance
    Raimon

    Raimon wrote:
    Hello,
    I am quite new to LabView. I have to control a Nikon microscope TE2000E with a RS-232. Before writing the program I have opened a VISA session with MAX (basic I/O) to check that I can communicate with the microscope. But when I type a command (e.g. [r][S][P][R][CR], [r]=status request, SPR = function, CR=delimiter) the microscope send an error. I think that this is because I don't write the question in the correct format. Does anybody know the correct format for sending commands?
    Thanks in advance
    Raimon
    Hi Raimon
    I am in a similar situation, new to labview and I have to set up a system to control the TE2000E via Labview. I was wondering if you had any luck getting things going, and if you could pass along any words of wisdom or sample vi's.
    Thanks very much,
    Jason

  • How work the Visa session?

    I'm working with the Visa session. When I receive from an external processor the hex value 0X0A then suddenly aboard the reading instruction. When I want to receive the value 0XAA0A55 then I receive only 0XAA0A. Why?

    Hi
    defuflo is right. The read ends due to the termination character. If you do binary serial transfer you have to do the following:
    You have to set the "Termination Character Enable" property to false. In LV 6.0.2 use a property node which input comes from the "duplicate VISA resource name" output of the "VISA configure serial port", in LV 6.1 it is a parameter to that function.
    Second use a property node to set the "Serial Settingserial End Mode For Reads" to "None".
    Waldemar
    Waldemar
    Using 7.1.1, 8.5.1, 8.6.1, 2009 on XP and RT
    Don't forget to give Kudos to good answers and/or questions

  • Stateless Session EJB "Wait???"

    I need to let a Stateless Session EJB wait until 2:00 AM before it runs. How can I do that? I don't want to use a loop since it will eat up all system computing resource.
    Thanks
    Kenny

    Is that a way to code it? I don't want to use existing class. I need to control the EJB itself to "wait" for some time to run.
    Thanks
    Kenny

  • Driver visa session looping issue

    Hi,
    This is the first time I've ever setup a loop with a visa driver session in it. I am attempting to collect an array of flux data. The array indexes correspond to physical (x,y)  locations on the item i'm measureing the flux of. This is why i need the data to be read in as a 5x7 array of flux. The 5x 7 matrix is collected 3 times (at 3 different z heights). However, I can't figure out why I am getting three 6x7 matrices instead of a 5x7. I can't tell if it is my shift register setup, where my visa session is implemented, etc. I just can't figure it out.
    Could someone look at my attached code ( it's pretty simple, just 3 nested for loops with the visa session inside, and that data is fed out to 3 matrices, which is then stripped down further which can be ignored) 
    Thank you very much,
    chelsea
    Solved!
    Go to Solution.
    Attachments:
    visa loop test1.vi ‏31 KB

    First of all, I don't see a point in any of those sequence structures.  All they are doing is creating clutter.
    Secondly, why are you appending the second to last results to the whole results?  That is where your extra index is coming from.  Get rid of that shift register and the Build Array.
    There are only two ways to tell somebody thanks: Kudos and Marked Solutions
    Unofficial Forum Rules and Guidelines

  • Do we still need to close VISA sessions?

    I know it sounds like a silly question but do we?
    Back in my early days (LabVIEW 5.1) I used to have a set of favorite VI's for my instruments that opened a VISA session, performed a task (like taking a measurement), then closed the VISA session. I used these a lot as I could drop them in and throw a program together without having to worry about wiring the VISA sessions. Fact this speed of test development really sold our company on LabVIEW...
    Well later on I was having an issue with a larger program crashing. After spending some time on the phone with a NI Engineer troubleshooting he told me that the constant opening and closing VISA sessions was not a good idea and could be the cause of my issues. So I rewrote the program opening a VISA session once for each instrument and closing it at the end. This cured the crashing and forced me to abandon my library of drop-in VI's that had served me so well for so long, totally changing the way I was writing my programs.
    Now fast forward to a couple years ago when my company made the jump from Labview 5.1 to 8.0 (that was a big step) now we are at LabVIEW 2009
    Among the many other changes from 5.1 to 8.0 most notably VISA had changed, I/O wire types, VISA Open was gone, VISA Close was deprecated, all my old programs have the (old) tag on the VISA blocks... AND there was a Automatically close VISA sessions in the advanced options
    The fact that VISA Close was deprecated kind of leads me to believe that we are being guided to used the auto-close option. It certainly makes programming faster not having to drag the VISA wires out and close them... But often I still do just out of habit.  
    This also has me wondering if we even still have to open a VISA session and wire it all the way through?
    So take a look at the attached overly simplified examples and explain what is the "best method"?
    Attachments:
    VISA.png ‏64 KB

    When the option is checked, VISA sessions are only closed automatically when your VI stops running.  My understanding, based on this, is that your two auto-close VISA examples are identical.  The session is opened the first time a resource is used and remains open until it is explicitly closed or until your VI stops running (if the automatically close VISA sessions option is checked).  If you don't automatically close VISA sessions and you do not close them explicitly, they will stay open even when your VI is not executing, which means they will open faster when you restart your code but will not be available to other applications.  Of course, exiting LabVIEW closes all VISA sessions.

  • Opening multiple visa sessions

    I'm having problems with opening multiple VISA sessions for communicating with 4 HP-34401A multimeters in LabVIEW 6.1. If you have a little bit of time, please take a look at what I have here to see if I'm doing something wrong.
    Thanks
    Attachments:
    HP34401_Test.vi ‏108 KB

    I have made a look at your VI. I don't have the driver for the instrument I couldn't go into the subVIs and its documentation and I could not change it for you.
    1. You initialise only 2 of the 4 meters. Initialize all meters.
    2. In sequence 0 you close the session to the meter. In the next loop iteration it will not measure as you intended. Delete the "VISA Close" function.
    3. The stop button would cause the while loop to exit. But your handling is a little bit complicated. Do following:
    Delete the "not" and case where the stop terminal is connected. Wire the stop terminal directly to the termination terminal of the while loop. With the context menu set it to "stop if True". Wire the VISA sessions to the right border of the while loop and connect t
    hem to the "VISA Close" function.
    Waldemar
    Waldemar
    Using 7.1.1, 8.5.1, 8.6.1, 2009 on XP and RT
    Don't forget to give Kudos to good answers and/or questions

  • Open VISA Session

    Hi to all,
    I'm newbie with Labview 8.5, I'm viewing some example to connect serial port with VISA blocks. I see that these examples use a VISA Resource Name control to define the resource (example selecting COM1) but after they don't use Visa Open block to open a VISA session with the device, but they use directly the sequence "VISA write - VISA read - VISA Close" blocks. Why don't they use VISA open session to open a session with device?
    I read in help that VISA Resource Name contains some informations on resource and it maintains VISA session also, instead VISA session is a unique identifier, I think that when I create new Visa Resource name Control, Labview automatically open a session with this resource, so it isn't necessary to use VISA Open block to create the session, isn't it?
    best regards

    It's not correct to say that just dropping a resource control itself on the front panel or diagram opens a session. The resource is automatically opened when calling VISA function (i.e. a write or a read), if the resource was not explicitly opened with the VISA Open function. You can see this yourself. Put just a resource control on the block diagram, select the resource and run the VI. Click the arrow on the control and look at the resources. Now, wire a VISA Write to the control, run the VI, and look at the resources. You will now see a little icon next to the resource you selected. This indicates that the resource is open. The automatic opening of a resource was a change made to VISA several years ago and you will still see the VISA Open in instrument drivers. It's not a bad idea to always use the VISA Open function. For serial, you would put it before the VISA Configure Serial Port.
    Attachments:
    Open Resource.PNG ‏4 KB

  • Err Session is waiting for a message

    Dear Experts,
    We have got the following error in our System Log.
    ERR: 37225: SAP-Basis System: Session is waiting for a message
    I have checked other logs and could not find the cause for the above error. If you know, please let me know.
    Thanks & Best Regards
    L Raghunahth

    Can you please explain how did you solve this? Im having the same problem

  • How are VISA sessions managed by executables?

    I have noticed that VISA sessions opened in the development environment (Labview version 6.0.2) do not show up in the VISA I/O reference control of compiled executables and visa versa. I assume that each EXE has its own memory space for open VISA sessions. Is it possible to get separate EXE's and the development environment to use the same VISA memory space so that all applications and uncompiled VI's show the same open VISA sessions?

    This answer, while correct, doesn't address the issue of some VISA classes and how Labview addresses open VISA sessions. It is quite correct concerning the listing of available resources, that is not the nature of my problem. The heart of the matter is the Open VISA sessions and how they are returned by the "Open VISA sessions.vi" vi in the vi.lib utilities. Also, the VISA reference control does, as you say, display currently available resources (for some classes), but it also displays currently open sessions below a dividing line for those resources not usually displayed.
    The best example of this is for the TCP/IP class. Resources of this class are not displayed unless a session for them has been opened.
    I have written and compiled an executable tha
    t opens a VISA session for a TCP/IP resource. After opening it, the session is displayed in the executable's VISA resource control below a dividing line that separates it from the available serial and GPIB resources. If, however, I have an uncompiled VI with a VISA control open in the development environment at the same time, the open session is not displayed in that VI's resource control. If I run the compiled executable as an uncompiled VI in the development environment along with other VI's containing VISA resource controls, the open TCP/IP session is displayed in all VI's. The same holds true for the "Open VI sessions.vi". Sessions opened by compiled VI's are not returned by this subVI when it is run from outside the executable.
    As I stated before, it appears the executable creates its own separate memory space for listing open VISA sessions.
    I would like to create a small executable that logs in to TCP/IP resources and makes those sessions available to other VI's that ar
    e either uncompiled and running in the devel environment, or are running as separate executables.
    Thanks for your comments
    Steve

  • VISA session to an instrument handle

    I tried to aquire data from TEKTDS 220. I use "set condition" to "aqu
    status",
    then "read waveform" subVIs. So there is a problem: I need to connect the
    "VISA
    session" to "instrument handle", but it doesn't work. Could you please tell
    me
    how to connect these two type of wires?
    Thanks a lot!

    It looks like you're trying to mix the tktds2x0 IVI driver with the tktds2xx LabVIEW native driver. The IVI driver has an "instrument handle" which is an IVI session, and the LabVIEW driver has a "VISA session". The two wires are not compatible. You should either use just the IVI driver or just the LabVIEW driver.

  • Open VISA sessions (including duplicates​)

    I would like to obtain a list of open visa sessions. I found this knowledge base article which should work, however when opening duplicate sessions (e.g. "COM6 (1)") the list contains empty entries or multiple COM1 references.
    Please try the attached vi to see the effect; on my system the visa resource name control shows COM1 & COM2 (default system ports), COM6 & COM12 (2 USB-serial converters) and LPT1 (system parallel port) at start up.
    This is shown after opening "COM6" (3x) > opening "COM12" (4x) > opening "COM1" (1x) > closing "COM12" and "COM12 (1)"
    Maybe there is a way to read the contents of the drop down menu of the VISA resource control which contains all the information and is also updated automatically.
    Any help is greatly appreciated, regards W@Work
    Note: I'm using LabVIEW 2009 (32-bit) on Windows XP
    Attachments:
    open visa sessions.vi ‏28 KB

    Thank you very much for your response,
    First I'll explain the duplication: the "VISA open" VI allows for opening a duplicate session (which refers to the same port). I want to use this so I can have a separate session for writing and reading which can be locked and unlocked separately. The example I attached to my original post opens duplicate sessions when you (try to) open the same port ("COM1" for example) multiple times. 
    Could you please try the example again selecting "COM1" as "VISA resource name", then click "Open" two times. Now you should see "COM1" and "COM1 (1)" in both lists. On my system clicking "Close" (while "COM1" is still selected) removes "COM1 (1)" from the "open sessions found" list while it should remove "COM1".
    MAX lists ports 1, 2, 6 & 12 that I mentioned in my original post. When running the example this list does not change (no "COM1 (1)" for example) so I think this is just a list of physical ports, not the open VISA sessions. 
    I think you forgot to attach the image but I guess this is the printscreen you're asking for:

  • Open visa sessions for controllin​g external dlls

    I need to open a VISA session to pass a session reference into a call library fucntion that calls the vendors instrument functions.  I currently see no way to do this using the call library or visa open function.  Does anybody know how to proceed when you have a non NI instrument that has a dll wiht it that you need to control over USB serially? 

    Mike,
    First thanks for your help but I have been in both those docs before.  My issue is that I have an instrument vendor that has a dll with functions like this:
    ViStatus _VI_FUNC Instr_autoConnectToFirst(ViPSession vi)
      return(Instr_autoConnectToAll(vi,1,NULL));
    that is written using some of the variables in the VISA library...
    When I go to look up what datatypes these variables are in the VISA specifications so I can hopefully create inpuits on a call library function in Labview,  I get descriptions like this:
    Type ViStatus
    This is the operational return status. It returns either a completion code or an error code as follows.
    Completion Codes
    Description
    VI_SUCCESS
    Attribute value set successfully.
    VI_WARN_NSUP_ATTR_STATE
    Although the specified attribute state is valid, it is not supported by this implementation.
    Error Codes
    Description
    VI_ERROR_INV_SESSION
    VI_ERROR_INV_OBJECT
    The given session or object reference is invalid (both are the same value).
    VI_ERROR_NSUP_ATTR
    The specified attribute is not defined by the referenced session, event, or find list.
    VI_ERROR_NSUP_ATTR_STATE
    The specified state of the attribute is not valid, or is not supported as defined by the session, event, or find list.
    VI_ERROR_ATTR_READONLY
    The specified attribute is read-only.
    VI_ERROR_RSRC_LOCKED
    Specified operation could not be performed because the resource identified by vi has been locked for this kind of access.
     I do not see how I get the IO defined for passing and returning data to these external library calls.
    Any ideas???

Maybe you are looking for