5.1.5. COMI_WFM_Start


SYNOPSYS

long COMI_WFM_Start (HANDLE hDevice, int ch, float *pDataBuffer, UINT nNumData, UINT nPPS, int nMaxLoops)

DESCRIPTION

  • 이 함수는 Waveform Generation 을 시작합니다.

PARAMETER

▶ hDevice : 디바이스 핸들값입니다. 이 값은 COMI_LoadDevice() 함수에 의해 얻어진 값이어야 합니다.

▶ ch : Waveform 신호를 출력할 D/A 채널 번호. 이 값은 0 또는 1 이어야 합니다.

▶ pDataBuffer : Waveform 데이터를 담은 버퍼의 주소값(포인터). Waveform Generation 기능을 지원하는 보드는 이 버퍼에 담겨진 데이터를 보드에 내장된 FIFO 메모리에 로드하므로 이 버퍼는 지역변수이어도 상관 없습니다.

▶ nNumData : 버퍼에 담겨진 데이터의 수

▶ nPPS : Waveform Generation 의 주기를 결정합니다. 이 값은 Points/Second 입니다. 예를 들어 100개의 데이터로 한 주기를 구성하였다면 10Hz 의 신호를 만들기 위해서는 nPPS 는 1000이 되어야 합니다.

▶ nMaxLoops : 이 값이 0 보다 크면 생성되는 Wave 신호의 수를 제한합니다. 이 값이 0 이면 COMILX_WFM_Stop() 함수가 수행되기 전까지 계속하여 Wave 신호를 생성합니다.

RETURN VALUE

  • 실제로 설정되는 Points/Second 를 반환합니다. 사용자가 지정한 PPS 와 실제로 설정되는 PPS 는 약간의 차이가 있을 수 있습니다. 이 값이 0 보다 작으면 수행도중 에러가 발생하였음을 의미합니다.

Device

  • 지원 디바이스: COMI-SD301

EXAMPLE

  • Waveform Generation 사용 예 1

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include "Comidas.h"

#define DEV_ID COMI_SD301
#define CHAN 0
#define AMP 5 // AMPLITUDE
#define FREQ 1000 // FREQUENCY

void main (void)
{
  HANDLE hDevice;
  float fWaveBuf[2] = {AMP, -AMP};

  if(!COMI_LoadDll()){
    printf("Comidas.dll load failure");
    printf("아무키나 누르면 프로그램이 종료됩니다.. \n");
    _getch();
    exit(0);
  }

  hDevice = COMI_LoadDevice (DEV_ID, 0);
  if(hDevice == INVALID_HANDLE_VALUE){
    printf("Can't load specified device!");
    printf("아무키나 누르면 프로그램이 종료됩니다.. \n");
    _getch();
    COMI_UnloadDll();
    exit(0);
  }

  printf("Waveform Generation 을 시작하려면 아무키나 누르십시오. \n");
  printf("아무키나 다시 누르면 프로그램이 종료됩니다. \n");
  _getch();
  COMI_WFM_Start(hDevice,CHAN,fWaveBuf, 2, 2*FREQ, 0);
  while(!_kbhit())
    ;
  COMI_WFM_Stop(hDevice, CHAN);
  COMI_UnloadDevice(hDevice);
  COMI_UnloadDll();
}

EXAMPLE2

  • Waveform Generation 사용 예 2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include "Comidas.h"

#define DEV_ID COMI_SD301
#define CHAN 0
#define AMP 5 // AMPLITUDE
#define FREQ 1000 // FREQUENCY
#define N 50

void main(void)
{
  HANDLE hDevice;
  float fWaveBuf[N], rad;
  long nCount;

  if(!COMI_LoadDll()){
    printf("Comidas.dll load failure");
    printf("아무키나 누르면 프로그램이 종료됩니다.. \n");
    _getch();
    exit(0);
  }

  hDevice = COMI_LoadDevice(DEV_ID, 0);
  if(hDevice == INVALID_HANDLE_VALUE){
    printf("Can't load specified device!");
    printf("아무키나 누르면 프로그램이 종료됩니다..\n");
    _getch();
    COMI_UnloadDll();
    exit(0);
  }

  rad = 2*3.141592f/N;
  for(int i = 0; i<N; i++)
    fWaveBuf[i] = AMP * sin(i*rad);
    printf("Waveform Generation을 시작하려면 아무키나 누르십시오. \n");
    printf("아무키나 다시 누르면 프로그램이 종료됩니다. \n");
    _getch();

    while(!_kbhit()){
      COMI_WFM_Start(hDevice, CHAN, fWaveBuf, N, N*FREQ, 1000);
      printf("Waveform Generation has started!\n");
      while((nCount = COMI_WFM_GetCurLoops(hDevice, CHAN)) > 0){
        printf("Remainning Loops = %d\n", nCount);
      }
      printf("Waveform Generation has finished!");
      Sleep(1000);
    }
    COMI_WFM_Stop(hDevice, CHAN);
    COMI_UnloadDevice(hDevice);
    COMI_UnloadDll();
}