'CVI'에 해당되는 글 8건

  1. 2008.04.11 CVI Ring control의 간단한 예
  2. 2008.02.01 CVI에서 Static Library 만들기
  3. 2008.01.24 CVI에서 컨트롤을 동적으로 생성하기
  4. 2008.01.24 GetActiveCtrl() 함수
  5. 2008.01.24 GetCtrlVal() 함수
  6. 2008.01.18 LabWindows/CVI에서 Win32 API를 사용하는 방법
  7. 2008.01.15 CVI 첫번 째 프로그램 - Hello world
  8. 2008.01.15 CVI 설치
2008. 4. 11. 11:30

CVI Ring control의 간단한 예



CVI 프로그래밍을 하면 일반적인 GUI프로그래밍을 하는것과 거의 유사하다.
수많은 컨트롤들이 있고, 그에 따른 속성들과 함수들이 제공된다. 이를 모르면 그야말로 캐삽질!!!

작업량이 많아 간간히 CVI를 하는 실정이다. 뭐 이리저리 문서를 찾아는 보지만 적당히 볼만큼의 문서는 눈을 씻고 찾아볼래야 찾아볼 수가 없다. 그래도 어쩌겠는가... 일단 하기는 해야하는데.. -_-

하는 작업들은 거의 대부분이 CVI에서 제공하는 예제들과 NI LabWindows/CVI Help를 참고하고 있다.
뭐 다른 사람들도 다 마찬가지겠지만.. ^^;

"RING"라는 컨트롤이 있다.

사용자 삽입 이미지

CVI에서 말하는 "RING"이라는 녀석이다.

그 중에서 빨간 밑줄을 그은 녀석.. 일반적으로 다른 GUI에서 "콤보박스"라고 부르는 녀석에 대해서 알아보려한다.
CVI에서는 "Recessed Menu Ring"라고 부르는 듯하다. 뭐 그리 적혀있으니...
기능을 대충 보아하니 완전 콤보박스다. 괜히 이름만 다르게 불러 사람을 헷갈리게 하고 있다.

하는 일은 여러 메뉴(?)를 가지고 있으면서 공간이 모자라는 듯한 곳에 위치해 컨트롤을 한 번 클릭하게 되면 리스트가 펴지면서 원하는 메뉴를 선택할 수 있게 하는 것이다.
사용자 삽입 이미지

여기서 보일 예제는 RING에서 어떤 항목을 선택하게 되면 옆에 리스트박스(ListBox)라는 녀석에 해당하는 하위 리스트를 보여주는 것이다.
왠지 꽤 사용성이 짙어보이긴 하는데... -_-;

간단하게 위의 그림과 같이 UI를 작성하자.
그리고 RING의 속성을 대충 채워 넣는다.
*.uir파일에서 Ring 컨트롤을 더블클릭하면 아래와 같은 에디트 창이 뜬다
사용자 삽입 이미지

Ring에 들어갈 세부 항목을 선택하기 위해서 "Label/Value Pairs..."를 클릭한다.
사용자 삽입 이미지
사용하려 하는 항목과 값을 대충 넣는다.

이로서 일단 RING에대한 준비작업은 끝났다.
여기서 중요한 것은 Data Type이다. Value의 값이 Data Type의 값과 일치해야한다. 만일 Data Type를 char나 다른 값으로 바꾸어보며 작업을 해보면... 대충 감을 잡을 것이다.

List Box의 경우도 동일하게 작업을 해준다. List Box의 Label/Value Pairs..는 일단 Data Type만 정의해주고 나머지는 비워둔다. RING에서 선택된 값을 나중에 넣어줄 것이므로..

이제 만들어진 uir를 이용하여 소스 프레임을 생성한다.
메뉴에서 Code > Generate > All Code...

음.. 이제 소스부분으로 슬슬 넘어가 보겠다.

