C#GPIB通讯 教你写出代码

admin2024-07-01  15

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)。
    C#GPIB通讯 教你写出代码,在这里插入图片描述,第1张
  7. 选择.net framework4.8框架 。
    C#GPIB通讯 教你写出代码,在这里插入图片描述,第2张
  8. 在项目右键,点击添加-添加引用:Ivi.Visa.dll与Ivi.Visa.Interop.dll。
  1. 环境配置完成。

2.代码编写

  1. 创建ResourceManager rm与FormattedIO488 fio两个对象。
  1. 创建string[] receresourceName与int GPIB_State两个变量。
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()函数建立连接。
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函数。
//一般仪器远程操作时,需要先发送远程操作命令
//这条命令可以写入到连接程序中
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对象即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!