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

2019-07-18 08:34发布

//用户名设置errvi->error=viRead (vi, c, 4,retCount);              //c=80000009errvi->error=viRead (vi,d, 9, retCount);              //d=”username”WT3000Write(errvi,"anonymous",&Acknowledge,&DataLength);  //密码设置errvi->error=viRead (vi, c, 4, retCount);              //c=80000009errvi->error=viRead (vi,d, 9, retCount);               //d=”password”WT3000Write(errvi,"",&Acknowledge,&DataLength);//电压量程设置errvi->error=viRead (vi, c, 4,retCount);               //c=80000014errvi->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,但是总是收不着,,改变超时时间、改变viWriteviRead之间的时间间隔好像都不起作用。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
fantek
1楼-- · 2019-07-18 08:41
本帖最后由 fantek 于 2013-9-30 18:25 编辑

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

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

fantek
3楼-- · 2019-07-18 10:13
zhangming211 发表于 2013-10-8 11:01
所有的retCount都返回NULL,我的电压量程的:VOLT:MODE:ALLRMS;:VOLT:AUTO OFF;:VOLT:RANG:ALL1000V;是可 ...

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

一周热门 更多>