하나의 중지 버튼으로 LabVIEW에서 병렬 While 루프 중지하기

업데이트 됨 Nov 3, 2023

환경

소프트웨어

  • LabVIEW Full

LabVIEW에 여러 개의 병렬 while 루프가 있고 하나의 중지 버튼을 사용하여 모두 중지하고 싶습니다. 이 작업을 수행하고 중지 버튼이 초기 상태로 돌아가도록 하려면 어떻게 해야 합니까?

사용중인 LabVIEW 버전에 따라 다음 방법 중에서 선택하여 하나의 중지 버튼을 사용하여 LabVIEW에서 여러 개의 병렬 While 루프를 중지합니다.

참고: 아래 나열된 방법은 병렬 While 루프를 중지하는 방법을 모두 보여주는 것이 아닙니다. 이러한 방법이 가장 일반적인 방법입니다.

채널 와이어

LabVIEW 2016을 사용하는 경우 채널 와이어를 사용하여 하나의 중지 버튼으로 여러 병렬 While 루프를 중지 할 수 있습니다. 이는 채널 와이어가 실행 순서를 강제하지 않고 두 개의 병렬 While 루프를 연결하는 비동기 와이어이기 때문에 가능합니다. 따라서 두 개의 병렬 While 루프 간에 데이터 종속성이 없습니다.

참고 : 채널 와이어는 LabVIEW Real-Time Module에서 지원되지만 LabVIEW FPGA Module에서는 지원되지 않습니다.

다음 블록 다이어그램은 태그 채널을 사용하여 병렬 While 루프를 중지하는 방법을 보여줍니다.

다음 목록은 이전 블록 다이어그램에 대한 중요한 세부 정보를 설명합니다.

  1. 루프A에는 태그 채널에 값을 쓰는 태그 작성기 끝 점이 포함되어 있습니다.
  2. 채널 와이어는 태그 기록기 끝점의 채널 출력을 태그 판독기 끝점에 연결합니다.
  3. 루프B에는 태그 채널에서 값을 읽는 태그 판독기 끝 점이 포함되어 있습니다.
  4. 루프A에서 작성자 끝점의 요소 매개 변수에 연결된 중지 버튼은 루프 B 와 통신합니다. 루프 A 에서 중지 버튼을 클릭하면 루프 B도 중지됩니다.

다음 블록 다이어그램은 스트림 채널을 사용하여 병렬 While 루프를 중지하는 방법을 보여줍니다.

스트림 채널을 사용할 때 루프 A 에있는 작성기 끝점의 마지막 요소 매개 변수에 연결된 중지 버튼은 루프 B 와 통신합니다.

태그 채널과 스트림 채널은 병렬 While 루프를 중지하는 데 사용할 때 큰 차이가 있습니다.

  • 태그 채널을 사용하여 병렬 While 루프를 중지하면 루프 A중지 버튼 값이 루프 B와 직접 통신하기 때문에 모든 루프가 가능한 한 빨리 중지됩니다. 루프(A)로부터 정지 버튼 값은 마지막 요소를 통해 루프 B와 통신하기 때문 루프(A)보다 나중에 여러 반복을 중지 루프 B가 발생할 수 있지만 루프 정지 평행 마지막 요소?(last element?) 이 기능는 루프 A가 마지막 요소를 작성하자마자 중지됨을 의미합니다. 그러나 루프 B는 채널의 나머지 요소를 계속 읽고 마지막 요소를 읽을 때까지 중지하지 않습니다. 스트림 채널은 채널을 통해 전달되는 모든 데이터 요소가 루프 B가 중지되기 전에 처리되도록 합니다.
  • 태그 채널을 사용하면 태그 채널은 여러 작성기 혹은 판독기로 분기될 수 있기 때문에 두 개 이상의 병렬 While 루프를 중지 할 수 있습니다. 스트림 채널은 하나의 라이터와 하나의 리더만 허용하기 때문에 스트림 채널을 사용하면 두개의 병렬 루프만 중지할 수 있습니다.
