문서의 이전 판입니다!
목차
MPINO STUDIO 2 Phase 4 · 박스함수
1. 박스함수 생성
명령어 생성 방법
- 래더 셀을 선택하고
Ctrl + Enter를 눌러 박스함수를 생성합니다. - 편집 창에서 카테고리와 명령어를 선택합니다.
- 선택된 인수를 입력하고
Tab으로 다음 인수로 이동합니다. - 입력을 마치면
Enter또는 확인을 누릅니다.
편집 창에서 명령어를 찾고 인수를 입력합니다. 그림의 번호는 아래 항목에 대응합니다.
- ① 카테고리: 타이머, 카운터, 연산처럼 명령어의 종류를 선택합니다.
- ② 명령어 목록: 선택한 카테고리에서 사용할 명령어를 고릅니다.
- ③ 명령어 입력: 명령어와 인수를 한 줄로 입력합니다.
- ④ 설명: 선택한 명령어의 동작, 인수, 예제를 확인합니다.
- ⑤ 확인ㆍ취소: 입력값을 셀에 저장하거나 변경을 취소합니다.
명령어 읽는 방법
카테고리를 선택한 뒤 명령어를 누르면 입력칸에 기본 형식이 채워지고 첫 번째 인수가 선택됩니다. 값을 입력하고 Tab을 누르면 다음 인수로 이동합니다. 정형 명령어는 명령어 이름과 인수를 공백으로 구분합니다.
2. 박스함수 수정하기
입력한 박스함수를 수정하려면 셀을 선택한 뒤 Enter를 누르거나 더블클릭합니다. 다른 명령어를 선택하면 입력칸 전체가 새 명령어의 기본 형식으로 바뀝니다. 확인은 변경값을 저장하고 취소는 편집 전 값으로 돌아갑니다.
3. 박스함수 실행조건
왼쪽 접점에서 전달된 ONㆍOFF 상태가 박스함수의 입력입니다. 타이머와 카운터는 OFF 상태일 때에도 현재값과 완료 상태를 명령어별 규칙에 따라 처리합니다. 왼쪽에 접점이 없으면 입력은 항상 ON입니다. INC D0처럼 값을 누적하는 명령어를 한 번만 실행하려면 상승 엣지 접점을 사용합니다.
4. 정형 명령어와 자유입력형
정형 명령어는 팔레트에 등록된 44종이며 명령어별 입력 형식과 인수 수가 정해져 있습니다. 자유입력형은 계산식을 포함한 대입식 또는 Arduino 함수 호출을 직접 입력합니다.
| 구분 | 입력 예 | 사용 기준 |
|---|---|---|
| 정형 명령어 | MOV D0 D1 | 팔레트에서 명령어를 선택하고 표시된 인수에 값을 입력 |
| 자유입력형 | D0 = readSensor() | Arduino 코드에 작성한 함수 호출 또는 지원되는 식을 직접 입력 |
5. Arduino Code의 함수 호출
아래 두 화면은 Arduino Code에 작성한 setMotor() 함수와 래더로직에서 같은 함수를 호출하는 박스함수를 보여줍니다.
Arduino Code에 함수 작성하기
래더로직에서 함수 호출하기
박스함수에 입력한 함수 이름의 대소문자와 인수의 개수ㆍ자료형은 Arduino Code의 함수 정의와 같아야 합니다. 입력 끝에는 세미콜론을 쓰지 않습니다. 위 예제는 M0 접점이 ON일 때 setMotor(100)을 호출합니다.
6. 박스함수 목록
| 카테고리 | 명령어 | 기능 |
|---|---|---|
| 타이머 박스함수 | TON | 입력이 ON인 동안 시간을 누적하고 설정값에 도달하면 완료 상태를 ON으로 바꿉니다. |
| TOFF | 입력이 ON이면 완료 상태가 즉시 ON이 됩니다. | |
| TPL | 입력이 ON으로 바뀌는 순간 완료 상태가 ON이 됩니다. | |
| TMON | 입력이 한 번 ON이 되면 입력 변화와 재입력을 무시하고 설정 시간 동안 완료 상태를 ON으로 유지합니다. | |
| TMR | 입력이 ON인 동안 시간을 누적합니다. | |
| TAON | TON과 같은 ON 지연 동작을 100 ms 틱으로 처리합니다. | |
| TAOFF | TOFF와 같은 OFF 지연 동작을 100 ms 틱으로 처리합니다. | |
| TAPL | TPL과 같은 조건 유지 펄스 동작을 100 ms 틱으로 처리합니다. | |
| TAMON | TMON과 같은 단발 펄스 동작을 100 ms 틱으로 처리합니다. | |
| TAMR | TMR과 같은 누적 동작을 100 ms 틱으로 처리합니다. | |
| 카운터 박스함수 | CTU | 왼쪽 조건이 OFF에서 ON으로 바뀔 때마다 현재값을 1 증가시킵니다. |
| CTD | 현재값을 설정값으로 준비한 뒤 왼쪽 조건의 상승 엣지마다 1 감소시킵니다. | |
| CTUD | 왼쪽 조건이 ON인 동안 증가 입력의 상승 엣지에는 1을 더하고 감소 입력의 상승 엣지에는 1을 뺍니다. | |
| 비트ㆍ래치 박스함수 | SET | 왼쪽 조건이 ON이면 M 비트 또는 출력으로 설정된 P 비트를 ON으로 저장합니다. |
| RST | 왼쪽 조건이 ON이면 M 비트 또는 출력으로 설정된 P 비트를 OFF로 저장합니다. | |
| 산술 박스함수 | ADD | 두 값을 더한 결과를 대상에 저장합니다. |
| SUB | 첫 번째 값에서 두 번째 값을 뺀 결과를 대상에 저장합니다. | |
| MUL | 두 값을 곱한 결과를 대상에 저장합니다. | |
| DIV | 첫 번째 값을 두 번째 값으로 나눈 몫을 대상에 저장합니다. | |
| MOD | 첫 번째 값을 두 번째 값으로 나눈 나머지를 대상에 저장합니다. | |
| INC | 대상 값을 1 증가시켜 같은 주소에 저장합니다. | |
| DEC | 대상 값을 1 감소시켜 같은 주소에 저장합니다. | |
| SCALE | 입력 범위의 정숫값을 출력 범위의 정숫값으로 선형 변환하여 대상에 저장합니다. | |
| FLOOR | 소스 값보다 크지 않은 정수 중 가장 큰 값을 대상에 저장합니다. | |
| SQRT | 소스 값의 제곱근을 대상에 저장합니다. | |
| 전송 박스함수 | MOV | 소스 값 하나를 대상에 복사합니다. |
| GMOV | DㆍCㆍT WORD의 연속된 소스 영역을 대상 영역에 같은 순서로 복사합니다. | |
| FMOV | DㆍCㆍT WORD 주소 하나의 값을 읽어 대상의 연속 WORD 영역을 같은 값으로 채웁니다. | |
| 비트연산 박스함수 | WAND | 두 WORD의 각 비트를 AND 연산하여 대상에 저장합니다. |
| WOR | 두 WORD의 각 비트를 OR 연산하여 대상에 저장합니다. | |
| WXOR | 두 WORD의 각 비트를 XOR 연산하여 대상에 저장합니다. | |
| WNOT | 소스 WORD의 각 비트를 반전하여 대상에 저장합니다. | |
| SHL | WORD를 왼쪽으로 시프트하여 대상에 저장합니다. | |
| SHR | D WORD를 오른쪽으로 논리 시프트하여 대상에 저장합니다. | |
| ROL | DㆍCㆍT WORD를 왼쪽으로 회전하여 대상에 저장합니다. | |
| ROR | DㆍCㆍT WORD를 오른쪽으로 회전하여 대상에 저장합니다. | |
| 변환 박스함수 | INV | 소스 WORD의 각 비트를 반전하여 대상에 저장합니다. |
| NEG | 소스 값의 부호를 반대로 바꾸어 대상에 저장합니다. | |
| H2D | 4자리 BCD로 저장된 소스 WORD를 10진 정숫값으로 해석하여 대상에 저장합니다. | |
| D2H | 0 ~ 9999의 10진 정숫값을 4자리 BCD로 바꾸어 대상 WORD에 저장합니다. | |
| 로직 제어 박스함수 | JMP | 왼쪽 조건이 ON이면 같은 래더 안의 뒤쪽 라벨로 이동하여 그 사이의 래더 줄을 건너뜁니다. |
| JMPN | 왼쪽 조건이 OFF이면 같은 래더 안의 뒤쪽 라벨로 이동합니다. | |
| MCS | 0 ~ 15의 레벨로 마스터 컨트롤 구간을 시작합니다. | |
| MCSCLR | 지정한 레벨의 마스터 컨트롤 구간과 그 안쪽 구간을 종료합니다. | |
| 자유입력형 박스함수 | 자유입력형 박스함수 | D0 = D0 + 1 · R0 += 1.5 · D0 = readSensor() |
7. 빌드 오류 확인
잘못된 명령어나 인수는 빌드할 때 오류로 표시됩니다. 오류 메시지의 래더 이름과 줄 번호를 확인하고 해당 박스함수를 다시 여십시오.
| 증상 | 확인할 항목 |
|---|---|
| 명령어를 찾을 수 없음 | 명령어 이름의 철자와 정형 명령어 목록 확인 |
| 인수 개수 오류 | 명령어 상세 페이지의 입력 형식과 공백 확인 |
| 주소 또는 자료형 오류 | 대상 메모리의 종류와 데이터 형식을 Phase 2에서 확인 |
| 0으로 나누기 가능 | DIV, MOD, SCALE의 분모 또는 입력 범위 확인 |
