Skip to main content

3과: 조건문

이전 수업에서는 프로젝트에서 광학 센서의 데이터를 사용하여 디스크를 색상별로 정렬하는 방법을 알아보았습니다. 이 수업에서는 배운 내용을 바탕으로 광학 센서에서 감지된 색상에 관계없이 프로젝트에서 결정을 내릴 수 있도록 하는 VEXcode의 옵션을 살펴보겠습니다. 다음에 대해 배우게 됩니다: 

  • 산업 현장에서 의사결정을 최적화하는 것이 중요한 이유
  • If then,If then else,Else if블록의 차이점입니다.

여러 조건 확인

이전 수업에서는 디스크를 색상에 따라 빨간색 팔레트나 녹색 팔레트로 정렬하는 프로젝트를 만들었습니다. 이 방법은 효과적이지만, 프로젝트에서는 한 번에 하나의 디스크만 정렬할 수 있습니다. 공장에서는 많은 물건을 반복적으로 분류하고 팔레트에 담아야 합니다. 이를 효과적으로 수행하려면 6축 암이 물체를 어떻게 움직일지 또는 인간의 개입이 필요한지 여부를 반복적으로 결정할 수 있어야 합니다. 6축 암 소개 과정에서 옮긴 큐브를 생각해 보세요.광학 센서 위에 파란색 큐브를 고정한 6축 암의 클로즈업입니다.

만약 파란색 큐브가 로딩 구역에 있다면? 이전 수업의 프로젝트에서는 무슨 일이 일어날까요? 산업 현장에서는 가능한 모든 조건을 고려해야 합니다. 분류할 물건에 잘못된 물건이 섞여 있는 경우, 작업 셀과 주변 작업자의 안전을 보장하고 효과적으로 기능할 수 있도록 사람의 개입이 필요할 가능성이 높습니다.

순차이면블록

이전 수업에서는 두 개의If then블록을 순서대로 사용하여 두 개의 별도 조건을 차례로 확인하면서 본질적으로 프로젝트 내에서 두 가지 질문을 했습니다.

이전 수업의 과제를 완료하는 데 필요한 VEX코드 프로젝트 예시입니다. 디스크를 올바른 팔레트로 옮기라는 주석과 그 주석 아래의 두 개의 If then 블록이 빨간색으로 강조 표시되어 있습니다. 빨간색으로 강조 표시된 상자 안의 블록은 다음과 같습니다. 광학 장치 5가 빨간색을 감지하면 팔 10을 위치 x 169 y 150 z 100으로 이동하고, 광학 장치 5가 녹색을 감지하면 팔 10을 위치 x 172 y 1 z 100으로 이동합니다.

먼저, 물체가 빨간색인가요?, 그 다음, 물체가 초록색인가요?. 각 조건은 광학 센서에서 감지된 내용에 관계없이 프로젝트가 실행될 때마다 확인됩니다. 이 구조를 사용하면 한 번에 하나의 디스크를 효과적으로 정렬할 수 있지만 가장 효율적인 방법은 아닙니다. 빨간색 디스크는 분류할 수 있지만, 광학 센서는 주변 환경의 다른 것에서 녹색을 감지할 수도 있고, 그 반대의 경우도 가능합니다. 또한 안전 문제를 일으킬 수 있는 예상치 못한 물체처럼 빨간색도 초록색도 아닌 물체에 대한 고려도 없습니다.

프로젝트 흐름 이미지

이 수업에서는 VEXcode 프로젝트의 흐름을 설명하는 이미지가 공유됩니다. 수업을 진행하는 동안 엔지니어링 노트에 이러한 이미지를 다시 만들 수 있습니다. 

Google Slides나 Microsoft PowerPoint에서 화살표, 상자, 흐름도와 같은 도구를 사용하여 노트북에서 가장 적합한 시각화를 만들 수 있습니다.

Google Slides에서 선 도구 상자를 엽니다. 도구 상자에는 선, 화살표, 엘보 커넥터, 곡선 커넥터, 곡선, 폴리라인 및 낙서 옵션이 표시됩니다.

 

