C# VISA 控制仪表
1. VISA 控制仪表
VISA 是美国国家仪器公司(National Instruments,简称 NI)推出的一种用于仪器编程和测量的通信协议。VISA 是 Virtual Instrument Software Architecture(虚拟仪器软件体系结构)的缩写。VISA 是一个面向仪器系统的通用软件标准,它为仪器系统中的仪器控制和管理提供了一个统一的框架,它使得测试测量应用程序的开发人员能够通过计算机控制仪器,而不需要担心不同仪器之间通信的差异。
现在大部分的仪器都支持VISA协议,所以我们可以通过VISA协议来控制仪器。
那么如何在C#中控制VISA协议呢?这个文章就是解决这个问题的。
软件控制仪器仪表的教程在网上相对比较少,都是一段一段的代码,没有从头开始带初学者来进行操作的一个完整流程,整个方案难度不高,跟着教程走的话,大家都可以开始自己的仪表编程。 希望给后来者一些帮助
2.准备阶段
我这使用的是keysight的万用表,可以使用它配套的软件 keysight connection expert 来获取设备信息
3.开始编程
3.1 创建项目
我这使用的软件版本是:Visual Studio 2022,如果你是之前的版本,推荐更换成我这个
3.2 编程
可以看到,添加了Visa相关的信息
3.3 全部工程代码
下面就是完整的 Form1.cs文件下的代码 如果需要开发其他的功能,可以自行在代码中添加功能 其中你的设备号,需要根据第一章节的提示获取
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace VISA
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//申明一个设备
var session = (Ivi.Visa.IMessageBasedSession)
Ivi.Visa.GlobalResourceManager.Open("你的设备号");
//发送指令,并且读取返回值
session.FormattedIO.WriteLine("*IDN?");
string idName = session.FormattedIO.ReadLine();
Console.WriteLine($"*IDN? = {idName}");
//电压
//session.RawIO.Write(":MEASure:VOLTage:DC?\n");
// idName = session.FormattedIO.ReadString();
//Console.WriteLine($"DC? = {idName}");
//电流
session.RawIO.Write(":MEASure:CURRent:DC?\n");
idName = session.FormattedIO.ReadString();
Console.WriteLine($"CURRent = {idName}");
//频率
session.RawIO.Write(":MEASure:FREQuency?\n");
idName = session.FormattedIO.ReadString();
Console.WriteLine($"频率? = {idName}");
//释放 session
session.Dispose();
session = null;
}
}
}
下面就是打印出来的log信息
如果你需要更多的控制,可以参考下面的代码
//申明一个万用表设备,以及初始化配置
var session = (Ivi.Visa.IMessageBasedSession)
Ivi.Visa.GlobalResourceManager.Open(ID_34461A);
session.FormattedIO.WriteLine("CONF:VOLT:DC");
session.FormattedIO.WriteLine("VOLT:DC:NPLC 10");
session.FormattedIO.WriteLine("VOLT:DC:IMPedance:AUTO 1");
第一句则是打开了ID_34461A 这个设备
第二句写的是 需要进行DC的控制
第三句 配置万用表的采样速度,10的话就是10个交流电的正弦波周期, 如市电50HZ,则持续采样10个正弦波周期,采样速度大约是10HZ 即100ms。 第四句 写的对应的则是使用了万用表的自动阻抗模式,自动阻抗能有10G欧姆的输入电阻
PS: 控制仪器设备,确实是比较冷门的操作,但学会了却能很大的提升工作效率,希望能对各位带来帮助
资料
下面两个可以看到
RIGOL 相关示波器编程手册 https://www.rigol.com/Images/MSO5000ProgrammingGuideCN_tcm4-4051.pdf
周立功示波器编程手册 https://www.zlg.cn/data/upload/software/Osc/ZDS2000C-bcsc.pdf
如果你使用的是其他的仪器,一般情况下官网,或者可以联系出售仪器给你的代理公司,他们一般都会提供相关的编程手册的。