在工控测试系统中,经常需要使用到各类程控仪器,这些程控仪器通常具有GPIB、LAN、USB等硬件接口,计算机通过这些接口能够与其通信,从而实现自动测量、数据采集、数据分析和数据处理等操作。本文主要介绍如何与程控仪器通过GPIB接口进行通信。

1.GPIB简介

GPIB是通用总线(General Purpose Interface Bus)的简称。

GPIB一共由24根线组成,其中8根数据线DB0-DB7,3根握手线(NRFD、DAV、NDAC),5根总线控制线(ATN、SRQ、IFC、REN、EOI),8根地线。

GPIB是异步数据传输方式的双向总线,总线上的信息按位(bit)并行、字节(byte)串行的方式进行传送。

详细的GPIB硬件接口介绍请查阅相关资料,这里就不详述了。

2.SCPI简介

SCPI是可编程仪器标准命令(Standard Commands for Programmable Instruments)的简称。

SCPI规定了在控制器到仪器和仪器到控制器之间的信息交换层消息的构造和内容,因而使得在垂直层面上,同一类型的仪器命令集相似;在水平层面上,不同类型仪器之间,同种功能的SCPI命令也一致。

SCPI命令分为仪器公用命令和仪器特定控制命令两部分。公用命令用于控制仪器的某些基本功能操作,其句法和语义遵循IEEE488.2规定。仪器特定控制命令是指每个程控仪器完成自身命令操作的特定命令。

详细的SCPI命令语法请查阅相关资料,这里就不详述了。

3.VISA简介

VISA是虚拟仪器软件架构(Virtual Instrument Software)的简称。

VISA提供了用于仪器编程的标准I/O函数库,称为VISA库。VISA库提供了统一的设备资源管理、操作和使用机制,它独立于硬件设备、接口、操作系统和编程语言,具有与硬件结构无关的特点。它将用于每个仪器硬件总线类型的更低层次的驱动程序抽象化,并提供一个单一的API实现与仪器的通信,而不必考虑具体的总线接口。

常用的VISA API有如下一些:

(1)ViStatus viOpenDefaultRM(ViPSession vi);   //打开缺省资源管理器资源对话通道

(2)ViStatus viOpen(ViSession sesn, ViRsrc name, ViAccessMode mode, ViUInt32 timeout, ViPSession vi); //打开特定资源的对话通道

(3)ViStatus viClose(ViObject vi);         //关闭特定资源的对话通道

(4)ViStatus viPrintf(ViSession vi, ViString writeFmt, ...);   //按设定格式向仪器写数据

(5)ViStatus viScanf(ViSession vi, ViString readFmt, ...);   //按设定格式从仪器读取数据

(6)ViStatus viRead(ViSession vi, ViPBuf buf, ViUInt32 cnt, ViPUInt32 retCnt);  //从仪器同步读取数据

(7)ViStatus viWrite(ViSession vi, ViBuf  buf, ViUInt32 cnt, ViPUInt32 retCnt);  //向仪器同步写入数据

(8)ViStatus viClear(ViSession vi);         //清除数据

4.编程示例

下面的代码示例了如何通过GPIB接口对2220G-30-1型号的双通道直流电源进行控制。程序运行效果如图1所示。

图1 GPIB示例运行效果

4.1加载VISA库的头文件和库文件

为了在工程项目中使用VISA API函数对程控仪器进行控制,需要加载VISA库的头文件visa.h和库文件visa32.lib。这两个文件可以在安装GPIB驱动后,在“C:\Program Files\IVI Foundation\VISA\WinNT”目录下的include和lib目录下找到。

加载这两个文件的具体方法如下:

1 #include "include//visa.h" //包含VISA头文件和库文件

2 #pragma comment(lib, "lib//msc//visa32.lib")

4.2连接设备

点击图1中的“连接设备”按钮,将调用viOpen()函数打开特定资源的对话通道。若对话通道打开成功,则向仪器发送“*IDN?”命令读取设备信息。具体实现代码如下:

