====== MPINO STUDIO 2 Phase 4 · 박스함수 ====== 박스함수의 입력ㆍ수정 방법, 실행 조건과 MPINO Studio 2에서 사용할 수 있는 박스함수를 설명합니다. {{ :products:mpino_studio2:box-function-learning-path.svg?1000 |박스함수 생성부터 동작 확인까지의 순서 }} ===== 1. 박스함수 생성 ===== ==== 명령어 생성 방법 ==== - 래더 셀을 선택하고 ''Ctrl + Enter''를 눌러 박스함수를 생성합니다. - 편집 창에서 카테고리와 명령어를 선택합니다. - 각 인수의 값을 입력하고 ''Tab''으로 다음 인수로 이동합니다. - 입력을 마치면 ''Enter'' 또는 **확인**을 누릅니다. 편집 창에서 명령어를 찾고 인수를 입력합니다. 그림의 번호는 아래 항목에 대응합니다. {{ :products:mpino_studio2:box-function-editor-marked.svg?1000 |박스함수 편집 창의 카테고리, 명령어, 입력칸, 설명, 확인 버튼 }} * **①** 카테고리: 타이머, 카운터, 연산처럼 명령어의 종류를 선택합니다. * **②** 명령어 목록: 선택한 카테고리에서 사용할 명령어를 고릅니다. * **③** 명령어 입력: 명령어와 인수를 한 줄로 입력합니다. * **④** 설명: 선택한 명령어의 동작, 인수, 예제를 확인합니다. * **⑤** 확인ㆍ취소: 입력값을 셀에 저장하거나 변경을 취소합니다. ==== 명령어 읽는 방법 ==== 카테고리를 선택한 뒤 명령어를 누르면 입력칸에 기본 형식이 채워지고 첫 번째 인수가 선택됩니다. 값을 입력하고 ''Tab''을 누르면 다음 인수로 이동합니다. 정형 명령어는 명령어 이름과 인수를 공백으로 구분합니다. {{ :products:mpino_studio2:box-function-entry-anatomy.svg?1000 |명령어 이름과 인수의 입력 형식 }} ===== 2. 박스함수 수정하기 ===== 입력한 박스함수를 수정하려면 셀을 선택한 뒤 ''Enter''를 누르거나 더블클릭합니다. 다른 명령어를 선택하면 입력칸 전체가 새 명령어의 기본 형식으로 바뀝니다. **확인**은 변경값을 저장하고 **취소**는 편집 전 값으로 돌아갑니다. ===== 3. 박스함수 실행조건 ===== 왼쪽 접점에서 전달된 ONㆍOFF 상태가 박스함수의 입력입니다. 타이머와 카운터는 OFF 상태일 때에도 현재값과 완료 상태를 명령어별 규칙에 따라 처리합니다. 왼쪽에 접점이 없으면 입력은 항상 ON입니다. ''INC D0''처럼 값을 누적하는 명령어를 한 번만 실행하려면 상승 엣지 접점을 사용합니다. {{ :products:mpino_studio2:box-function-execution.svg?1000 |왼쪽 접점의 상태에 따른 박스함수 실행 }} ===== 4. 정형 명령어와 자유입력형 ===== 정형 명령어는 팔레트에 등록된 44종이며 명령어별 입력 형식과 인수 수가 정해져 있습니다. 자유입력형은 계산식을 포함한 대입식 또는 Arduino 함수 호출을 직접 입력합니다. ^ 구분 ^ 입력 예 ^ 사용 기준 ^ | 정형 명령어 | ''MOV D0 D1'' | 팔레트에서 명령어를 선택하고 표시된 인수에 값을 입력 | | 자유입력형 | ''D0 = readSensor()'' | Arduino 코드에 작성한 함수 호출 또는 지원되는 식을 직접 입력 | ===== 5. Arduino Code의 함수 호출 ===== 아래 두 화면은 Arduino Code에 작성한 ''setMotor()'' 함수와 래더로직에서 같은 함수를 호출하는 박스함수를 보여줍니다. ==== Arduino Code에 함수 작성하기 ==== {{ :products:mpino_studio2:arduino-code-setmotor.svg?1000 |Arduino Code에 setMotor() 함수를 작성한 화면 }} ==== 래더로직에서 함수 호출하기 ==== {{ :products:mpino_studio2:ladder-arduino-call.svg?1000 |M0 접점이 ON일 때 setMotor(100)을 호출하는 박스함수 }} 박스함수에 입력한 함수 이름의 대소문자와 인수의 개수ㆍ자료형은 Arduino Code의 함수 정의와 같아야 합니다. 입력 끝에는 세미콜론을 쓰지 않습니다. 위 예제는 M0 접점이 ON일 때 ''setMotor(100)''을 호출합니다. [[products:mpino_studio2:box_functions:free_input|Arduino Code의 함수호출 상세 설명 보기]] ===== 6. 박스함수 목록 ===== ^ 카테고리 ^ 명령어 ^ 기능 ^ | 타이머 박스함수 | [[products:mpino_studio2:box_functions:timer:ton|TON]] | 입력이 ON인 동안 시간을 누적하고 설정값에 도달하면 완료 상태를 ON으로 바꿉니다. | | | [[products:mpino_studio2:box_functions:timer:toff|TOFF]] | 입력이 ON이면 완료 상태가 즉시 ON이 됩니다. | | | [[products:mpino_studio2:box_functions:timer:tpl|TPL]] | 입력이 ON으로 바뀌는 순간 완료 상태가 ON이 됩니다. | | | [[products:mpino_studio2:box_functions:timer:tmon|TMON]] | 입력이 한 번 ON이 되면 입력 변화와 재입력을 무시하고 설정 시간 동안 완료 상태를 ON으로 유지합니다. | | | [[products:mpino_studio2:box_functions:timer:tmr|TMR]] | 입력이 ON인 동안 시간을 누적합니다. | | | [[products:mpino_studio2:box_functions:timer:taon|TAON]] | TON과 같은 ON 지연 동작을 100 ms 틱으로 처리합니다. | | | [[products:mpino_studio2:box_functions:timer:taoff|TAOFF]] | TOFF와 같은 OFF 지연 동작을 100 ms 틱으로 처리합니다. | | | [[products:mpino_studio2:box_functions:timer:tapl|TAPL]] | TPL과 같은 조건 유지 펄스 동작을 100 ms 틱으로 처리합니다. | | | [[products:mpino_studio2:box_functions:timer:tamon|TAMON]] | TMON과 같은 단발 펄스 동작을 100 ms 틱으로 처리합니다. | | | [[products:mpino_studio2:box_functions:timer:tamr|TAMR]] | TMR과 같은 누적 동작을 100 ms 틱으로 처리합니다. | | 카운터 박스함수 | [[products:mpino_studio2:box_functions:counter:ctu|CTU]] | 왼쪽 조건이 OFF에서 ON으로 바뀔 때마다 현재값을 1 증가시킵니다. | | | [[products:mpino_studio2:box_functions:counter:ctd|CTD]] | 현재값을 설정값으로 준비한 뒤 왼쪽 조건의 상승 엣지마다 1 감소시킵니다. | | | [[products:mpino_studio2:box_functions:counter:ctud|CTUD]] | 왼쪽 조건이 ON인 동안 증가 입력의 상승 엣지에는 1을 더하고 감소 입력의 상승 엣지에는 1을 뺍니다. | | 비트ㆍ래치 박스함수 | [[products:mpino_studio2:box_functions:bit_latch:set|SET]] | 왼쪽 조건이 ON이면 M 비트 또는 출력으로 설정된 P 비트를 ON으로 저장합니다. | | | [[products:mpino_studio2:box_functions:bit_latch:rst|RST]] | 왼쪽 조건이 ON이면 M 비트 또는 출력으로 설정된 P 비트를 OFF로 저장합니다. | | 산술 박스함수 | [[products:mpino_studio2:box_functions:arithmetic:add|ADD]] | 두 값을 더한 결과를 대상에 저장합니다. | | | [[products:mpino_studio2:box_functions:arithmetic:sub|SUB]] | 첫 번째 값에서 두 번째 값을 뺀 결과를 대상에 저장합니다. | | | [[products:mpino_studio2:box_functions:arithmetic:mul|MUL]] | 두 값을 곱한 결과를 대상에 저장합니다. | | | [[products:mpino_studio2:box_functions:arithmetic:div|DIV]] | 첫 번째 값을 두 번째 값으로 나눈 몫을 대상에 저장합니다. | | | [[products:mpino_studio2:box_functions:arithmetic:mod|MOD]] | 첫 번째 값을 두 번째 값으로 나눈 나머지를 대상에 저장합니다. | | | [[products:mpino_studio2:box_functions:arithmetic:inc|INC]] | 대상 값을 1 증가시켜 같은 주소에 저장합니다. | | | [[products:mpino_studio2:box_functions:arithmetic:dec|DEC]] | 대상 값을 1 감소시켜 같은 주소에 저장합니다. | | | [[products:mpino_studio2:box_functions:arithmetic:scale|SCALE]] | 입력 범위의 정숫값을 출력 범위의 정숫값으로 선형 변환하여 대상에 저장합니다. | | | [[products:mpino_studio2:box_functions:arithmetic:floor|FLOOR]] | 소스 값보다 크지 않은 정수 중 가장 큰 값을 대상에 저장합니다. | | | [[products:mpino_studio2:box_functions:arithmetic:sqrt|SQRT]] | 소스 값의 제곱근을 대상에 저장합니다. | | 전송 박스함수 | [[products:mpino_studio2:box_functions:transfer:mov|MOV]] | 소스 값 하나를 대상에 복사합니다. | | | [[products:mpino_studio2:box_functions:transfer:gmov|GMOV]] | DㆍCㆍT WORD의 연속된 소스 영역을 대상 영역에 같은 순서로 복사합니다. | | | [[products:mpino_studio2:box_functions:transfer:fmov|FMOV]] | DㆍCㆍT WORD 주소 하나의 값을 읽어 대상의 연속 WORD 영역을 같은 값으로 채웁니다. | | 비트연산 박스함수 | [[products:mpino_studio2:box_functions:bit_operations:wand|WAND]] | 두 WORD의 각 비트를 AND 연산하여 대상에 저장합니다. | | | [[products:mpino_studio2:box_functions:bit_operations:wor|WOR]] | 두 WORD의 각 비트를 OR 연산하여 대상에 저장합니다. | | | [[products:mpino_studio2:box_functions:bit_operations:wxor|WXOR]] | 두 WORD의 각 비트를 XOR 연산하여 대상에 저장합니다. | | | [[products:mpino_studio2:box_functions:bit_operations:wnot|WNOT]] | 소스 WORD의 각 비트를 반전하여 대상에 저장합니다. | | | [[products:mpino_studio2:box_functions:bit_operations:shl|SHL]] | WORD를 왼쪽으로 시프트하여 대상에 저장합니다. | | | [[products:mpino_studio2:box_functions:bit_operations:shr|SHR]] | D WORD를 오른쪽으로 논리 시프트하여 대상에 저장합니다. | | | [[products:mpino_studio2:box_functions:bit_operations:rol|ROL]] | DㆍCㆍT WORD를 왼쪽으로 회전하여 대상에 저장합니다. | | | [[products:mpino_studio2:box_functions:bit_operations:ror|ROR]] | DㆍCㆍT WORD를 오른쪽으로 회전하여 대상에 저장합니다. | | 변환 박스함수 | [[products:mpino_studio2:box_functions:conversion:inv|INV]] | 소스 WORD의 각 비트를 반전하여 대상에 저장합니다. | | | [[products:mpino_studio2:box_functions:conversion:neg|NEG]] | 소스 값의 부호를 반대로 바꾸어 대상에 저장합니다. | | | [[products:mpino_studio2:box_functions:conversion:h2d|H2D]] | 4자리 BCD로 저장된 소스 WORD를 10진 정숫값으로 해석하여 대상에 저장합니다. | | | [[products:mpino_studio2:box_functions:conversion:d2h|D2H]] | 0 ~ 9999의 10진 정숫값을 4자리 BCD로 바꾸어 대상 WORD에 저장합니다. | | 로직 제어 박스함수 | [[products:mpino_studio2:box_functions:logic_control:jmp|JMP]] | 왼쪽 조건이 ON이면 같은 래더 안의 뒤쪽 라벨로 이동하여 그 사이의 래더 줄을 건너뜁니다. | | | [[products:mpino_studio2:box_functions:logic_control:jmpn|JMPN]] | 왼쪽 조건이 OFF이면 같은 래더 안의 뒤쪽 라벨로 이동합니다. | | | [[products:mpino_studio2:box_functions:logic_control:mcs|MCS]] | 0 ~ 15의 레벨로 마스터 컨트롤 구간을 시작합니다. | | | [[products:mpino_studio2:box_functions:logic_control:mcsclr|MCSCLR]] | 지정한 레벨의 마스터 컨트롤 구간과 그 안쪽 구간을 종료합니다. | | 자유입력형 박스함수 | [[products:mpino_studio2:box_functions:free_input|자유입력형 박스함수]] | ''D0 = D0 + 1'' · ''R0 += 1.5'' · ''D0 = readSensor()'' | ===== 7. 빌드 오류 확인 ===== 잘못된 명령어나 인수는 빌드할 때 오류로 표시됩니다. 오류 메시지의 래더 이름과 줄 번호를 확인하고 해당 박스함수를 다시 여십시오. ^ 증상 ^ 확인할 항목 ^ | 명령어를 찾을 수 없음 | 명령어 이름의 철자와 정형 명령어 목록 확인 | | 인수 개수 오류 | 명령어 상세 페이지의 입력 형식과 공백 확인 | | 주소 또는 자료형 오류 | 대상 메모리의 종류와 데이터 형식을 Phase 2에서 확인 | | 0으로 나누기 가능 | ''DIV'', ''MOD'', ''SCALE''의 분모 또는 입력 범위 확인 | ===== 관련 문서 ===== * [[products:mpino_studio2:monitoring|Phase 6 · 시리얼ㆍ래더 모니터링]] * [[products:mpino_studio2:code_editor|Phase 5 · Arduino Code 편집]] * [[products:mpino_studio2:ladder_editing|Phase 3 · 래더 편집 기초]] * [[products:mpino_studio2:memory|Phase 2 · 메모리 이해하기]] * [[products:mpino_studio2|MPINO STUDIO 2 사용설명서]]