순차If then else블록

빨간색과 녹색 조건을 확인하고 다른 색상을 설명하는 데 사용할 수 있는 다른 블록이 있습니다. If then else블록은 보고된 부울 값에 따라if분기 또는else분기 내부의 블록을 실행하는 C 블록입니다.

프로젝트 흐름을 나타내기 위해 빨간색과 녹색 화살표가 있는 if then else 블록을 사용한 코드 조각입니다. 프로젝트 내용은 다음과 같습니다. 디스크를 올바른 팔레트로 옮기고, 광학 장치 5가 빨간색을 감지하면 암 10을 x 169 y 150 z 100 위치로 옮기고, 그렇지 않으면 신호탑 6을 파란색으로 설정하고 깜박이게 한 다음 암 10을 제어된 정지 위치로 설정합니다. else 뒤에 있는 두 명령은 모두 if then else 블록의 else 분기에 속한다는 점에 유의하세요. 녹색 화살표와 Optical이라는 텍스트는 If then에서 Move to Position 블록까지 빨간색 실제 지점을 감지합니다. 광학적 텍스트가 있는 빨간색 화살표는 else 분기의 시작 부분에 있는 신호 타워 블록의 if then에서 빨간색 거짓 지점을 감지합니다.

if브랜치나 else브랜치를 실행한 후, 프로젝트는 스택의 다음 블록으로 이동합니다. If then else블록의 프로젝트 흐름을 표시하여 분기를 더 잘 보이게 할 수도 있습니다.

이전과 동일한 프로젝트 흐름이지만 명확성을 위해 if 분기와 else 분기를 분리했습니다. 왼쪽에는 빨간색 텍스트가 있는데, 빨간색은 감지되지 않음, 거짓, 그 외에는 설정된 신호탑과 설정된 통제 정지 블록을 가리키는 화살표가 있습니다. 오른쪽에는 빨간색이 감지되었다는 텍스트와 이동 위치 블록을 가리키는 화살표가 있습니다. 왼쪽과 오른쪽 모두 아래에 주황색 화살표가 있는데, 이는 if then else 블록 아래에서 프로젝트를 계속 진행한다는 것을 나타냅니다.

이 예에서 else분기는 객체가 빨간색도 아니고 녹색도 아닌 조건을 처리하는 데 사용되었습니다. 그런 경우에는 인간의 개입이 필요할 것입니다. 이전에 신호탑의 파란색 불빛은 인간의 개입이 필요하다는 것을 나타내는 데 사용된다는 것을 배웠습니다. 또한, 제어된 정지 기능은 사람과 기계의 안전을 위해 6축 암의 움직임을 멈춥니다. 세트 신호탑블록과세트 제어 정지블록을else분기에 추가하면 빨간색이나 녹색이 아닌 물체가 이러한 안전 기능을 작동시킬 수 있습니다.

빨간색 상자로 표시된 것은 If then else 블록의 else 분기 내용입니다. 여기에는 신호탑 블록과 암 제어 정지 블록이 포함됩니다.

지금까지의 이미지는 객체가 빨간색인 상태를 처리하는 방법만 보여주었습니다. 또 다른 If then else객체의 상태가 녹색인지 확인하는 데 필요합니다.

첫 번째 블록 바로 뒤에 두 번째 if then else 블록이 추가된 동일한 vexcode 프로젝트입니다. 이 블록과 그 안에 포함된 블록들은 다음을 읽습니다. 광학 5가 녹색을 감지하면 암 10을 x 172 y 1 z 100 위치로 이동합니다. 그렇지 않으면 신호 타워 6을 파란색으로 설정하고 깜박이면 암 10을 제어가 중지되도록 설정합니다.

이런 구조를 가지고 프로젝트 흐름을 생각해 보겠습니다. 프로젝트가 실행될 때마다 광학 센서에서 감지된 색상에 관계없이 여러 개의 분기가 실행됩니다.