일단 List Box에 들어갈 데이터를 정의해야겠다.
List Box는 Label과 Value로 이루어져있다. 그래서 데이터도 Label과 Value의 쌍으로 된 녀석을 만들어준다.
typedef struct {
    char name[20];
    int id;
}datatype;

datatype fluit[4] = {{"사과", 0},
                           {"딸기", 2},
                           {"바나나", 3},
                           {"오렌쥐", 5}};

datatype vegetable[2] = {{"오이", 0},
                                    {"당근~당근!!", 1}};
간단하게 위와 같이 만들었다.
RING에서는 과일과 채소라는 항목을 만들었고, 과일이라는 항목을 선택했을 때 List Box에 fluit라는 녀석을 보여줄 것이다. 음.. 채소를 선택했다면... vegetable라는 녀석을 보여줄것이고..

다음은 RING 컨트롤을 생성할 때 같이 생성한 cmdRING라는 함수의 내용을 채워넣어야 한다.
cmdRING는 위쪽에 RING의 속성을 채워넣는 부분에서 CallBack Function이라는 항목에 넣었던 부분이다.
CallBack Function이라는 부분에 cmdRING라는 녀석을 넣어주면 자동으로 아래와 같은 부분이 생성된다.
int CVICALLBACK cmdRing (int panel, int control, int event,
        void *callbackData, int eventData1, int eventData2)
{
     switch (event)
    {
        case EVENT_COMMIT:
             break;
    }
    return 0;
}
이 내부에 원하는 부분을 채워 넣기만 하면 된다.

본인의 경우 아래와 같이 채워 넣었다.
사용자 삽입 이미지
흠.. 흠.. 타이핑하기 귀찮아서... -_-

RING에서 선택된 항목은 Value값에 의해서 switch-case의 해당하는 부분으로 점프한다.
과일을 선택하면 case 0:에 걸리고, 채소를 선택하면 case 1:에걸리고.. 이건... C에 나오는 부분이니 대충 패스!!
각 선택되었을 때 미리 생성해 놓은 데이터의 크기(리스트의 개수)만큼 루프를 돌면서 List Box에 추가시켜주는 간단한 예이다.

List Box에 새로운 아이템을 추가할 때에는 InsertListItem()이라는 함수를 사용하게 된다.

InsertListItem

int InsertListItem (int panelHandle, int controlID, int itemIndex, char itemLabel[], ...);

Purpose

Inserts a label/value pair into a list or ring control at a specific zero-based index.

Inserting the new pair causes the indices of existing label/value pairs at and beyond the insertion point to increase by one.

You can create columns in a list box control by embedding escape codes in the itemLabel parameter.

......

더 자세한 사항은 NI LabWindows/CVI Help를 참조하면 될 듯 하다.





2008. 2. 1. 14:13

CVI에서 Static Library 만들기



LabWindows/CVI에서 Static Library를 생성하는 방법에 대해서 알아보고자 한다.

이 글은 'CVI 정보나눔'이라는 홈페이지의 강좌를 보고 직접 실습을 해가며 작성하는 것으로.. 이 문서를 보는 사람들도 각자 따라해보기 식으로 하면 도움이 될 듯 하다.

먼저 이 예제에서 필요로해서 제공되는 소스코드가 들어있는 파일이 있다.
일단 위의 파일을 다운로드받고, 압축해제를 한다.

프로젝트를 하나 생성하고, 다운받은 파일 중 .c, .h파일을 프로젝트에 추가시킨다.
예제와 같이 프로젝트 이름은 'KD_MCI_sl.prj'라는 이름으로 만든다.
사용자 삽입 이미지

다음은 project 파일속성을 설정하는 단계이다.
예제에서는 Build > Configuration > Release 모드로 작성을 했다.
처음 테스트 하는 단계에서는 Debug모드로 작성을 하고 테스트 한 후, 검증된 단계에서 Library로 만들 때에는 Release모드로 작성을 하는게 맞는 듯 하다.
사용자 삽입 이미지

