C#1程控提高篇 #
操作系统:Windows7 IDE:VS2015 Visa版本:17.5 通信方式:LAN
在开发之前请确保已配置visa开发环境,参考 Visa开发环境搭建。
关于C#1程控的配置参考 C#1程控基础篇的第一步和第二步。
运行本例程序后,将依次输出:S12幅度迹线的标准差、S12相位迹线的标准差、S21幅度迹线的标准差、S21相位迹线的标准差。下面具体介绍整个实现过程。
第一步:设计界面 #
这里只设计了一个简单的按钮和textBox:
第二步:编写程序 #
双击按钮后,在Form1.cs中输入下列代码:
using System;
using System.Text;
using System.Windows.Forms;
namespace dem2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int sesn = 0;
int viStatus;
int vi = 0;
int retCount;
byte[] bytes = new byte[20];//初始化
viStatus = visa32.viOpenDefaultRM(out sesn);//打开VISA资源管理器句柄
viStatus = visa32.viOpen(sesn, "TCPIP0::172.141.64.51::5025::SOCKET", visa32.VI_NO_LOCK, visa32.VI_TMO_IMMEDIATE, out vi);//打开仪器句柄
viStatus = visa32.viPrintf(vi, "*RST\n");//复位指令
viStatus = visa32.viPrintf(vi, ":SENS:BWID 1KHZ\n");//设置中频带宽为1KHZ
viStatus = visa32.viPrintf(vi, ":SENS:FREQ:CENT 10000000\n");//键入中心频率
//测量S12幅度迹线的标准差
viStatus = visa32.viPrintf(vi, ":DISP:WIND:TRAC1:DEL\n");//删除轨迹
viStatus = visa32.viPrintf(vi, ":CALCulate1:PARameter:DEF 'CH1',S12\n");//在通道1上创建测量名为‘CH1’,测量参数为S12的测量
viStatus = visa32.viPrintf(vi, ":DISP:WIND:TRAC1:FEED 'CH1'\n");//创建轨迹1并将其与测量名称为‘CH1’的测量相关联,之后在窗口1中显示。
viStatus = visa32.viPrintf(vi, ":CALCulate1:PARameter:SEL 'CH1'\n");//设置名称为‘CH1’的测量为通道1的当前选择测量。
viStatus = visa32.viPrintf(vi, ":CALCulate1:FORMat MLOGarithmic\n");//设置通道1当前选择轨迹的显示格式为对数幅度。
viStatus = visa32.viPrintf(vi, ":CALCulate1:FUNCtion:STAT:STAT ON\n");//显示通道1轨迹统计。
viStatus = visa32.viPrintf(vi, ":CALCulate1:FUNCtion:TYPE STDEV\n ");//设置通道1轨迹统计返回数据类型为标准偏差。
System.Threading.Thread.Sleep(1000);//延时,给分析仪足够的时间进行计算
viStatus = visa32.viPrintf(vi, ":CALCulate1:FUNCtion:DATA?\n");//返回通道1轨迹统计返回数据的数值
viStatus = visa32.viRead(vi, bytes, 20, out retCount);//读取这个数值
string idnStr1 = Encoding.ASCII.GetString(bytes, 0, bytes.Length);//byte[]转字符串
//测量S12相位迹线的标准差
viStatus = visa32.viPrintf(vi, ":CALCulate1:PARameter:DEF 'CH2',S12\n");
viStatus = visa32.viPrintf(vi, ":DISP:WIND:TRAC2:FEED 'CH2'\n");
viStatus = visa32.viPrintf(vi, ":CALCulate1:PARameter:SEL 'CH2'\n");
viStatus = visa32.viPrintf(vi, ":CALCulate1:FORMat PHASe\n");
viStatus = visa32.viPrintf(vi, ":CALCulate1:FUNCtion:STAT:STAT ON\n");
viStatus = visa32.viPrintf(vi, ":CALCulate1:FUNCtion:TYPE STDEV\n ");
System.Threading.Thread.Sleep(1000);
viStatus = visa32.viPrintf(vi, ":CALCulate1:FUNCtion:DATA?\n");
viStatus = visa32.viRead(vi, bytes, 20, out retCount);
string idnStr2 = Encoding.ASCII.GetString(bytes, 0, bytes.Length);//byte[]转字符串
//测量S21幅度迹线的标准差
viStatus = visa32.viPrintf(vi, ":CALCulate1:PARameter:DEF 'CH3',S21\n");
viStatus = visa32.viPrintf(vi, ":DISP:WIND:TRAC3:FEED 'CH3'\n");
viStatus = visa32.viPrintf(vi, ":CALCulate1:PARameter:SEL 'CH3'\n");
viStatus = visa32.viPrintf(vi, ":CALCulate1:FORMat MLOGarithmic\n");
viStatus = visa32.viPrintf(vi, ":CALCulate1:FUNCtion:STAT:STAT ON\n");
viStatus = visa32.viPrintf(vi, ":CALCulate1:FUNCtion:TYPE STDEV\n ");
System.Threading.Thread.Sleep(1000);
viStatus = visa32.viPrintf(vi, ":CALCulate1:FUNCtion:DATA?\n");
viStatus = visa32.viRead(vi, bytes, 20, out retCount);
string idnStr3 = Encoding.ASCII.GetString(bytes, 0, bytes.Length);//byte[]转字符串
//测量S21相位迹线的标准差
viStatus = visa32.viPrintf(vi, ":CALCulate1:PARameter:DEF 'CH4',S21\n");
viStatus = visa32.viPrintf(vi, ":DISP:WIND:TRAC4:FEED 'CH4'\n");
viStatus = visa32.viPrintf(vi, ":CALCulate1:PARameter:SEL 'CH4'\n");
viStatus = visa32.viPrintf(vi, ":CALCulate1:FORMat PHASe\n");
viStatus = visa32.viPrintf(vi, ":CALCulate1:FUNCtion:STAT:STAT ON\n");
viStatus = visa32.viPrintf(vi, ":CALCulate1:FUNCtion:TYPE STDEV\n ");
System.Threading.Thread.Sleep(1000);
viStatus = visa32.viPrintf(vi, ":CALCulate1:FUNCtion:DATA?\n");
viStatus = visa32.viRead(vi, bytes, 20, out retCount);
string idnStr4 = Encoding.ASCII.GetString(bytes, 0, bytes.Length);//byte[]转字符串
textBox1.Multiline = true;//设置文本框的Multiline属性使其多行显示
textBox1.Height = 60;//设置文本框的高
textBox1.Text = idnStr1 +idnStr2 + idnStr3 + idnStr4;
visa32.viClose(vi);//关闭VISA资源管理器
visa32.viClose(sesn);//关闭仪器
}
}
}
第三步:运行程序 #
运行程序,点击按钮后输出:
矢量网络分析仪界面: