vnau / IviVisaNetSample

🚀 Simple IVI VISA.NET example with CI and .NET 5+
GNU General Public License v3.0
20 stars 14 forks source link

Failures with release 7.2 under 4.7.2 and 4.8 #2

Open ATECoder opened 3 months ago

ATECoder commented 3 months ago

Dear @vnau. I find your kelary.ivi.visa simply brilliant. Thank you. I used, I believe, a previous release (5.?) but it seems that the 7.2 release somehow blocks access to the resource manager.

I was getting the following error when running the IviVisaNetSample under .NET Framework 4.8:

VISA.NET Shared Components version 7.2.0.0.
VISA Shared Components version 7.1.6708.0 detected.
Exception: Failed to parse TCPIP0::192.168.0.144::inst0::INSTR

To explore this further, I compiled a program to query the instrument identity and added a resource lookup using the IVI.Visa global resource manager. I then compared the results using the current 7.2 release of the Kelay.ivi.visa package versus using a direct reference to IVI.Visa (5.11).

While using ivi.visa directly works, I am getting the failure to parse error when referencing the package.

Here are my results:

Failure running IviVisaSentSample (I added the name of the running framework).

Running under .NETFramework,Version=v4.8.

VISA.NET Shared Components version 7.2.0.0.
VISA Shared Components version 7.1.6708.0 detected.

Unhandled Exception: Ivi.Visa.VisaException: Failed to parse tcpip0::192.168.0.144::inst0::instr
   at Ivi.Visa.GlobalResourceManager.Parse(String resourceName, SrmDictionary srms)
   at Ivi.Visa.GlobalResourceManager.Parse(String resourceName)
   at Rohde.IdnQuery.Program.Main(String[] args) in C:\my\lib\vs\io\vi\src\rohde\idn.query\Program.cs:line 76

Success running IviVisaSentSample under .NET 8.0:

Running under .NETCoreApp,Version=v8.0.

VISA.NET Shared Components version 7.2.0.0.
VISA Shared Components version 7.1.6708.0 detected.
Loaded assembly "Keysight VISA.NET".

Executing GlobalResourceManager.Find( "TCPIP?*INSTR"    )

Resource: tcpip0::192.168.0.144::inst0::instr
IVI GlobalResourceManager ImplementationVersion:7.2.0.0 SpecificationVersion:7.2.0.0
selected the VISA.NET Implementation by Keysight Technologies, Inc. version 18.2.0.0

Instrument Identification string:
KEITHLEY INSTRUMENTS,MODEL DMM7510,04051720,1.7.7b

Press any key to finish.

Getting an error under v4.8 using Kelary 7.2

I added the resource lookup here as a way to check the resource manager without having to use an explicit resource name.

Running under .NETFramework,Version=v4.8.

VISA.NET Shared Components version 7.2.0.0.
VISA Shared Components version 7.1.6708.0 detected.

Executing GlobalResourceManager.Find( "TCPIP?*INSTR"  )

Error finding resources:
Failed to find resources matching TCPIP?*INSTR
Press any key to finish.

Success running under 4.7.2 using direct reference to IVI.Visa.

Running under .NETFramework,Version=v4.7.2.

VISA.NET Shared Components version 5.11.0.0.
VISA Shared Components version 7.1.6708.0 detected.

Executing GlobalResourceManager.Find( "TCPIP?*INSTR"    )

Resource: tcpip0::192.168.0.144::inst0::instr
IVI GlobalResourceManager selected the following VISA.NET:
Manufacturer: Keysight Technologies, Inc.
Implementation Version: 18.2.0.0

Instrument Identification string:
KEITHLEY INSTRUMENTS,MODEL DMM7510,04051720,1.7.7b

Press any key to finish.

Success running under 4.8 using direct reference to IVI.Visa.

Running under .NETFramework,Version=v4.8.

VISA.NET Shared Components version 5.11.0.0.
VISA Shared Components version 7.1.6708.0 detected.

Executing GlobalResourceManager.Find( "TCPIP?*INSTR"    )

Resource: tcpip0::192.168.0.144::inst0::instr
IVI GlobalResourceManager selected the following VISA.NET:
Manufacturer: Keysight Technologies, Inc.
Implementation Version: 18.2.0.0

Instrument Identification string:
KEITHLEY INSTRUMENTS,MODEL DMM7510,04051720,1.7.7b

Press any key to finish.
ATECoder commented 3 months ago

Update:

Downgrading the Kelary.ivi.visa package to version 5.11.3422 solves this problem.

vnau commented 3 months ago

Hi, @ATECoder, thank you for your detailed description of the problem. I'm glad to hear that the issue has been resolved. According to the logs, the Keysight IO Libraries 2022 Update 2 (version 18.2) was used and its implementation of VISA.NET depend on the VISA.NET Shared Components version 5.11. Downgrading to version 5.11 was indeed the right decision to ensure compatibility and resolve errors.

ATECoder commented 3 months ago

Thank you, @vnau.

This seems to beg a few questions: (1) why the failure under 4.8 and not under 8.0?
(2) Was it because under 8.0 the installed version got loaded and found it's dependent implementation irrespective of the revision that Kelary.Ivi.Visa was pointing to? (2) would it be okay to preload the assemblies under framework versions earlier than 5.0?

On another note, if I may, given the esteemed membership of the IVI foundation I had hoped for some time to see VISA.Net open sourced becoming independent of vendor specific implementations. That would have entailed implementations of XDR, ONC-RPC and VXI-11, which has been open sourced.

As far as I can tell Ivi.Visa needs not reference the Vendors' VISA.Net libraries had the Foundation unified the resource data source format. As it stands. each vendor relies or its own proprietary data source (e.g., ini for NI, csv for R&S and SQLite for Keysight) thus requiring Ivi.Visa to invoke the vendor implementation which in turn references Ivi.Visa.

Also, it seems that the Foundation does not require all members to fully adhere to the VISA specifications. For example, I was disappointed to find that Rohde Schwarz RS.Visa, which I like for its small footprint, does not support addressing a gpib device using a TCPIP resource (e.g., tcpip0::192.168.0.254::gpib0,22::instr). This was a show stopper because I prefer using TCPIP boxes to talk to GPIB devices because these require no additional drivers.