C# Visual Studio GPIB 命令

问题描述 投票:0回答:6

在 C#、Visual Studio 中使用哪些命令与 GPIB 仪器进行通信? 我需要能够向仪器写入命令并读取输出。

c# gpib
6个回答
4
投票

我使用Agilent IO Library Suite

这里是在 C# 上使用它的教程:C# 中的 I/O 编程示例

尽管如此,在我的公司,我们在 VISA-COM 实现方面遇到了稳定性问题,因此我们使用 P/Invoke 围绕 Visa32.dll(也是 IO 库套件的一部分)编写了自己的包装器。

(披露:我在一家大量使用 GPIB 仪器的公司工作)


2
投票

我正在使用 National Instruments VISANI 488.2

首先确保您在NI-VISA设置中勾选了

VisaNS.NET API
,如下图:

将对

NationalInstruments.VisaNS
NationalInstruments.Common
的引用添加到您的项目中。

创建一个

MessageBasedSession
,见以下代码:

string resourceName = "GPIB0::20::INSTR"; // GPIB adapter 0, Instrument address 20
var visa = new NationalInstruments.VisaNS.MessageBasedSession(resourceName);
visa.Write("*IDN?"); // write to instrument
string res = visa.ReadString(); // read from instrument

A

MessageBasedSession
可用于通过 GPIB、以太网或 USB 与您的仪器进行通信。

更新

Ivi.Visa
取代了
NationalInstruments.VisaNS
。因此,您应该仅将
Ivi.Visa
的引用添加到您的项目中。

这个例子看起来像这样:

string resourceName = "GPIB0::20::INSTR"; // GPIB adapter 0, Instrument address 20
var visa = GlobalResourceManager.Open(resourceName) as IMessageBasedSession;
visa.RawIO.Write("*IDN?\n"); // write to instrument
string res = visa.RawIO.ReadString(); // read from instrument

使用

Ivi.Visa
的好处是它可以与以下库之一配合使用:


0
投票

从串口发送命令。

请参阅 Microsoft 的 COM 端口示例


0
投票

您应该首先创建一个具有 LangInt 类的对象。然后将该对象与 GPIB 方法一起使用。 最常见和最常用的是(假设您创建了一个名为“dev”的对象);

dev.ibwrt(deviceHandle, "*IDN?", "*IDN?".Length);

dev.ibrd(deviceHandle, out Value, Arraysize);

这两个可以查询设备。或者您可以连续使用它们,例如设置发生器的频率,然后设置其幅度。

重要的部分是在发送 SCPI 命令之前;您必须首先初始化设备。要执行此操作;

deviceHandle = ibdev(GPIBINDEX, GPIBADDRESS, SECONDARYADDRESS, TIMEOUT, EOTMODE, EOSMODE);

这些参数必须首先在代码中声明。初始化后,您可以使用该设备句柄的每个 GPIB 命令。

当然,您应该将 NationalInstruments.NI4882 和 LangInt.dll 添加到您的项目中。


0
投票

您可以使用NI Visa。 如果您使用 Vb 或 C#,请使用示例程序磁盘中的 Visa32.bas 或 Visa32.cs

int DefaultSessionId= 0;
int SessionId= 0;
int LastStatus = 0;
string Address = "GPIB0::6" ; //any address

//Session Open
LastStatus = visa32.viOpenDefaultRM(out DefaultSessionId);

//Connection Open
LastStatus = visa32.viOpen(DefaultSessionId, Address + "::INSTR", 0, 0, out sessionId);
LastStatus = visa32.viSetAttribute(SessionId, visa32.VI_ATTR_TERMCHAR, 13);// Set the termination character to carriage return (i.e., 13);
LastStatus = visa32.viSetAttribute(SessionId, visa32.VI_ATTR_TERMCHAR_EN, 1);// Set the flag to terminate when receiving a termination character
LastStatus = visa32.viSetAttribute(SessionId, visa32.VI_ATTR_TMO_VALUE, 2000);// Set timeout in milliseconds; set the timeout for your requirements

//Communication
LastStatus = visa32.viPrintf(SessionId, command + "\n");//device specific commands to write
StringBuilder message = new StringBuilder(2048);
LastStatus = visa32.viScanf(SessionId, "%2048t", message);//Readback

//Session and Connection Close
visa32.viClose(SessionId);
visa32.viClose(DefaultSessionId);

参考


0
投票

有运行32位Windows的参考吗?

© www.soinside.com 2019 - 2024. All rights reserved.