//
用户名设置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
,但是总是收不着,,改变超时时间、改变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.
一周热门 更多>