'공부/CVI'에 해당되는 글 5건
- 2012.11.20 :: CVI 프로젝트 만들기 3
- 2012.11.20 :: CVI 프로젝트 만들기 2
- 2012.11.20 :: CVI 프로젝트 만들기 1
- 2012.11.16 :: CVI 가 window 7 64bit 를 지원할까 ?
- 2012.11.16 :: CVI 고찰
여기는 편의상 스톱워치를 만들었다.
1 -> 프로젝트에 연결된 파일을 표시 합니다.
2 -> GUI 화면을 표시 합니다.
3 -> GUI 화면상에 있는 컴퍼넌트 list 가 대표명으로 표기, 선택 하면 해당 컴퍼넌트가 표시됨
4 -> 선택된 컴퍼넌트의 특성을 표시 합니다.
마우스를 이용해서 위치 및 크기 등을 조절 할 수 있다.
컴퍼넌트에 마우스 포인트를 이동 후 오른쪽 마우스를 누르면 여러 매뉴가 나타난다.
Generate Control Callback : 이 키를 누르면(이벤트를 발생하면) 동작할 함수를 만든다.
신규 함수 생성시 사용한다. 주의 사항은 함수를 만든 상태에서 소스코드를 입력 하고
다시 만들어 버리면 기존 소스를 지울지 유지할지를 물어보는데 잘못하면 ~~
View Control Callback : 이 키를 누르면(이벤트를 발생하면) 동작할 함수를 보여준다.
타이머를 발생시키기 위해 타이머를 추가 했다.
컴파일이 완료되면 보이지 않는다.
소스를 대충 보겠다.
변수 선언한다.
#include <ansi_c.h> #include <cvirte.h> #include <userint.h> #include <utility.h> #include "test_app1.h"
static int panelHandle; static int flag = 0; //stop watch 사용용 static int flag1 = 0; // 프로그램 시작 초기화 static int flag2 = 0; //타이머 사용용 static long time_count =0; //stop watch 사용용 static long time_count2 =0; //타이머 사용용 char buf[100]; |
Main 함수
int main (int argc, char *argv[]) { if (InitCVIRTE (0, argv, 0) == 0) return -1; /* out of memory */ if ((panelHandle = LoadPanel (0, "test_app1.uir", PANEL)) < 0) return -1; //test_app1.uir이 없으면 실행불가 DisplayPanel (panelHandle); RunUserInterface (); //여기서 화면이 표시된다. DiscardPanel (panelHandle); return 0; } |
기능을 선언한다.
int CVICALLBACK panelCB (int panel, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_GOT_FOCUS:
break; case EVENT_LOST_FOCUS:
break; case EVENT_CLOSE: QuitUserInterface(0); //X 버튼 눌리면 종료 break; } return 0; } |
버튼이 눌리면 처리하는 함수
int CVICALLBACK COMMANDBUTTON_A (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: //SetCtrlVal( panel,PANEL_STRING,"아빠 바보"); flag = 1; break; } return 0; }
int CVICALLBACK COMMANDBUTTON_B (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: //SetCtrlVal( panel,PANEL_STRING,"그 바보가 아니라 천재"); flag = 0; break; } return 0; }
int CVICALLBACK COMMANDBUTTON_C (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: //SetCtrlVal( panel,PANEL_STRING,"누구세요 ??"); flag = 0; time_count = 0; sprintf(buf,"%d : %d : %d : %d", (time_count/360000), (time_count/6000)%60,(time_count/100)%60,time_count%100); SetCtrlVal( panel,PANEL_STRING,buf); break; } return 0; }
int CVICALLBACK COMMANDBUTTON_D (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { int info;
switch (event) { case EVENT_COMMIT:
GetCtrlVal(panel,PANEL_NUMERIC, &info); time_count2 = info * 6000 ; sprintf(buf,"%d : %d : %d : %d", (time_count2/360000), (time_count2/6000)%60,(time_count2/100)%60,time_count2%100); SetCtrlVal( panel,PANEL_STRING1,buf); flag2 = 1;
break; } return 0; }
int CVICALLBACK COMMANDBUTTON_E (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: flag2 = 0; break; } return 0; }
int CVICALLBACK NUMERIC_A (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { int info;
switch (event) { case EVENT_COMMIT: if(flag2 == 0) { GetCtrlVal(panel,PANEL_NUMERIC, &info); time_count2 = info * 6000 ; sprintf(buf,"%d : %d : %d : %d", (time_count2/360000), (time_count2/6000)%60,(time_count2/100)%60,time_count2%100); SetCtrlVal( panel,PANEL_STRING1,buf);
}
break; } return 0; }
int CVICALLBACK COMMANDBUTTON_F (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { int info;
switch (event) { case EVENT_COMMIT:
if(flag2 == 0) { GetCtrlVal(panel,PANEL_NUMERIC, &info); time_count2 = info * 6000 ; sprintf(buf,"%d : %d : %d : %d", (time_count2/360000), (time_count2/6000)%60,(time_count2/100)%60,time_count2%100); SetCtrlVal( panel,PANEL_STRING1,buf);
}
break; } return 0; } |
타이머 동작 실행
int CVICALLBACK Timer_aaa (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { int info;
switch (event) { case EVENT_TIMER_TICK:
if(flag1 == 0) { sprintf(buf,"%d : %d : %d : %d", (time_count/360000), (time_count/6000)%60,(time_count/100)%60,time_count%100); SetCtrlVal( panel,PANEL_STRING,buf);
GetCtrlVal(panel,PANEL_NUMERIC, &info); time_count2 = info * 6000 ; sprintf(buf,"%d : %d : %d : %d", (time_count2/360000), (time_count2/6000)%60,(time_count2/100)%60,time_count2%100); SetCtrlVal( panel,PANEL_STRING1,buf);
flag1 = 1; }
if(flag) { time_count ++; sprintf(buf,"%d : %d : %d : %d", (time_count/360000), (time_count/6000)%60,(time_count/100)%60,time_count%100); SetCtrlVal( panel,PANEL_STRING,buf); }
if(flag2) { if(time_count2 > 0) { time_count2 --;
sprintf(buf,"%d : %d : %d : %d", (time_count2/360000), (time_count2/6000)%60,(time_count2/100)%60,time_count2%100); SetCtrlVal( panel,PANEL_STRING1,buf);
if(time_count2 == 0) { flag2 =0; Beep(); Beep(); Beep();
} }
} break; } return 0; } |
추가로 Uir 파일 실행파일에 추가하기
Target Setting 에서 Embed project .UIRs 를 선택 한다.
예제 파일 다운로드 : 00001.zip
'공부 > CVI' 카테고리의 다른 글
CVI 프로젝트 만들기 3 (0) | 2012.11.20 |
---|---|
CVI 프로젝트 만들기 2 (0) | 2012.11.20 |
CVI 프로젝트 만들기 1 (0) | 2012.11.20 |
CVI 가 window 7 64bit 를 지원할까 ? (0) | 2012.11.16 |
CVI 고찰 (0) | 2012.11.16 |
User Interface Application.uir 를 선택하면 아래와 같이 GUI를 만들 기본 화면을 볼수 있다.
기본 Panel 에서 오른쪽 마우스 키를 누르면 각종 컨퍼넌트를 확인할 수 있고 이를
화면에 입력 할 수 있다. (적색원 표시 부분)
오른쪽 창에는 선택된 컨퍼넌트의 특성이 나온다. 이를 이용해서 각종 값을 조정할 수 있다.
여러 가지 를 선택해서 화면에 넣은 후 마우스를 이용해 크기 등을 변경하면 된다.
여기서 기본 화면을 만든다.
버튼을 만들어 보겠다.
선택하면 버튼이 입력된다.
버튼을 버블클릭 하면 특성 창이 나타난다.
중요 내용을 보면
Constant name : 내부 명칭을 선언
Callback function : 버튼을 누르거나 이벤트 발생시 연결되는 함수명을 선언
Control mode :
Shortcut Key : 특수키와 연결
Label : 표시 이름
Start 로 변경하고 이에 대한 특성은 아래처럼 처리 했다.
Callback function 을 보변 COMMANDBUTTON_A 로 되어 있는데 이것은 아래의 함수로 연결된다.
int CVICALLBACK COMMANDBUTTON_A (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
}
'공부 > CVI' 카테고리의 다른 글
CVI 프로젝트 만들기 3 (0) | 2012.11.20 |
---|---|
CVI 프로젝트 만들기 2 (0) | 2012.11.20 |
CVI 프로젝트 만들기 1 (0) | 2012.11.20 |
CVI 가 window 7 64bit 를 지원할까 ? (0) | 2012.11.16 |
CVI 고찰 (0) | 2012.11.16 |
댓글을 달아 주세요
CVI 프로젝트 만들기
먼저 CVI 를 실행하면 아래와 같은 화면이 나온다.
신규 프로젝트를 만들기 위해서 Project from Template 를 선택 한다.
User Interface Application 을 선택하고 프로젝트를 저장할 디렉토리를 선언한다
OK 를 누르면 프로젝트를 자동으로 만들어 준다.
(project name은 보기 편하게 변경하는 것을 추천한다.)
이때 디렉토리가 없으면 자동을 생성을 해준다.
'공부 > CVI' 카테고리의 다른 글
CVI 프로젝트 만들기 3 (0) | 2012.11.20 |
---|---|
CVI 프로젝트 만들기 2 (0) | 2012.11.20 |
CVI 프로젝트 만들기 1 (0) | 2012.11.20 |
CVI 가 window 7 64bit 를 지원할까 ? (0) | 2012.11.16 |
CVI 고찰 (0) | 2012.11.16 |
댓글을 달아 주세요
CVI 는 64bit 를 지원하는듯 하다.
잘은 모르겠는데 컴파일 할때 64bit용으로 별도로 지원 하는 듯 하다.
그런데 코딩을 주의해야 할듯 하다. 아래와 같이 변수의 사이즈가 달라지는듯 한데
비트 연산이 많으면 꼬이지 않을까..
Data type | Description | Size on 32-bit applications | Size on 64-bit applications |
---|---|---|---|
size_t, ssize_t | size_t is an unsigned integer type, and ssize_t is a signed integer type. Both are used to represent the size or number of objects. size_t is returned by sizeof operator. | 32 | 64 |
intptr_t, uintptr_t | Integer types capable of storing a pointer value. Used primarily for performing pointer arithmetic. | 32 | 64 |
ptrdiff_t | Signed integer type representing a relative offset from a pointer, or the result of subtracting two pointers. | 32 | 64 |
아래 내용을 보면 2010 버전은 만능 인듯 하다. 거의 모든 OS 를 지원 한다.
가능하면 2010 이나 2012로 해봐야 겠다. 내가 linux 용 프로그램은 안할것 같아서 PASS
'공부 > CVI' 카테고리의 다른 글
CVI 프로젝트 만들기 3 (0) | 2012.11.20 |
---|---|
CVI 프로젝트 만들기 2 (0) | 2012.11.20 |
CVI 프로젝트 만들기 1 (0) | 2012.11.20 |
CVI 가 window 7 64bit 를 지원할까 ? (0) | 2012.11.16 |
CVI 고찰 (0) | 2012.11.16 |
댓글을 달아 주세요
주로 MCU 기반의 장비나 F/W를 개발 해 오다보니 PC용 프로그램을 다루지 않게 되었다.
그러다 보니 가끔 필요한 프로그램 짜는 것도 부담스러운 지경이 되었다.
이러면 안되는데.. 그렇다고 주고 C 언어로 프로그램 해오다가 갑자기 다른 언어의 프로그램을
공부해서 해보려고 하면 막막하고 잘 익혀지지도 않는다.
그래서 좋은 방법이 없을까 늘 고민을 해왔다.
C 언어 기반의 PC용 프로그램 컴파일러가 있는것을 알게 되었다.
NI 사에서 나온 LabWindows/CVI
그래서 관련 자료를 찾아보니 http://www.cvi.kr/ 사이트가 있는데 정말 나름 정리를 잘해 두었고
참고할 만한 내용이 많았다.
그래서 앞으로 시간 날때마다. 해당 사이트를 참고로 나만의 프로그램을 만들어 보고자 한다.
참 기본 컴파일을 해봤는데 몇개의 dll 같은 파일이 꼭 있어야 한다.
한개로 생기면 정말 좋을텐데..
'공부 > CVI' 카테고리의 다른 글
CVI 프로젝트 만들기 3 (0) | 2012.11.20 |
---|---|
CVI 프로젝트 만들기 2 (0) | 2012.11.20 |
CVI 프로젝트 만들기 1 (0) | 2012.11.20 |
CVI 가 window 7 64bit 를 지원할까 ? (0) | 2012.11.16 |
CVI 고찰 (0) | 2012.11.16 |
댓글을 달아 주세요