Build > Target Type을 Static Library로 변경한다.
사용자 삽입 이미지

Build > Target Settings... 메뉴를 선택하고 Target Settings창에서 "Library Generation Choises..."버튼을 클릭한다.
어떤 컴파일러용의 라이브러리를 생성할 것인가를 선택하는 것인데, 'Generate static libraries for both compilers'를 선택하게 되면 'Visual C++''Borland C++'계열의 라이브러리도 함께 생성된다.
사용자 삽입 이미지
사용자 삽입 이미지

마지막 단계로 Build > Create Static Library메뉴를 클릭하자!!!
사용자 삽입 이미지

다음과 같은 메시지 창이 나타나게 되면 정상적으로 'Static Library'를 생성한 것이다.
사용자 삽입 이미지

프로젝트를 생성한 디렉토리에 들어가서 Static Library가 정상적으로 생성 되었는지 확인해 보자
사용자 삽입 이미지
위의 그림에서 보는것처럼 KD_MCI_sl.lib라는 라이브러리 파일이 있고, borland, msvc라는 디렉토리가 있는것을 확인할 수 있다.
KD_MCI_sl.lib는 CVI용 Static Library이고, borland, msvc는 각각 Borland용, MS Visual C++용 Static Library이다.

차후에 이렇게 만들어진 라이브러리 유용하게 사용할 수 있을 것 같다.

출처 : CVI 정보나눔

'Programmings > CVI' 카테고리의 다른 글

CVI Ring control의 간단한 예  (0) 2008.04.11
CVI에서 Dynamic Link Library(DLL) 만들기  (0) 2008.02.01
CVI에서 컨트롤을 동적으로 생성하기  (0) 2008.01.24
GetActiveCtrl() 함수  (0) 2008.01.24
GetCtrlVal() 함수  (0) 2008.01.24
2008. 1. 24. 20:27

CVI에서 컨트롤을 동적으로 생성하기



CVI에서 동적으로 컨트롤을 생성하는 방법이다.

일반적인GUI프로그램에서 사용하고자 하는 컨트롤을 Panel에 미리 배치해놓고 작업을 하게 된다.
하지만 경우에 따라 버튼을 클릭한다거나 했을 때 동적으로 panel에 생성할 필요가 있을 때가 있다.

이 때 LabWindows/CVI에서 사용할 수 있는 함수가 NewCtrl()함수이다.

인자로 panel핸들, 컨트롤의 스타일, 컨트롤의 label, 위치(상, 좌)가 있고, int형의 컨트롤 ID를 반환한다.

NewCtrl

int NewCtrl (int panelHandle, int controlStyle, char controlLabel[], int controlTop, int controlLeft);

Purpose

Creates a new control and returns a control ID that you can use to specify the control in subsequent function calls.
If you call this function to add a timer control to a panel, you must do so in the same thread in which you create or load the panel.

Parameters

Input
Name Type Description
panelHandle integer Specifier for a particular panel that is currently in memory. You obtain this handle from LoadPanel, NewPanel, or DuplicatePanet.
controlStyle integer Select one of the following control styles.

Type Style
Numeric CTRL_NUMERIC
CTRL_NUMERIC_LS
Color Numeric CTRL_COLOR_NUMERIC
CTRL_COLOR_NUMERIC_LS

