我正在尝试通过 LabVIEW 中的 IEEE 与 Solartron 7060 电压表进行通信。我必须转换一些最初用于通信的旧 C 代码,但无法找到从 Solartron 获取主要数据的方法。
这是C代码:
#include "ieeeio.h"
#include <stdio.h>
double DATDVM(int dvmtime,int lasttime)
{
float value;
double Volt,volt;
int j,response=0;
if (lasttime!=dvmtime)
{
if (dvmtime<1)
{
if (ieeewt("clear 16\n")==-1) IEEEERR();
if (ieeewt("abort\n")==-1) IEEEERR();
if (ieeewt("output 16;D2F1M0R3\n")==-1) IEEEERR();
}
else
{
if (ieeewt("clear 16\n")==-1) IEEEERR();
if (ieeewt("abort\n")==-1) IEEEERR();
if (ieeewt("output 16;D3F1M0R3\n")==-1) IEEEERR();
}
}
if (dvmtime<1)
{
if (ieeewt("abort\n")==-1) IEEEERR();
if (ieeewt("output 16;G\n")==-1) IEEEERR();
while (response != 24)
{
delay(50);
if (ieeewt("spoll 16\n")==-1) IEEEERR();
if (ieeescnf("%d",&response)==-1) IEEEERR();
}
response=0;
if (ieeewt("enter 16\n")==-1) IEEEERR();
if (ieeescnf("%*5s%e",&value)==-1) IEEEERR();
Volt=value;
}
else
{
volt=0;
for (j=0; j<dvmtime; j++)
{
if (ieeewt("abort\n")==-1) IEEEERR();
if (ieeewt("output 16;G\n")==-1) IEEEERR();
while (response != 24)
{
delay(50);
if (ieeewt("spoll 16\n")==-1) IEEEERR();
if (ieeescnf("%d",&response)==-1) IEEEERR();
}
response=0;
if (ieeewt("enter 16\n")==-1) IEEEERR();
if (ieeescnf("%*5s%e",&value)==-1) IEEEERR();
volt+=value;
}
Volt=volt/dvmtime;
}
return(Volt);
}
dvmtime
此代码在以秒为单位的某个积分时间内对直流电压(来自静电计检测到的旧质谱仪上的法拉第检测器)进行采样。以便告诉 7060 DVM 在volt
设定的积分时间内读取读数Dvmtime
。
我尝试了以下 LabVIEW 代码,其中一部分来自控制 Solartron 7061 万用表的 .vi。在我发送的这段代码D3F1MOR3
中,它来自ieeewt
C 代码第一块中的函数。但是,我很难找到与ieeescnf
LabVIEW 中等效的函数。
我第一次运行 .vi 时,它会返回正确的电压读数,然后在第二次运行时返回0
,在第三次运行时返回大量数据。此外,每次运行所需的时间也有很大差异。
任何帮助将不胜感激,因为我不确定这个 C 代码在每个阶段都在做什么。