C# 仪表远程控制 GPIB VISA解决方案

本文介绍了如何使用C#通过串口通信控制步进电机和安捷伦信号源,重点讲解了VISA和SCPI在仪器控制中的作用,以及在处理GPIB接口和不同设备通信中的注意事项,包括VISA库的获取和使用实例。
摘要由CSDN通过智能技术生成

主流方式:

1.NI VISA        C# NI VISA 虚拟仪表编程实例_c#调用visa-CSDN博客

2.IVI VISA        利用C#Winform串口通信&&安捷伦信号源_c#调用agvisa范例方法-CSDN博客

C 仪器控制系列——数字万用表 (baidu.com)

可能与接口有关,本次操作 安捷伦 66319D 双路直流电源,通过 82357B USB/GPIB接口转换 连接PC端。实测方式2有效,方式1会报  (位置信息不足或系统中不存在设备或资源。),怀疑与安装多个VISA导致。暂未深入解决。

什么是GPIB接口?-CSDN博客

visa32.dll动态库调用 - CSDN文库

相关链接:

实测有效:方式1

用C 进行仪器控制系列——Keysight 直流电源 (baidu.com)

用C 进行仪器控制系列——Keysight 直流电源(2) (baidu.com)

未实测:

使用C# 编写VISA相关的代码控制 keysight 34461A万用表|江阴雨辰互联 (yc00.com)

使用GPIB配置工具 - National Instruments (ni.com)

笔记本装安捷伦的USB转GPIB接口,操控松下VP-7725D音频分析仪 (baidu.com)

前言
主要利用C#通过串口通信控制步进电机和安捷伦信号源。

一、串口通信
第一步通过串口RS232控制步进电机,CSDN上很多串口通信示例,下面直接上代码

        private void Form1_Load(object sender, EventArgs e)
        {
            string[] strCom = SerialPort.GetPortNames();
            if (strCom == null)
            {
                MessageBox.Show("本机没有串口!", "Error");
                return;
            }
            foreach (string com in strCom)
            {
                cbCom.Items.Add(com);
            }
            cbCom.SelectedIndex = 0;
            sp1.PortName = cbCom.Items[0].ToString();//串口号
            sp1.BaudRate = 9600;
            Control.CheckForIllegalCrossThreadCalls = false;
            sp1.DataReceived += Sp1_DataReceived;
           // sp1.DataReceived += new SerialDataReceivedEventHandler(Sp1_DataReceived);
 
            sp1.DtrEnable = true;
            sp1.RtsEnable = true;
            sp1.ReadTimeout = 1000;
            sp1.Close();
 
            cbBaudRate.Text = "9600";
            cbDataBits.Text = "8";
            cbStop.Text = "1";
            cbCheck.Text = "无";
 
        }

        private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            System.Threading.Thread.Sleep(100);     //延时100ms等待接收数据
 
            //this.Invoke  跨线程访问ui的方法
            this.Invoke((EventHandler)(delegate
            {
                if (isHex == false)
                {
                    tbxRecvData.Text += sp.ReadLine();
                    //Azi_fpos = sp.ReadExisting();
                }
                else
                {
                    Byte[] ReceivedData = new Byte[sp.BytesToRead];
                    sp.Read(ReceivedData, 0, ReceivedData.Length);
                    String RecvDataText = null;
                    for (int i = 0; i < ReceivedData.Length - 1; i++)
                    {
                        RecvDataText += ("0x" + ReceivedData[i].ToString("X2") + " ");
                    }
 
                    tbxRecvData.Text += RecvDataText;
                }
                sp.DiscardInBuffer();       //丢弃接收缓冲区数据
            }));
        }

 这里需要注意的是有个事件,如果需要每次send发送完数据就立马收数据的话可以用,如果不是的话可以手动接收sp.ReadExisting();

//定义DataReceived事件,当串口收到数据后触发事件
//sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);

 第二步当通信成功后我们需要通过指令来控制步进电机,这时候就需要查询用户手册并调试。当然在这之前可以还需要一个串口调试助手更有效的验证,下面分享两个串口助手给大家

