这段代码加注释vec.SetPinVoltage(0); vec.ClosePinRelay(allpin,SIZEOF_ARRAY(allpin)); int i,j; int k,n; int data_num[4096]={0}; for(i=0;i<4096;i++) { data_num[i]=0; } DWORD * pea = new DWORD[49440]; BYTE * buf = new BYTE [98880]; assert(pea != NULL); assert(buf != NULL); int adc_data; int mid_data[24]; FILE fp; fp = fopen(filename,"w"); int con; for(con=0;con<10;con++) { Create_AWG_Data(con); vec.Run(0,18); while(vec.Running()); DWORD ern = vec.GetResult(); if(ern) { if(fp!=NULL) { vec.GetFailData(ern,pea,buf,outpin,SIZEOF_ARRAY(outpin)); n=(int)ern/12; for(i=0;i<n;i++) { j=i24; for(k=0;k<24;k++) { mid_data[k]=(int)buf[j+k]; } adc_data=(mid_data[0]<<11) | (mid_data[2]<<10) | (mid_data[4]<<9) | (mid_data[6]<<8) | (mid_data[8]<<7) | (mid_data[10]<<6) | (mid_data[12]<<5) | (mid_data[14]<<4) | (mid_data[16]<<3) | (mid_data[18]<<2) | (mid_data[20]<<1)|mid_data[22]; data_num[adc_data]++; fprintf(fp,"%d: %d\n",i+con*4120,adc_data); } } } } for(i=0;i<4096;i++) { if (data_num[i]) fprintf(fp,"%d: %d\n",i,data_num[i]); } vec.OpenPinRelay(allpin,SIZEOF_ARRAY(allpin)); SetCurrentDirectory(temp1); unsigned long all_data_num=0; for(i=1; i<4095; i++) { all_data_num+=data_num[i]; }
时间: 2023-07-15 11:13:59 浏览: 81
这段代码是用来采集模拟信号的数据,并将数据存储到文件中。下面是代码的详细解释:
```
vec.SetPinVoltage(0); // 设置引脚电压为0
vec.ClosePinRelay(allpin,SIZEOF_ARRAY(allpin)); // 关闭所有引脚的继电器
int i,j;
int k,n;
int data_num[4096]={0}; // 构建一个大小为4096的数组,用来记录每个ADC值出现的次数,初始化为0
DWORD * pea = new DWORD[49440]; // 分配存储空间
BYTE * buf = new BYTE [98880]; // 分配存储空间
assert(pea != NULL); // 检查内存分配是否成功
assert(buf != NULL);
int adc_data;
int mid_data[24];
FILE fp;
fp = fopen(filename,"w"); // 打开文件
int con;
for(con=0;con<10;con++) { // 循环10次采集数据
Create_AWG_Data(con); // 函数调用,用于生成模拟信号
vec.Run(0,18); // 启动数据采集
while(vec.Running()); // 等待数据采集完成
DWORD ern = vec.GetResult();
if(ern) { // 如果采集失败
if(fp!=NULL) {
vec.GetFailData(ern,pea,buf,outpin,SIZEOF_ARRAY(outpin)); // 获取失败数据
n=(int)ern/12;
for(i=0;i<n;i++) {
j=i*24;
for(k=0;k<24;k++) {
mid_data[k]=(int)buf[j+k]; // 分离出ADC的24个数据
}
adc_data=(mid_data[0]<<11) | (mid_data[2]<<10) | (mid_data[4]<<9) | (mid_data[6]<<8) | (mid_data[8]<<7) | (mid_data[10]<<6) | (mid_data[12]<<5) | (mid_data[14]<<4) | (mid_data[16]<<3) | (mid_data[18]<<2) | (mid_data[20]<<1)|mid_data[22]; // 计算出ADC值
data_num[adc_data]++; // 将ADC值出现的次数加1
fprintf(fp,"%d: %d\n",i+con*4120,adc_data); // 将数据写入文件
}
}
}
}
for(i=0;i<4096;i++) { // 循环遍历所有ADC值
if (data_num[i]) fprintf(fp,"%d: %d\n",i,data_num[i]); // 如果这个ADC值出现过,则将其次数写入文件
}
vec.OpenPinRelay(allpin,SIZEOF_ARRAY(allpin)); // 打开所有引脚继电器
SetCurrentDirectory(temp1); // 设置当前目录
unsigned long all_data_num=0;
for(i=1; i<4095; i++) {
all_data_num+=data_num[i]; // 计算数据总数
}
```
总的来说,这段代码主要包括以下几个步骤:设置引脚电压为0,关闭所有引脚继电器,循环10次采集数据,获取失败数据并分离出ADC值,将ADC值出现的次数加1并将数据写入文件,打开所有引脚继电器,计算数据总数。
阅读全文