COMI_US_Start


SYNOPSYS

long COMI_US_Start (HANDLE hDevice, int numCh, int *chanList,
UINT scanFreq, UINT bufSize, int trsMethod)

DESCRIPTION

  • 이 함수는 Unlimited Scan 기능을 시작합니다.

PARAMETER

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

▶ numCh : Scan 할 A/D 채널의 수.

▶ chanList : A/D Scan 을 수행할 채널 리스트를 담고 있는 배열 또는 포인터.

▶ scanFreq : A/D Scan Frequency를 지정합니다. 이 값은 SCAN 과 SCAN 사이의 시간차를 결정합니다.

▶ bufSize스캔 데이터를 저장할 환형버퍼의 크기를 지정합니다.

이 값의 단위는 바이트가 아니고 SCAN 횟수입니다. 예를 들어, 채널이 2 채널일 때 bufSize 값을 10240 으로 지정하면 실제로는 2 * 10240 * sizeof(short) = 40960 바이트 크기의 버퍼가 할당됩니다. 이 값은 1024 의 배수로 지정하는 것이 좋습니다.

▶ trsMethodA/D 디바이스에서 스캔버퍼로 데이터를 전송하는 방식을 지정합니다.

이 값은 다음의 두 값 중의 하나이어야 합니다. 단, CP 시리즈 보드에서는 TRS_SINGLE 값만 사용할 수 있습니다.

  • TRS_SINGLE => CP 시리즈 보드의 경우에는 매 채널 A/D 변환이 완료 될 때마다 그리고 SD 시리즈 보드의 경우에는 1회의 SCAN 이 완료될 때마다 인터럽트를 발생시켜 데이터를 전송합니다. 인터럽트의 한계에 따라 Scan Frequency 가 30 KHz 이상이 되면 이 방식이 적절히 작동하지 않을 수 있습니다.

  • TRS_BLOCK => 이 방식을 선택하면, A/D 디바이스는 A/D Conversion 데이터를 디바이스에 내장되어 있는 FIFO 메모리에 일단 저장하고, 1024개의 데이터가 쌓이면 인터럽트를 발생시켜 데이터를 1024개 단위로 사용자 버퍼에 전송합니다. 이 방식은 고속 A/D Scan 시에 적합합니다. 단, 이 방식은 CP 시리즈 보드에서는 사용할 수 없습니다.

RETURN VALUE

  • 실제로 설정되는 스캔 주파수를 Hz 단위로 반환합니다. 사용자가 지정한 스캔 주파수와 실제로 설정되는 스캔 주파수는 약간의 차이가 있을 수 있습니다. 이 값이 0 보다 자긍면 수행도중 에러가 발생하였음을 의미합니다.

Device

  • 지원 디바이스: COMI-CP101, COMI-CP201, COMI-SD101, COMI-SD102, COMI-SD103, COMI-SD104, COMI-SD201

EXAMPLE

 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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/**********************************************************************************
/* [COMIDAS sample program by COMIZOA Inc., Ltd]
/*
/* - Subject : Unlimited Scan
/* - Contents : 이 프로그램은 A/D CH0 와 CH4 의 두 채널을 Unlimited Scan 을 이용하여
/*              A/D Convert 를 하고 그 결과를 파일로 저장하는 예제입니다.
/*              이 프로그램에서는 Scan 버퍼를 직접 handling 하는 방법을 보여주고 있습니다.
/*
/* - Remarks :
/*   1. 이 예제는 COMI-CP101 보드를 사용하는 것으로 작성되었습니다.
/*   따라서 다른 보드를 사용하는 경우에는  COMI_LoadDevice(...) 함수의 첫 번째 파라미터를
/*   알맞은 디바이스 ID로 바꾸어야 합니다.
/**********************************************************************************/

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include "Comidas.h"

#define NUM_CH 2    /* Number of channels */
#define S_FREQ 1000 /* Scan freq. -> 1000Hz */
#define MSB 40960 /* 1024 의 배수로 지정하는 것이 좋다. */



void main (void)
{
 HANDLE hDevice;
 int ch_list[2] = {0, 4}; /* Scan channel list : 0번 과 4번 채널 */
 FILE *fp;
 short *pScanBuf;
 ULONG c, prv_cnt; cur_cnt;
 UINT idx1, idx2;

 /* Load DLL  */
 if(!COMI_LoadDll){
   printf("Comidas.dll load failure");
   exit(0);
 }

 /* Load Device */
 hDevice = COMI_LoadDevoce (COMI_CP101, 0);
 if(hDevice == INVALID_HANDLE_VALUE){
   printf("Can't load specified device!");
   COMI_UnloadDll();
   exit(0);
 }
 COMI_AD_SetRange(hDevice, CHAN, VMIN, VMAX);

 /* start unlimited scan */
 long_act_freq = COMI_US_Start (hDevice, NUM_CH, ch_list, S_FREQ, MSB, TRS_SINGLE)
 if(act_freq < 0){
   /* Error 처리 */
   COMI_ErrorString (COMI_LastError());
   COMI_UnloadDevice(hDevice);
   COMI_UnloadDll();
   exit(0);
 }

 /* Create a file to save data */
 fp = fopen ("c:\\ComiUscan.txt", "w");
 fprintf (fp, "CH 0 CH4\n");
 printf("Unlimited scan has started !!\nPress any key to quit");

 pScanBuf = COMI_US_GetBufPtr(hDevice); // Get scan buffer pointer
 prv_cnt = 0; // initialize count variable

 while(!kbhit()) -----------------여기부터 다시 시작
 {
   cur_cnt = COMI_US_CurCount (hDevice);
 }

 COMI_UnloadDevice(hDevice);
 COMI_UnloadDll();


}