1 /*

2 * 函数功能 : 点击"连接设备"按钮时,该函数被调用3 * 备 注 :4 * 作 者 : 博客园 依旧淡然5 */

6 voidCGPIBDemoDlg::OnButtonOpenDevice()7 {8 viOpenDefaultRM(&m_ViSessionRM);9 if(VI_SUCCESS == viOpen(m_ViSessionRM, "GPIB0::1::INSTR", VI_NULL, VI_NULL, &m_ViSession))10 {11 char receiveBufferArrary[256] = {0};12 viPrintf(m_ViSession, "*RST\n"); //发送复位命令

13 viPrintf(m_ViSession, "*IDN?\n");   //发送读取设备信息命令

14 viScanf(m_ViSession, "%t", &receiveBufferArrary);15 m_IsConnected = true;16 m_StaticDeviceState.Format("设备状态:已连接!");17 m_StaticDeviceInfo.Format("设备信息:%s \n", receiveBufferArrary);18 UpdateData(FALSE);19 }20 else

21 {22 m_IsConnected = false;23 MessageBox("连接设备失败!", "提示", MB_OK|MB_ICONWARNING);24 }25 }

由图1可以看到,连接设备成功之后,获取的设备信息为“Keithley instruments, 2220G-30-1, 9010179, 1.16-1.04”。这四个字段分别代表制造商、产品标号、产品序列号以及软件版本号。

4.3设置电压电流

2220G-30-1型号的双通道直流电源可以设置输出0-30V的直流电压以及0-1.5A的电流。下面的代码给出了设置通道1的电压和电流的方法:

1 /*

2 * 函数功能 : 点击"通道1设置"按钮时,该函数被调用3 * 备 注 :4 * 作 者 : 博客园 依旧淡然5 */

6 voidCGPIBDemoDlg::OnButtonChannel1Setting()7 {8 UpdateData(TRUE);9

10 if(!m_IsConnected)11 {12 MessageBox("请先连接设备!", "提示", MB_OK|MB_ICONWARNING);13 return;14 }15

16 if(m_EditChannel1Voltage.IsEmpty())17 {18 MessageBox("输入电压不能为空!", "提示", MB_OK|MB_ICONWARNING);19 return;20 }21

22 if(m_EditChannel1Current.IsEmpty())23 {24 MessageBox("输入电流不能为空", "提示", MB_OK|MB_ICONWARNING);25 return;26 }27

28 viPrintf(m_ViSession, "INST:SEL CH1\n");               //选择通道1

29 viPrintf(m_ViSession, "SOURCE:OUTP:ENAB ON\n");             //使能输出

30 viPrintf(m_ViSession, "SOURCE:VOLT %sV\n", m_EditChannel1Voltage);  //设置输出电压

31 viPrintf(m_ViSession, "SOURCE:CURR %sA\n", m_EditChannel1Current); //设置输出电流

32 viPrintf(m_ViSession, "SOURCE:OUTP ON\n");              //输出

33 }

