AnsweredAssumed Answered

viClear() Causes Scope to Hang Up After Software Update

Question asked by rclark on Dec 7, 2016

I have two MSO9254A mixed signal oscilloscopes. I updated the instrument software from 04.30.004 to 05.70.0091. Now both scopes hang up on VISA function calls following a call to viClear(). How can I restore my scopes to working order?

 

Here is hardware information obtained from Help => About Infiniium:

   Model: MSO9254A

   Serial numbers (two scopes): MY53130122 and MY53130123

   Firmware Revision: 214

   Front Panel Revision: FPGA 2 PIC 4.61

   Operating System: Microsoft Windows Embedded Standard (although the display says Windows 7 when windows is starting)

 

Instrument bus used : USB

 

Controller:

   Operating system 32 bit Windows 7

   VISA: NI VISA 15.0.1

   Programming language: C

 

Also tried with the same outcome:

   Operating system 64 bit Windows 7

   VISA: Keysight IO Library Suite

   Used Keysight Connection Expert to interactively execute viClear (clear device) and *IDN? queries.

 

Example code. Note the resource name is hard coded to my particular case. The code hangs up during the second "*IDN?" query. The code runs fine if the viClear() function calls are removed:

#include <ansi_c.h>
#include <visa.h>

int main (int argc, char *argv[])
{
 ViSession  DevRsrcMgr = VI_NULL; // Device resource manager handle
 ViSession    vi   = VI_NULL; // Instrument handle
 char     idn[256]; // Instrument ID string
 char    *rsrcName  = "USB0::0x2A8D::0x900E::MY53130123::INSTR";
 if(viOpenDefaultRM(&DevRsrcMgr))
     printf("viOpenDefaultRM failed\n");
 else if(viOpen(DevRsrcMgr, rsrcName, VI_NULL, VI_NULL, &vi))
     printf("viOpen failed\n");
 else if(viClear(vi))
    printf("First viClear failed\n");
 else if(viQueryf(vi, "*IDN?\n", "%t", idn))
    printf("First viQueryf failed\n");
 else if(viClear(vi))
    printf("Second viClear failed\n");

 else if(viQueryf(vi, "*IDN?\n", "%t", idn))    // Code hangs up here:
    printf("Second viQueryf failed\n");

 else if(viClose(vi))
    printf("viClose device failed\n");
 else if(viClose(DevRsrcMgr))
      printf("viClose DRM failed\n");

 return(0);
}

Outcomes