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();
}
|