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

【VC++技术杂谈005】如何与程控仪器通过GPIB接口进行通信在工控测试系统中 经常需要使用到各类程控仪器 这些程控仪器通常具有 GPIB LAN USB 等硬件接口 计算机通过这些接口能够与其通信 从而实现自动测量 数据采集 数据分析和数据处理等操作 本文主要介绍如何与程控仪器通过 GPIB 接口进行通信 nbsp 1 GPIB 简介 GPIB 是通用总线 General nbsp Purpose nbsp Interface nbsp Bus 的简称 GPIB 一共由

在工控测试系统中,经常需要使用到各类程控仪器,这些程控仪器通常具有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所示。

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

图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 void CGPIBDemoDlg::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, , 1.16-1.04”。这四个字段分别代表制造商、产品标号、产品序列号以及软件版本号。

4.3设置电压电流

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

复制代码
 1 /*  2  * 函数功能 : 点击"通道1设置"按钮时,该函数被调用  3  * 备 注 :  4  * 作 者 : 博客园 依旧淡然  5 */  6 void CGPIBDemoDlg::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 }
复制代码
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/212901.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午6:59
下一篇 2026年3月18日 下午7:00


相关推荐

  • 如何自建一个git服务器,搭建Git服务器,真的很简单

    如何自建一个git服务器,搭建Git服务器,真的很简单重要提醒,本教材适用于gitolitev2,与当前最新版v3不兼容!!需要在checkoutgitolite后,切换到v2版!!其实真的只需要几句#现在开始是root做的#安装Gitapt-getinstallgit#拷贝你自己的公钥cp~/.ssh/id_rsa.pub/tmp/wendal.pubgitclonegit://github.com/sitaramc/gitoli…

    2022年10月4日
    4
  • rocketmq长轮询原理_java长轮询

    rocketmq长轮询原理_java长轮询什么是长轮询whypush:broker推,优势:实时,长链接,不会频繁建立链接;缺点:慢消费,broker负载过高pull:客户端拉,优势:消费数量,速度可控;缺点:间隔难设定,过短,频繁网络请求,无效请求,过长:延迟消费为了保证实时,我们可以把拉取消息的间隔设置的短一点,但这也带来了一个另外一个问题,在没有消息的时候时候会有大量pull请求,为了解决这个问题,就采用了本文讲解的长轮询技术。轮询是以固定间隔请求服务器,它不在乎这次请求是否能拉取到消息。而长轮询,它请求的服务端,会等待一

    2022年10月14日
    5
  • SQL注入攻击原理与防御措施

    SQL注入攻击原理与防御措施原理 所谓 SQL 注入 就是通过把 SQL 命令伪装成正常的 HTTP 请求参数传递到服务端 款骗服务器最终执行恶意的 SQL 命令 达到入侵目的 攻击者可以利用 SQL 注入漏洞 查询非授权信息 修改数据库服务器的数据 改变表结构 甚至是获取服务器 root 权限 总而言之 SQL 注入漏洞的危害极大 攻击者采用的 SQL 指令决定了攻击的威力 目前涉及的大批量数据泄露的攻击事件 大部分都是通过 SQL 注入来实施的 示例 假设某个存在漏洞的网站登录页需要输入用户名和密码 后台接收到参数后是直接拼接 SQL 查数据库 如

    2026年3月18日
    2
  • 阿里发布千问最新图像模型Qwen-Image-2.0,可轻松生成专业PPT及信息图

    阿里发布千问最新图像模型Qwen-Image-2.0,可轻松生成专业PPT及信息图

    2026年3月13日
    2
  • redis可视化工具下载_redis集群管理工具

    redis可视化工具下载_redis集群管理工具[i]首页我先把redis的密码设置为:123456redis127.0.0.1:6379>CONFIGSETrequirepass123456OKredis127.0.0.1:6379>AUTH123456Ok[/i][i]该可视化工具github地址[url]https://github.com/caoxinyu/RedisClient[/url][/i…

    2022年10月11日
    9
  • 一份较心新的端口列表[通俗易懂]

    一份较心新的端口列表[通俗易懂]PORTNUMBERS(lastupdated18November2004)Theportnumbersaredividedintothreeranges:theWellKnownPorts,theRegisteredPorts,andtheDynamicand/orPrivatePorts.TheWellKnown

    2025年12月4日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号