두 개의 if then else 블록에 대한 프로젝트 흐름 이미지입니다. 상단 절반은 이전의 동일한 프로젝트 흐름을 보여주고, 주황색 화살표가 첫 번째 if then else 블록에서 두 번째 블록으로 이동하는 것을 볼 수 있습니다. 두 번째 if then else 블록에는 녹색 화살표와 옆에 'optical detects green true'라는 텍스트가 있습니다. 화살표는 if then에서 if then 분기 내의 위치로 이동 블록을 가리킵니다. 같은 지점에서 시작하는 빨간색 텍스트와 빨간색 화살표는 다음과 같습니다. 광학에서 녹색 거짓을 감지합니다. 화살표는 if then에서 else 분기의 set signal tower 블록을 가리킵니다.

예를 들어 빨간색 디스크를 생각해 보겠습니다. 광학 센서가 빨간색을 감지하면 첫 번째If then else블록의 조건이 참으로 보고됩니다. if브랜치 내부의 블록이 실행되어 6축 암이 빨간색 팔레트 위로 이동합니다. 그러나 두 번째If then else블록 내부의 조건은 거짓으로 보고됩니다. 즉,else분기 내부의 블록이 실행되어 6축 암이 제어된 정지 상태에 들어가고 신호 타워에서 파란색으로 깜박입니다. 6축 암이 제어된 정지 상태에 있기 때문에 프로젝트의 다른 블록은 실행될 수 없으며, 문제가 해결될 때까지 모든 작업이 중단됩니다. 

광학 센서가 빨간색을 감지하는 예를 살펴보는 프로젝트 흐름입니다. 프로젝트 측면의 메모와 화살표는 광학이 빨간색을 감지하면 true로 읽히고, 첫 번째 if then 분기에서 위치 블록으로 이동합니다. 아래에는 else 브랜치가 실행되지 않는다는 텍스트가 있습니다. 왜냐하면 if then 브랜치가 실행되었기 때문입니다. 화살표는 두 번째 if then else 블록을 가리킵니다. 그 옆에 있는 텍스트는 다음과 같습니다: 광학은 녹색 거짓을 감지하고 빨간색 화살표를 두 번째 if then else 블록의 else 분기로 가리킵니다. 주황색 화살표는 세트 암에서 컨트롤 스톱 블록으로, 컨트롤 스톱 블록에서 암 10으로 설정된 블록을 가리키며, 측면으로 이동합니다. 아래 텍스트에는 제어 정지가 트리거되어 제어가 정지된 블록에 부착된 블록을 제외한 모든 블록이 정지된다고 나와 있습니다.

이제 예상치 못한 물체(예: 파란색 큐브)를 처리할 수 있지만, 6축 암은 디스크를 팔레트 위로 올려놓는 프로젝트 지점에 결코 도달하지 못할 것입니다. 빨간색과 초록색 조건을 차례로 확인하는 대신, 객체가 초록색인지 확인하는 방법이 있습니다. 객체가 빨간색이, 객체가 초록색이 아니면.   

중첩된If then else블록 

If then else블록의 각 분기는 그 안에 있는 다른 C 블록을 허용할 수 있습니다. 이것을 '중첩'이라고 합니다. 즉, 두 번째If then else블록은 이와 같이 첫 번째 블록의else분기 내에 중첩될 수 있습니다.위와 동일한 프로젝트이지만, 첫 번째 if then else 블록의 else 분기 안에 두 번째 if then else 블록이 있습니다. 빨간색 상자는 첫 번째 if then else 블록의 else 분기에 중첩된 두 번째 if then else를 둘러싸고 있습니다.

이제 광학 센서가 녹색을 감지하는 조건은 이전 조건(광학 센서가 빨간색을 감지)이 거짓으로 보고될 때만 확인됩니다. 따라서 광학 센서가 빨간색을 감지하면 첫 번째또는분기만 실행되어 디스크가 빨간색 팔레트 위로 이동합니다. 

첫 번째 if then else 블록의 if then 분기에서 위치 이동 블록이 있는 프로젝트를 빨간색 상자로 표시한 모습.