다음 블록 다이어그램은 태그 채널을 사용하여 3개의 병렬 While 루프를 중지하는 방법을 보여줍니다.

경고

여러 중지 버튼을 갖도록 이전 태그 아키텍처를 확장 할 수 없습니다. 그러나 labview\vi.lib\ChannelSupport에 있는 Share Stop Signal VI를 사용하여 하나 이상의 중지 버튼을 추가할 수 있으며, 이를 통해 중지 버튼 중 하나를 사용하여 여러 개의 병렬 While 루프를 중지할 수 있습니다.

다음 VI 스니펫은 두 개의 중지 버튼 중 하나를 사용하여 여러 개의 병렬 While 루프를 중지하는 방법을 보여줍니다. 중지 버튼을 더 추가하려면 동일한 아키텍처를 따르십시오.

지역 변수(Local Variable)

각 추가 루프에 대한 로컬 변수를 사용하여 첫 번째 루프의 컨트롤에서 다른 모든 루프로 부울 중지 버튼 값을 전달하여 하나의 중지 버튼으로 여러 개의 병렬 While 루프를 중지할 수 있습니다. 다음 블록 다이어그램은 로컬 변수를 사용하여 두 개의 병렬 While 루프를 중지하는 방법을 보여줍니다.

다음 목록은 이전 블록 다이어그램에 대한 중요한 세부 정보를 설명합니다.

  1. 상단 루프에는 중지(Stop) 컨트롤이 포함되어 있습니다. 전면 패널의 정지 제어를 마우스 오른쪽 버튼으로 클릭하 기계 액션(Mechanical Action)»눌렀을 때 스위치(Switch When Pressed)를 선택하여 정지 제어의 기계적 동작을 구성합니다. 이렇게 하면 모든 루프가 중지 부울을 읽을 수 있습니다. 눌렀을 때 래치는 값을 읽을 때 true로 재설정되고 일부 루프는 계속 실행됩니다.
  2. 맨 아래 두 루프에는 중지 제어의 로컬 변수가 있습니다. 로컬 변수는 중지(Stop) 컨트롤을 마우스 오른쪽 버튼으로 클릭하고 생성(Create)»로컬 변수(Local Variable)을 선택하여 생성됩니다. 로컬 변수를 마우스 오른쪽 버튼으로 클릭하고 읽기로 변경(Change to Read)을 선택하여 값을 읽도록 로컬 변수를 구성합니다.
  3. Reinit To Default 호출 노드를 확인하는 것이 중요합니다. 암시 적으로 정지 버튼을 참조하여, 이 다음 실행의 시작 부분에 값을 true로 재설정합니다.
  4. 이러한 모든 루프에는 서로 다른 실행 시간에 관계없이 모든 루프가 중지됨을 강조하는 Wait ms가 포함되어 있습니다.

3 개 이상의 병렬 While 루프를 중지하려면 초기 중지(Stop) 컨트롤에서 읽을 로컬 변수를 더 추가하여 동일한 아키텍처를 따릅니다.

프로퍼티 노드(Property node)

속성 노드를 사용하여 첫 번째 루프의 컨트롤에서 다른 모든 루프로 부울 중지(Stop) 버튼 값을 전달할 수 있습니다. 다음 블록 다이어그램은 프로퍼티 노드를 사용하여 두 개의 병렬 While 루프를 중지하는 방법을 보여줍니다.

