GPIB编程控件指令_vb gpib编程-程序员宅基地

技术标签: 经验分享  

#include “stdafx.h”
#include “C:\Program Files\IVI Foundation\VISA\WinNT\agvisa\include\visa.h”
#pragma comment(lib,“C:\Program Files\IVI Foundation\VISA\WinNT\agvisa\lib\msc\agvisa32.lib”)
#include <stdio.h>
void main () {
ViSession defaultRM, vi;
char buf [256] = {0};
/* Open session to GPIB device at address 22 /
viOpenDefaultRM (&defaultRM);
viOpen (defaultRM, “GPIB0::22::INSTR”, VI_NULL,VI_NULL, &vi);
/
Initialize device(Reset) */
viPrintf (vi, "RST\n");
/
Send an *IDN? string to the device */
viPrintf (vi, “IDN?\n");
/
Read results */
viScanf (vi, “%t”, &buf);
//viQueryf(vi, “IDN?\n","%t",%buf);//上两条语句可用此条代替
/
Print results */
printf (“Instrument identification string: %s\n”, buf);
//信号源—特定的信号源可能命令不一样,需要参考编程文档
int freq=999;
viPrintf(vi, “FREQ %dMHz\n”,freq);
viPrintf(vi, “POW  0dBm\n”);
viPrintf(vi, “OUTP ON\n”); //RF ON
viPrintf(vi, “MOD ON\n”);  //调制开
//频谱仪
viPrintf(vi, “SYST:DISP:UPDate ON\n”);//屏幕显示,不显示速度较快
viPrintf(vi, “FREQ:CENT 999MHz\n”);
viPrintf(vi, “FREQ:SPAN 10MHz\n”);
viPrintf(vi, “CALC:MARK:AOFF\n”);
viPrintf(vi, “SWE:TIME 2s\n”);//扫描时间
viPrintf(vi, “SYST:PSAVE ON\n”);//省电模式
viPrintf(vi, “DISP:TRAC:Y:RLEV 10dBm\n”);
viPrintf(vi, “DISP:WIND:TRAC:Y:RLEV:OFFS 10dB\n”);
viPrintf(vi, “CALC:MARK:X 999MHz\n”);//MARK ON
viPrintf(vi, “BAND:RES 100kHz\n”);//RBW
viPrintf(vi, “BAND:VID 300kHz\n”);//VBW   
//自动校准需要单次扫描,连续扫描不准确   
viPrintf(vi, “INIT:CONT OFF\n”);
//WAI用于同步,还有OPC等也可用于同步,仅用于overlapping command,sequential command
//无用,不过用
viPrintf(vi, “INIT:IMM;*WAI\n”);
viPrintf(vi, “CALC:MARK:MAX\n”);
//读取mark的值
viQueryf(vi, “CALC:MARK:Y?\n”,”%t”,buf);  
printf(“The mark value is:%s.\n”,buf);
//功率计
viPrintf(vi, “SENS:CORR:OFFS 31\n”);//外部补偿电平 db!!!ok
viPrintf(vi, “DISP:TRAC:VCENT 55dBm\n”);//参考电平 
viPrintf(vi, “TRIG:LEV 40dBm\n”);//触发电平 dBm
viPrintf(vi, “TRIG:DEL 0\n”);//触发事件位置us   ns/div us/div ms/div
viPrintf(vi, “DISP:PULS:TIMEBASE 10us\n”);//时间单位 (moren s) 100us
viPrintf(vi, “DISP:TRAC:VSCALe 5dB\n”);//db/格  db dBm,dBV,dBmV,dbuV dBuV
//网分仪
viPrintf(vi, “SYST:DISP:UPDate ON\n”);
viPrintf(vi, “SWE:COUnt 12\n”);
viPrintf(vi, “CALC:PAR:SEL ‘CH1_S11_1’\n”);
viPrintf(vi, “CALC:PAR:DEF ‘My_S11’,s11\n”);
//
viPrintf(vi, “CALCulate1:PARameter:SELect ‘Ch1Trc2’ ‘S21’\n”);
viPrintf(vi, “SYST:DISP:UPDate ON\n”);
viPrintf(vi, “CALC:FORM PHAS\n”);
viPrintf(vi, “FORMat ASCII\n”);
viQueryf(vi, "INITiate1:CONTinuous OFF;OPC?\n","%s", buf);
viPrintf(vi, “SENS1:FREQ:STAR 1000MHz\n”);
viPrintf(vi, “SENS1:FREQ:STOP 1125MHz\n”);
viPrintf(vi, “SENS1:SWE:POIN 126\n”);
viPrintf(vi, “OUTP1  OFF\n”);
viPrintf(vi, “SOUR:POW -7\n”);
viPrintf(vi, “CALC1:MARK1 ON\n”);
//
/
Close session */
viClose(vi);
viClose(defaultRM);
while(1);//pause for see the result.
}

/*
一段VC写的VISA GPIB控制代码。
注意事项:
1.必须先安装Agilent IO Library驱动,本人添加的是默认位置的库;
装了驱动后有很多很好的文档C:\Program Files\Agilent\IO Libraries Suite\Manuals\visa.pdf
2.安捷伦提供SICL 和 VISA两种库,不推荐用SICL,因为VISA更通用,
  NI也用VISA,函数名一致,都是viOpenDefaultRM,viOpen,viPrintf,viQueryf,viClose。
3.GPIB是用来控制电子仪器的,主要用在自动化控制,测试上。标准是SCPI,可以google下。
4.其实不难,但要多实践,只是调用API(头文件visa.h,库agvisa32.lib),API常用的就是几个,
viOpenDefaultRM,viOpen,viPrintf,viQueryf,viClose…
还有viSetAttribute,viScanf等;
viSetAttribute(vi,VI_ATTR_TMO_VALUE,20000);//超时时间20s 
其他的主要是SCPI命令,大多是标准化的,查查编程文档即可。
5.较新的技术是: LXI(LAN Extention Interface),网口控制,
因为一个方面是GPIB接口较贵(3k-5k),设备也只能接十几个(通常足够了);
6.扫描时需要单次同步,这样才准确;
7,应该多在Agilent和NI官网看看。
8.好书:《NI-VISAProgrammersMan》,《Agilent VISA User’s Guide》
9.自动搜索仪器,根据*IDN知道什么仪器
ViChar buffer[255];
ViRsrc mathes=buffer;
ViUInt32 nmatched;
ViFindList list;

viFindRsrc(defaultRM,“GPIB?INSTR",&list,&nmatched,
 matched);
viFindNext(list,matches);
viFindNext(list,matches);

viClose(list);
10. 测量多个数据可能用到strtok函数,或直接保存到一个数组里;
11.至于GPIB规范,总线电缆 包括16根信号线和9根地线。16根信号线中,8根为数据线,5根
为接口管理线,3根为握手线。IFC,ATN,了解即可。
12.FORMAT ASCii | In
自动校准用,写多了也没什么意思了。
//
/
信号源
//信号源设置较少,主要设置频率和功率。
viPrintf(vi_sig, “FREQ 999MHz\n”);
viPrintf(vi_sig, “POW  0dBm\n”);
viPrintf(vi_sig, “OUTP ON\n”); //射频开
viPrintf(vi_sig, “MOD  ON\n”); //调制开
其他滤波器什么的,很少用。
最新的仪器有有个很强大的功能,按下某个键即可显示其相应的SCPI命令,
于此我们不用查编程文档了,真是爽歪歪。
viPrintf(vi_sig,“DM:IQ:STATE ON\n”);
// viPrintf(vi_4438c, “OUTP:MOD:STAT OFF\n”);//
// viPrintf(vi_4438c,“DM:STATE ON\n”);
//频谱仪
viPrintf(vi_spec, “SYST:DISP:UPDate ON\n”);
viPrintf(vi_spec, “FREQ:CENT %dMHz\n”,m_cent_freq);
viPrintf(vi_spec, “FREQ:SPAN %dMHz\n”,m_span);
viPrintf(vi_spec, “DISP:WIND:TRAC:Y:RLEV %ddBm\n”,m_rlevel);
viPrintf(vi_spec, “BAND:VID %dkHz\n”,m_rbw);
viPrintf(vi_spec, “BAND:RES %dkHz\n”,m_vbw);
viPrintf(vi_spec, “CALC:MARK:AOFF\n”);
//
char buf[255];
viPrintf(vi_spec,“INIT:CONT OFF\n”);
viPrintf(vi_spec,“INIT:IMM;*WAI\n”);
viPrintf(vi_spec,“CALC:MARK:MAX\n”);
viPrintf(vi_spec,”*WAI\n");
viQueryf(vi_spec,“CALC:MARK:Y?\n”,"%t",buf);
viPrintf(vi_spec,"*WAI\n");
viPrintf(vi_spec,“INIT:CONT ON\n”);
viPrintf(vi_spec, “SWE:TIME 2s\n”);

//功率计
/*
viPrintf(vi_boonton,“SENS:CORR:OFFS 31dBm\n”);//外部补偿电平
viPrintf(vi_boonton,“DISP:TRAC:VCENT 55dBm\n”);//参考电平
viPrintf(vi_boonton,“TRIG:LEV 40dBm\n”);//触发电平
viPrintf(vi_boonton,“DISP:PULS:TIMEBASE 10us\n”);//时间单位
viPrintf(vi_boonton,“DISP:TRAC:VSCALe 5dB\n”);//db/格
viPrintf(vi_boonton,"*CLS\n");
viPrintf(vi_boonton,“CALC:MODE PULSE\n”);
viPrintf(vi_boonton,“DISP:PARA:MODE MEAS\n”);
viPrintf(vi_boonton,“SENS:CORR:OFFS 0\n”);//0dB//外部补偿电平
viPrintf(vi_boonton,“TRIG:LEV 0\n”);//触发电平0
viPrintf(vi_boonton,“DISP:TRAC:VCENT 0\n”);//参考电平
viPrintf(vi_boonton,“DISP:TRAC:VSCALe 5\n”);//db/格 10
viPrintf(vi_boonton,“TRIG:DEL 0\n”);//触发事件位置s 0 
viPrintf(vi_boonton,“DISP:PULS:TIMEBASE 5us\n”);//pow
viPrintf(vi_boonton,“DISP:PULS:TIMEBASE 5us\n”);
viPrintf(vi_boonton,"*WAI\n");
// viQueryf(vi_boonton,“FETCH:INTER:MAX ?\n”,"%t",buf);
viQueryf(vi_boonton,“FETCH:ARRAY:AMEA:POW  ?\n”,"%t",buf);

viPrintf(vi_boonton,“TRIG:SLOP POS\n”);
viPrintf(vi_boonton,“DISP:PULS:TIMEBASE 100ns\n”);
viPrintf(vi_boonton,"*WAI\n");
viQueryf(vi_boonton,“FETCH:ARRAY:AMEA:TIM ?\n”,"%t",buf_time);
viQueryf(vi_boonton,“FETCH:INTER:MAX ?\n”,"%t",buf_p);//0410
viQueryf(vi_boonton,“FETCH:ARRAY:AMEA:POW  ?\n”,"%t",buf_p);
viPrintf(vi_boonton,"*WAI\n");
str_time=buf_time;count=0;

/测试下降沿
viPrintf(vi_boonton,“TRIG:SLOP NEG\n”);
viPrintf(vi_boonton,"*WAI\n");
viQueryf(vi_boonton,“FETCH:ARRAY:AMEA:TIM ?\n”,"%t",buf_time);
viQueryf(vi_boonton,“FETCH:ARRAY:AMEA:POW  ?\n”,"%t",buf_p2);
// viQueryf(vi_boonton,“FETCH:INTER:MAX ?\n”,"%t",buf_p2);//均值
viPrintf(vi_boonton,"*WAI\n");
//
viQueryf(vi,“FETCH:INTER:AVER?\n”,"%t",buf);READ:INTER:AVER
viQueryf(vi,“FETCH:INTER:MAX?\n”,"%t",buf); READ:INTER:MAX

//
viPrintf(vi_zvb, “SYST:DISP:UPDate ON\n”);
viPrintf(vi_zvb, “SWE:COUnt %d\n”,m_point);
viPrintf(vi_zvb, “CALC:PAR:SEL ‘CH1_S11_1’\n”);
viPrintf(vi_zvb, “CALC:PAR:DEF ‘My_S11’,s11\n”);
//
viPrintf(vi_zvb, “CALCulate1:PARameter:SELect ‘Ch1Trc2’ ‘S21’\n”);
viPrintf(vi_zvb, “SYST:DISP:UPDate ON\n”);
viPrintf(vi_zvb, “CALC:FORM PHAS\n”);
viPrintf(vi_zvb, “FORMat ASCII\n”);
viQueryf(vi_zvb, “INITiate1:CONTinuous OFF;*OPC?\n”,"%s", ValueStr);
viPrintf(vi_zvb, “SENS1:FREQ:STAR 1000MHz\n”);
viPrintf(vi_zvb, “SENS1:FREQ:STOP 1125MHz\n”);
viPrintf(vi_zvb, “SENS1:SWE:POIN 126\n”);
viPrintf(vi_zvb, “OUTP1  OFF\n”);
viPrintf(vi_zvb, “SOUR:POW -7\n”);
viPrintf(vi_zvb,“CALC1:MARK1 ON\n”);

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_46491081/article/details/123082285

智能推荐

软件测试流程包括哪些内容?测试方法有哪些?_测试过程管理中包含哪些过程-程序员宅基地

文章浏览阅读2.9k次,点赞8次,收藏14次。测试主要做什么?这完全都体现在测试流程中,同时测试流程是面试问题中出现频率最高的,这不仅是因为测试流程很重要,而是在面试过程中这短短的半小时到一个小时的时间,通过测试流程就可以判断出应聘者是否合适,故在测试流程中包含了测试工作的核心内容,例如需求分析,测试用例的设计,测试执行,缺陷等重要的过程。..._测试过程管理中包含哪些过程

政府数字化政务的人工智能与机器学习应用:如何提高政府工作效率-程序员宅基地

文章浏览阅读870次,点赞16次,收藏19次。1.背景介绍政府数字化政务是指政府利用数字技术、互联网、大数据、人工智能等新技术手段,对政府政务进行数字化改革,提高政府工作效率,提升政府服务质量的过程。随着人工智能(AI)和机器学习(ML)技术的快速发展,政府数字化政务中的人工智能与机器学习应用也逐渐成为政府改革的重要内容。政府数字化政务的人工智能与机器学习应用涉及多个领域,包括政策决策、政府服务、公共安全、社会治理等。在这些领域,人工...

ssm+mysql+微信小程序考研刷题平台_mysql刷题软件-程序员宅基地

文章浏览阅读219次,点赞2次,收藏4次。系统主要的用户为用户、管理员,他们的具体权限如下:用户:用户登录后可以对管理员上传的学习视频进行学习。用户可以选择题型进行练习。用户选择小程序提供的考研科目进行相关训练。用户可以进行水平测试,并且查看相关成绩用户可以进行错题集的整理管理员:管理员登录后可管理个人基本信息管理员登录后可管理个人基本信息管理员可以上传、发布考研的相关例题及其分析,并对题型进行管理管理员可以进行查看、搜索考研题目及错题情况。_mysql刷题软件

根据java代码描绘uml类图_Myeclipse8.5下JAVA代码导成UML类图-程序员宅基地

文章浏览阅读1.4k次。myelipse里有UML1和UML2两种方式,UML2功能更强大,但是两者生成过程差别不大1.建立Test工程,如下图,uml包存放uml类图package com.zz.domain;public class User {private int id;private String name;public int getId() {return id;}public void setId(int..._根据以下java代码画出类图

Flume自定义拦截器-程序员宅基地

文章浏览阅读174次。需求:一个topic包含很多个表信息,需要自动根据json字符串中的字段来写入到hive不同的表对应的路径中。发送到Kafka中的数据原本最外层原本没有pkDay和project,只有data和name。因为担心data里面会空值,所以根同事商量,让他们在最外层添加了project和pkDay字段。pkDay字段用于表的自动分区,proejct和name合起来用于自动拼接hive表的名称为 ..._flume拦截器自定义开发 kafka

java同时输入不同类型数据,Java Spring中同时访问多种不同数据库-程序员宅基地

文章浏览阅读380次。原标题:Java Spring中同时访问多种不同数据库 多样的工作要求,可以使用不同的工作方法,只要能获得结果,就不会徒劳。开发企业应用时我们常常遇到要同时访问多种不同数据库的问题,有时是必须把数据归档到某种数据仓库中,有时是要把数据变更推送到第三方数据库中。使用Spring框架时,使用单一数据库是非常容易的,但如果要同时访问多个数据库的话事件就变得复杂多了。本文以在Spring框架下开发一个Sp..._根据输入的不同连接不同的数据库

随便推点

EFT试验复位案例分析_eft电路图-程序员宅基地

文章浏览阅读3.6k次,点赞9次,收藏25次。本案例描述了晶振屏蔽以及开关电源变压器屏蔽对系统稳定工作的影响, 硬件设计时应考虑。_eft电路图

MR21更改价格_mr21 对于物料 zba89121 存在一个当前或未来标准价格-程序员宅基地

文章浏览阅读1.1k次。对于物料价格的更改,可以采取不同的手段:首先,我们来介绍MR21的方式。 需要说明的是,如果要对某一产品进行价格修改,必须满足的前提条件是: ■ 1、必须对价格生效的物料期间与对应会计期间进行开启; ■ 2、该产品在该物料期间未发生物料移动。执行MR21,例如更改物料1180051689的价格为20000元,系统提示“对于物料1180051689 存在一个当前或未来标准价格”,这是因为已经对该..._mr21 对于物料 zba89121 存在一个当前或未来标准价格

联想启天m420刷bios_联想启天M420台式机怎么装win7系统(完美解决usb)-程序员宅基地

文章浏览阅读7.4k次,点赞3次,收藏13次。[文章导读]联想启天M420是一款商用台式电脑,预装的是win10系统,用户还是喜欢win7系统,该台式机采用的intel 8代i5 8500CPU,在安装安装win7时有很多问题,在安装win7时要在BIOS中“关闭安全启动”和“开启兼容模式”,并且安装过程中usb不能使用,要采用联想win7新机型安装,且默认采用的uefi+gpt模式,要改成legacy+mbr引导,那么联想启天M420台式电..._启天m420刷bios

冗余数据一致性,到底如何保证?-程序员宅基地

文章浏览阅读2.7k次,点赞2次,收藏9次。一,为什么要冗余数据互联网数据量很大的业务场景,往往数据库需要进行水平切分来降低单库数据量。水平切分会有一个patition key,通过patition key的查询能..._保证冗余性

java 打包插件-程序员宅基地

文章浏览阅读88次。是时候闭环Java应用了 原创 2016-08-16 张开涛 你曾经因为部署/上线而痛苦吗?你曾经因为要去运维那改配置而烦恼吗?在我接触过的一些部署/上线方式中,曾碰到过以下一些问题:1、程序代码和依赖都是人工上传到服务器,不是通过工具进行部署和发布;2、目录结构没有规范,jar启动时通过-classpath任意指定;3、fat jar,把程序代码、配置文件和依赖jar都打包到一个jar中,改配置..._那么需要把上面的defaultjavatyperesolver类打包到插件中

VS2015,Microsoft Visual Studio 2005,SourceInsight4.0使用经验,Visual AssistX番茄助手的安装与基本使用9_番茄助手颜色-程序员宅基地

文章浏览阅读909次。1.得下载一个番茄插件,按alt+g才可以有函数跳转功能。2.不安装番茄插件,按F12也可以有跳转功能。3.进公司的VS工程是D:\sync\build\win路径,.sln才是打开工程的方式,一个是VS2005打开的,一个是VS2013打开的。4.公司库里的线程接口,在CmThreadManager.h 里,这个里面是我们的线程库,可以直接拿来用。CreateUserTaskThre..._番茄助手颜色

推荐文章

热门文章

相关标签