你这个原因是 VISA读取到指定数目没读到,但是已经超时。
创新互联建站网站建设公司一直秉承“诚信做人,踏实做事”的原则,不欺瞒客户,是我们最起码的底线! 以服务为基础,以质量求生存,以技术求发展,成交一个客户多一个朋友!专注中小微企业官网定制,成都网站设计、成都网站制作,塑造企业网络形象打造互联网企业效应。
比如你设定读取10个字节,结果读取到8个,一直等不到。而且串口是有超时的,默认是10S。
百度“那些年,我们一起LabVEIW”,仪器版块试试。里面有教程。
一般来说,控制仪器如果要立即返回的话,加个终止符就可以了。
仪器一般都有终止符 ODOA之类的。用终止符检测字符串最好。
一、首先在计算机上安装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);
/*- Configure VISA Formatted I/O ----------------------------------------*/
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;
}
要把VISA32.BAS这个模块加到工程中来, 一般, visa32.bas存在 C:'\program files\IVI Foundation\VISA 下面, 就可以调用里面的visa函数了
在LabVIEW中使用VISA
VISA是仪器编程的标准I/O API。
VISA的多种用途
VISA可控制GPIB、串口、USB、以太网、PXI或VXI仪器,并根据使用仪器的类型调用相应的驱动程序,用户无需学习各种仪器的通信协议。VISA独立于操作系统、总线和编程环境。换言之,无论使用何种设备、操作系统和编程语言,均使用相同的API。
开始使用VISA之前,应确保选择合适的仪器控制方法。
GPIB、串口、USB、以太网和某些VXI仪器使用基于消息的通信方式。对基于消息的仪器进行编程,使用的是高层的ASCII字符串。仪器使用本地处理器解析命令字符串,设置合适的寄存器位,进行用户期望的操作。SCPI(可编程仪器标准命令)是用于仪器编程的ASCII命令字符串的标准。相似的仪器通常使用相似的命令。用户只需学习一组命令,而无需学习各个仪器生产厂商各种仪器的不同命令消息。最常用的基于消息的函数是:VISA读取、VISA写入、VISA置触发有效、VISA清空和VISA读取STB。
PXI和许多VXI仪器使用基于寄存器的通信方式。对基于寄存器的仪器进行编程,使用的是将直接写入仪器控制寄存器的底层二进制信息。该通信方式的优点是速度快,因为仪器不需解析命令字符串,并将信息转换为寄存器层次的程序。基于寄存器的仪器实际上是在直接硬件操作层上进行通信。最常用的基于寄存器的函数是:VISA输入、VISA输出、VISA转入和VISA转出。
这个可以做的
Labview用来做上位机软件是很合适很方便的,可以对数据进行保存和实时的分析。想通过串口采集到下位机(单片机)的数据,可以实时显示波形和保存数据。
我做过一个温度采集器,单片机用DS18B20采集温度数据后通过串口发送到PC端,Labview接收数据后实时波形显示温度的变化趋势,同时把温度数据保存在excel表中。
visa/master交易主要流程:
1.客户支付支付时,如果是无卡交易,出示信用卡的卡号,过期时间,收货地址,信用卡验证码cw2 !
2.商户刷卡,输入金额,系统向商户银行提交一个交易授权的请求,对于无卡交易,则通过键盘输入。
3.商户银行把交易授权请求发送到visanet系统。
4.visanet解析授权请求中的卡号,然后把授权请求转发到发卡行。
5.发卡行拒绝或同意交易。
6.visanet把发卡行返回的拒绝或同意的授权应答转发给商户银行系统。
7.商户银行把授权应答转发给商户。
8.商户根据授权应答完成交易。
9.商户把交易收据提交到商广银行。
10.商户银行贷商户账户,根据交易划拨资金到商户账户,并提交交易结账请求到 visanet 。
11.visanet结账,借发卡行账户,贷商户银行账户,并提交交易到发卡行。
12.发卡行在信用卡持卡人账户增加一笔交易,并发送账单到持卡人收账地址。
13.持卡人收到账单。
14.持卡人还款,在整个处理过程中,visa组织要求商户不得存储授权敏感信息,例如cw2码。
拓展资料:
VISA又译为维萨,是一个信用卡品牌,由位于美国加利福尼亚州旧金山市的Visa国际组织负责经营和管理。
VISA卡于1976年开始发行,它的前身是由美洲银行所发行的Bank Americard。
2017年6月,《2017年BrandZ全球最具价值品牌百强榜》公布,Visa以1109.99亿美元的品牌价值排第7名。2018年5月29日,《2018年BrandZ全球最具价值品牌100强》发布,VISA排名第7位。2018年12月,VISA入围2018世界品牌500强。2019年10月,Interbrand发布的全球品牌百强榜排名55。2019年10月23日,2019《财富》未来50强榜单公布,Visa排名第43。2020年1月13日,入选2020胡润至尚优品获奖名单。