다음 목록은 이전 블록 다이어그램에 대한 중요한 세부 정보를 설명합니다.

  1. 상단 루프에는 중지(Stop) 컨트롤이 포함되어 있습니다. 프런트 패널의 정지 제어를 마우스 오른쪽 버튼으로 클릭하고 버튼을 누르면 기계 액션(Mechanical Action)»누를 때 스위치(Switch When Pressed)를 선택하여 정지 제어의 기계적 동작을 구성합니다. 이렇게 하면 모든 루프가 중지(Stop) 부울을 읽을 수 있습니다. 눌렀을 때 래치는 값을 읽을 때 true로 재설정되고 일부 루프는 계속 실행됩니다.
  2. 하단 루프에는 중지(Stop) 컨트롤의 프로퍼티 노드가 포함되어 있습니다. 프로퍼티 노드는 중지(Stop) 컨트롤을 마우스 오른쪽 버튼으로 클릭하고 생성(Create)»프로퍼티 노드(Property Node)»값(Value)를 선택하여 생성합니다. 값(Value) 프로퍼티 노드를 마우스 오른쪽 버튼으로 클릭하고 읽기로 변경(Change to Read)을 선택하여 값을 읽도록 값(Value) 프로퍼티 노드를 구성합니다.
  3. Reinit To Default 호출 노드를 확인하는 것이 중요합니다. 암시 적으로 정지 버튼을 참조하여, 이 다음 실행의 시작 부분에 값을 true로 재설정합니다.
  4. 이러한 모든 루프에는 서로 다른 실행 시간에 관계없이 모든 루프가 중지됨을 강조하는 Wait ms가 포함되어 있습니다.

두 개 이상의 병렬 While 루프를 중지하려면 초기 중지(Stop) 컨트롤에서 읽을 값 속성 노드를 더 추가하여 동일한 아키텍처를 따릅니다.

지역 변수와 속성 노드를 사용하는 경우에 대한 자세한 내용은 지역 변수와 값 속성 노드의 차이점 문서를 참조하십시오.

알림자(Notifiers)

복잡한 동작이 포함 된 응용 프로그램의 경우 알림을 사용하여 병렬로 실행되는 여러 루프를 중지 할 수 있습니다. 알림 기능은 프로그래밍(Programming)»동기화(Synchronization)»알림 작업(Notifier Operations) 팔레트에서 접근할 수 있습니다.

참고: 알리미 사용은 여러 스레드로 쉽게 확장되지만 항상 기존 프로그램 아키텍처와 잘 통합되는 것은 아닙니다.

다음 VI 스니펫은 알림자를 사용하여 여러 While 루프를 중지 할 수 있는 한 가지 방법을 보여줍니다.

다음 목록은 이전 VI 스니펫에 대한 중요한 세부 사항을 설명합니다.

  • 상단 루프가 반복 될 때마다 알림에 중지(Stop) 버튼의 상태가 기록됩니다.
  • 다른 두 개의 루프는 각 반복에서 알림자의 상태를 확인합니다.

    참고: 알림을 모니터링하는 모든 스레드가 중지될 때까지 알림이 해제되지 않았는지 확인하십시오. 이전 VI 스니펫에서 에러 병합(Merge Errors) VI는 모든 루프가 중지 될 때까지 알림자 해제(Release Notifiers) VI가 실행되지 않도록 보장합니다.

  • 중지 버튼을 클릭하면 상태가 알림자에게 전송되어 모든 루프가 중지됩니다.

큐(Queue)

큐를 사용하여 더 복잡한 동작을 포함하는 애플리케이션에 대해 병렬로 실행되는 여러 루프를 중지 할 수 있습니다. 큐 기능은 프로그래밍(Programming)≫동기화(Synchronization)≫큐 작업(Queue Operations) 팔레트에서 접근할 수 있습니다.

참고: 많은 대형 애플리케이션에는 병렬 루프간에 데이터를 교환하기 위한 큐 시스템이 이미 있습니다. 이러한 설정에서는 병렬 루프에 대한 중지 명령을 포함하도록 기존 대기열을 수정하거나 향상시킬 수 있습니다.

다음 VI 스니펫은 큐를 사용하여 여러 While 루프를 중지하는 방법을 보여줍니다.

마스터-슬레이브 아키텍처를 사용하는 일부 애플리케이션은 슬레이브 스레드가 종료되기 전에 큐를 해제합니다. 삭제된 참조에서 큐에서 빼기에서 발생한 오류는 슬레이브 루프를 중지하는 데 사용됩니다. 오류 조건에 의존하여 슬레이브 루프를 중지하는 대신 이전 VI 스니펫에는 마스터 루프에서 슬레이브 루프로 전달되는 개별 중지 명령이 있습니다.