1是win10自带的串口调试助手,

2是360 软件下载

调试通过后,就可以接下的步骤。

二、VISA和SCPI
  SCPI(可编程仪器的标准命令)是一种基于 ASCII 的仪器命令语言,供测试和测量仪器使用,简单来说就是你发送给一个设备一串SCPI格式的字符串,它就能完成相应操作,这就是它们的通用语言。SCPI分为标准SCPI和扩展的SCPI,前者是各种设备通用的,如重置命令RST,后者是各个厂家各种设备自己扩展的命令。如果相应设备支持SCPI,在其操作手册中会对SCPI详细说明,最好是查看需要控制的设备说明文档。

         VISA(Virtual Instrument Software Architecture,简称为"Visa"),即虚拟仪器软件结构,是VXI plug&play联盟制定的I/O接口软件标准及其规范的总称。VISA提供用于仪器编程的标准I/O函数库,称为VISA库。计算机通过它来控制仪器。
         VISA的适用和各种仪器接口通信,无论仪器使用的串口还是其他任何一种总线,诸如USB、GPIB、VXI、PXI和LXI等,都具有相同的操作函数,从而实现了控制操作上的统一。

        安捷伦等仪表通讯需要用到VISA的库。库的获取方法目前知道两个,1个是下载是德科技的IO Library,还有就是上NI下载NI-VISA.

1.引入库
在项目中添加引用,引用VISA的库。

2.编写安捷伦信号源程序
VISA程序集不支持太老的安捷伦设备,需另行解决可以通过LAN或者GPIB等

        //方法:实现设备连接
        public void Connect(string address)
        {
 
            ResourceManager con = new ResourceManager();
            FormattedIO488 ioobj = new FormattedIO488();
            try
            {
 
                ioobj.IO = (IMessage)con.Open(address, AccessMode.NO_LOCK, 2000, "");
 
                ioobj.WriteString("*IDN?", true);
                string message = ioobj.ReadString();
                if (message != "")
                {
                    RecList("连接", message, "连接成功");
                }
                ioobj.IO.Clear();
                ioobj.IO.Close();
            }
            catch (Exception)
            {
                RecList("失败", "", "发送命令或接收数据异常!");
 
            }
       }
连接成功后就可以通过 ioobj.WriteString()和ioobj.ReadString()方法进行读写数据。也可以把这个方法放在类里边,这样声明了类的对象,就是可以多次重复使用。
                        
原文链接:https://blog.csdn.net/Memory_C900107/article/details/121046157

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Excel VBA宏可以用于控制GPIBVISA设备。GPIB(通用平行接口总线)是一种用于连接仪器和控制器之间的通信接口标准,而VISA(虚拟仪器软件架构)是一种用于编程和通信的API(应用程序接口)。 首先,我们需要在Excel VBA宏中引用合适的库以便与GPIBVISA设备进行通信。这些库通常是由设备供应商提供的,它们包含了使用控制和通信设备所需的函数和方法。 接下来,我们可以使用VBA宏编写代码来初始化和连接GPIBVISA设备。对于GPIB设备,我们需要指定设备的地址和连接类型,并通过相应的函数打开设备连接。对于VISA设备,我们需要提供设备的资源名称和连接类型。一旦设备连接成功,我们就可以使用VBA编写代码来发送命令和接收响应。 例如,对于GPIB设备,我们可以使用写入命令的函数将命令发送到设备,并使用读取命令的函数接收设备的响应。对于VISA设备,我们可以使用Write和Read函数来发送和接收命令和响应。 在处理设备的数据时,我们可以使用Excel VBA宏提供的功能来解析和处理这些数据。我们可以将收到的数据存储在Excel单元格中,或者进行进一步的数据处理和分析。 最后,在使用完设备后,我们需要关闭设备连接,以释放设备资源。 总之,使用Excel VBA宏可以方便地控制和通信GPIBVISA设备。通过正确引用相关库和编写适当的代码,我们可以实现与这些设备的连接、通信和数据处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值