MoonNote

반응형
     

 

 

TDMS(Technical Data Management Streaming)

  TDMS(Technical Data Management Streaming)는 NI에서 개발한 파일 포맷으로 NI 소프트웨어에서 수집된 데이터 채널을 저장하기 위해 사용됩니다. NI 솔루션(LabVIEW, DIAdem, FlexLogger 등)에서는 보편적으로 사용되는 파일 포맷이며, 그 외 타사의 데이터 관리 툴(예: 엑셀, MATLAB 등)과도 호환 가능합니다. 기본적으로 Binary 기반의 파일 포맷이기 때문에 고속 스트리밍 작업에 적합하다고 볼 수 있으며 파일, 그룹, 채널 형태의 3단계 계층 구조 구성되어 있습니다. 아래는 TDMS의  각 계층 레벨별 속성(Property) 정보에 대한 이미지입니다.

 

TDMS 파일 포맷 구조

 

 기본적으로 TDMS 파일은 생성 또는 열기 동작 수행시 자동으로 Index 파일(*. tdms_index)을 생성하게 되는데, TDMS_Index 파일에는 TDMS의 구조를 미리 분석한 메타 데이터 정보가 포함됩니다. TDMS 파일 생성 경로와 동일한 위치에 TDMS_Index 파일이 생성되도록 되어 있으며 원치 않을 경우 [TDMS 파일 열기] 함수에서 TDMS_Index 생성을 중지할 수 있습니다.

생성된 TDMS와 TDMS_Index 파일

 

LabVIEW [TDMS 열기] 함수 - Index 파일 생성 설정

 

 

TDMS 파일 입출력 구조

 랩뷰(LabVIEW) Tutorial 20 | 파일 입출력(FIle I/O)에서 다루었던 구조와 동일하며 기본 파일 입출력 함수(예: 텍스트 파일에 쓰기, 2진 파일에 쓰기 등) 외 TDMS 함수로 변경하여 사용한다고 보시면 되겠습니다. TDMS 팔레트는 함수 팔레트 >> 프로그래밍 >> 파일 I/O >> TDM 스트리밍에 관련 함수들을 제공하고 있습니다.

파일 입출력 구조
LabVIEW TDMS 함수 팔레트

 

TDMS 파일 입출력 LabVIEW 함수

 

[TDMS 열기] 함수

 [TDMS 열기] 함수에서는 경로 입력만 필수 값이고 나머지는 모두 옵션 설정 값입니다. 따라서, "파일 경로" 및 "동작(0:open)"에 대해서만 입력 값을 지정 후 다음 쓰기/읽기 함수와 와이어링시켜 사용합니다.

[TDMS] 열기 함수

 

 필수적으로 알아야하는 것은 아니지만 나머지 옵션 설정에 대해 파악하고 있다면 좀 더 디테일한 설정이 가능하기에 LabVIEW 도움말을 참조하여 아래와 같이 설명드립니다.

입력 터미널 설명
인덱스 파일 생성? (참)
TDMS 파일(*.tdms)에 대한 인덱스 파일(*.tdms_index)을 생성할 것인지 지정하는 입력 값입니다. 기본 값은 '참'으로 인덱스 파일이 자동 생성되며, 이는 LabVIEW에서 TDMS 파일에 대한 임의 접근을 보다 신속하게 처리할 수 있도록 합니다.
바이트 순서 (2:little-endian) Endian 포맷을 지정(Little-endian/Big-endian)하는 입력 값입니다. TDMS 파일을 생성하는 경우에만 유효합니다.
버퍼링 비활성화? (참)
LabVIEW가 시스템 버퍼링 없이 TDMS 파일 열기/생성/대체하는지 결정하는 입력 값입니다. 기본 값은 '참'으로 시스템 버퍼링을 비활성화하고 TDMS 디스크 캐시의 버퍼링을 활성화합니다. 

 

[TDMS 쓰기] 함수

 [TDMS 열기] 함수로부터 생성된 TDMS 파일 참조 번호 정보를 받아와 해당 파일에 데이터를 기록합니다. 데이터 입력 터미널의 경우 웨이브 폼 배열 타입으로 기본 설정되어 있으며, 그 외 TDMS 파일에서 호환되는 다음 데이터 포맷들 역시 와이어링 가능하도록 제작되었습니다.

[TDMS 쓰기] 함수

 

📝 허용 가능한 데이터 타입:
      1. 아날로그 웨이브폼(or 아날로그 웨이브폼 1D 배열)
      2. 디지털 웨이브폼
      3. 디지털 테이블
      4. 다이나믹 데이터
      5. 1D 또는 2D 배열 (가능한 배열 원소 타입: 숫자/불리언/문자/타임스탬프)

 

[TDMS 읽기] 함수

 [TDMS 열기] 함수로부터 생성된 TDMS 파일 참조 번호 정보를 받아와 해당 파일에 데이터를 읽어 들입니다. 데이터 타입 입력 터미널에 설정된 타입으로 데이터 출력이 되며, [TDMS 쓰기] 함수와 동일한 데이터 타입들을 지정할 수 있습니다.

[TDMS 읽기] 함수

 

[TDMS 닫기] 함수

 LabVIEW에서 열었던 TDMS 파일 참조 번호 값을 삭제합니다.

[TDMS 닫기] 함수

 

 

알아두면 좋은 TDMS 함수

