// 说明: 本程序演示了如何用程序查询方式读取AD数据 #include "stdafx.h" #include "windows.h" #include "stdio.h" #include "conio.h" #include "ACTS1000.h" #define AD_DATA_LEN 256*1024 // 要读取和处理的AD数据长度(点或字) USHORT ADBuffer[AD_DATA_LEN]; // 分配缓冲区(存储原始数据) int main(int argc, char* argv[]) { HANDLE hDevice; int DeviceLgcID; ULONG ulDDR2Length = 0; ACTS1000_PARA_AD ADPara; // 硬件参数 ACTS1000_STATUS_AD ADStatus; ULONG nRetSizeWords; ULONG nAvailSampsPoints; ULONGLONG nReadSizeRemain; ULONGLONG nReadSizeWords; ULONG nRead; ULONG InputRange = ACTS1000_INPUT_N1000_P1000mV; int nADChannel = 0; WORD ADData; float fVolt; ACTS1000_AD_MAIN_INFO ADMainInfo; WORD wMaxLSB = 0x3FFF; float fLsbCount = 16384.0; DeviceLgcID = 0; printf("请输入逻辑ID:"); scanf_s("%d", &DeviceLgcID); hDevice = ACTS1000_CreateDevice(DeviceLgcID); // 创建设备对象 if(hDevice == INVALID_HANDLE_VALUE) { printf("CreateDevice error...\n"); _getch(); return 0; // 如果创建设备对象失败,则返回 } ACTS1000_GetMainInfo(hDevice,&ADMainInfo); // DDR2的长度(单位:MB) switch (ADMainInfo.nDeviceType>>16) { case 0x2012: printf("PXIE%04X\n",ADMainInfo.nDeviceType&0xFFFF); break; case 0x2111: printf("PCIE%04X\n",ADMainInfo.nDeviceType&0xFFFF); break; default: printf("ACTS1000-%04X\n",ADMainInfo.nDeviceType); } wMaxLSB = (WORD)(ADMainInfo.nSampCodeCount - 1); fLsbCount = (float)ADMainInfo.nSampCodeCount; ULONG nRevisionID = 0; if(!ACTS1000_GetBusInfo(hDevice, NULL, NULL, NULL, &nRevisionID)) { printf("ACTS1000_GetBusInfo error...\n"); } memset(&ADPara, 0x00, sizeof(ADPara)); // 将各项参数复位至确定值0(强烈建议) // 预置硬件参数 ADPara.SampleMode = ACTS1000_SAMPMODE_FINITE; // 有限点采样 ADPara.FreqDivision = 1; for (int nCH=0; nCHulSecCnt) { ulSecCnt = ulTmp/1000; dResult = ADStatus.lSavePoints*1.00/((ulTmp+1)/1000.0); dResult=dResult/1000000.0; printf("%dS ",ulSecCnt); printf("%.3fM点/秒\n",dResult); } } } } else { nReadSizeRemain = nReadSizeWords; while (nReadSizeRemain>0) { if (nReadSizeRemain>=AD_DATA_LEN) { nRead = AD_DATA_LEN; } else { nRead = nReadSizeRemain; } NextRead: if(_kbhit()) goto ExitRead; if(!ACTS1000_ReadDeviceAD(hDevice, ADBuffer, nRead, &nRetSizeWords, &nAvailSampsPoints,1.0)) { printf("ReadDeviceAD error...\n"); _getch(); goto ExitRead; } if (nRetSizeWords<=0) { goto NextRead; } nReadSizeRemain = nReadSizeRemain-nRetSizeWords; #if 1 ulTmp = GetTickCount()-ulTime; if (ulTmp/1000>ulSecCnt) { ulSecCnt = ulTmp/1000; dResult = (nReadSizeWords-nReadSizeRemain)*1.00/((ulTmp+1)/1000.0); dResult=dResult/1000000.0; printf("%dS ",ulSecCnt); printf("%.3fM点/秒\n",dResult); ULONG nTChannel = 0; for(int Index=0; Index<8; Index++) { for(nADChannel=nTChannel; nADChannel