需要引用以下两个dll;
Ivi.Visa.dll 和 Ivi.Visa.Interop.dll
安装NIVISA版本驱动dll会在C盘
C:\Program Files\IVI Foundation\VISA\Microsoft.NET\Framework64\v2.0.50727\VISA.NET Shared Components 5.8.0
C:\Program Files\IVI Foundation\VISA\VisaCom64\Primary Interop Assemblies
详细代码
using Ivi.Visa.Interop;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace HelpTool
{
/// <summary>
/// GPIB通讯类
/// </summary>
public class GPIB_Comm
{
private ResourceManager ResourceMgr = new ResourceManager();
private FormattedIO488 DeviceIO488 = null;
private string address = "";
private string errorMsg = "";
private bool isOpen;
/// <summary>
/// GPIB通讯地址
/// </summary>
public int Address;
/// <summary>
/// 连接电脑的USB接口号
/// </summary>
public int ID;
/// <summary>
///
/// </summary>
public GPIB_Comm()
{
}
/// <summary>
///
/// </summary>
/// <param name="addr">GPIB通讯地址</param>
/// <param name="id">连接电脑的USB接口号</param>
public GPIB_Comm(int addr, int id = 0)
{
Address = addr;
ID = id;
}
/// <summary>
/// 设置通讯USB接口号,及GPIB地址
/// </summary>
/// <param name="addr"></param>
/// <param name="id">连接电脑的USB接口号</param>
public void SetID(int addr, int id = 0)
{
Address = addr;
ID = id;
}
/// <summary>
/// 错误信息
/// </summary>
public string GetErrorMessage()
{
string temp = errorMsg;
errorMsg = "";//获取错误信息后清除,避免重复获取
return temp;
}
/// <summary>
/// 仪器是否连接
/// </summary>
public bool IsOpen
{
get { return isOpen; }
}
/// <summary>
/// 打开仪器
/// </summary>
/// <returns></returns>
public bool Open()
{
try
{
isOpen = false;
address = "GPIB" + ID + "::" + Address + "::INSTR";
DeviceIO488 = new FormattedIO488();
DeviceIO488.IO = (IMessage)ResourceMgr.Open(address);
if (DeviceIO488.IO != null)
{
DeviceIO488.IO.TerminationCharacterEnabled = true;
}
Thread.Sleep(200);
// Check Model Name
string model = "";
DeviceIO488.WriteString("*IDN?"); //This command reads the instrument's (mainframe) identification string which contains comma-separated fields.
Thread.Sleep(20);
model = DeviceIO488.ReadString().Trim();
if (model.Contains("MODEL 2400"))
{
isOpen = true;
}
}
catch (Exception ex)
{
DeviceIO488 = null;
errorMsg = ex.Message;
isOpen = false;
}
return isOpen;
}
/// <summary>
/// 关闭
/// </summary>
public void Close()
{
if (IsOpen)
{
DeviceIO488.IO.Close();
isOpen = false;
}
}
/// <summary>
/// 写入数据,按仪器通讯协议,对应指令实现功能
/// </summary>
/// <param name="strData"></param>
public void Write(string strData)
{
try
{
if (isOpen)
{
DeviceIO488.WriteString(strData);
}
}
catch (Exception ex)
{
errorMsg = ex.Message;
}
}
/// <summary>
/// 读取数据,以结束符停止
/// </summary>
/// <returns></returns>
public string Read()
{
string strInfo = "";
try
{
if (isOpen)
{
strInfo = DeviceIO488.ReadString();
}
}
catch (Exception ex)
{
errorMsg = ex.Message;
}
return strInfo;
}
}
}