Numeric Slide CTRL_NUMERIC_THERMOMETER
CTRL_NUMERIC_THERMOMETER_LS
CTRL_NUMERIC_TANK
CTRL_NUMERIC_TANK_LS
CTRL_NUMERIC_GAUGE
CTRL_NUMERIC_GAUGE_LS
CTRL_NUMERIC_METER
CTRL_NUMERIC_METER_LS
CTRL_NUMERIC_KNOB
CTRL_NUMERIC_KNOB_LS
CTRL_NUMERIC_DIAL
CTRL_NUMERIC_DIAL_LS
CTRL_NUMERIC_VSLIDE
CTRL_NUMERIC_HSLIDE
CTRL_NUMERIC_FLAT_VSLIDE
CTRL_NUMERIC_FLAT_HSLIDE
CTRL_NUMERIC_LEVEL_VSLIDE
CTRL_NUMERIC_LEVEL_VSLIDE_LS
CTRL_NUMERIC_LEVEL_HSLIDE
CTRL_NUMERIC_LEVEL_HSLIDE_LS
CTRL_NUMERIC_POINTER_VSLIDE
CTRL_NUMERIC_POINTER_VSLIDE_LS
CTRL_NUMERIC_POINTER_HSLIDE
CTRL_NUMERIC_POINTER_HSLIDE_LS

String CTRL_STRING
CTRL_STRING_LS

Text Message CTRL_TEXT_MSG

Text Box CTRL_TEXT_BOX
CTRL_TEXT_BOX_LS

Command Button CTRL_SQUARE_COMMAND_BUTTON
CTRL_SQUARE_COMMAND_BUTTON_LS
CTRL_OBLONG_COMMAND_BUTTON
CTRL_ROUND_COMMAND_BUTTON
CTRL_ROUNDED_COMMAND_BUTTON

Picture Button CTRL_PICTURE_COMMAND_BUTTON
CTRL_PICTURE_COMMAND_BUTTON_LS
CTRL_PICTURE_TOGGLE_BUTTON
CTRL_PICTURE_TOGGLE_BUTTON_LS

Toggle Button CTRL_ROUND_BUTTON
CTRL_SQUARE_BUTTON
CTRL_SQUARE_BUTTON_LS
CTRL_ROUND_FLAT_BUTTON
CTRL_SQUARE_FLAT_BUTTON
CTRL_ROUND_PUSH_BUTTON
CTRL_SQUARE_PUSH_BUTTON
CTRL_SQUARE_PUSH_BUTTON_LS
CTRL_ROUND_PUSH_BUTTON2
CTRL_SQUARE_PUSH_BUTTON2

Text Button CTRL_SQUARE_TEXT_BUTTON
CTRL_SQUARE_TEXT_BUTTON_LS
CTRL_OBLONG_TEXT_BUTTON
CTRL_ROUND_TEXT_BUTTON
CTRL_ROUNDED_TEXT_BUTTON

Radio Button CTRL_ROUND_RADIO_BUTTON
CTRL_SQUARE_RADIO_BUTTON
CTRL_CHECK_BOX

LED CTRL_ROUND_LIGHT
CTRL_SQUARE_LIGHT
CTRL_ROUND_LED
CTRL_ROUND_LED_LS
CTRL_SQUARE_LED
CTRL_SQUARE_LED_LS

Binary Switch CTRL_HSWITCH
CTRL_VSWITCH
CTRL_GROOVED_HSWITCH
CTRL_GROOVED_VSWITCH
CTRL_TOGGLE_HSWITCH
CTRL_TOGGLE_HSWITCH_LS
CTRL_TOGGLE_VSWITCH
CTRL_TOGGLE_VSWITCH_LS

Ring CTRL_RING
CTRL_RING_LS
CTRL_RECESSED_MENU_RING
CTRL_RECESSED_MENU_RING_LS
CTRL_MENU_RING
CTRL_MENU_RING_LS
CTRL_POPUP_MENU_RING
CTRL_POPUP_MENU_RING_LS