광학 센서가 녹색을 감지하면 첫 번째if분기(광학 센서가 빨간색을 감지)의 조건이 거짓으로 보고되므로else분기가 실행됩니다. 중첩된 If then else블록의 조건을 검사하여 광학 센서가 녹색을 감지하는지 확인합니다. 해당 조건은 참으로 보고되므로 두 번째if분기 내부의 블록이 실행되어 디스크가 녹색 팔레트 위로 이동합니다. 

광학 센서가 빨간색이나 초록색을 감지하지 못하면(파란색 큐브를 집어 올린 경우처럼) 두 조건 모두 거짓으로 보고되고, 중첩된If then else블록의else분기가 실행되어 제어된 정지가 발생하고 작업자에게 인간의 개입이 필요함을 알립니다. 이러한 프로젝트 흐름은 여기에서 볼 수 있는 것과 같은 흐름도로도 시각화할 수 있습니다.

프로젝트의 흐름을 설명하는 다이어그램. 맨 위에는 광학이 빨간색을 감지합니까?라는 질문이 있습니다. 녹색 선이 왼쪽으로 갈라져 빨간 팔레트 위로 이동하라는 메시지를 표시한 다음, 거기에서 주황색 선이 내려와 디스크를 올바른 팔레트에 놓으라는 메시지를 표시합니다. 붉은 선은 원래 질문에서 갈라져 나와 거짓을 나타냅니다. 이어서 또 다른 질문이 나옵니다. 광학 장치가 녹색을 감지할까요? 오른쪽의 녹색 선은 '참'을 의미하며 녹색 팔레트 위로 이동합니다. 이것은 디스크를 올바른 팔레트에 놓으라는 것을 알려주는 다른 녹색 선과 같은 상자에 있는 주황색 선과 연결됩니다. 오른쪽에는 거짓을 나타내는 빨간색 선이 있고 신호탑을 파란색으로 깜빡이며 트리거 제어 정지가 있습니다.

중첩된If then else블록은 계단식 질문 목록으로 볼 수 있습니다. 질문은 다음과 같습니다. 

  1. 그 물체는 빨간색인가요? 
    1. 예? 붉은 팔레트를 넘어 더 이상 질문을 하지 마세요.
    2. 아니요? 다른 질문을 해보세요. 
      1. 그 물체가 녹색인가요?
        1. 예? 녹색 팔레트를 넘어서서 더 이상 질문을 하지 마세요.
        2. 아니요? 그러면 그 물체는 빨간색도 아니고 초록색도 아니다. 신호탑 색상을 변경하고 통제된 정지를 실행합니다.

이전 질문에 부정적으로 답한 경우에만 질문이 나온다는 점에 유의하세요. 

이 블록은 우리가 확인하고자 하는 모든 조건을 처리하지만, 같은 방식으로 조건을 확인하는 또 다른 블록이 있는데, 이는 중첩 블록을 만드는 것보다 만들기 쉽습니다. 

그렇지 않으면블록

Else if 블록을 사용하면 동일한 블록 내에서 여러 조건을 확인할 수 있습니다. 이 블록의 각 조건은 이전 조건이 거짓으로 보고되는 경우에만 순차적으로 확인됩니다. else if 분기의 모든 부울 조건이 거짓이면 else 섹션 내부의 블록이 실행됩니다.

그렇지 않으면 VEX코드에서 차단됩니다. 이 블록은 if then else if then else를 읽고, 블록에 if then else 세그먼트를 확장하고 추가할 수 있는 플러스 아이콘이 있습니다.

이 블록은 중첩된If then else블록과 동일한 프로젝트 흐름을 가지고 있지만, 블록을 중첩할 필요가 없기 때문에 빌드하기가 더 쉽습니다. 다음 수업에서는 Else if블록을 사용하여 코딩하는 방법에 대해 자세히 알아보겠습니다.

이해도 확인

다음 수업으로 넘어가기 전에 엔지니어링 노트에 있는 다음 질문에 답하여 이 수업의 개념을 이해했는지 확인하세요.

이해도 확인 질문 > (Google Doc/ .docx / .pdf)


프로젝트에 Else if블록을 적용하려면다음 >선택하세요.