這是 E-1608 特有的示例。它使用 Discovery 界面來定位 E-1608 并對其進行編程。運行 InstaCal 不是必需的,但您必須安裝它。該程序是在 Visual Studio 中創(chuàng)建的一個簡單的 32 位控制臺程序。要運行該程序,請創(chuàng)建一個 32 位控制臺項目,將 cbw.h 和 cbw32.dll 文件與代碼文件一起添加到其中,代碼文件附在本文底部。
/* 包含文件 */
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include "cbw.h"
#define 率 100
#define LowChan 0
#define HighChan 4
#define ChanCount 5
#define 數(shù)據(jù)包 100
#define COUNT PACKET * ChanCount
#define MAXNUMDEVS 100
無效主()
{
/* 變量聲明 */
int i = 0;
int j = 0;
整數(shù)索引 = 0;
長curCount,curIndex;
int ULStat = 0;
int 增益 = BIP10VOLTS;
長率 = 率;
短狀態(tài);
長半緩沖 = COUNT / 2;
long NumRows = PACKET / 2;
bool NextReadUpper = false;
int numberOfDevices = MAXNUMDEVS;
DaqDeviceDescriptor 庫存[MAXNUMDEVS];
DaqDeviceDescriptor DeviceDescriptor;
int BoardNum = -1;
float Rev = (float)CURRENTREVNUM;
ULStat = cbDeclareRevision(&Rev);
cbErrHandling(打印,停止);
printf("后臺模式下cbAInScan()演示\n\n");
//忽略 InstaCal 設(shè)備發(fā)現(xiàn)
cbIgnoreInstaCal();
//定位USB設(shè)備
ULStat = cbGetDaqDeviceInventory(ANY_IFC, 庫存, &numberOfDevices);
for (i = 0; i < numberOfDevices; i++)
{
DeviceDescriptor = 庫存[i];
//E-1608 的產(chǎn)品 ID = 0x012F
//產(chǎn)品 ID 可以在位于的 ULProps.txt 中找到
// C:\Program Files (x86)\Measurement Computing\DAQ
if (DeviceDescriptor.ProductID == 0x012F)
{
BoardNum = i;
ULStat = cbCreateDaqDevice(BoardNum, DeviceDescriptor);
printf("設(shè)備名稱:%s\n", DeviceDescriptor.ProductName);
休息;
}
}
如果(BoardNum < 0)
{
printf("找不到USB設(shè)備...按任意鍵退出\n");
獲取();
返回;
}
cbAInputMode(BoardNum, SINGLE_ENDED);
//分配緩沖區(qū)
句柄 MemHandle = 0;
MemHandle = cbScaledWinBufAlloc(COUNT);
雙縮放數(shù)據(jù)[計數(shù)];
unsigned long RawData[COUNT]; //讀取計數(shù)
無符號選項=背景 + 連續(xù) + SCALEDATA;
ULStat = cbAInputMode(BoardNum, SINGLE_ENDED);
如果(ULStat!= 0)
printf("%d", ULStat);
// 從 AOUT0 連接一根導(dǎo)線到 CH0H 以施加 2.5v 測試電壓
ULStat = cbVOut(BoardNum, 0, BIP10VOLTS, 2.5f, 0);
//開始獲取
ULStat = cbAInScan(BoardNum,
低燦,
高燦,
數(shù)數(shù),
&速度,
獲得,
內(nèi)存句柄,
選項);
如果(ULStat!= 0)
printf("%d", ULStat);
而 (!_kbhit())
{
//此循環(huán)讀取緩沖區(qū)的下半部分,然后連續(xù)讀取上半部分。
// 它使用 NextReadUpper 標志,以便緩沖區(qū)的每一半都被讀取一次
ULStat = cbGetStatus(BoardNum, &Status, &curCount, &curIndex, AIFUNCTION);
如果(ULStat!= 0){
printf("錯誤代碼 %d\n", ULStat);
休息;
}
if ((curIndex > halfbuf) && (NextReadUpper == false))
{
NextReadUpper = true;
指數(shù) = 0;
cbScaledWinBufToArray(MemHandle, ScaledData, 0, halfbuf);
for (j = 0; j< NumRows; j++)
{
for (i = 0; i<ChanCount; i++)
{
printf("%2.3f\t", ScaledData[index++]);
}
printf("\n");
}
}
else if ((curIndex < halfbuf) && (NextReadUpper == true))
{
NextReadUpper = false;
指數(shù) = 0;
cbScaledWinBufToArray(MemHandle, ScaledData, halfbuf, halfbuf);
for (j = 0; j< NumRows; j++)
{
for (i = 0; i<ChanCount; i++)
{
printf("%2.3f\t", ScaledData[index++]);
}
printf("\n");
}
}
睡眠(1);
}
cbStopBackground(BoardNum, AIFUNCTION);
cbWinBufFree(MemHandle);
cbReleaseDaqDevice(BoardNum);
printf("完成...按任意鍵退出\n");
獲取();
}