java对gpib接口控制_【VC++技术杂谈005】如何与程控仪器通过GPIB接口进行通信相关推荐

  1. 【VC++技术杂谈005】如何与程控仪器通过GPIB接口进行通信

    在工控测试系统中,经常需要使用到各类程控仪器,这些程控仪器通常具有GPIB.LAN.USB等硬件接口,计算机通过这些接口能够与其通信,从而实现自动测量.数据采集.数据分析和数据处理等操作.本文主要介绍 ...

  2. java实现wife链接硬件_【技术分享】在Android 910上面实现WIFI功能

    前言 现如今,WiFi已经和我们生活密不可分了,不管我们是在公交车上.地铁上,还是走在大街上,我们都可以享受到WiFi的信号,WiFi5 已经进入千家万户,下面将分享基于WIFI5搭配Android ...

  3. win10雷电3接口驱动_雷电3 ,高速又多用,尽在一个接口

    很多刚刚接触笔记本的朋友也许不知道,笔记本上有一个接口既可以传数据,又可以外接显示器,甚至还可以给笔记本充电,它就是雷电3接口,下面就带大家了解一下. 雷电(Thunderbolt)是一种扩展接口,最 ...

  4. java如何接入实时流_【技术教程】如何通过Java程序调用RTSP拉流协议视频平台EasyNVR程序接口?...

    RTSP协议视频平台EasyNVR经过多年的积累,已经是一套成熟且完善的视频平台了,用户可以通过网页直接访问视频监控,也可以通过调用二次开发接口进行二次开发或者集成.下面介绍下Java程序调用Easy ...

  5. java反射获取方法内部_公共技术点之 Java 反射 Reflection

    本文为 Android 开源项目源码解析 公共技术点中的 Java 反射 部分 分析者:Mr.Simple,校对者:Trinea,校对状态:未完成 1. 了解 Java 中的反射 1.1 什么是 Ja ...

  6. java实现次方的运算_【技术干货】Java 面试宝典:Java 基础部分(1)

    海牛学院的 | 第 616 期 本文预计阅读 |18 分钟 Java 基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法, ...

  7. JAVA线程并发数量控制_线程同步工具(二)控制并发访问多个资源

    声明:本文是< Java 7 Concurrency Cookbook>的第三章, 作者: Javier Fernández González 译者:郑玉婷 控制并发访问多个资源 在并发访 ...

  8. vs可以调用java接口吗_关于vs2010下编译dll动态库,JNA接口在java中调用的问题

    最近在搞关于把vs2010中的project,使之能够在Java下面运行,有一个调用本地接口的问题,JNI那个涉及到复杂细节太多,就使用了最新的JNA(java native access) 网上也给 ...

  9. 用java代码写个蛋糕_【技术蛋糕】Java编程中写出好代码的建议

    最近在做应用的性能优化,在review代码的过程中积累了一些规则和经验.做到这些规则的目的很简单,就是写出"优美"的代码来. 1.注释尽可能全面 对于方法的注释应该包含详细的入参和 ...

最新文章

  1. AC日记——传染病控制 洛谷 P1041
  2. 轮播插件unsilder 源码解析(一)---使用
  3. python判断网页密码加密方式_python实现网页登录时的rsa加密流程
  4. 面试:如何从大量的 URL 中找出相同的 URL?
  5. 【Groovy】Groovy 脚本调用 ( Groovy 类中调用 Groovy 脚本 | 创建 GroovyShell 对象并执行 Groovy 脚本 | 完整代码示例 )
  6. Scala Iterator(迭代器)详解
  7. CSS实现的阴影效果
  8. Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
  9. 32为Linux安卓AVD启动报错
  10. SU数据新旧格式转换问题
  11. java中process方法用处_Java Process 简略使用方法以及坑点
  12. XX公司的薪酬设计案例分析
  13. 基于长短期记忆神经网络和卷积神经网络(convLSTM)的股票涨跌预测模型(附代码)
  14. 两次维权ZB系交易所,我和ZB的魔幻往事
  15. Repulsion Loss: Detecting Pedestrians in a Crowd 详解(遮挡下的行人检测)
  16. mysql 空闲链接超时时间_解决mysql 中共8小时空闲后连接超时的有关问题
  17. JavaScript 设计模式之发布-订阅模式(上)
  18. 不妨借一步说话,你想知道的关于设计模式的种种,android物联网开发配套代码
  19. 经过半年的摸爬滚打,入门机器学习如此简单
  20. java计算机毕业设计体检系统源码+数据库+系统+lw文档+mybatis+运行部署

热门文章

  1. 【民国结婚证书上的一段美好的话】
  2. Unity制作虚拟按键输入数字答案
  3. 轮转数组 (java)
  4. oracle官方教材下载地址
  5. IPM逆透视变换问题(2):Image --> Ground
  6. 云创大数据与湖北文理学院正式签订校企合作协议
  7. ueditor编辑器添加自定义按钮
  8. 百度BML飞桨训练营(十一)paddle-OCR车牌识别
  9. android 同步事件,与Android的谷歌日历同步事件
  10. 【字符识别】基于matlab模板匹配(区域生长法)字母+数字识别【含Matlab源码 1214期】