C# 基于winform 使用NI-VISA USB口远程控制电源 万用表

1.下载完整版本NI-VISA

NI-VISA Download - NI

*注意支持的操作系统,以便后期编译

安装完成之后,打开NI MAX,插上usb口,打开测试面板进行通信

0ac4a4aa383d4269856fe705ed6926ec.png

2.编程示例

见本地文件夹C:\Users\Public\Documents\National Instruments\NI-VISA\Examples\.NET

e1b8e02d7c6049d08f83a9833426c5b8.png

首先添加引用

2d25cb612799478d99a9f88738beaa76.png

不同操作系统可引用的组件不同,win11引用NationalInstruments.Visa,win10 win7 引用ivi.visa

//win11

using Ivi.Visa;
using NationalInstruments.Visa; // 引用NI VISA库
//查找设备
private void SelectResource_Load(object sender, EventArgs e)
        {
            using (var rmSession = new ResourceManager())
            {
                var resources = rmSession.Find("(ASRL|GPIB|TCPIP|USB)?*");
                foreach (string s in resources)
                {
                    availableResourcesListBox.Items.Add(s);
                }
            }
        }

ResourceManager resourceManager = new ResourceManager();
MessageBasedSession tmcSession = (MessageBasedSession)resourceManager.Open("USB0::0x05E6::0x2220");//资源名称

tmcSession.RawIO.Write("*IDN?");//发送命令
tmcSession.FormattedIO.FlushWrite(true);
string[] res = new string[] { "", "", "", "" };
tmcSession.FormattedIO.Scanf("%,s", out res);//读取命令
//win10  win7 查找设备

using Ivi.Visa.FormattedIO;//win10  win7
using Ivi.Visa;

private void SelectResource_Load(object sender, EventArgs e)
        {
            IEnumerable<string> devices;
            try
            {
                devices = GlobalResourceManager.Find();
                foreach (string device in devices)
                {
                    Console.WriteLine("\tAddress: {0}, Alias: {1}", device, GlobalResourceManager.Parse(device).AliasIfExists);
                    availableResourcesListBox.Items.Add(device);
                }
            }
            catch (VisaException ex)
            {
            }
        }



//发送命令  读取命令
IMessageBasedSession session = GlobalResourceManager.Open("USB0::0x05E6::0x2220") as IMessageBasedSession;
MessageBasedFormattedIO formattedIO = new MessageBasedFormattedIO(session);
formattedIO.WriteLine("*IDN?");//发送命令
string res = formattedIO.ReadLine();//读取命令

设备具体编程命令可见用户手册,是德电源2200系列常见命令

fb6af94252da4e689a4dda4c2cfeacca.png

是德万用表常见命令

601f43a1bf84468394ed3c2858c5241d.png

欢迎一起讨论~

 

<think>好的,用户想了解如何在C#使用NI-VISA进行仪器控制和通信的示例教程。首先,我需要整理已有的引用资料,看看有哪些资源可用。根据提供的引用,有几个关键点需要注意: 1. 用户提供的引用中提到了C#使用NI-VISA的教程,包括具体的代码示例和项目地址。引用[1]和[2]提到了详细的教程和代码示例,引用[3]和[4]则涉及WinForm应用和异步编程的实现。 2. 需要确保回答结构清晰,分步骤说明。可能需要包括环境配置、基础步骤、代码示例、异步编程方法以及注意事项等部分。 3. 用户可能不仅需要代码示例,还需要知道如何设置环境,比如安装NI-VISA驱动和SDK,以及如何引用必要的DLL。引用[3]提到了本地文件夹中的例子,这可能对用户有帮助。 4. 考虑到用户可能在实际应用中遇到问题,比如如何保持UI响应,引用[4]提到的异步编程是关键点,应该在回答中包含。 接下来,我需要按照系统级指令的要求,使用中文回答,生成相关问题,并正确引用来源。同时,确保所有数学表达式和代码块格式正确。比如,代码块需要用三个反引号包裹,并标明语言。 需要检查是否有遗漏的步骤,比如资源查找、连接仪器、发送命令等。每个步骤应该结合引用中的信息,比如引用[2]中的代码示例,引用[4]中的异步方法。 另外,用户可能对实际应用场景感兴趣,比如控制电源万用表,引用[3]提到的例子可以在这里提到。同时,注意事项部分要包括常见问题,如权限、超时设置等,引用中可能没有直接提到,但根据经验需要补充。 最后,生成的相关问题需要与主题相关,比如优化通信、处理错误、选择接类型等,这些问题应基于回答内容自然延伸出来。</think>在C#使用NI-VISA进行仪器控制需遵循以下步骤,结合NI-VISA的API和异步编程技术实现高效通信: --- ### 一、环境配置 1. 安装**NI-VISA驱动**(最低要求版本5.0) 2. 在Visual Studio中引用`NationalInstruments.Visa.dll`(位于`C:\Program Files\IVI Foundation\VISA\Microsoft.NET\Framework64\v4.0.50727`)[^3] 3. NuGet安装`NationalInstruments.VISA`包 --- ### 二、基础通信示例 ```csharp using NationalInstruments.Visa; using System; public class VisaController { public void BasicCommunication() { // 通过USB连接仪器(假设地址为USB0::0x1234::5678::SN00123::INSTR) using (var session = new ResourceManager().Open("USB0::0x1234::5678::SN00123::INSTR")) { session.Timeout = 5000; // 设置5秒超时 session.RawIO.Write("*IDN?\n"); // 发送查询命令 string response = session.RawIO.ReadString(); // 读取响应 Console.WriteLine($"仪器标识: {response}"); } } } ``` *代码实现了基础仪器识别功能[^2]* --- ### 三、高级功能实现 #### 1. 异步资源发现(保持UI响应) ```csharp using System.Threading.Tasks; public async Task<string[]> FindResourcesAsync() { return await Task.Run(() => { return new ResourceManager().Find("?*"); }); } ``` *通过异步任务避免界面冻结[^4]* #### 2. 多接支持模板 ```csharp // GPIB示例 var gpibSession = new ResourceManager().Open("GPIB0::12::INSTR"); // LAN示例 var lanSession = new ResourceManager().Open("TCPIP0::192.168.1.100::inst0::INSTR"); // RS232示例 var serialSession = new ResourceManager().Open("ASRL1::INSTR"); serialSession.SerialSettings.BaudRate = 9600; ``` --- ### 四、典型应用场景 1. **电源控制**:发送电压/电流设置指令 ```csharp session.RawIO.Write("VOLT 12.5\n"); // 设置12.5V电压[^3] ``` 2. **万用表读数**:配置测量模式后读取数据 ```csharp session.RawIO.Write("CONF:VOLT:DC 10\n"); double reading = double.Parse(session.RawIO.ReadString()); ``` --- ### 五、注意事项 1. 始终使用`using`语句或`Dispose()`确保资源释放 2. 异常处理建议: ```csharp try { // VISA操作代码 } catch (VisaException ex) { Console.WriteLine($"VISA错误: {ex.Message}"); } ``` 3. 调试技巧:使用VISA Interactive Control工具验证连接 [^1]: 完整项目示例见https://gitcode.com/open-source-toolkit/9a0b7 : 具体代码实现参考NI官方示例库 : 本地示例路径`C:\Users\Public\Documents\National Instruments\NI-VISA\Examples\.NET` : 异步实现方法详见NI-VISA开发者文档 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值