Ring Slide CTRL_RING_VSLIDE
CTRL_RING_HSLIDE
CTRL_RING_FLAT_VSLIDE
CTRL_RING_FLAT_HSLIDE
CTRL_RING_LEVEL_VSLIDE
CTRL_RING_LEVEL_VSLIDE_LS
CTRL_RING_LEVEL_HSLIDE
CTRL_RING_LEVEL_HSLIDE_LS
CTRL_RING_POINTER_VSLIDE
CTRL_RING_POINTER_VSLIDE_LS
CTRL_RING_POINTER_HSLIDE
CTRL_RING_POINTER_HSLIDE_LS
CTRL_RING_THERMOMETER
CTRL_RING_THERMOMETER_LS
CTRL_RING_TANK
CTRL_RING_TANK_LS
CTRL_RING_GAUGE
CTRL_RING_GAUGE_LS
CTRL_RING_METER
CTRL_RING_METER_LS
CTRL_RING_KNOB
CTRL_RING_KNOB_LS
CTRL_RING_DIAL
CTRL_RING_DIAL_LS

Picture Ring CTRL_PICTURE_RING
CTRL_PICTURE_RING_LS

List Box CTRL_LIST
CTRL_LIST_LS

Decoration
CTRL_RAISED_BOX
CTRL_RAISED_BOX_LS
CTRL_RECESSED_BOX
CTRL_RECESSED_BOX_LS
CTRL_FLAT_BOX
CTRL_RAISED_CIRCLE
CTRL_RECESSED_CIRCLE
CTRL_FLAT_CIRCLE
CTRL_RAISED_FRAME
CTRL_RECESSED_FRAME
CTRL_RECESSED_NARROW_FRAME
CTRL_FLAT_FRAME
CTRL_RAISED_ROUND_FRAME
CTRL_RECESSED_ROUND_FRAME
CTRL_FLAT_ROUND_FRAME
CTRL_RAISED_ROUNDED_BOX
CTRL_RECESSED_ROUNDED_BOX
CTRL_FLAT_ROUNDED_BOX
CTRL_SMOOTH_VERTICAL_BOX_LS
CTRL_SMOOTH_HORIZONTAL_BOX_LS

Graph CTRL_GRAPH
CTRL_GRAPH_LS

Digital Graph CTRL_DIGITAL_GRAPH
CTRL_DIGITAL_GRAPH_LS

Strip Chart CTRL_STRIP_CHART
CTRL_STRIP_CHART_LS

Picture CTRL_PICTURE
CTRL_PICTURE_LS

Timer CTRL_TIMER

Canvas CTRL_CANVAS

Table CTRL_TABLE
CTRL_TABLE_LS

ActiveX CTRL_ACTIVEX

Tree
CTRL_TREE
CTRL_TREE_LS

Splitter CTRL_HORIZONTAL_SPLITTER
CTRL_HORIZONTAL_SPLITTER_LS
CTRL_VERTICAL_SPLITTER
CTRL_VERTICAL_SPLITTER_LS

Tab CTRL_TABS
controlLabel string Label of the new control. Pass "" or 0 for no label.

Note: This parameter is ignored for splitters, tabs, and decorations.
controlTop integer Vertical coordinate at which to place the upper left corner of the control, not including labels.

The coordinate must be an integer value from –32,768 to 32,767. The origin (0,0) is at the upper-left corner of the panel, directly below the title bar, before the panel is scrolled.
controlLeft integer Horizontal coordinate at which to place the upper left corner of the control, not including labels.

The coordinate must be an integer value from –32,768 to 32,767. The origin (0,0) is at the upper-left corner of the panel, directly below the title bar, before the panel is scrolled.

Return Value

Name Type Description
controlID integer Returns the ID you can use to specify the control in subsequent function calls. Negative values indicate that an error occurred. Zero is not a valid ID.

참고 : CVI 정보나눔, NI LabWindows/CVI Help

'Programmings > CVI' 카테고리의 다른 글

CVI에서 Dynamic Link Library(DLL) 만들기  (0) 2008.02.01
CVI에서 Static Library 만들기  (0) 2008.02.01
GetActiveCtrl() 함수  (0) 2008.01.24
GetCtrlVal() 함수  (0) 2008.01.24
LabWindows/CVI에서 Win32 API를 사용하는 방법  (0) 2008.01.18
2008. 1. 24. 18:33

