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) 튜토리얼을 마치도록 하겠습니다.