由于工作需求,需要使用C#进行一些常用的仪器控制,包括数字万用表、直流电源、信号发生器、示波器、电子负载等。以前都是用LabVIEW进行仪器控制,对于C#编程语言来说也算是新手,就边学习摸索边记录吧,也算是经验总结了!
对于用C#进行仪器控制,网络上的资源实在是太少了(相较于用LabVIEW控制仪器的资料而言),这也算是为后人积累点学习资源做点微不足道的贡献了!
01控制对象——Keysight数字万用表
我们要控制的对象是Keysight最常见的6位半数字万用表,型号为KeysightA,如下图所示。
数字万用表02控制要求——读取电压值
本次以C#编程控制KeysightA数字万用表读取电压值为例,讲解仪器控制方法。
直接分享C#代码如下:
usingSystem;
usingIvi.Visa.Interop;
usingIvi.Driver.Interop;
usingSystem.Resources;
usingSystem.Runtime.Remoting.Messaging;
namespaceKeysight_DMM
{
classProgram
{
staticvoidMain(string[]args)
{
//创建ResourceManager和MessageBasedSession对象
Ivi.Visa.Interop.ResourceManagerresourceManager=newIvi.Visa.Interop.ResourceManager();
FormattedIOmessageBasedSession=newFormattedIO();
//打开万用表连接
messageBasedSession.IO=(Ivi.Visa.Interop.IMessage)resourceManager.Open("USB0::0x2A8D::0x::MY::INSTR",AccessMode.NO_LOCK,,"");
//设置采集模式和测量范围
messageBasedSession.WriteString(":CONF:VOLT:DCAUTO,DEF",true);
//发送采集命令
messageBasedSession.WriteString(":READ?",true);
//读取返回值
stringresponse=messageBasedSession.ReadString();
//关闭连接
messageBasedSession.IO.Close();
//输出结果
Console.WriteLine("电压测量结果为:"+response.Trim());
Console.ReadLine();
}
}
}
03控制要求——C#代码说明
这个程序使用IVI驱动程序进行通信,在程序中:
1)使用ResourceManager类创建了一个资源管理器;
2)然后创建了一个FormattedIO对象用于处理消息通信;
3)接着使用资源管理器打开USB连接,并将其分配给FormattedIO对象;
4)接着设置万用表的测量模式和测量范围;
5)然后发送读取命令并等待万用表返回结果;
6)最后关闭连接并将结果打印在控制台上。
需要注意的是,这个程序假定万用表通过USB连接到计算机。如果连接方式不同,需要修改资源管理器的Open方法中的参数以及连接地址。同时,如果需要测量其他类型的电信号,可以在程序中修改发送的命令来实现。
04遇到的问题及解决办法
1)IVI驱动安装
本程序使用IVI驱动进行仪器控制,因此首先需要下载安装IVI驱动程序。这里下载安装Keysight