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);
}