微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 测试测量 > Labview > CVI大神帮帮忙,TCP仪器通信问题

CVI大神帮帮忙,TCP仪器通信问题

时间:10-02 整理:3721RD 点击:

//用户名设置

errvi->error=viRead (vi, c, 4,retCount);              //c=80000009

errvi->error=viRead (vi,d, 9, retCount);              //d=”username”

WT3000Write(errvi,"anonymous",&Acknowledge,&DataLength);  

//密码设置

errvi->error=viRead (vi, c, 4, retCount);              //c=80000009

errvi->error=viRead (vi,d, 9, retCount);               //d=”password”

WT3000Write(errvi,"",&Acknowledge,&DataLength);

//电压量程设置

errvi->error=viRead (vi, c, 4,retCount);               //c=80000014

errvi->error=viRead (vi,d, 20,retCount);               //d=”clt serveris ready.”

WT3000Write(errvi,":VOLT:MODE:ALLRMS;:VOLT:AUTO OFF;:VOLT:RANG:ALL1000V;",&Acknowledge,&DataLength);

void WT3000Write(struct errorvi*errvi1,char WriteDate[],int*Acknowledge,int*DataLength)

{

int changdu=0;

int b=0x0;

char c[20]="";

int result=0;

char bchar[200]="";

        if(SkipWhiteSpace (WriteDate)==NULL)

        {

         changdu=0;

        }

        else

        {

         changdu=strlen(WriteDate);

        }

        

*DataLength=changdu;                      //9

b=0x80000000|changdu;                             //0x80000009

bchar[0]=(b>>24)&0x00ff;

bchar[1]=(b>>16)&0x00ff;

bchar[2]=(b>>8)&0x00ff;

bchar[3]=b&0x00ff;

strcat(bchar+4,WriteDate);

errvi1->error=viWrite (vi, bchar, 200, retCount);

//Delay(5);

errvi1->error=viRead (vi, c, 4, retCount);      //返回指令放在c中

}

采用Labwindows与可编程功率测试仪WT3000  TCP通信,其中WT3000Write中将要发送的内容与内容的长度连接起来通过viWrite写入,然后立即读回一个返回指令。在用户名设置和密码设置中都能够成功返回指令80000000,在电压量程设置中的程序死在WT3000Write里面的visa read:Timeout expired before operation completed.理论上也应该收到返回指令80000000,但是总是收不着,,改变超时时间、改变viWrite与viRead之间的时间间隔好像都不起作用。


检查errvi1->error=viWrite (vi, bchar, 200, retCount);语句中的retCount是否为200,或者是否等于你发送字符串的长度,如果不是,说明参数配置没有正确完成,仪器可能错误响应下面的viread()函数。建议对所有函数执行后的retCount进行检查,viWrite()和viRead()函数好象还有一个传入参数,即错误代码,根据错误代码可以查找函数的错误信息。

所有的retCount都返回NULL,我的电压量程的:VOLT:MODE:ALLRMS;:VOLT:AUTO OFF;:VOLT:RANG:ALL1000V;是可以设置仪器的量程,说明viWrite (vi, bchar, 200, retCount);发挥作用啦,但是执行errvi1->error=viRead (vi, c, 4, retCount)总是出现超时错误;现在想要解决的是超时的问题。
麻烦大神了,我现在困惑的很,能否可以告知QQ号码呢,想仔细咨询下,谢啦

读之前可以判断一下当前缓冲中的字节数,然后再读。另外手册中是否有介绍写完VOLD:MODE....之后,仪器就立即返回数据呢,是不是还需要别的命令。可以找一个tcp调试助手软件调试一下。read超时的原因就是一直等到读取的字节数达到设置的字节数时,才返回,否则有可能timeout.

查了一下,这个问题还不是很简单就能解决的,建议还是寻求YOKOGAWA的技术支持吧。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top