4.1.1. COMI_DIO_SetUsage¶
SYNOPSYS¶
void COMI_DIO_SetUsage (HANDLE hDevice, int usage)
DESCRIPTION¶
이 함수는 디지털 입출력 채널의 용도를 설정하는 함수입니다.
PARAMETER¶
▶ hDevice : 디바이스 핸들값입니다. 이 값은 COMI_LoadDevice() 함수에 의해 얻어진 값이어야 합니다.
▶ usage : 디바이스의 용도를 선택합니다. 이 값은 다음의 세 값 중 하나이어야 합니다.
DI_ONLY => DIO 채널 모두를 Digital Input 채널로 사용.
DO_DI => DIO 채널의 전반부를 Output 으로 후반부를 Input 으로 사용.
DI_DO => DIO 채널의 전반부를 Input 으로 후반부를 Output 으로 사용.
DO_ONLY => DIO 채널 모두 Digital Output 채널로 사용.
REMARKS¶
모든 제품이 디지털 입출력 채널의 용도를 소프트웨어적으로 설정할 수 있는 것은 아닙니다.
이 함수를 지원하는 제품과 각 설정값에 따른 채널 구분은 다음과 같습니다.

EXAMPLE1¶
Single Channel Digital input/Output
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 | /**********************************************************************************
/*
/* - Subject : D/I and D/O
/* - Contents : 이 프로그램은 COMI_DO_PutOne(..)과 COMI_DI_GetOne(..)함수를
/* 사용하여 각 1 채널에 대한 D/I 와 D/O를 수행하는 예제 입니다.
/* - Remakrs :
/* 1. 이 예제는 COMI-CP101 보드를 사용하는 것으로 작성되었습니다. 따라서 다른 보드를
/* 사용하는 경우에는 COMI_LoadDevice(...)함수의 첫 번째 파라미터를 알맞은 디바이스
/* ID로 바꾸어야 합니다.
/* 2. 이 프로그램은 D/O 채널 0번을 통하여 On/Off 신호를 번갈아가면서 내보내고
/* D/I 채널 0번을 읽어들이는 프로그램 입니다. D/O 0번 채널과 D/I 0번 채널을
/* 서로 연결해놓으면 D/O 에서 내보낸 신호를 D/I 채널에서 읽어들일수 있습니다.
/**********************************************************************************/
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include "Comidas.h"
#define DI_CH 0
#define DO_CH 0
void main (void)
{
HANDLE hDevice;
int do_state=0, di_state;
if(!COMI_LoadDll()){
printf("sComidas.dll load failure");
exit(0);
}
hDevice = COMI_LoadDevice(COMI_CP101,0);
if(hDevice == INVALID_HANDLE_VALUE){
printf("Can't load specified device!");
COMI_UnloadDll();
exit(0);
}
// COMI-CP401 보드의 경우에는 DI/DO 기능을 모두 사용하기 위해 //
// 여기서 COMI_DIO_SetUsage(DO_DI) 구문을 써주어야 합니다. //
while(!kbhit())
{
do_state ^= 1; // state 반전
COMI_DO_PutOne(hDevice, DO_CH, do_state); // Put D/O
/* Get D/I and print on screen */
di_state = COMI_DI_GetOne(hDevice, DI_CH);
printf("Status of D/I CH0 = %d\n", di_state);
Sleep(500);
}
COMI_UnloadDevice(hDevice);
COMI_UnloadDll();
}
|
EXAMPLE2¶
Multi Channel digital Input/Output
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 | /**********************************************************************************
/* [COMIDAS sample program by COMIZOA Inc., Ltd]
/*
/* - Subject : D/I and D/O
/* - Contents : 이 프로그램은 COMI_DI_GetAll(..)과 COMI_DO_PutAll(..) 함수를
/* 사용하여 D/I와 D/O의 8 채널을 동시에 Control 하는 예제입니다.
/* - Remarks :
/* 1. 이 예제는 COMI_CP101 보드를 사용하는 것으로 작성되었습니다. 따라서 다른 보드를
/* 사용하는 경우에는 COMI_LoadDevice(...) 함수의 첫 번째 파라미터를 알맞은 디바이스
/* ID로 바꾸어야 합니다.
/**********************************************************************************/
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include "Comidas.h"
void main(void)
{
HANDLE hDevice;
ULONG do_states=0, di_states;
int di_each[8], i;
if(!COMI_LoadDll()){
printf("Comidas.dll load failure");
exit(0);
}
hDevice = COMI_LoadDevice(COMI_CP101,0);
if(hDevice == INVALID_HANDLE_VALUE){
printf("Can't load specified device!");
COMI_UnloadDll();
exit(0);
}
// COMI-CP401 보드의 경우에는 DI/DO 기능을 모두 사용하기 위해 //
// 여기서 COMI_DIO_SetUsage(DO_DI) 구문을 써주어야 합니다. //
while(!kbhit())
{
do_states = ~do_states; // 모든 D/O 채널 On/Off state 반전
COMI_DO_PutAll(hDevice, do_states); // Put D/O
/* Get D/I and print on screen */
di_states = COMI_DI_GetAll(hDevice);
/* di_states 는 전채널의 state를 담고 있다. */
/* 각 채널의 상태를 얻으려면 다음과 같이 bit mask */
/* 를 하면 된다. */
for(i = 0; i<8; i++)
di_each[i] = (di_states >> i) & 0x1;
printf("States of DIO ~ DI7 = %d %d %d %d %d %d %d %d\n" ,
di_each[0], di_each[1], di_each[2], di_each[3],
di_each[4], di_each[5], di_each[6], di_each[7]);
Sleep(500);
}
COMI_UnloadDevice(hDevice);
COMI_UnloadDll();
}
|
EXAMPLE3¶
64 Channel Digital Input
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 | /**********************************************************************************
* [COMIDAS sample program by COMIZOA Inc., Ltd]
*
* - Subject : 64bit digital Input
* - Contents : 이프로그램은 COMI_DI_GetAllEx() 함수를 사용하는 예제로써, 32채널씩 나누
* 어서 총 64 채널의 디지털 입력값을 읽어들여 화면에 HEXA_DECIMAL 값으로 그 상태를 표시합니다.
/**********************************************************************************/
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include "Comidas.h"
#define DEV_ID COMI_SD403
void main(void)
{
HANDLE hDevice;
DWORD di_states[2];
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("DIO 테스트를 시작하려면 아무키나 누르십시오.\n");
printf("아무키나 다시 누르면 프로그램이 종료됩니다. \n");
_getch();
while(!kbhit()){
/* Read first 32 D/I channels (CH0~CH31) */
di_states[0] = COMI_DI_GetAllEx(hDevice, 0);
/* Read second 32 D/I channels (CH32~CH63) */
di_states[1] = COMI_DI_GetAllEx(hDevice, 1);
printf("D/I States : CH0~CH31 = %08lx CH32~CH63=%08lx\n", di_states[0], di_states[1]);
Sleep(10);
}
COMI_UnloadDevice(hDevice);
COMI_UnloadDll();
}
|
EXAMPLE4¶
64 Channel Digital OutPut
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 | /**********************************************************************************
* [COMIDAS sample program by COMIZOA Inc., Ltd]
*
* - Subject : 64bit digital Output
* - Contents : 이 프로그램은 COMI_DO_PutAllEx()함수를 사용하는 예제로써 32채널씩 나누어서 총 64채널의
* 디지털 출력을 내보냅니다. 이 때의 출력 상태는 전 채널 모두 on/off를 반복하여 출력됩니다.
/**********************************************************************************/
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include "Comidas.h"
#define DEV_ID COMI_SD402
void main(void)
{
HANDLE hDevice;
DWORD do_states[2]={0x0, 0x0};
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("DIO 테스트를 시작하려면 아무키나 누르십시오.\n");
printf("아무키나 다시 누르면 프로그램이 종료됩니다.\n");
_getch();
while(!kbhit())
{
do_states[0] = ~do_states[0]; /* toggle the status of D/O channels */
COMI_DO_PutAllEx(hDevice, 0, do_states[0]); /* Put first 32 D/O channels (CH0~CH31) */
do_states[1] = ~do_states[1]; /* toggle the states of D/O channels */
COMI_DO_PutAllEx(hDevice, 1, do_states[1]); /* Put Second 32 D/I Channels (CH32~CH63) */
printf("D/O States : CH0 ~ CH31 = %08lx CH32~CH63 = %08lx\n", do_states[0], do_states[1]);
Sleep(500;)
}
COMI_UnloadDevice(hDevice);
COMI_UnloadDll();
}
|