中易网

C#中如何进行VISA编程

答案:1  悬赏:0  
解决时间 2021-01-16 19:28
  • 提问者网友:心牵心
  • 2021-01-16 05:44
C#中如何进行VISA编程
最佳答案
  • 二级知识专家网友:七十二街
  • 2021-01-16 06:25
一、首先在计算机上安装NI提供的驱动库,然后在计算机上找到相应的库文件和头文件
文件目录:C:\Program Files (x86)\IVI Foundation\VISA\WinNT
其中lib文件在: lib\msc\visa32.lib 和ivi.lib
头文件在: include
二、添加库到工程
博主是直接将库文件和对应的头文件复制到了工程目录下,然后在工程中添加了对lib库的引用,vs2010中引用visa库操作如下,
1 菜单 项目—> 属性—>配置属性–>链接器—->输入—附加依赖项, 加入库名,如: visa32.lib;
或是在cpp源文件中用代码#pragma comment(lib,”visa32.lib”)代替. 此时再编译会提示错误:fatal error LNK1104: 无法打开文件“my_API.lib” , 原因应该是编译器不知道去哪里找我们的这个库,下面就来解决
2 然后给项目添加库文件路径,添加附加库路径:
“项目—>属性—>配置属性—>连接器–>常规–>附加库目录” 点右边的向下箭头,这里添加 我们的库所在的路径. F:\my_program\meiyong\PPPP_Decode_ETIM;或 ../../PPPP_Decode_ETIM, 而且经试验测试是以项目文件.vcxproj 所在目录为当前目录,当前以当前目录这个方式设置更好了.这样就好了.
三、在工程中使用visa库
下面的代码中是在VS2010中通过调用visa库发送*IDN?来查询仪器的ID
#include "visa/include/visa.h"#include "visa/include/ivi.h"#pragma comment(lib,"visa32.lib")#pragma comment(lib,"ivi.lib")#define MAX_SCPI_LENGTH 255 // 最大的SCPI命令 #define DEFAULT_TIMEOUT 5000 // 超时:5000ms int main(void)
{
ViStatus nReturnStatus = 0; // 保存返回数值
ViSession rmSession = 0,pnInstrHandle;
ViUInt32 retCnt = 0;
ViByte wrtBuf[MAX_SCPI_LENGTH]; // 写缓冲区
ViByte rdBuf[MAX_SCPI_LENGTH]; // 读缓冲区
int Return_Count;

nReturnStatus = viOpenDefaultRM (&rmSession);
nReturnStatus = viOpen (rmSession, "TCPIP0::172.141.114.6::5001::SOCKET", VI_NULL, VI_NULL, &pnInstrHandle);
nReturnStatus = viSetAttribute (pnInstrHandle, VI_ATTR_TMO_VALUE, DEFAULT_TIMEOUT); // 设置超时
nReturnStatus = viSetAttribute (pnInstrHandle, VI_ATTR_SUPPRESS_END_EN, VI_FALSE); // 不发送终止符
nReturnStatus = viSetAttribute (pnInstrHandle, VI_ATTR_SEND_END_EN, VI_FALSE); // 不接收终止符

nReturnStatus = viQueryf (pnInstrHandle, "*IDN?\n", "%s", rdBuf);
viClose (pnInstrHandle);
viClose (rmSession);

return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息