Multifunction 데이터 수집(MIO) 보드의 예제를 Dynamic Signal Acquisition(DSA)보드에서 사용하는 방법



주요한 소프트웨어:
주요한 소프트웨어 버전: N/A
문제가 해결된 소프트웨어 버전: N/A
부차적인 소프트웨어:

문제점: NI-DAQ에서 제공되는 MIO 보드 예제를 DSA 보드(NI 4451/4452/4454/4472)에서 사용하면 디버깅 에러가 발생합니다. DSA 보드에서 사용하기 위하여 어떤 부분을 고쳐야 됩니까?

솔루션: NI-DAQ와 함께 제공되는 Example은 MIO보드용입니다.
이 MIO 보드용 텍스트 기반 코드를 DSA 보드에서 사용하기 위해서는 아래의 4가지 사항을 고쳐주어야 됩니다:

1) Binary Buffer 선언의 데이터 타입을 32-bit Integers (i32)로 바꾸어 줍니다.

MIO 보드의 최대 ADC resolution이 16비트이므로 i16으로 되어 있습니다. 그러나 DSA 보드는 24 비트이므로 i32로 선언을 해줘야 됩니다.

MIO 예제에서는
static i16 piBuffer[1000] = {0};
static i16 piHalfBuffer[500] = {0};

DSA 예제에서는
static i32 piBuffer[1000] = {0};
static i32 piHalfBuffer[500] = {0};

만약 Dynamic Memory Allocation을 원한다면
MIO 예제에서는
i16* piBuffer; //Declare a pointer to an i16 value
piBuffer = (i16*)malloc (1000 * sizeof(i16*)); //Dynamically allocate memory for 1000 samples, each of type i16.

DSA 예제에서는
i32* piBuffer; //Declare a pointer to an i32 value
piBuffer = (i32*)malloc (1000 * sizeof(i32*)); //Dynamically allocate memory for 1000 samples, each of type i32.


2) Binary Buffer Parameter를 호출하는 모든 함수들을 16 비트 Integer(i16)로 Typecast합니다.

DAQ_Start, DAQ_Vscale, DAQ_DB_Transfer, DAQ_Monitor, WFM_Op, 그리고 WFM_DB_Transfer와 같은 함수들은 Prototype으로 i16 타입의 데이터를 받으므로 Step 1의 i32 변수 선언이 문제를 발생시킵니다. 그러므로 Typecast를 이용하여 다시 i16으로 바꾸어 주어야 됩니다.

다음의 함수들을
iStatus = DAQ_Start(iDevice, iChan, iGain, piBuffer, ulCount, iSampTB, uSampInt);

iStatus = DAQ_VScale(iDevice, iChan, iGain, dGainAdjust, dOffset, ulCount, piBuffer, pdVoltBuffer);

아래와 같이 Typecast를 합니다.
iStatus = DAQ_Start(iDevice, iChan, iGain, (i16*) piBuffer, ulCount,0, 0); //Sample Timebase & Interval, not needed for DSA

iStatus = DAQ_VScale(iDevice, iChan, iGain, dGainAdjust, dOffset, ulCount, (i16*) piBuffer, pdVoltBuffer);


3) DAQ_Rate함수를 DAQ_Set_Clock으로, 그리고 WFM_Rate함수는 WFM_Set_Clock으로 대체합니다.

아날로그 입력이나 출력의 Rate를 조절하기 위하여
MIO보드는 DAQ_Start 또는 WFM_Start를 사용합니다.

예를 들어
iStatus = DAQ_Rate(dSampRate, iUnits, &iSampTB, &uSampInt);

DSA 보드는 다음을 사용합니다.
iStatus = DAQ_Set_Clock (iDevice, 0, dSampRate, 0, &actualRate);


4) Linear Gain을 Decibels (dB)로 바꿉니다.

MIO 보드에서는 Linear Gain을 사용합니다. DAQ_Start 그리고 DAQ_Op 함수를 사용함.
반면 DSA 보드는 Decibels (dB)을 사용합니다.

dB gain = 20 * log10 (linear gain)

그러므로 변수 선언에서 Gain의 값을 위의 식을 참조하여 바꾸어 주어야 됩니다.

예를 들어, MIO 보드에서
i16 iGain = 1; // Linear gain value for MIO

DSA 보드에서
i16 iGain = 0; // Equivalent DSA gain in dB 입니다.



관련 링크: Example Program: CVI NI-DAQ Code for DSA


첨부:





리포트 날짜: 01/28/2002
마지막 업데이트: 03/11/2003
문서 번호: 2HRJ1TJT