GetActiveCtrl() 함수



GetActiveCtrl()함수는 특정 Panel위에 있는 활성화된 컨트롤의 ID를 받아오는 함수이다.

음.. 대충 사용하려는 컨트롤의 ID를 알고싶을 때 사용하면 좋을듯..

예를 들어(CVI 정보사랑을 검색하다 발견..)..
버튼이라든지 다른 컨트롤을 동적으로  생성할 경우가 있을 수 있다.
이렇게 동적으로 생성한 컨트롤을 다룰 때 이녀석의 ID는 어떻게 될지.. 혹은 ID를 사용해야 할 경우가 있다면, 그때 GetActiveCtrl()을 사용할 수 있을 것이다.

반대로 SetActiveCtrl()은 특정 Panel의 활성화 된 컨트롤에 ID를 세팅하는 정도(?)의 함수일 것이다.

GetActiveCtrl

int GetActiveCtrl (int panelHandle);

Purpose

Obtains the ID of the active control on the specified panel.
The active control is the control that receives keyboard events when the panel is the active panel.

Parameters

Input
Name Type Description
panelHandle integer Specifier for a particular panel that is currently in memory. You obtain this handle from LoadPanel, NewPanel, or DuplicatePanel.

Return Value

Name Type Description
controlID integer Returns the control ID of the active control. If the panel has no controls, GetActiveCtrl returns zero.

GetActiveCtrl can return the following error code:

4—Panel, pop-up, menu bar, or plot ID is invalid.

참고 : CVI 정보나눔, NI LabWindows/CVI Help

2008. 1. 24. 18:05

GetCtrlVal() 함수



GetCtrlVal()함수는 해당 컨트롤의 값을 받아오는 함수이다.
다시말해서 수치컨트롤, 문자열컨트롤, 버튼컨트롤 등의 값을 읽어올 때 사용하는 CVI함수이다.

이와 반대로 컨트롤에 값을 기록할 때에는 SetCtrlVal()함수를 사용한다.

관련된 함수 정보는 NI LabWindows/CVI Help를 검색해보면 아래와 같은 정보를 얻을 수 있다.

GetCtrlVal

int GetCtrlVal (int panelHandle, int controlID, void *value);

Purpose

Obtains the current value of a control.

When the control ID is for a list box or ring control, GetCtrlVal returns the value of the currently selected list item. To obtain the index of the selected list item, use GetCtrlIndex.

Note   This function is not valid for graph and strip chart controls.

Parameters

Input
Name Type Description
panelHandle integer Specifier for a particular panel that is currently in memory. You obtain this handle from LoadPanel, NewPanel, or DuplicatePanel.
controlID integer The defined constant, located in the .uir header file, that you assigned to the control in the User Interface Editor, or the ID returned by NewCtrl or DuplicateCtrl.
Output
Name Type Description
value void * The control value. The data type of value must match the data type of the control.

Return Value

Name Type Description
status integer Return value indicating whether the function was successful. A negative number indicates that an error occurred.


참고 : CVI 정보나눔, NI LabWindows/CVI Help


'Programmings > CVI' 카테고리의 다른 글

CVI에서 컨트롤을 동적으로 생성하기  (0) 2008.01.24
GetActiveCtrl() 함수  (0) 2008.01.24
LabWindows/CVI에서 Win32 API를 사용하는 방법  (0) 2008.01.18
CVI 첫번 째 프로그램 - Hello world  (0) 2008.01.15
CVI 설치  (0) 2008.01.15
2008. 1. 18. 18:04

LabWindows/CVI에서 Win32 API를 사용하는 방법



Win32 API에는 Windows라는 OS에 사용되는 여러 자원을 이용하기 때문에 Windows상에서는 CVI보다는 훨씬 유용하게 사용할 수 있다.

그러나... LabWindows/CVI에서 Win32 API를 사용할 수 있다고 한다.

