I/O 변수 사용하기 (Real-Time, Windows)
- 업데이트 날짜:2025-08-27
- 11분 (읽기 시간)
I/O 변수는 I/O 데이터를 전송하는 공유 변수의 한 종류입니다. 로컬에서 접근할 때 I/O 변수는 NI 스캔 엔진을 사용해 I/O 데이터에 단일 포인트 접근합니다. 로컬에서 접근할 때 I/O 변수는 NI Publish-Subscribe Protocol (NI-PSP)을 사용해 I/O 데이터에 단일 포인트 접근하거나 버퍼 접근합니다. I/O 변수는 물리적인 I/O 채널과 직접 통신하거나, 사용자 I/O 데이터를 동일한 타겟 상에서 실행 중인 FPGA VI와 리얼타임(RT) VI 간에 전송시킬 수 있습니다.
다음 테이블에는 I/O 변수를 사용하는 경우가 요약되어 있습니다:
| 용도 | I/O 변수 타입 |
|---|---|
| LabVIEW FPGA Module을 사용하지 않고 I/O 하드웨어와 LabVIEW VI 사이에서 스케일된 I/O 데이터를 전송함 | 스케일된 I/O 데이터를 위한 I/O 변수 |
| 같은 하드웨어 디바이스 상에서 실행 중인 LabVIEW FPGA VI와 LabVIEW Real-Time VI 사이에서 FPGA 처리된 사용자 정의 I/O 데이터를 전송함 | 사용자 정의 FPGA I/O 데이터를 위한 I/O 변수 |
스케일된 I/O 데이터를 위한 I/O 변수
스케일된 I/O 데이터를 위해 I/O 변수를 사용하려면, 먼저 지원되는 I/O 디바이스를 NI 스캔 엔진이 설치된 타겟에 연결한 다음에 LabVIEW 프로젝트에 있는 타겟에서 해당 I/O 디바이스를 추가합니다.
프로젝트 탐색기 윈도우에서 지원되는 타겟에 지원되는 I/O 디바이스를 추가하면, LabVIEW는 자동으로 각 I/O 채널에 대해 I/O 변수를 추가합니다. 현재 LabVIEW 프로젝트에 포함된 타겟에 물리적으로 I/O 디바이스를 추가하는 경우, 이 I/O 디바이스를 프로젝트에 추가하고 이에 대응하는 I/O 변수를 먼저 배포해야 사용할 수 있습니다.
현재 LabVIEW 프로젝트의 일부인 타겟에서 물리적으로 I/O 디바이스를 제거하는 경우, 프로젝트에서 I/O 디바이스를 삭제하고 해당 I/O 디바이스를 포함하고 있었던 타겟을 다시 배포해야 합니다. 타겟을 재배포하면 타겟에서의 설정이 프로젝트 설정을 반영하도록 보장할 수 있습니다. 프로젝트 및 시스템 비교 대화 상자를 사용하면 프로젝트와 타겟 설정이 일치하는지 확인할 수 있습니다.
사용자 FPGA I/O 데이터를 위한 I/O 변수 (FPGA Module 또는 Real-Time Module)
프로젝트가 NI 스캔 엔진을 지원하는 FPGA 타겟을 포함하고 있는 경우, 동일한 하드웨어 디바이스 상에서 실행 중인 FPGA VI와 RT VI 사이에서 사용자 I/O 데이터를 전송할 사용자 정의 I/O 변수를 생성할 수 있습니다.
사용자 정의 I/O 변수를 호스트하는 섀시에서 실행 중인 FPGA VI와 RT VI의 블록다이어그램에 사용자 정의 I/O 변수를 추가할 수 있습니다. 하지만, 모든 I/O 변수는 한 방향으로만 동작하기 때문에 각 사용자 정의 I/O 변수의 방향을 FPGA에서 호스트로 또는 호스트에서 FPGA로 중에서 하나로 설정해야 합니다. 예를 들어, FPGA VI에서 아날로그 I/O 데이터를 수집하고 데이터에 FFT를 수행하고, 이렇게 처리된 데이터를 FPGA에서 호스트로 I/O 변수를 사용하여 RT VI에 있는 컨트롤 루프에 전송한 후, 호스트에서 FPGA로 I/O 변수를 사용하여 RT 컨트롤 루프로부터의 출력 데이터를 다시 FPGA에 전송하여 물리적 I/O 채널에 출력할 수 있습니다.
사용자 정의 I/O 변수를 생성하려면 LabVIEW FPGA Module을 설치해야 합니다. 그러나 Real-Time Module만 있는 경우, LabVIEW FPGA Module을 설치하지 않아도 RT VI에서 사용자 정의 I/O 변수를 사용할 수 있습니다. 예를 들어, LabVIEW FPGA Module을 보유한 개발자는 사용자 정의 I/O 변수를 생성하고, 이 변수를 사용하는 FPGA 비트 파일을 컴파일할 수 있습니다. 이후, 개발자는 FPGA Module이 없는 다른 개발자에게 해당 비트 파일과 사용자 정의 I/O 변수를 포함하는 LabVIEW 프로젝트를 배포할 수 있습니다. 그러면, 이 프로젝트를 사용하여 CampactRIO 섀시에서 해당 비트 파일을 실행할 수 있습니다. 이 경우, 두번째 개발자는 사용자 정의 I/O 변수를 생성할 수는 없지만 Real-Time Module을 사용하여 첫번째 개발자가 생성한 사용자 정의 I/O 변수에 접근할 수 있습니다.
(윈도우) 사용자 정의 I/O 변수에서 네트워크 공개가 활성화되어 있는 경우, 같은 LabVIEW 프로젝트 내에 있는 모든 RT VI 또는 윈도우 기반의 VI에서 이 변수를 사용할 수 있습니다. 예를 들어, 네트워크에 공개된 I/O 변수를 사용하여 Windows에서 실행되는 사용자 인터페이스 VI를 생성할 수 있습니다.
I/O 변수 설정하기
편집 시나 런타임에 대화식으로 또는 런타임에 프로그램적으로 I/O 변수를 설정할 수 있습니다. 또한 이 방법을 섞어서 사용할 수 있습니다. 다음 테이블에서는 각 방법의 장점과 단점이 요약되어 있습니다:
| 방법 | 용도 | 장점 | 단점 |
|---|---|---|---|
| 대화식 | 프로젝트 탐색기 윈도우에 대한 접근 권한이 있을 때 I/O 변수에 대한 셋팅 설정하기 | 프로그래밍이 덜 필요함. |
|
| 프로그램적 |
|
|
프로그래밍이 더 필요함. |
대화식으로 I/O 변수 설정하기
공유 변수 프로퍼티 대화 상자를 사용하여 단일 I/O 변수를 설정하거나 여러 변수 편집기 윈도우를 사용하여 동시에 여러 I/O 변수를 설정합니다.
I/O 변수를 사용하는 VI가 실행 중인 동안에도 I/O 변수의 설명, 네트워크, 스케일링 옵션을 업데이트할 수 있습니다. 그러나 실행 중에 I/O 변수의 이름이나 데이터 타입은 업데이트할 수 없습니다.
프로그램적으로 I/O 변수 설정하기
다음 단계를 따라 변수 프로퍼티를 사용하여 I/O 변수를 프로그램적으로 설정합니다:
- 블록다이어그램에 변수 프로퍼티 노드를 추가합니다.
- 참조 입력에서 마우스 오른쪽 버튼을 클릭한 후 바로 가기 메뉴에서 생성≫상수를 선택합니다.
- 공유 변수 참조 번호 상수의 오른쪽에 있는 화살표 버튼을 클릭한 후 탐색을 선택합니다.
- 변수 객체 탐색 대화 상자를 사용하여 설정하려는 I/O 변수를 선택합니다.
- 공유 변수 참조 번호 상수에서 마우스 오른쪽 버튼을 클릭한 후 변수 클래스 선택 바로 가기 메뉴를 통해 사용하려는 프로퍼티의 클래스를 선택합니다.
- 변수 프로퍼티 노드의 흰색 영역을 클릭한 후 사용하려는 프로퍼티를 선택합니다.
- (옵션) 위치 도구를 사용해서 변수 프로퍼티 노드의 크기를 조정하면, 한 개 이상의 프로퍼티를 동시에 디스플레이할 수 있습니다.
다음 그림은 원격 타겟의 I/O 변수를 프로그램적으로 설정하는 예를 보여줍니다:
이 예에서, 변수 프로퍼티 노드는 CompactRIO 모듈 채널에 대응하는 I/O 변수를 설정하여 해당 채널에 대한 전류 리미트를 지정합니다.
- labview\LabVIEW.ini를 텍스트 파일로 엽니다.
- 새 라인에서, RemoteIOVConfigurationTimeout=을 입력하고 이어서 새로운 타임아웃 기간의 초 단위 수를 입력합니다. 예를 들어, 타임아웃 기간을 10초로 연장하려면, RemoteIOVConfigurationTimeout=10을 입력합니다.
- 파일을 저장하고 닫습니다.
I/O 변수 배포하기
I/O 변수를 배포하려면, 프로젝트 탐색기 윈도우에서 해당 I/O 변수를 포함하는 프로젝트 아이템에서 마우스 오른쪽 버튼을 클릭하고 바로 가기 메뉴에서 배포를 선택합니다.
I/O 변수 노드를 포함하는 VI를 실행할 때, LabVIEW는 해당 변수가 속한 I/O 변수 컨테이너를 자동으로 배포합니다. 이로써 컨테이너에 있는 모든 I/O 변수가 배포됩니다.
I/O 변수 값 스케일하기
공유 변수 프로퍼티 대화 상자의 스케일링 페이지에 있는 I/O 변수 또는 가명에서 선형 스케일링을 활성화할 수 있습니다. 하지만, I/O 변수는 비선형 스케일링을 지원하지 않습니다.
I/O 가명 생성하기
I/O 변수의 가명을 생성하여, 다른 상황에서 I/O 데이터의 이름과 스케일을 서로 다르게 사용할 수 있습니다. 예를 들어, 열전쌍에 연결된 I/O 변수를 갖고 있는 경우에 섭씨와 화씨라는 가명을 생성할 수 있습니다. 그런 다음에 각 가명을 각자 스케일하여, 두 종류의 측정 단위에서 온도를 디스플레이하는데 사용할 수 있습니다.
I/O 가명의 값은 직상위의 값에 양방향으로 링크되어 있기 때문에 직상위 값을 업데이트하면 I/O 가명의 값이 업데이트되고, I/O 가명의 값을 업데이트하면 직상위의 값이 업데이트됩니다. 또한, I/O 가명 연결 링크가 업데이트 되면 연결된 다른 링크도 모두 업데이트 됩니다.
단일 I/O 가명 생성하기
I/O 가명을 생성하려면, 프로젝트 탐색기 윈도우에서 I/O 변수를 포함하는 타겟에서 마우스 오른쪽 버튼을 클릭하고 바로 가기 메뉴에서 새로 만들기≫변수를 선택하여 공유 변수 프로퍼티를 디스플레이합니다. I/O 가명의 이름을 입력하고, 변수 타입 풀다운 메뉴에서 I/O 가명을 선택합니다. 이후, 탐색 버튼을 클릭하고 새 I/O 가명과 연계시키려는 기존의 I/O 변수 또는 I/O 가명을 선택합니다.
프로젝트 탐색기 윈도우를 사용하여 I/O 가명의 이름, 설명, 네트워크 공개 셋팅, 스케일링을 편집할 수 있습니다. 또한, 여러 변수 편집기 윈도우를 사용하여 여러 I/O 가명을 동시에 편집할 수 있습니다.
여러 I/O 가명 동시에 생성하기
일괄 변수 생성 대화 상자를 사용하여 여러 I/O 가명을 동시에 생성할 수 있습니다. 다음 단계에 따라 일괄적으로 여러 I/O 가명을 생성하십시오:
- 단일 I/O 가명을 생성하여, 일괄 생성 프로세서에서 템플릿으로 사용합니다.
- I/O 가명을 포함하는 변수 라이브러리에서 마우스 오른쪽 버튼을 클릭하고 바로 가기 메뉴에서 변수 생성을 선택하여 일괄 변수 생성 대화 상자를 디스플레이합니다.
- 프로퍼티 복사를 선택하고, 탐색 버튼을 클릭한 후에 템플릿으로 사용하려면 기존의 I/O 가명을 선택합니다.
- 생성하려는 I/O 가명의 개수를 생성할 개수 필드에 입력하고 확인 버튼을 클릭하여 새 I/O 가명을 생성합니다.
이 단계를 모두 마치면, LabVIEW는 자동으로 여러 변수 편집기 윈도우를 열고 이를 통해 사용자가 새로 만든 변수를 편집할 수 있습니다. 예를 들어, 각 I/O 가명의 가명 경로를 편집하여 특정 I/O 변수에 연계시킬 수도 있습니다.
I/O 변수 값 강제 변환하기
I/O 변수의 값을 대화식 또는 프로그램적으로 강제 변환할 수 있습니다. I/O 변수를 강제 변환하면, 이와 연계된 I/O 데이터는 변수의 강제 변환을 해제하거나, 타겟을 재부팅하거나, 변수가 다른 값을 취하도록 강제 변환할 때까지 사용자가 지정한 값을 취하게 됩니다. I/O 변수에 대한 강제 변환을 해제하면, I/O 변수에 대한 통제 권한이 NI 스캔 엔진에게 되돌아갑니다.
대화식으로 I/O 변수 값 강제 변환하기
NI 배포된 시스템 관리자를 사용하여 I/O 채널을 디버깅하거나 수동으로 컨트롤하는 동안에 I/O 변수의 값을 강제 변환 또는 강제 변환을 해제합니다. LabVIEW에서 도구≫배포된 시스템 관리자를 선택하여 NI 배포된 시스템 관리자를 시작합니다. 또한, 프로젝트 탐색기 윈도우에 있는 RT 타겟에서 마우스 오른쪽 버튼을 클릭하고 유틸리티≫시스템 관리자에서 보기를 선택하여, 배포된 시스템 관리자를 시작할 수 있습니다.
프로그램적으로 I/O 변수 값 강제 변환하기
강제 변환 VI를 사용하여 I/O 변수를 프로그램적으로 강제 변환 및 강제 변환 해제합니다.
I/O 가명 강제 변환하기
강제 변환은 표준 I/O 변수뿐만 아니라 가명에도 적용됩니다. I/O 변수를 강제 변환하면, 이와 연계된 가명도 모두 강제 변환하는 것입니다. 가명을 강제 변환하면, 직상위 I/O 변수와 이와 연계된 다른 가명도 모두 강제 변환하는 것입니다.
동시에 타겟에 있는 모든 I/O 변수를 강제 변환 및 강제 변환 해제하기
타겟의 글로벌 강제 변환 상태를 사용하여, 타겟에서 모든 I/O 변수를 강제 변환 및 강제 변환 해제할 수 있습니다. 대화식 또는 프로그램적으로 타겟에서 글로벌 강제 변환을 활성화 및 비활성화시킬 수 있습니다.
NI 배포된 시스템 관리자에 있는 강제 변환 활성화와 강제 변환 비활성화 버튼을 사용하여, 대화식으로 타겟에서 글로벌 강제 변환을 활성화하고 비활성화합니다. 변수 강제 변환 활성화와 변수 강제 변환 비활성화 버튼을 사용하여, 프로그램적으로 타겟에서 강제 변환을 활성화하고 비활성화합니다.
다음 단계에 따라 타겟에 있는 모든 I/O 변수를 동시에 강제 변환합니다:
- 개별적으로 I/O 변수를 개별적으로 강제 변환시킬 필요가 없이, 원하는 I/O 변수의 강제 변환 값을 개별적으로 설정할 수 있도록 타겟에서 강제 변환을 비활성화합니다.
- 타겟에 있는 I/O 변수 모두에 대해 원하는 강제 변환 값을 설정합니다.
- 타겟에서 강제 변환을 활성화하여, 타겟에 있는 모든 I/O 변수를 동시에 강제 변환합니다.
원격으로 I/O 변수에 접근하기
I/O 변수에서 네트워크 공개가 활성화되어 있는 경우, I/O 변수를 호스트하는 타겟과 같은 네트워크에 연결되어 있는 원격 컴퓨터에서 그 I/O 변수에 접근할 수 있습니다. NI 배포된 시스템 관리자에서 I/O 변수 프로브 보기를 사용하여 대화식으로 원격 I/O 변수에 접근할 수 있습니다. 또한, VI에서 프로그램적으로 원격 I/O 변수에 접근할 수 있습니다.
공유 변수 프로퍼티 대화 상자를 사용하여 I/O 변수에서 네트워크 공개를 활성화 또는 비활성화합니다. 호스트 컴퓨터에서 I/O 값을 모니터링해야 하거나, 원격 타겟에서 I/O 변수에 접근할 필요가 있는 경우에는 네트워크 공개를 활성화합니다. 스캔 엔진 페이지를 사용하여 타겟에 있는 모든 I/O 타겟에 대해 글로벌 네트워크 공개 속도를 설정할 수 있습니다.
로컬에서 I/O 변수에 접근하기
LabVIEW는 I/O 변수를 글로벌 스캔 엔진 메모리 맵에 추가하고 동시에 모든 I/O 변수의 값을 업데이트합니다. 하지만, I/O 변수를 호스트하는 로컬 타겟에서의 I/O 변수 접근에 대해 각 노드가 스캔 접근 또는 다이렉트 접근 중에 하나를 사용하도록 설정할 수 있습니다.
다음 단계에 따라 I/O 변수 노드의 로컬 접근 모드를 선택합니다:
- 블록다이어그램에 있는 I/O 변수 노드에서 마우스 오른쪽 버튼을 클릭합니다.
- 바로 가기 메뉴에서 로컬 접근 모드를 선택합니다.
- 노드에 대해 사용하려는 접근 모드를 선택합니다.
로컬 접근 모드 선택하기
일반적으로 스캔 접근은 업데이트 속도가 비슷한 I/O 채널 그룹에 적합하고, 다이렉트 접근은 스캔 주기에 대해 비동기적으로 업데이트되는 개별 I/O 채널에 적합합니다. 다음 테이블은 각 I/O 접근 방법을 사용하는 경우에 대한 요약 정보를 보여줍니다:
| 일반적인 용도 | 접근 방법 |
|---|---|
| 공통된 업데이트 속도를 갖는 I/O 채널에 대한 단일 포인트 접근 | 스캔 |
| 긴급 정지 출력에 대한 단일 쓰기와 같이 (사용자 정의된 I/O 변수에서는지원되지 않음), NI 스캔 엔진 주기에 대해 비동기적인 로컬 I/O 채널에 대한 단일 포인트 접근 | 다이렉트 |
스캔 접근
LabVIEW는 I/O 변수 노드를 설정하여 스캔 접근을 사용하도록 기본설정됩니다. 같은 속도로 업데이트 되는 I/O 채널 세트 및 확장 I/O 채널에 대해 스캔 접근을 사용합니다. 스캔 접근은 스캔 엔진 메모리 맵을 사용하여, 다음 그림에서 보이는 것처럼, 무차단형 I/O 읽기와 쓰기를 수행합니다:
스캔 접근을 사용하여 I/O 변수에서 읽을 때마다, NI 스캔 엔진은 새 값을 기다리거나 차단하지 않고 메모리 맵에 저장된 최신 값을 즉시 반환합니다. 각 스캔에서, LabVIEW는 최신 I/O 값을 읽고 이 값을 NI 스캔 엔진 메모리 맵에 씁니다.
스캔 접근을 사용하여 I/O 변수에 대해 쓰기 작업을 취할 때마다, 스캔 엔진 메모리 맵에 저장된 이전 값을 덮어쓰게 됩니다. 각 스캔이 진행될 때마다, LabVIEW는 메모리 맵에 저장된 값을 물리적인 I/O 채널에 밀어넣습니다. 데이터 손실을 막으려면, 모든 I/O 변수 쓰기 작업을 스캔 주기에 동기화해야 합니다.
다이렉트 접근
스캔 주기에 대해 비동기적으로 단일 포인트 로컬 I/O 채널을 읽거나 쓰려면 다이렉트 접근을 사용합니다. 어플리케이션이 가능한 빨리 값을 써야 하는 경우 다이렉트 접근을 사용할 수 있습니다. 다음 그림에서 보이는 것처럼, 다이렉트 접근은 스캔 엔진 메모리 맵을 건너뛰고 I/O 디바이스 드라이버와 직접 통신하여 비동기식(Non-Blocking) I/O 읽기와 쓰기 작업을 수행합니다:
I/O 변수 노드 아이콘 해석하기
블록다이어그램에 있는 각 I/O 변수 노드는 다음에 나열된 접근 방법 중 한 개를 나타내는 문양을 가집니다.
| 접근 방법 | 노드 모양 |
|---|---|
| NI-PSP |
|
| 스캔 |
|
| 다이렉트 |
|