【发布时间】:2015-08-20 14:26:47
【问题描述】:
我在使用 VISA-Com 库与 Keysight (N6700B) 电源进行通信时遇到问题。
我在 Visual Studio 2015 中编译了一些 C# 代码,但它不起作用。但是,如果我在 Visual Studio 2012 中编译相同的代码,那么它可以工作。
基本上我只是在与设备进行简单的通信:
using Ivi.Visa.Interop;
//...
string address = "USB0::2391::2311::MY54002380::0::INSTR";
ResourceManager rm = new ResourceManager();
FormattedIO488 myDmm = (IMessage)rm.Open(address , AccessMode.NO_LOCK, 2000, "");
myDmm.WriteString("*RST"); // reset the device
myDmm.WriteString("*IDN?"); // request the IDN string;
string IDN = myDmm.ReadString(); // This is where it fails, returning: "VI_ERROR_TMO: A timeout occurred"
另外,电源有一个错误状态:“Error -420, Query UNTERMINATED”
该代码不适用于 VS2015,但可以用于 VS2012。 (在 VS2012 中我完全没有错误。)
我已尝试从 KeySight 下载最新的驱动程序,但仍然无法正常工作 (www.keysight.com/find/iosuitedownload)。
有没有人知道为什么它会与 VS2015 中断但与 VS2012 一起使用?
我查找了“Quere Unterminated”,有人说它可能是缺少终止字符“\n”。我尝试将“\n”添加到两个 writeStrings 中,但仍然失败。
编辑:我现在也尝试使用(在不同的地方):
myDmm.IO.TerminationCharacterEnabled = true; // and = false
myDmm.FlushWrite(); // also tried passing in "true" (default is 'false')
我也尝试添加:
myDmm.IO.TerminationCharacter
到 WriteStrings。
【问题讨论】:
-
您使用的是哪个 .Net 版本?可能是当您进行解决方案转换时,它还将 .NET Framework 版本更改为最新版本。你应该看看这个项目并手动将版本更改为与 Visa 框架兼容的版本
-
错误是在 Visual Studio 内部执行代码还是在 Visual Studio 外部运行编译后的可执行文件?
-
您是否验证了生成的程序集的“位数”是否相同(x86、x64、ANY_CPU)?
-
你输入 "/n" 时的意思是 "\n" 吗?一个生成控制字符,另一个不生成。
-
我建议此时,查看程序集中生成的 IL。如果生成的 IL 完全相同,则问题可能出在程序集外部(可能是库引用问题)。如果 IL 不同,可能会为您提供有关如何修改代码以与两个版本的 VS 一起使用的指导。
标签: c# visual-studio-2012 visual-studio-2015 visa