이 문서는 LabWindows/CVI상에서 Win32 API를 사용하는 방법에 대해 간략하게 말하고자 한다. 다음은 LabWindows/CVI 8.5에서 작업을 한 것이다.

방법은 생각외로 간단(?)하다.
Build Options를 수정해주는 것과 약간의 작업으로 끝!

첫 번째로 CVI에서 Options의 Build Options...를 선택한다.
사용자 삽입 이미지

다음은 Compiler Defines부분을 수정해준다.
사용자 삽입 이미지
원래는 /DWIN32_LEAN_AND_MEAN로 되어있는데.. 이부분을 /WIN32_LEAN_AND_MEAN로 수정한다음 OK버튼을 클릭한다.

Win32 API 함수를 사용하기를 원하는 소스파일에 windows.h 헤더파일을 추가한다.
그리고나서 해당 API함수에 대한 Import Library를 Project에 추가한다. Import Library를 확인하는 방법은 CVI의 Help를 이용하면 된다.
사용자 삽입 이미지

메뉴의 Help를 보면, Windows SDK에 대한 정보를 얻을 수 있는 것이 있다.
사용자 삽입 이미지
찾을 키워드에서 찾고 싶은 함수를 입력하게되면, Import Library를 확인할 수 있다.

해당하는 Import Library를 CVI가 설치된 디렉토리에서 찾아 해당 Project에 추가한다. 그리고 나서 소스에 원하는 Win32 API함수를 사용한 후 컴파일 하고, 실행파일을 만들면 CVI에서 Win32 API를 사용하는 것을 볼 수 있을 것이다.

참고 : CVI 정보나눔


'Programmings > CVI' 카테고리의 다른 글

CVI에서 컨트롤을 동적으로 생성하기  (0) 2008.01.24
GetActiveCtrl() 함수  (0) 2008.01.24
GetCtrlVal() 함수  (0) 2008.01.24
CVI 첫번 째 프로그램 - Hello world  (0) 2008.01.15
CVI 설치  (0) 2008.01.15
2008. 1. 15. 15:00

CVI 첫번 째 프로그램 - Hello world



CVI를 설치하고 실행하는 첫번째 프로그램...

왜 사람들은 항상 첫번 째 프로그램을 Hello world로 하는 거지? ㅡㅡ;
그냥 한다. ㅋ

콘솔 프로그램은 텍스트 모드의 출력을 내는 순차적인 프로그램이다. 약간 촌스럽긴 하지만.. 함 해보는데 의의를 두고..

먼저 CVI를 실행시킨다.
사용자 삽입 이미지

모양새가 요즘의 프로그램 툴들과 비슷하여 그냥 보고 할 수 있을 정도이다. 처음엔 다 쉽지만.. 말이다.

일단 프로젝트를 열기 위해서 FilesNewProject를 클릭한다.
사용자 삽입 이미지
위와 같은 모양의 CVI 툴을 볼 수 있다. 쫌 단순하게 생겼다.. 별로 이쁘지도 않고..

File -> Save Untitled.prj As..를 클릭해 새로운 프로젝트로 저장을 한다. 뭐 일단 따라하기 식으로 따라하는 것이니.. 그대로 고고!!
사용자 삽입 이미지

소스파일을 작성하기 위해서 File -> New -> Source(.c)...를 클릭한다.
사용자 삽입 이미지

에디터에 다음과 같이 "Hello, world"를 출력할 프로그램을 작성한다.
사용자 삽입 이미지
이상한 점은... 기존의 C와는 달리 헤더파일이 없다는 거... ㅡㅡ;
CVI에서는 헤더파일을 적지 않는 것 같다. 뒤에 보면 알겠지만.. 알아서 생성되는 듯...

에디터 창의 파일을 현지의 프로젝트에 추가한다.
사용자 삽입 이미지

아래와 같이 변한 모습을 볼 수 있다.
사용자 삽입 이미지

