From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.



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