로직
로직과 그 구성 요소인 제어그룹, 제어, 조건그룹, 동작그룹, 조건, 동작을 순서대로 설명합니다.
로직
로직은 모든 알고리즘 블록이 작성되는 공간입니다.
- 로직에 포함된 알고리즘 블록은 해당 로직의 실행 주기마다 실행됩니다.
- 하나의 프로젝트에 여러 개의 로직을 만들 수 있습니다.
- 로직이 여러 개인 경우 순서와 관계없이 각각의 로직이 동시에 실행됩니다.
좌측 메뉴의 +로 로직을 추가하며, 로직에는 다음 항목을 설정할 수 있습니다.
사용
로직의 사용 여부를 설정합니다. 사용하지 않는 로직은 실행되지 않습니다.
이름
표시할 이름을 입력합니다. 임의의 이름을 사용할 수 있습니다.
실행 주기
로직의 실행 주기를 설정합니다. 설정한 주기마다 로직에 포함된 알고리즘 블록이 실행되며, 사용하는 하드웨어와 제어 목적에 따라 적절한 값을 입력합니다. 실행 주기가 짧을수록 반응 속도는 빨라지지만 CPU 점유율이 높아집니다. 최소값은 1밀리초이며 일반적인 용도에는 50~100밀리초가 적당합니다.
예를 들어 실행 주기가 50밀리초이고 로직의 모든 블록이 실행되는 데 5밀리초가 걸린다면, 나머지 45밀리초를 대기한 후 다시 블록이 실행됩니다.
역순으로 실행
자식 블록의 실행 순서를 반대로 설정합니다. 끄면 위에서 아래로, 켜면 아래에서 위로 실행됩니다.
편집 · 복제 · 삭제
좌측 메뉴의 편집, 복제, 삭제 버튼으로 로직을 관리합니다. 삭제한 로직은 휴지통으로 이동하며 30일 후 자동으로 삭제됩니다(3부).
블록 선택 모드 / 클립보드
로직 내부의 블록(제어, 조건, 동작 등)을 여러 개 선택하여 복제, 삭제, 복사, 잘라내기, 붙여넣기를 일괄 적용할 수 있습니다. 우측 상단의 체크박스 아이콘으로 선택 모드에 들어간 뒤 블록을 클릭하여 선택하고, 헤더의 액션 버튼으로 실행합니다. 같은 로직뿐 아니라 다른 로직으로도 붙여넣을 수 있습니다.
| 단축키 | 동작 |
|---|---|
Ctrl+C | 복사 |
Ctrl+X | 잘라내기 |
Ctrl+V | 붙여넣기 |
Delete | 삭제 |
Esc | 선택 모드 종료 |
제어그룹
제어그룹은 여러 개의 제어를 하나의 그룹으로 묶어 실행 방식을 설정하는 블록입니다. 제어그룹은 로직의 바로 하위에만 추가할 수 있으며, 우측 상단의 + 추가 또는 기존 블록 위·아래에 표시되는 + 버튼으로 추가합니다.
우선 모드
그룹에 포함된 여러 제어가 동시에 조건을 만족할 때 어떤 제어를 실행할지 결정하는 방식입니다.
- 없음: 우선 모드를 적용하지 않습니다. 각 제어는 조건을 만족하면 포함된 순서에 따라 실행됩니다.
- 우선 순위: 조건을 만족한 제어 중 우선순위가 가장 높은 제어가 실행됩니다. 숫자가 작을수록 우선순위가 높으며, 실행 중인 제어보다 높은 우선순위의 조건이 만족되면 현재 제어를 즉시 중단하고 우선순위가 높은 제어를 실행합니다.
- 먼저 우선: 가장 먼저 조건을 만족한 제어가 실행됩니다. 실행이 완료된 후 해당 조건이 더 이상 만족되지 않으면 다음으로 조건을 만족한 제어가 실행됩니다.
- 나중 우선: 가장 나중에 조건을 만족한 제어가 우선 실행되며, 실행 중이던 제어는 즉시 중단됩니다.
공통 항목과 관리
사용, 이름, 역순으로 실행 항목은 로직과 동일하게 동작합니다. 블록은 드래그 앤 드롭으로 이동하고, 마우스 우클릭 메뉴에서 편집, 복제, 삭제할 수 있습니다. 그룹을 삭제하면 포함된 모든 블록이 함께 삭제됩니다.
제어
제어는 알고리즘 블록의 기본 실행 단위이며 조건 영역과 동작 영역으로 구성됩니다. 조건 영역을 만족하면 동작 영역의 동작이 순서대로 실행되고, 모든 동작이 완료되면 다시 조건 영역의 만족 여부를 검사합니다. 하나의 로직에 여러 개의 제어가 있으면 위에서부터 순서대로 실행되며, 마지막 제어가 완료되면 다시 첫 번째 제어부터 실행됩니다.
조건 영역에는 조건과 조건그룹을, 동작 영역에는 동작, 동작그룹, 제어를 배치할 수 있습니다. 다단 구조(nested structure)를 지원하므로 하나의 조건이 만족된 다음 상황에 따라 서로 다른 동작을 실행하는 복잡한 구성도 작성할 수 있습니다.
조건 연산자
조건 영역에 여러 개의 조건 또는 조건그룹이 있을 때 만족 여부를 계산하는 연산자입니다.
- 모두 만족: 조건 영역의 모든 조건과 조건그룹을 만족해야 동작이 실행됩니다(AND).
- 적어도 하나 만족: 조건 영역의 조건과 조건그룹 중 하나 이상을 만족하면 동작이 실행됩니다(OR).
조건 옵션
조건 영역의 판정 방식에 적용하는 옵션입니다.
- 없음: 조건이 참이면 만족하고 거짓이면 만족하지 않습니다.
- 반전: 조건이 참이면 만족하지 않고 거짓이면 만족합니다.
- 참이 되는 순간: 조건이 거짓에서 참으로 바뀌는 순간에 한 번만 만족합니다. 예) 푸시버튼을 누르는 순간
- 거짓이 되는 순간: 조건이 참에서 거짓으로 바뀌는 순간에 한 번만 만족합니다. 예) 누른 푸시버튼을 떼는 순간
- 참이 유지되는 시간: 설정한 유지 시간 동안 조건이 계속 참이면 한 번만 만족합니다. 만족했거나 유지 시간 도중 조건이 거짓이 되면 경과 시간이 0초로 초기화됩니다. 예) 푸시버튼을 3초 동안 누르고 있을 때
- 참이 되는 횟수: 조건이 거짓에서 참으로 바뀔 때마다 횟수가 1씩 증가하며, 설정한 횟수에 도달하면 한 번만 만족합니다. 만족했거나 타임아웃 시간 안에 만족하지 못하면 횟수가 0으로 초기화됩니다. 예) 푸시버튼을 3번 눌렀을 때
참이 되는 횟수를 선택하면 횟수, 타임아웃 시간과 함께 타임아웃 모드를 설정합니다. 간격 시간은 조건이 참이 되는 순간들 사이의 간격이 타임아웃 시간 이내여야 하고(예: 1초보다 짧은 간격으로 3번 누르기), 전체 시간은 처음 참이 된 순간부터 설정한 횟수를 모두 채울 때까지의 전체 시간이 타임아웃 시간 이내여야 합니다(예: 처음 누른 순간부터 5초 이내에 총 3번 누르기).
우선 순위
제어가 제어그룹에 포함되어 있고 그룹의 우선 모드가 우선 순위인 경우에 적용할 우선순위를 입력합니다. 해당 사항이 없으면 입력하지 않아도 됩니다.
공통 항목과 관리
사용, 이름, 역순으로 실행 항목은 로직과 동일하게 동작합니다. 드래그 앤 드롭으로 이동하고 마우스 우클릭 메뉴에서 편집, 복제, 삭제합니다. 제어를 삭제하면 포함된 모든 블록이 함께 삭제됩니다.
조건그룹
조건그룹은 여러 개의 조건 또는 조건그룹을 묶어 만족 여부를 계산하는 블록입니다. 조건그룹 안에 조건그룹을 다시 포함할 수 있어 복잡한 논리식도 구성할 수 있습니다.
연산자(모두 만족/적어도 하나 만족)와 옵션은 제어의 조건 연산자·조건 옵션과 동일하게 동작하며, 옵션은 그룹으로 묶인 계산 결과에 적용됩니다. 예를 들어 「세 조건이 함께 3초 이상 참일 때」와 같은 판정은 조건 각각이 아니라 조건그룹에 참이 유지되는 시간 옵션을 적용하여 구성합니다.
동작그룹
동작그룹은 여러 개의 동작을 묶어 반복 실행할 횟수, 범위, 조건, 시간을 설정하는 블록입니다. 동작그룹에는 동작, 동작그룹, 제어를 포함할 수 있으며 다단 구조를 지원합니다.
반복 옵션
- 횟수만큼 반복: 입력한 횟수만큼 동작그룹의 실행을 반복합니다.
- 범위 반복: 시작값부터 종료값까지 증가값만큼 인덱스를 증가시키며 반복합니다. 현재 인덱스 값은 지정한 인덱스 변수에 저장되며, 이 변수는 숫자 타입이어야 합니다.
- 조건 만족 동안 반복: 반복 조건이 참인 동안 반복합니다. 반복 조건은 블록 코딩으로 작성하며 디지털 값을 반환해야 합니다. 값의 참 여부는 각 반복이 시작될 때 검사하므로, 실행 도중 값이 거짓이 되더라도 진행 중인 반복은 끝까지 실행됩니다.
- 시간 동안 반복: 입력한 시간 동안 반복합니다. 시간 종료 여부도 각 반복이 시작될 때 검사하므로, 실행 도중 시간이 끝나더라도 진행 중인 반복은 끝까지 실행됩니다.
선택한 반복 옵션에 따라 반복 횟수, 인덱스 변수, 시작값·종료값·증가값, 반복 조건, 반복 시간 항목이 표시됩니다. 사용, 이름, 역순으로 실행 항목과 이동·편집·복제·삭제는 다른 블록과 동일합니다.
조건
조건은 제어 또는 조건그룹 안에 추가하거나, 조건 영역에 있는 블록의 위·아래에 표시되는 + 버튼으로 추가합니다. 각 조건에는 사용 여부, 이름, 타입, 옵션을 설정할 수 있으며, 옵션은 제어의 조건 옵션과 동일합니다.
조건 타입
| 분류 | 타입 | 설명 |
|---|---|---|
| 논리 | 항상 만족 | 항상 조건을 만족합니다. 동작을 항상 실행해야 할 때 사용합니다. |
| 한번만 만족 | 최초 1회만 만족하고 이후에는 만족하지 않습니다. 변수값 초기화처럼 최초 1회만 실행할 동작에 사용합니다. | |
| 변수값 비교 | 변수의 값을 설정한 값과 비교합니다. 가장 많이 사용하는 타입입니다. | |
| 날짜/시간 | 스케쥴 | 지정한 날짜에 조건을 만족합니다. 일, 주, 월, 년 단위의 반복 주기를 설정하며(주 단위에서는 요일을 함께 지정), 종료는 종료 없음, 종료 날짜, 반복 횟수 중에서 선택합니다. |
| 시간 구간 | 하루 중 설정한 시간 범위에만 만족합니다. 여러 구간을 설정할 수 있습니다. | |
| 시간 주기 | 설정한 시간 간격마다 한 사이클(로직 실행 주기 1회) 동안 만족합니다. 주기적으로 실행할 동작에 사용합니다. | |
| 상태 | 조건 참조 | 다른 조건, 조건그룹, 제어의 만족 여부를 참조합니다. 기존 조건을 재사용할 때 사용합니다. |
| 동작 참조 | 다른 동작, 동작그룹, 제어, 제어그룹의 실행 상태(시작안함/실행중/완료/에러)를 조건으로 사용합니다. | |
| 변경 감지 | 변수 값이 변경되면 한 사이클 동안 만족합니다. 여유 값과 샘플링 주기로 감지 기준을 조정합니다. | |
| 기타 | 사용자 조건 | 블록 코딩으로 조건을 직접 작성합니다. 블록의 반환값은 디지털 타입이어야 합니다. |
동작
동작은 제어 또는 동작그룹 안에 추가하거나, 동작 영역에 있는 블록의 위·아래에 표시되는 + 버튼으로 추가합니다. 각 동작에는 사용 여부, 이름, 타입을 설정하며, 타입에 따라 세부 설정 항목이 달라집니다. 대부분의 동작 타입은 설정 메뉴에서 미리 등록한 리소스를 사용합니다(6부).
추가한 동작은 블록의 … 메뉴에서 편집, 복제, 삭제하며 드래그 앤 드롭으로 순서를 바꿉니다. 조건은 조건 영역 안에서만, 동작은 동작 영역 안에서만 이동할 수 있습니다.
동작 타입
| 분류 | 타입 | 설명 |
|---|---|---|
| 하드웨어 | I/O 장치 제어 | LED, 센서, LCD, 모터 등 다양한 I/O 장치를 제어합니다. |
| 시스템 | 변수 쓰기 | 변수에 값을 씁니다. 쓰기 옵션으로 반전, 사칙연산, 문자열 추가도 수행합니다. |
| SHELL 명령 실행 | 터미널 명령어를 실행합니다. 시스템 명령이나 외부 프로그램을 호출할 수 있습니다. | |
| 파일 읽기/쓰기 | 파일을 읽거나 씁니다. 텍스트와 바이너리 형식을 지원합니다. | |
| 파일 시스템 | 파일 또는 디렉토리를 생성, 삭제, 이동, 복사합니다. | |
| 시간 지연 | 설정한 시간만큼 대기합니다. 밀리초 단위의 일반 모드와 마이크로초 단위의 정밀 모드(0~999μs)가 있습니다. | |
| 타이머 | 타이머를 제어합니다. 시작, 정지, 초기화, 시간 설정, 현재 시간 다섯 가지 명령을 제공하며 경과 시간 측정이나 타임아웃 구현에 사용합니다. | |
| 데이터 | 컬렉션 | 컬렉션에 데이터를 추가, 삭제, 조회합니다. 리스트와 맵 타입을 지원합니다. |
| 데이터베이스 | 데이터베이스에 데이터를 저장하거나 조회합니다. SQL 및 Firebase 등을 지원합니다. | |
| 통계 계산 | 수집된 데이터의 평균, 최대, 최소, 합계 등을 실시간으로 계산합니다. | |
| 데이터 로깅 | 지정한 데이터 로깅 채널에 현재 변수 값을 기록합니다. | |
| 미디어 | 미디어 재생 | 오디오·비디오 파일이나 URL 을 재생, 일시정지, 정지합니다. |
| 이미지 보기 | 화면에 이미지를 표시합니다. 파일 경로 또는 URL 을 지정할 수 있습니다. | |
| 전자 악기 연주 | 전자 악기로 음을 재생합니다. 음계와 길이를 지정하거나 MIDI 파일을 재생할 수 있습니다. | |
| 카메라 | 카메라로 이미지를 캡처하거나 비디오 웹 스트리밍을 시작·정지합니다. | |
| 오디오 분석 | FFT(고속 푸리에 변환)로 오디오의 주파수와 크기를 실시간 분석합니다. | |
| 오디오 녹음 | 마이크에서 오디오를 녹음합니다. | |
| 오디오 변조 | 오디오 파일의 템포와 음높이를 변환합니다. | |
| AI | AI 분석 | 비디오·오디오에 AI 분석을 수행합니다. 아래 AI 분석 절을 참고합니다. |
| LLM AI 질의 | LLM AI 에 텍스트와 첨부 파일로 질의하고 응답을 변수에 저장합니다. | |
| 텍스트 음성 변환 (TTS) | AI 기반으로 텍스트를 음성으로 변환합니다. 내장 로컬 AI 모델과 온라인 AI 서비스를 지원합니다. | |
| 음성 텍스트 변환 (STT) | AI 기반으로 음성을 텍스트로 변환합니다. 내장 로컬 AI 모델과 온라인 AI 서비스를 지원합니다. | |
| IoT | 텔레그램 메시지 | 텔레그램 봇으로 메시지를 전송하거나 수신합니다. |
| 이메일 보내기 | SMTP 를 통해 이메일을 전송합니다. | |
| 푸시 알림 | 사용자의 모바일 앱으로 푸시 알림을 전송합니다. | |
| Zigbee장치 제어 | Zigbee 장치의 센서 값을 읽거나 액추에이터를 제어합니다. Zigbee2MQTT 를 통해 3,400여 종의 장치를 지원합니다. | |
| Home Assistant 연동 | Home Assistant 의 센서·스위치·조명을 제어하거나 Grablo 변수를 Home Assistant 에 노출합니다. | |
| 통신 | MQTT 통신 | IoT 표준 메시징 프로토콜인 MQTT 로 메시지를 발행(전송)하거나 구독(수신)합니다. |
| 모드버스 통신 | Modbus 프로토콜로 PLC 등 산업용 장비와 데이터를 주고받습니다. | |
| OPC UA 통신 | OPC UA 프로토콜로 산업용 장비와 통신합니다. | |
| HTTP 통신 | 웹 서버나 REST API 와 HTTP 요청을 주고받습니다. | |
| 사용자 정의 통신 | 시리얼, TCP, UDP, 웹소켓, 블루투스, 공유 메모리로 커스텀 프로토콜을 구현합니다. | |
| 제어 | PID 제어 | PID 알고리즘으로 온도, 모터 속도 등의 피드백 제어를 수행합니다. |
| 기타 | 사용자 동작 | 블록 코딩으로 동작을 직접 작성합니다. |
재생 종료 대기
미디어 재생, 전자 악기 연주, 텍스트 음성 변환, 오디오 변조 동작에는 재생 종료 대기 항목이 있습니다. 켜면 재생이 끝날 때까지 동작이 「진행 중」 상태로 남아 다음 동작이 실행되지 않고, 끄면 재생을 시작한 직후 「완료」 상태가 되어 다음 동작이 바로 실행됩니다. 재생과 동시에 다른 동작을 진행해야 한다면 이 항목을 끕니다.
상태 변수
일부 동작은 현재 상태를 숫자로 반환합니다. 반환된 값은 변수값 비교 조건과 조합하여 사용합니다.
| 동작 | 상태 값 |
|---|---|
| 미디어 재생 | 0 초기 상태 / 1 재생 중 / 2 일시 정지 / 3 정지 / 4 재생 완료 / 5 에러 |
| 전자 악기 연주 | 0 초기 상태 / 1 재생 중 / 2 일시 정지 / 3 정지 / 4 재생 완료 |
| 음성 텍스트 변환 | 0 초기 상태 / 1 듣는 중 / 2 변환 중 / 3 변환 완료 / 4 에러 |
AI 분석
AI 분석 동작은 설정 → AI 분석기에서 등록한 분석기를 선택하고 분석 타입을 지정하여 실행합니다. 실행 이후 분석 결과가 변수에 계속 기록되므로, 변수값 비교 조건과 조합하여 자동화를 구성합니다. 모든 분석은 컨트롤러에서 수행되며 영상을 클라우드로 전송하지 않습니다.
명령
하나의 분석기에는 여러 개의 분석을 추가할 수 있습니다. 분석의 등록과 시작은 다음 명령으로 수행합니다.
- 분석 추가: 분석기에 분석을 추가하고 결과를 받을 변수를 연결합니다.
- 분석 모두 삭제: 해당 분석기에 등록된 모든 분석을 삭제합니다.
- 분석 시작 · 분석 중지: 오디오 분석기에만 표시되며, 오디오 캡처와 분석을 시작하거나 중지합니다.
공통 설정
| 항목 | 설명 |
|---|---|
| 신뢰도 (%) | 이 값 이상인 감지 결과만 사용합니다. 높이면 확실한 결과만 남고 낮추면 놓치는 것이 줄어듭니다. 기본값은 모델에 따라 다르며 객체 감지는 50, 얼굴 감지는 70입니다. |
| 감지 영역 | 카메라 프리뷰에서 드래그하여 분석할 범위를 지정합니다. 지정하지 않으면 화면 전체에서 감지합니다. |
| 선택 기준 | 여러 개가 감지되었을 때 어느 것의 값을 변수에 저장할지 결정합니다. 최고 신뢰도, 신뢰도 인덱스(0부터), 최대 크기, 기준점에서 가장 가까움 중에서 선택합니다. 색상 추적은 최대 크기, 기준점에서 가장 가까움, 면적 인덱스입니다. |
| 기준점 | 선택 기준을 기준점에서 가장 가까움으로 설정한 경우의 기준 좌표입니다. |
분석 타입
비디오 분석 20종과 오디오 분석 2종을 지원합니다.
| 타입 | 설명 |
|---|---|
| 객체 감지 | 사람, 차량 등 80종의 객체를 실시간으로 감지합니다. |
| 얼굴 감지 | 얼굴을 감지합니다. 감정 인식과 나이·성별 추정을 포함합니다. |
| 얼굴 인식 | 감지된 얼굴을 등록된 얼굴과 비교하여 신원을 인식합니다. |
| 자세 추정 | 사람의 17개 관절 좌표를 반환합니다. |
| 손 추적 | 손의 21개 관절 좌표를 반환합니다. 제스처 인식을 포함합니다. |
| 동작 인식 | 걷기, 뛰기, 앉기 등 400여 가지 행동 카테고리를 인식합니다. |
| 손동작 인식 | 스와이프, 엄지 들기 등 25가지 손동작을 인식합니다. |
| 색상 추적 | 지정한 색상의 객체를 실시간으로 추적합니다. |
| 라인 트래킹 | 라인팔로워 로봇을 위해 바닥 라인의 오프셋과 각도를 제공합니다. |
| 라인 크로싱 카운터 | 화면에 설정한 가상의 선을 넘는 입장·퇴장 인원을 계수합니다. |
| 화재 감지 | 불꽃을 실시간으로 감지합니다. |
| QR / 바코드 | QR 코드와 여러 형식의 바코드를 감지하고 디코딩합니다. |
| OCR (문자 인식) | 한국어, 영어 등 다국어 텍스트를 실시간으로 인식합니다. |
| 번호판 인식 | 차량 번호판을 감지하고 판독합니다. 한국·라틴 번호판을 지원합니다. |
| Teachable Machine 분류 | Google Teachable Machine 으로 학습한 이미지 분류 모델을 사용합니다. |
| Edge Impulse 분류/객체 감지/이상 탐지 | Edge Impulse 로 학습한 영상 모델을 사용합니다. 정상/비정상 판별까지 가능합니다. |
| 커스텀 분류 | 외부 서비스 없이 컨트롤러에서 직접 학습시킨 분류 모델을 사용합니다. |
| 커스텀 이상 감지 | 정상 표본만 학습한 뒤 정상 범위를 벗어난 상태를 감지합니다. 불량 사례를 수집하지 않아도 됩니다. |
| 소리 분류 | 마이크 입력을 목소리, 경보음, 유리 파손 등 521가지 범주로 분류합니다(오디오). |
| Edge Impulse 분류(오디오) | Edge Impulse 로 학습한 오디오 분류 모델을 사용합니다. |
분석 결과는 AI 분석 동작의 출력 항목에 연결한 변수로 계속 갱신됩니다.
Person Detected 와 같은 디지털 변수나 감지 개수와 같은 숫자 변수를
연결해 두면 변수값 비교 조건과 조합할 수 있습니다.
커스텀 모델 학습
기본 모델에 없는 대상은 두 가지 방법으로 학습시킬 수 있습니다. Teachable Machine 과 Edge Impulse 는 외부 서비스에서 학습한 모델 파일을 업로드하여 사용합니다. 커스텀 분류와 커스텀 이상 감지는 외부 서비스 없이 컨트롤러에서 직접 학습하며, AI 분석 동작의 명령을 통해 표본 수집과 학습을 로직으로 구성합니다.
- 커스텀 분류 명령: 샘플 추가, 샘플 삭제, 학습, 클래스 목록, 클래스 수, 샘플 수, 샘플 목록, 클래스 삭제, 전체 삭제와 판정용 상태 읽기, 상태 일치?, 모든 상태 읽기
- 커스텀 이상 감지 명령: 양품 추가, 양품 삭제, 학습, 양품 수, 양품 목록, 전체 삭제와 판정용 점수 읽기, 이상 여부?