MoonNote

반응형
     

 

 

파일 입출력(File I/O)

 LabVIEW의 장점 중 하나라고 소개드리고 싶은 사항 중 하나, 바로 파일 입▪출력입니다. LabVIEW는 데이터 관리 측면에서도 다양한 파일 포맷을 지원하고 있으며 NI에서 제공하는 2진 포맷 형태의 TDMS 파일을 통해 고속 스트리밍이 가능하다는 장점을 가지고있습니다. TDMS 포맷에 대해서는 다음 튜토리얼에서 좀 더 자세히 다루도록하고 먼저 LabVIEW의 기본 "파일 I/O" 함수들을 살펴보도록 하겠습니다.

LabVIEW 파일 I/O 팔레트

 

 파일 I/O 함수의 위치는 함수 팔레트에서 프로그래밍 >> 파일I/O 에 있습니다.  ASCII 및 Binary 파일 포맷을 지원하는 텍스트 및 2진 파일 읽기/쓰기 관련 함수들이 있습니다. LabVIEW 관련 함수를 보고있긴 합니다만 보통  OS 위에서 실행되는 소프트웨어들이 [파일 열기] - [쓰기/읽기] - [닫기] 동작으로 데이터를 처리한다고 보시면 되겠습니다.

파일 입/출력 구조

 

리소스(Resource) 및 참조 번호(Refnum)

 먼저 LabVIEW에서 파일 입▪출력을 다룰 때 사용하는 간단한 용어에 대해 소개를 드리고자 합니다. 리소스(Resource)와 참조 번호(Refnum)인데요. 리소스란, 시스템에서 파일, 하드웨어 디바이스, 객체 또는 네트워크에 연결하기 위해 사용하는 파일 경로, 디바이스 이름 또는 식별자 등을 말합니다. 참조 번호란, 리소스의 고유한 식별자(임시 번호)를 말하며 소프트웨어에서 지정한 리소스에 접근할 때 연관된 참조 번호를 생성한다고 보시면 되겠습니다. 예시로 쉽고 간단하게 [파일 열기/생성/대체] 함수 도움말을 살펴보면 다음과 같이 입력 터미널에는 파일 경로를, 출력 터미널에는 참조 번호가 지정되어 있습니다.

 

리소스 및 참조 번호 예시(좌 : 파일 경로(입력), 우: 참조 번호 출력)

 

 

파일 입출력 구조

파일 입출력 함수는 기본적으로 [파일 열기] - [쓰기 or 읽기] - [닫기]로 총 3단계로 나뉘며 LabVIEW 함수를 사용하면 다음과 같습니다.

파일 입출력 구조
파일 입출력 LabVIEW 함수

 

TIP
 
 

반복문이 사용될 경우, 일반적으로 [파일 열기] 함수와 [파일 닫기] 함수는 루프 바깥 쪽으로 빼서 와이어링하는 것이 좋습니다(디스크 스트리밍 기법). S/W에서 생성된 참조 번호를 가지고 루프 안쪽에서 [파일 쓰기] 또는 [파일 읽기] 동작만 수행하도록 합니다.

 

[파일 열기/생성/대체] 함수

 [파일 열기/생성/대체] 함수에서는 파일 경로와 동작 입력 터미널에 대해서 알아두는 것이 좋습니다. 먼저 파일 경로의 경우 직접 경로를 지정하거나 비어있을 경우 경로를 선택하도록 팝업 대화상자가 나타납니다. 

경로 지정 예시
파일 지정 대화상자 예시

 

동작의 경우 열거형 상수의 아이템 6개(Open/Create/Replace/Open or Create/Replace or Create/Replace or Create with Confirmation) 중 하나를 지정하여 파일 동작을 설정할 수 있습니다. 

[파일 열기/생성/대체] 함수 동작
동작 설명
Open
기존 파일을 엽니다. 에러 7은 파일을 찾지 못할 때 발생합니다.
Replace 파일을 열고 파일 끝을 0으로 설정하여 기존 파일을 대체합니다.
Create 새 파일을 생성합니다. 파일이 이미 존재할 경우 에러 10이 발생합니다.
Open or Create 기존의 파일을 열거나 파일이 존재하지 않을 경우 새 파일을 생성합니다.
Replace or Create 새 파일을 생성하거나 파일이 존재할 경우 파일을 대체합니다. VI는 파일을 열고 파일 끝을 0으로 설정하여 파일을 대체합니다.
Replace or Create with confirmation 새 파일을 생성하거나 파일이 존재하고 권한이 주어진 경우 기존 파일을 대체합니다. VI는 파일을 열고 파일 끝을 0으로 설정하여 파일을 대체합니다.

 

[텍스트 파일에 쓰기] 함수

 [파일 열기/생성/대체] 함수에서 출력되는 참조 번호 값을 입력으로 받아 해당 파일에 텍스트 데이터를 기록합니다.

[텍스트 파일에 쓰기] 함수

 

[텍스트 파일로부터 읽기] 함수

[파일 열기/생성/대체] 함수에서 출력되는 참조 번호 값을 입력으로 받아 해당 파일로부터 데이터를 읽어들입니다.

 

[텍스트 파일로부터 읽기] 함수