실행 파일을 생성하기 위해서 다음과 같이 Build -> Create Debuggable Executable를 클릭한다.
참고로, 바로 실행을 하더라도 dependency check에 의해 컴파일 과정을 자동으로 거치게 된다.
디폴트 값은 디버그 모드로 되어 있고, Build -> Configuration에서 릴리즈 모드로 변경할 수 있다.
사용자 삽입 이미지

다음과 같은 창이 갑자기 튀어나올 것이다.
사용자 삽입 이미지

이녀석은 hello.c에 헤더파일을 적어주지 않았기 때문에 헤더파일을 추가시킬 것인지에 대한 메세지창이다.
stdio.h가 아니고, ansi_c.h로 되어있다. 이는 ANSI C에서 이용되는 모든 헤더파일을 포함한다고 생각하면 된다. CVI에서만 이용된다고 보면 된다.

'YES'를 클릭하면 실행파일이 만들어진다. 그리고 소스파일에는 다음과 같이 헤더파일이 추가된 것을 확인할 수 있다.
사용자 삽입 이미지

실행은 Run -> Debug ~.exe를 통해서 할 수 있다.
물론 아래쪽에 있는 Execute... 를 통해서도 할 수 있다.

실행을 하게 되면, 도스창이 깜빡이고 사라지는 것을 확인 할 수 있다. 마지막에 입력을 받기위해 대기하는 getchar()함수를 추가시키면 도스화면이 멈춘상태로 대기하는 것을 확인할 수 있다.
#include <ansi_c.h>

void main(void)
{
    printf("Hello, world!!\n");
    getchar();
}
Run -> Debug ~.exe를 실행시키면 다음과 같은 결과화면을 볼 수 있다.
사용자 삽입 이미지

Run -> Execute ~.exe를 실행시키면 아래와 같이 약간 특이한 모양새의 출력화면을 볼 수 있다.
사용자 삽입 이미지

뭐 결과는 같으니.. 마음에 드는걸로다가 알아서 실행하기를... ㅋ

'Programmings > CVI' 카테고리의 다른 글

CVI에서 컨트롤을 동적으로 생성하기  (0) 2008.01.24
GetActiveCtrl() 함수  (0) 2008.01.24
GetCtrlVal() 함수  (0) 2008.01.24
LabWindows/CVI에서 Win32 API를 사용하는 방법  (0) 2008.01.18
CVI 설치  (0) 2008.01.15
2008. 1. 15. 14:04

CVI 설치


CVI(Labwindows/CVI)를 설치하기 위해서는 먼저 NI의 홈페이지에서 평가판을 다운로드 받아야 한다.
평가판은 http://www.ni.com/downloads/ 에서 다운로드 받을 수 있다.
사용자 삽입 이미지

다운받은 NILWCVIFDS85.exe를 실행하면 압축이 풀린다.(압축이 풀리는 장소는 임의로 정할 수 있고, 디폴트로는 C:\National Instruments Downloads\NILWCVIFDS85에 풀리게 된다.
사용자 삽입 이미지

CVI 설치 프로그램을 실행시키자!!
사용자 삽입 이미지

평가판으로 설치할 것이므로 시리얼 번호는 필요없고, Install this product for evaluation을 체크하자.
사용자 삽입 이미지

설치될 디렉토리를 설정한다.
사용자 삽입 이미지

아직은 잘 모르는 상황이니 그냥 풀로 깔자.. x로 되어 있는 부분들을 다 선택하자!!
사용자 삽입 이미지

뭔말인지.. 그냥 다음!!! 하자
사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

중간에 driver를 설치할래 말래 하는 창이 뜨는데.. 일단 Later를 클릭해 나중에 설치해도 될듯 하다. pass!!
사용자 삽입 이미지

Finish버튼을 클릭!!
설치하는 기계를 재부팅함으로써 설치 끝!!!