C#GPIB通讯 教你写出代码

C#编写GPIB与仪器通讯

1.前期准备

  1. 查找下载仪器的通讯手册(以SCPI命令为例),或者用户手册。
  2. 购买GPIB-USB卡(盗版GPIB卡会限制驱动的版本,具体版本按商家提供的安装)。
  3. 官网下载NI-VSIA,默认配置安装(下载NI-VISA - NI)。
  4. 根据GPIB卡,下载对应NI-488驱动程序,默认配置安装(下载NI-488.2 - NI)。
  5. 安装visual studio2022,选择.net以及.net framework有关配置进行安装。
  6. 在visual studio中创建Winform项目,模板选择Windows窗体应用(.NET Framework)。
    在这里插入图片描述
  7. 选择.net framework4.8框架 。
    在这里插入图片描述
  8. 在项目右键,点击添加-添加引用:Ivi.Visa.dll与Ivi.Visa.Interop.dll。

文件默认地址:

  • Ivi.Visa.dll(“C:\Program Files\IVI Foundation\VISA\Microsoft.NET\Framework64\v2.0.50727\VISA.NET Shared Components 7.2.0\Ivi.Visa.dll”)
  • Ivi.Visa.Interop.dll(“C:\Program Files\IVI Foundation\VISA\VisaCom64\Primary Interop Assemblies\Ivi.Visa.Interop.dll”)
  1. 环境配置完成。

2.代码编写

  1. 创建ResourceManager rm与FormattedIO488 fio两个对象。
  • ResourceManager负责管理 VISA 资源的生命周期,并提供方法来打开、关闭和查询 VISA 资源。

  • FormattedIO488对象用于发送命令到设备、读取设备的响应、配置设备的参数

  1. 创建string[] receresourceName与int GPIB_State两个变量。
  • receresourceName用于存放GPIB设备号字符串。

  • GPIB_State用于记录GPIB设备连接状态。

using Ivi.Visa.Interop;
...
    //需要引用Ivi.Visa.Interop
    ResourceManager rm = new ResourceManager();
	FormattedIO488 fio =new FormattedIO488();

	//导入设备地址,可以包含多个设备
	//设备的地址可以在设置中查看并且修改
	string[] receresourceName = { "GPIB::15::INSTR" ,"GPIB::16::INSTR" ... ...};
	//0为未开启连接
	int GPIB_State = 0;
...
  1. 创建一个连接设备按钮,编写连接仪器代码,使用rm.Open()函数建立连接。

rm.Open(resourceName,AccessMode,timeout,openDefaultRM )

  • resourceName:打开的VISA资源的名称,格式:GPIB::设备地址::INSTR

  • AccessMode:指定了会话的访问模式,AccessMode.NO_LOCK通常意味着打开会话时不锁定资源,允许多个会话同时访问同一个资源。AccessMode.LOCK,这表示打开会话时锁定资源,防止其他会话同时访问。

private void btn_Connect_Click(object sender, EventArgs e)
{
    if(GPIB_State == 0)
    {
        try
        {
            fio.IO = (IMessageBasedSession)rm.Open(receresourceName[1], AccessMode.NO_LOCK, 0, "");
            GPIB_State = 1;
            btn_Connect.Text = "断开连接";
            btn_Connect.BackColor = Color.Lime;
        }
        catch
        {
            MessageBox.Show("设备连接失败!");
        }
    }
    else
    {
        session.Dispose();
        GPIB_State = 0;
        btn_Connect.Text = "打开连接";
        btn_Connect.BackColor = Color.LightGray;
    }
}
  1. 发送SCPI命令(具体命令查看仪器手册,以IT8908e大功率直流电子负载为例),使用writeString函数。读取仪器传输的信息,使用ReadString函数。
  • writeString(string Order);

    Order:为字符串类型,是需要向仪器输入的SCPI指令。

  • ReadString();

    ReadString函数会返回一个字符串类型数据,为仪器返回的数据。

    执行ReadString函数之前,要先发送获取数据的指令

//一般仪器远程操作时,需要先发送远程操作命令
//这条命令可以写入到连接程序中
fio.WriteString("SYSTem:REMote\r\n");

发送命令示例:

private void btn_CC_Change_Click(object sender, EventArgs e)
{
    //限制输入框输空白而导致错误
    if (tb_CC_W.Text != "")
    {
        //限制输入框输入的数据大小,防止超过仪器能接受的最大值
        if (Convert.ToInt32(tb_CC_W.Text) >= 100)
            tb_CC_W.Text = "100";
        //SCPI命令中的数值部分,从输入框获得
        string Order = "CURRent " + tb_CC_W.Text + "\r\n";
        //发送指令
        fio.WriteString(Order);
    }
}

接受数据示例:

 private void btn_A_R_Click(object sender, EventArgs e)
 {
     //发送获取数据指令
     fio.WriteString("CURRent?\r\n");
     //接受仪器返回的数据
     tb_A_W.Text=fio.ReadString();
 }

控制多台设备原理基本一致,只需要添加设备的地址,按要求创建对象即可。
几台设备可以公用同一个ResourceManager 对象,无需再次创建。
创建新的FormattedIO488对象即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值