[2진 파일에 쓰기] 함수

[파일 열기/생성/대체] 함수에서 출력되는 참조 번호 값을 입력으로 받아 2진 파일에 데이터를 기록합니다. 데이터 입력 터미널의 경우 어떠한 데이터 타입도 연결이 가능하도록 제작되었습니다.

[2진 파일에 쓰기] 함수

[2진 파일로부터 읽기] 함수

[파일 열기/생성/대체] 함수에서 출력되는 참조 번호 값을 입력으로 받아 해당 파일로부터 2진 데이터를 읽어들입니다. 단, 2진 파일 읽기의 경우 반드시 [2진 파일에 쓰기]에서 사용한 데이터 타입과 동일한 타입을 지정하여야합니다. 그렇지 않으면 읽기 동작이 정상적으로 수행되지 않아 에러를 반환합니다.

[2진 파일로부터 읽기] 함수

 

[파일 닫기] 함수

 읽기/쓰기 동작 후 파일을 닫을 때 사용하는 함수로 LabVIEW에서 열었던 참조 번호 값을 삭제합니다.

[파일 닫기] 함수

 

텍스트 파일에 쓰기/읽기

 위에 설명된 각 함수들을 사용해서 LabVIEW에서 생성된 데이터를 한번 외부 텍스트 파일에 기록해보겠습니다. 

코드는 아래와 같이 난수에서 생성된 데이터(a)를 10회 반복하 'N번째 데이터 : a'의 형태로 행 단위로 저장시키는 코드입니다.

텍스트 파일에 쓰기 예제 코드

 

저장된 텍스트 파일을 열었을 때 화면입니다.

저장된 텍스트 파일 데이터

 

[텍스트 파일로부터 읽기] 함수를 사용하여 LabVIEW로 데이터를 불러왔을 때 동일한 것을 확인할 수 있습니다.

텍스트 파일로부터 읽기 예제 코드
LabVIEW 프런트패널 화면

 

2진 파일에 쓰기/읽기

 2진 파일에 쓰기의 경우 [쓰기] 또는 [읽기] 함수 차이만 있을 뿐 방법은 동일합니다. 다만 [읽기] 함수를 통해 데이터를 불러올 때 [쓰기]에서 데이터 타입을 올바르게 지정해야지만 정상적으로 불러올 수가 있으니 이 점을 유의하시기 바랍니다.

2진 파일에 쓰기 예제 코드

 

저장된 2진 파일을 열었을 때 화면입니다.

저장된 2진 파일 데이터

 

[2진 파일로부터 읽기] 함수를 사용하여 LabVIEW로 데이터를 불러왔을 때 난수 데이터 10개가 정삭적으로 읽어지는 것을 확인하실 수 있습니다.

2진 파일에 읽기 예제 코드
LabVIEW 프런트패널 화면

 

상위 레벨 함수 vs 하위 레벨 함수

  파일 입출력 함수에도 '상위 레벨 함수'와 '하위 레벨 함수'로 나뉘어져 있습니다. 간략한 설명입니다.

▪ 상위 레벨 함수 : 위에 설명한 파일 입출력 구조('열기'-'쓰기/읽기'-'닫기') 동작을 한번에 수행하는 함수들이라고 보시면 되겠습니다.

하위 레벨 함수 : 파일 처리와 관련된 각각의 동작을 하나씩 개별적으로 제어하여 프로그램을 작성할 수 있습니다. 본문에서 따로 다루지는 않지만 추가적으로 [고급 파일 기능] 안쪽 함수들을 보시면 커서 위치 설정, 파일 크기 검색, 폴더 생성 등의 함수들이 있으니 추가로 살펴보시면 좋을 듯 합니다.

LabVIEW 파일 I/O 상위/하위 레벨 함수

 

디스크 스트리밍 기법에 따른 CPU 비교

 디스크 스트리밍이란, 사용자가 하나의 루프 내에서 여러 개의 읽기나 쓰기 작업을 수행하는 동안 파일을 계속해서 열어두는 것을 말합니다. 디스크 스트리밍을 사용하면 함수가 파일을 열고 닫기 위해 OS와 상호작용하는 횟수를 줄여 CPU 리소스를 절약합니다. 어플리케이션에 따라 디스크 스트리밍 기법 사용 유무에 대한 결정이 차이가 나지만 일반적으로 디스크 스트리밍 기법을 사용하는 것이 좋다고 볼 수 있습니다. 아래는 디스크 스트리밍 기법을 사용하였을 때와 사용하지 않았을 때 CPU 점유율을 비교한 이미지입니다.

디스크 스트리밍 기법에 따른 CPU 점유율

 

TIP
 
 

디스크 스트리밍 기법을 사용해야하는 경우 :
▪ 속도에 민감한 장시간 데이터 수집 수행시
데이터를 수집하며 동시에 파일에 데이터를 연속적으로 기록시

 

이상으로 LabVIEW 파일 입출력 튜토리얼을 마치도록 하겠습니다.

 

 

 

 

 

 

 

 

 

※ 이 글이 도움이 되었다면 "👆🏻구독"과 "🤍공감" 버튼을 클릭해주세요. 클릭 한번이 글 쓰는데 큰 힘이 됩니다.

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band