【发布时间】:2021-09-08 16:29:28
【问题描述】:
我正在尝试通过 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 在设定的积分时间 Dvmtime 内读取 volt。
我尝试了以下 LabVIEW 代码,其中一部分来自控制 Solartron 7061 万用表的 .vi。在这段代码中,我发送D3F1MOR3,它来自C 代码第一块中的ieeewt 函数。但是,我在 LabVIEW 中找不到与 ieeescnf 等效的函数。
第一次运行 .vi 时,它会返回正确的电压读数,然后在第二次运行时返回 0,在第三次运行时返回大量数字。此外,每次运行所需的时间也有很大差异。
任何帮助将不胜感激,因为我不确定此 C 代码在每个阶段都在做什么。
【问题讨论】: