SCPI 34970A 连接异常
SCPI 34970A Connection Exception
我试过在 Keysights 社区页面上写这个问题,但显然他们缺乏社区。不过,我希望这里有人可以帮助我。
无论如何,我编写了一个程序,大约每分钟与 Agilent 34970A 通信一次(根据输入值变化,也根据输入值随机变化)并扫描近 20 个通道。然后我解析所有数据并确保一切看起来正确。我 运行 遇到了几个问题,我已经解决了其中的大部分问题,但是,我现在被一个问题困住了。
有时,我在第一次尝试连接仪器时遇到异常。异常的简短版本是:
Keysight.CommandExpert.InstrumentAbstraction.CommunicationTimeoutException was unhandled
HResult=-2146233088
Message=Timed out while trying to query instrument errors
Source=Keysight.CommandExpert.Scpi
Timeout=10000
我用 C# 编写了我的代码,就像我说的那样,当我尝试连接到仪器时它就发生了。这行代码是:
Ag3497x v34970A = 新 Ag3497x("ASRL1::INSTR");
我该如何处理这个异常?最初我使用的是 IVI-COM 驱动程序,但发现它们既麻烦又不可靠。我在这里的某处读到一个人更喜欢 SCPI 命令,所以我改用这些命令。但是,当我使用 IVI 驱动程序时,有一个关闭连接的命令。我找不到 SCPI 命令。这可能是问题的一部分吗?
我用来与 34970A 通信并从中读取数据的完整代码如下:
字符串读数 = null;
Ag3497x v34970A = new Ag3497x("ASRL1::INSTR");
v34970A.SCPI.RST.Command();
v34970A.SCPI.DISPlay.TEXT.Command("CYCLE TESTER");
v34970A.Transport.DefaultTimeout.Set(-1);
v34970A.SCPI.CONFigure.VOLTage.AC.Command(100, "MAX", "@101:116");
v34970A.SCPI.SENSe.VOLTage.AC.BANDwidth.Command(1000, "@101:117");
v34970A.SCPI.CONFigure.VOLTage.AC.Command(10, "MAX", "@117");
v34970A.SCPI.SENSe.VOLTage.AC.BANDwidth.Command(1000, "@117");
v34970A.SCPI.CONFigure.VOLTage.AC.Command(300, "MAX", "@119");
v34970A.SCPI.SENSe.VOLTage.AC.BANDwidth.Command(60, "@119");
v34970A.SCPI.CONFigure.TEMPerature.Command("TCouple", "K", 1, "MAX", "@118");
v34970A.SCPI.ROUTe.SCAN.Command("@101:119");
v34970A.SCPI.TRIGger.COUNt.Command(1);
v34970A.SCPI.READ.QueryAllData(null, out readings);
我 运行 根据编写程序的测试要求,此代码最多 10,000 次。正如您在代码中看到的那样,我通过 SERIAL 进行连接。
无论如何,我们将不胜感激。您肯定能理解,当一个程序在 10000 个循环中的 8000 个循环失败时,它可能会非常沮丧,尤其是当 10000 个循环可能需要 10 多天才能完成时。真的,也许我会很幸运,有人会知道我如何防止这种情况发生,但我真的在寻找一种方法来处理这种异常,假设它无法避免。 真的,这么长post问的是如何处理异常。我搜索过,但是这个答案暗示了我。如果您想了解任何其他详细信息,请告诉我,我会及时提供。
再次感谢,
乔希
几点建议:
- 为什么每次迭代都必须调用
Ag3497x
构造函数?仅构造一次设备并重复使用它。
- 波特率是多少?电缆长度?考虑更短的电缆和更小的波特率。
- 考虑使用像 this one 这样的串行端口嗅探器来嗅探端口中到底发生了什么,而这个异常正在发生。
- 如果其他一切都很好,但似乎是 Visa 驱动程序中的一些问题,如果您没有从 Keysights 获得一些响应,请考虑使用不同的 Visa 驱动程序或使用 SerialPort 实现您自己的驱动程序。
我试过在 Keysights 社区页面上写这个问题,但显然他们缺乏社区。不过,我希望这里有人可以帮助我。
无论如何,我编写了一个程序,大约每分钟与 Agilent 34970A 通信一次(根据输入值变化,也根据输入值随机变化)并扫描近 20 个通道。然后我解析所有数据并确保一切看起来正确。我 运行 遇到了几个问题,我已经解决了其中的大部分问题,但是,我现在被一个问题困住了。
有时,我在第一次尝试连接仪器时遇到异常。异常的简短版本是:
Keysight.CommandExpert.InstrumentAbstraction.CommunicationTimeoutException was unhandled
HResult=-2146233088
Message=Timed out while trying to query instrument errors
Source=Keysight.CommandExpert.Scpi
Timeout=10000
我用 C# 编写了我的代码,就像我说的那样,当我尝试连接到仪器时它就发生了。这行代码是: Ag3497x v34970A = 新 Ag3497x("ASRL1::INSTR"); 我该如何处理这个异常?最初我使用的是 IVI-COM 驱动程序,但发现它们既麻烦又不可靠。我在这里的某处读到一个人更喜欢 SCPI 命令,所以我改用这些命令。但是,当我使用 IVI 驱动程序时,有一个关闭连接的命令。我找不到 SCPI 命令。这可能是问题的一部分吗?
我用来与 34970A 通信并从中读取数据的完整代码如下: 字符串读数 = null;
Ag3497x v34970A = new Ag3497x("ASRL1::INSTR");
v34970A.SCPI.RST.Command();
v34970A.SCPI.DISPlay.TEXT.Command("CYCLE TESTER");
v34970A.Transport.DefaultTimeout.Set(-1);
v34970A.SCPI.CONFigure.VOLTage.AC.Command(100, "MAX", "@101:116");
v34970A.SCPI.SENSe.VOLTage.AC.BANDwidth.Command(1000, "@101:117");
v34970A.SCPI.CONFigure.VOLTage.AC.Command(10, "MAX", "@117");
v34970A.SCPI.SENSe.VOLTage.AC.BANDwidth.Command(1000, "@117");
v34970A.SCPI.CONFigure.VOLTage.AC.Command(300, "MAX", "@119");
v34970A.SCPI.SENSe.VOLTage.AC.BANDwidth.Command(60, "@119");
v34970A.SCPI.CONFigure.TEMPerature.Command("TCouple", "K", 1, "MAX", "@118");
v34970A.SCPI.ROUTe.SCAN.Command("@101:119");
v34970A.SCPI.TRIGger.COUNt.Command(1);
v34970A.SCPI.READ.QueryAllData(null, out readings);
我 运行 根据编写程序的测试要求,此代码最多 10,000 次。正如您在代码中看到的那样,我通过 SERIAL 进行连接。
无论如何,我们将不胜感激。您肯定能理解,当一个程序在 10000 个循环中的 8000 个循环失败时,它可能会非常沮丧,尤其是当 10000 个循环可能需要 10 多天才能完成时。真的,也许我会很幸运,有人会知道我如何防止这种情况发生,但我真的在寻找一种方法来处理这种异常,假设它无法避免。 真的,这么长post问的是如何处理异常。我搜索过,但是这个答案暗示了我。如果您想了解任何其他详细信息,请告诉我,我会及时提供。
再次感谢,
乔希
几点建议:
- 为什么每次迭代都必须调用
Ag3497x
构造函数?仅构造一次设备并重复使用它。 - 波特率是多少?电缆长度?考虑更短的电缆和更小的波特率。
- 考虑使用像 this one 这样的串行端口嗅探器来嗅探端口中到底发生了什么,而这个异常正在发生。
- 如果其他一切都很好,但似乎是 Visa 驱动程序中的一些问题,如果您没有从 Keysights 获得一些响应,请考虑使用不同的 Visa 驱动程序或使用 SerialPort 实现您自己的驱动程序。