마스터/슬레이브 애플리케이션 구축
마스터/슬레이브 디자인 패턴은 여러 개의 병렬 루프로 구성됩니다. 다른 모든 루프를 제어하는 루프는 마스터이고 나머지 루프는 슬레이브입니다. 하나의 마스터 루프는 항상 하나 이상의 슬레이브 루프를 구동합니다. 이러한 루프 사이의 직접 데이터 통신은 데이터 흐름을 끊기 때문에 LabVIEW의 로컬 또는 글로벌 변수, 어커런스, 알림자 또는 큐와 같은 메시징 아키텍처로 쓰고 읽어야합니다. 그림 1은 공유 데이터를 사용하여 서로 다른 루프가 서로 연결되는 방식을 보여줍니다.
그림 1 : 마스터/슬레이브 개요
예제 - 루프 동기화
이 응용 프로그램에는 다음 요구 사항이 있습니다.
첫 번째 단계는 마스터가 될 프로세스와 슬레이브가 될 프로세스를 결정하는 것입니다. 이 예에서 사용자 인터페이스는 마스터 루프 내부에 배치되고 두 개의 깜박이는 LED 프로세스는 두 개의 슬레이브 루프가 됩니다. 사용자 인터페이스는 로컬 변수를 사용하여 각 슬레이브 루프의 작동을 제어합니다.
이제 LabVIEW 마스터/슬레이브 어플리케이션을 시작할 준비가되었습니다. 최종 마스터/슬레이브 어플리케이션을 보려면 첨부 된 VI (SynchLoops.vi)를여십시오.
메시징 아키텍처 (공유 데이터)
문제점 : 여러 루프가 동시에 공유 변수에 데이터를 쓰려고 하면 궁극적으로 어떤 값이 기록 될지 알 수 있는 방법이 없습니다. 이를 경쟁 상태라고합니다.
솔루션 : 글로벌 변수에 쓰는 모든 코드 주변에 "획득/해제 세마포어"쌍을 배치합니다. 이렇게하면 여러 루프가 동시에 글로벌 변수에 쓰기를 시도하지 않습니다. LabVIEW에 포함 된 예제 중에는 세마포어 사용을 보여주는 몇 가지 예제가 있습니다. 세마포어는 경쟁 조건을 피하기 위해 기록되는 동안 글로벌 데이터를 잠급니다.
동기화
문제점 : 마스터/슬레이브 디자인 패턴은 동기화를 기반으로 하지 않기 때문에 슬레이브 루프가 마스터 루프 이전에 실행을 시작할 수 있습니다. 따라서 슬레이브 루프가 실행을 시작하기 전에 마스터 루프를 초기화하는 것이 문제가 될 수 있습니다.
솔루션 : 어커런스는 이러한 종류의 동기화 문제를 해결하는 데 사용할 수 있습니다.
어커런스 사용을 보여주는 예제를 찾으려면 LabVIEW 제공 예제를 참조하십시오. 그림 2는 어커런스 사용 방법에 대한 예를 보여줍니다.
그림 2 : 어커런스 예