C#实现控制射频仪表E5071C,采集数据,处理数据,保存数据

发布时间 2023-06-27 14:19:45作者: 跟Tom学编程-一对一
using System;
using System.IO;
using System.Text;
using Ivi.Visa.Interop;
using NationalInstruments.Visa;

namespace E5071C_Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 连接仪表
            ResourceManager rm = new ResourceManager();
            string e5071c = "GPIB0::16::INSTR";
            MessageBasedSession mbSession = (MessageBasedSession)rm.Open(e5071c);

            // 初始化仪表
            mbSession.Write(":SYST:FPRESET"); // 恢复出厂设置
            mbSession.Write(":CALC:PAR:DEL:ALL"); // 删除所有测量参数

            // 配置仪表参数
            mbSession.Write(":SENS:FREQ:STAR 1000000"); // 设置起始频率
            mbSession.Write(":SENS:FREQ:STOP 3000000000"); // 设置终止频率
            mbSession.Write(":SENS:SWE:POIN 100"); // 设置采样点数
            mbSession.Write(":SENS:BWID 10"); // 设置测量带宽

            // 设置测量类型
            mbSession.Write(":CALC:PAR:DEF 'CH1_S21', 'S21'"); // 定义测量类型及参数
            mbSession.Write(":CALC:FORM MLOG"); // 设置格式

            // 开始测量
            mbSession.Write(":INIT:CONT ON"); // 连续测量

            // 读取数据
            string data = mbSession.Query(":CALC:DATA? FDATA");

            // 处理数据
            StringBuilder sb = new StringBuilder();
            using (StringReader sr = new StringReader(data))
            {
                string line;
                while ((line = sr.ReadLine()) != null)
                {
                    string[] values = line.Split(',');
                    double freq = double.Parse(values[0]);
                    double amp = double.Parse(values[1]);
                    double phase = double.Parse(values[2]);

                    // 处理数据的逻辑
                    // ...

                    sb.AppendLine($"{freq},{amp},{phase}");
                }
            }

            // 保存数据到文件
            string filepath = @"C:\data.txt";
            File.WriteAllText(filepath, sb.ToString());

            // 断开连接
            mbSession.Dispose();
            rm.Dispose();
        }
    }
}

上述代码中,使用了IVI-COM驱动和NI-VISA驱动,
其中IVI-COM驱动提供可重用的控制和测量仪表的API接口,NI-VISA驱动则提供通信协议和设置仪表参数的相关方法。
在代码中,首先使用ResourceManager对象连接了GPIB接口的E5071C仪表,
然后初始化了仪表并设置了相关参数。
之后执行了测量和读取数据的操作,将数据处理后保存到了文件中。
最后断开连接并销毁资源。