위 그림의 프로그램을 한 번 살펴봅시다. A, B, C 라는 이름의 컨트롤 오브젝트가 3개 있구요. A + B, A + B + C라는 이름의 인디케이터 오브젝트가 2개 있습니다. 그리고 컨트롤 오브젝트로 전달된 데이터의 합이 계산되는 프로그램이라는 것을 블록 다이어그램으로 알아낼 수 있습니다. 세 수의 합을 계산하는 부분에서 A + B 인디케이터에 대한 로컬 변수 노드가 사용되었다는 것을 제외한다면 특별할 것 없는 그냥 단순한 프로그램인데요. 위 그림과 같이 A에는 1, B에는 2, C에는 3을 입력되어 있는 상태에서 프로그램을 실행시킨다면, 어떤 데이터가 두 인디케이터에 표시될까요?
이런 질문을 받으신다면, A + B에는 3, A + B + C에는 6이 표시될 것이라고 답변하실 분들이 많으실텐데요.
실제로 프로그램을 실행시켜 보면, 두 인디케이터 모두 3이 표시됩니다. 처음 질문에 3과 6이라고 답변하신 분들 중에서도 프로그래밍에 경험이 어느 정도 있으신 분들은 왜 이런 결과가 나오는지 금새 알아차리실 수 있겠지만, 여전히 오리무중이신 분들을 위해 잠시 설명을 드리자면,
A + B라는 이름의 인디케이터 오브젝트에 할당된 메모리로, 2개의 참조가 맞물리는 상황이라고 말씀드릴 수 있습니다. 즉, A와 B의 더하기 연산에 대한 결과를 기록하는 작업과 로컬 변수 노드에서 데이터를 가져오는 작업이 같은 메모리를 대상으로 진행되어야 하는데, 어떤 참조에 대한 작업이 먼저 처리되어야 하는지가 불분명한 상황에서 데이터를 가져오는 작업이 먼저 처리되었기 때문에 3, 3이라는 결과가 나오게 되는 것이지요.
그런데, 여기서 문제는 3, 3이라는 결과를 도출하기 위해 작성된 프로그램처럼 보이지 않는다는 점인데요. 무슨 말이냐면, 누가 보더라도 세 수의 합을 A + B + C에 표시하길 원했던 것처럼 보이는데, 데이터를 참조하는 순서에 의해 개발자의 의도와 다른 결과가 나왔다는 말이고, 프로그램을 작성하다 보면 어쩌다 한 번씩 만날 수 있는 문제이기 때문에 상당히 찝찝하다는 점이 문제라는 의미입니다. 다시 말해서, 이렇게 같은 메모리를 상대로 여러 참조가 동시 다발적으로 이루어지는 경우를 대비하기 위해 참조되는 순서를 구분지어 주는 것이 필요하구요. 이 때 사용할 수 있는 것이 Sequence 구조입니다.
Sequence 구조는 프로그램이 실행되는 단계를 구분하기 위한 장치이므로, 블록 다이어그램에 추가합니다. 위 그림과 같이 블록 다이어그램의 빈 공간을 마우스 우클릭해서 함수 팔레트를 열어준 다음에, 프로그래밍 → 구조 → 플랫 시퀀스 구조를 선택하고 원하는 영역을 마우스로 드래그하면 되는데요. 함수 팔레트 안에서 선택하는 메뉴만 달라질 뿐, 블록 다이어그램에 추가하는 과정은 CASE 구조에서 설명드린 방법과 동일하므로, 시퀀스 구조를 추가하는 방법에 대한 구체적인 과정을 확인하실 분들은 아래의 링크를 통해 CASE 구조에 대한 내용을 참고하시기 바랍니다.
[Programming/LabVIEW] - CASE 구조에 대해 알아보자.
블록 다이어그램에 추가된 시퀀스 구조는 위 그림과 같은 형태로 표시됩니다. 마치 영화 필름을 연상하는 테두리로 서브 다이어그램의 영역을 구분하고 있는데요. 시퀀스라는 단어 자체가 단계나 차례, 순서와 같은 의미를 가지고 있기 때문에 이러한 단어의 뜻을 살리기 위한 이미지로 해석이 되구요. 여하튼 서브 다이어그램 내부에 프로그램을 작성하면 됩니다.
시퀀스 구조 자체가 프로그램의 처리 순서를 구분하는 용도로 사용하기 때문에, 단일 서브 다이어그램만 사용할거라면 시퀀스 구조를 굳이 적용할 필요가 없습니다. 즉, 2개 이상의 서브 다이어그램을 가진 시퀀스 구조에서 본격적인 실력 발휘가 이루어진다는 말인데요. 블록 다이어그램에서 시퀀스 구조를 선택하면 단일 서브 다이어그램의 시퀀스 구조가 추가되기 때문에 서브 다이어그램을 직접 추가해 주셔야 하구요. 여기서는 프레임이라고 부릅니다.
시퀀스 구조 내부에 또 다른 프레임을 추가할 때는 위 그림에서 보여드리는 것처럼, 시퀀스 구조의 테두리를 마우스로 우클릭 했을 때 나타나는 팝업 메뉴에서, 다음에 프레임 추가 또는 이전에 프레임 추가 메뉴를 클릭하시면 되구요. 메뉴 이름 그대로 새로운 프레임을 뒤에 추가하거나, 앞에 추가할 수 있습니다. 그리고 왼쪽에서부터 순서대로 프레임 내부에 작성된 프로그램을 실행하게 되지요.
지금까지 설명드린 내용에 따라 위 그림처럼 시퀀스 구조를 적용한 형태로 프로그램을 수정하면, 처음 원했던 대로, 3과 6이 인디케이터에 표시되는 결과를 얻을 수 있습
다.
'Programming > LabVIEW' 카테고리의 다른 글
SubVI (0) | 2024.05.24 |
---|---|
Event 구조 (2) | 2024.05.23 |
While 루프 (0) | 2024.05.22 |
Feedback Node와 Shift Register (0) | 2024.05.21 |
FOR 루프와 배열 (0) | 2024.05.21 |