[TDMS 프로퍼티 설정]

 [TDMS 프로퍼티 설정]의 경우 지정된 파일, 그룹, 채널의 속성 값을 입력하는 함수입니다. 처음 소개되었던 TDMS 파일 포맷 구조에서 각 세션(파일, 그룹, 채널) 별 하위 프로퍼티를 설정하는 개념으로 이해하시면 되겠습니다.

TDMS 각 세션(파일, 그룹, 채널) 프로퍼티

 

 LabVIEW 기본 예제 중 "TDMS Time Domain Data.vi"의 코드를 참조하여 실제 사용법을 익혀보겠습니다. 예제 코드를 보면 [TDMS 파일 열기] - [TDMS 프로퍼티 설정] - [TDMS 쓰기] - [TDMS 닫기] 순서로 함수가 사용되었습니다. 디스크 스트리밍 기법으로 While문 안의 [TDMS 쓰기] 함수만 반복적으로 실행되며 [Simulate Signal] 함수에서 생성된 신호를 TDMS 파일로 저장하는 형태입니다.

TDMS Time Domain Data.vi 예제 코드

 

여기에서 [TDMS 프로퍼티 설정] 입력 값으로 {"프로퍼티 값": [Title, UserName], "프로퍼티 이름": [Title, Author]}로 파일 속성을 지정하였습니다. Title 문자열 컨트롤을 상수로 바꾸어보면 LabVIEW Example (time domain)로 입력 값이 지정되어 있고, TDMS 파일에서 확인 시 2개의 프로퍼티 모두 올바르게 입력되어 있음을 확인할 수 있습니다.

TDMS 파일에 저장된 파일 속성 정보(Title, Author)

 

[TDMS 프로퍼티 얻기]

 [TDMS 프로퍼티 얻기] 함수는 설정 함수와 반대로 TDMS 파일에 저장된 속성 정보를 LabVIEW로 가져오는 함수입니다.

[TDMS 프로퍼티 얻기] 함수

 

 "TDMS Time Domain Data.vi"에서 생성된 TDMS 파일을 가지고 한번 프로퍼티 값을 불러와보도록 하겠습니다. 예제 파일 실행시 아래의 경로에 Example Time Domain Data.tdms 파일이 생성되었을 겁니다. 파일 지정 후 [TDMS 프로퍼티 얻기] 함수에서 {"프로퍼티 이름": [Title, Author]}을 지정해줍니다.
- TDMS 파일 경로: C:\Users\[UserName]\Documents\LabVIEW Data

[TDMS 프로퍼티 얻기] 함수 예제 코드

 

실행된 결과와 파일 내 속성 정보를 비교해보면 정상적으로 LabVIEW에서 프로퍼티를 불러왔음을 알 수 있습니다.

실행 결과(좌: TDMS 파일(Excel 불러오기), 우: LabVIEW 프런트 패널 화면)

 

 

 

[TDMS 비우기]

 [TDMS 버퍼 비우기] 함수의 경우 말 그대로 프로그램 내부에 남아있는 버퍼를 비워주는 함수로, 모든 버퍼 데이터를 지정한 TDMS 파일에 씁니다.

[TDMS 비우기] 함수

 

함수 도움말의 설명을 보면 "버퍼가 다 차거나 파일을 닫을 때까지 버퍼 안에 그대로 있는 경우가 많습니다."라는 내용이 있는데 실제로 단순 쓰기 동작만 수행할 시 프로그램 실행 중에 실시간으로 데이터가 쌓이는게 아니라 버퍼에 일정량을 가지고 있는 구조로 동작합니다. 예시로 아래의 코드를 1분간 실행하고 난 후 파일 크기를 확인해보았을 때 0KB 표시됨을 알 수 있습니다.

[TDMS 버퍼 비우기] 함수 사용하지 않았을 경우

 

이런 경우 ¹장시간 프로그램이 실행될 경우 RAM이 계속 증가하거나, ²PC전원이 꺼지는 경우 데이터가 증발 또는 ³프로그램 비정상 종료시 데이터 손실이 우려되므로 사용되는 데이터량에 따라 적절한 Iteration마다 실행시켜 버퍼를 관리하는 것이 좀 더 효율적으로 데이터를 저장하는 방법이라고 이해할 수 있습니다. 관련하여 LabVIEW Example을 보면 매 20회마다 쓰기 동작 후 버퍼를 비워주고 있음을 알 수 있습니다.

Flush Written TDMS Data.vi 예제

 

TIP
 
 

도움말에서 언급하듯이 너무 자주 비우면 어플리케이션의 쓰기 성능에 영향을 줄 수 있으므로 반드시 적절한 주기로 관리하도록 합니다.

 

 

[TDMS 파일 보기]

[TDMS 파일 보기]는 데이터를 확인하기 위해 LabVIEW에서 별도로 GUI를 만들 필요없이 팝업 창 형태로 데이터를 바로 보여줍니다.

[TDMS 파일 보기] 함수

 

[TDMS 프로퍼티 설정] 함수에서 사용된 예제 코드(TDMS Time Domain Data.vi)를 보면 맨 마지막에 [TDMS 파일 보기] 함수가 사용되었습니다. 이 때 프로그램을 실행 후 종료하면 팝업 창 형태로 저장된 파일을 LabVIEW에서 바로 보여줍니다.

TDMS 파일 보기 패널

 

이상으로 TDMS(Technical Data Management Streaming) 튜토리얼을 마치도록 하겠습니다.

 

 

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band