내용으로 건너뛰기
ILOGICS 제품 사용설명서
사용자 도구
로그인
사이트 도구
검색
도구
문서 보기
이전 판
역링크
최근 바뀜
미디어 관리자
사이트맵
로그인
>
최근 바뀜
미디어 관리자
사이트맵
추적:
products:mp_studio:user_protocol
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
====== MP STUDIO 2 · 사용자 프로토콜 ====== 사용자 프로토콜은 Modbus를 쓰지 않는 장치(CO2 센서, 바코드ㆍQR 리더, ASCII 명령으로 통신하는 인버터ㆍ온도 조절기, 숫자 표시기 등)와 장비가 정해진 바이트 모양으로 데이터를 주고받게 하는 기능입니다(V1.3.0부터). 주고받을 바이트의 모양과 보내는 때를 **사용자 프로토콜** 창에서 정하면, 장비가 프로그램과 함께 그 통신을 실행합니다. 래더에서 ''PUT''ㆍ''GET''으로 바이트를 하나씩 다루지 않아도 되며, 받은 값은 체크섬까지 맞은 뒤에 지정한 메모리에 들어갑니다. * **프레임과 거래 정의:** 주고받는 바이트를 칩으로 늘어놓아 프레임을 만들 수 있고, 보낼 프레임ㆍ기다릴 프레임ㆍ시작 조건을 거래로 묶을 수 있습니다. * **통신 모양 네 가지:** 묻고 받기ㆍ받기만ㆍ받으면 답하기ㆍ보내기만을 한 포트에서 함께 쓸 수 있습니다. * **래더에서 시작:** ''UPTRIG'' 펑션으로 원하는 순간에 거래를 한 번 실행할 수 있습니다. 결과는 상태 칸과 완료 비트로 확인할 수 있습니다. * **확인 도구:** 보낼 바이트 미리보기, 받은 바이트 해석, 맞는 체크섬 갈래 찾기, 시뮬레이션의 가상 상대, 모니터링 중 상태ㆍ통신 기록, PLC 없이 PC의 COM 포트로 장치와 주고받는 PC 직접 시험을 제공합니다. {{ :products:mp_studio:up-overview.svg?1000 |그림 1. 사용자 프로토콜 창에서 정한 프레임과 거래가 장비에서 실행되는 흐름 }} ===== 지원 제품과 통신포트 ===== 사용자 프로토콜은 장비의 시리얼 채널(통신포트1~통신포트3)에 정합니다. 사용할 수 있는 통신포트 수는 기종을 따릅니다. ^ 통신포트 ^ 기종 ^ | 통신포트1 | ''MPS-8A4R(T)-S'' · ''MPS-8A8R(T)-S'' · ''MPS-16A8R(T)-R2'' · ''MPS-16A16R(T)'' | | 통신포트1~통신포트3 | ''MPS-8A8R'' · ''MPS-16A8R(T)'' · ''MPS-16A8R8T'' · MPA 시리즈 | 통신포트에 연결되는 단자(RS-232ㆍRS-485ㆍUART)와 커넥터 그림은 제품 페이지에서 확인해주시기 바랍니다: [[products:mps_8a4r_s|MPS-8A4R-S]] · [[products:mps_8a4t_s|MPS-8A4T-S]] · [[products:mps_8a8r_s|MPS-8A8R-S]] · [[products:mps_8a8t_s|MPS-8A8T-S]] · [[products:mps_16a16r|MPS-16A16R]] · [[products:mps_8a8r|MPS-8A8R]] · [[products:mps_16a8r|MPS-16A8R]] · [[products:mps_16a8r8t|MPS-16A8R8T]] · [[products:mpa|MPA Series]]. MPA 시리즈는 통신포트1이 RS-232, 통신포트2가 RS-485, 통신포트3이 UART입니다. * 상대 장치와 보레이트ㆍ데이터 비트ㆍ패리티ㆍ정지 비트가 같아야 합니다. ASCII 장치에 흔한 7 데이터 비트(예: ''7-E-1'')도 사용할 수 있습니다. * RS-485 단자의 송신ㆍ수신 전환은 장비가 처리하므로 래더에서 따로 다루지 않습니다. * MPA 시리즈에서 7세그먼트의 ''FINI''를 실행하면 통신포트3(시리얼 3)이 꺼집니다([[products:mp_studio:seven_segment#지원_제품과_연결|7세그먼트 표시]] 참고). 7세그먼트와 함께 쓸 때는 사용자 프로토콜을 통신포트1ㆍ통신포트2에 정해주시기 바랍니다. ===== 동작 방식 ===== 사용자 프로토콜은 통신포트마다 **프레임**과 **거래**로 정합니다. * **프레임:** 주고받는 바이트 한 묶음의 모양입니다. 고정 바이트, PLC 메모리의 값, 글자열, 길이, 체크섬 같은 필드를 차례로 놓아 만듭니다. * **거래:** 어떤 프레임을 언제 보내고 어떤 프레임을 기다리는지 정한 것입니다. 거래마다 통신 모양, 시작 조건, 응답 대기, 다시 시도, 결과를 받을 상태 칸과 완료 비트를 정할 수 있습니다. ^ 통신 모양 ^ 시작 ^ 동작 ^ 쓰임 예 ^ | **묻고 받기** | 주기ㆍ래더 ''UPTRIG''ㆍ값이 바뀔 때 | 보낼 프레임을 보내고 받을 프레임을 기다립니다. | CO2 센서, 인버터 상태 읽기, 온도 조절기 | | **받기만** | 늘 듣기 | 맞는 프레임이 오면 값을 넣습니다. 보내지 않습니다. | 바코드ㆍQR 리더, 연속 출력 저울 | | **받으면 답하기** | 늘 듣기 | 맞는 프레임이 오면 정한 답 프레임을 바로 보냅니다. | PC 프로그램, Modbus가 없는 HMI | | **보내기만** | 주기ㆍ래더 ''UPTRIG''ㆍ값이 바뀔 때 | 보낼 프레임을 보내고 응답을 기다리지 않습니다. | 숫자 표시기, 프린터, 설정 명령 | {{ :products:mp_studio:up-shapes.svg?1000 |그림 2. 통신 모양 네 가지에서 장비와 상대 장치가 주고받는 순서 }} 장비에서는 다음과 같이 실행됩니다. * 한 통신포트는 한 번에 거래 하나만 실행합니다. 때가 된 거래가 여럿이면 거래 목록 순서로 돌아가며 실행하고, 받으면 답하기의 답은 먼저 보냅니다. * 받은 바이트는 프레임 전체가 맞은 뒤에 한꺼번에 메모리에 들어갑니다. 체크섬이나 값 형식이 맞지 않으면 그 프레임의 값은 하나도 넣지 않습니다. 래더는 받은 값을 다음 스캔부터 읽습니다. * 받은 바이트가 어느 프레임에도 맞지 않으면 앞에서 한 바이트를 버리고 다시 맞춥니다. 응답 앞에 잡음 바이트가 섞여도 뒤에 맞는 프레임이 있으면 받습니다. * 사용자 프로토콜은 프로그램과 함께 장비에 내려갑니다. 창에서 고친 내용은 **확인**을 누르고 다시 다운로드해야 장비에 반영됩니다. ===== 통신 포트 준비 ===== 사용자 프로토콜을 쓰는 시리얼 채널은 모드가 ''User Protocol''이고 **이 채널을 다운로드에 사용**이 꺼져 있어야 합니다. {{ :products:mp_studio:up-port-dialog.png?640 |그림 3. 통신 포트 창에서 시리얼 1의 모드를 User Protocol로 정한 모습 }} - **설정 → 통신 포트**를 선택하고, 사용할 시리얼 채널의 탭(예: **시리얼 1**)에서 보레이트ㆍ데이터 비트ㆍ패리티ㆍ정지 비트를 상대 장치에 맞춰주시기 바랍니다. 115200이 아닌 보레이트를 쓰려면 먼저 **이 채널을 다운로드에 사용**을 꺼주시기 바랍니다. - 모드는 이 창에서 ''User Protocol''로 골라도 되고, 그대로 두어도 됩니다. 사용자 프로토콜 창에서 **확인**을 누르면 ''Normal'' 모드였던 포트는 ''User Protocol''로 바뀌고, 그 포트의 다운로드 사용이 꺼집니다. * ''Normal''이 아닌 다른 모드(예: ''Modbus RTU Slave'')로 정한 포트는 저절로 바꾸지 않습니다. 사용자 프로토콜 창 위에 표시되는 **사용자 프로토콜로 바꾸기**를 눌러야 바뀝니다. * Modbus 장비 표를 쓰는 통신포트에는 사용자 프로토콜을 함께 정할 수 없습니다. 한 포트의 수신 버퍼를 둘이 함께 읽으면 둘 다 동작하지 않으므로, 한쪽을 다른 통신포트로 옮겨야 합니다. * 사용자 프로토콜을 지운 포트는 **확인**을 누를 때 ''Normal'' 모드로 돌아갑니다. * 통신 포트 창의 각 항목은 [[products:mp_studio:download#통신_포트|Phase 6 · 통신 포트]]에서 설명합니다. ===== 사용자 프로토콜 창 ===== ==== 창 열기 ==== * **설정 → 사용자 프로토콜…**을 선택하면 열립니다. * 래더의 ''UPTRIG'' 번호 칸에서 **사용자 프로토콜 열기**를 눌러도 열립니다([[#래더에서_시작하기_uptrig|아래]]). * 인스펙터나 **사용한 데이터** 창에서 사용자 프로토콜이 쓰는 칸을 누르면, 그 칸을 쓰는 거래ㆍ프레임ㆍ필드를 고른 채로 창이 열립니다. {{ :products:mp_studio:up-menu.png?480 |그림 4. 설정 메뉴의 사용자 프로토콜… }} 창은 열어 둔 채 래더를 편집할 수 있습니다. 통신포트에 정의가 없으면 **+ 이 포트에 만들기**와 본보기 목록이 표시됩니다. {{ :products:mp_studio:up-empty.png?1000 |그림 5. 정의가 없는 통신포트에서 빈 포트로 시작하거나 본보기를 고르는 화면 }} ^ 본보기 ^ 들어가는 내용 ^ | **CO2·가스 센서 — 1 초마다 묻기** | 묻고 받기(1초 주기) 거래와 영점 명령을 ''UPTRIG 3''으로 보내는 보내기만 거래. 2진 값 ''D100'', 2의 보수 합 체크섬 | | **CO2·가스 센서 — 받기만 (센서 통신 예제 · 센서가 혼자 보낼 때)** | 같은 CO2 응답 프레임을 요청 없이 늘 듣는 받기만 거래 | | **바코드·QR 리더** | 받기만 거래. 끝 문자 ''CR LF''까지의 글자열을 ''D200''부터 넣고 글자 수를 ''D190''에 넣음 | | **인버터·온도 조절기 (ASCII 국번 명령)** | 묻고 받기(0.5초 주기). ASCII 10진ㆍ16진 값, 합 체크섬(ASCII 16진 2자리), NAK 오류 응답 | 본보기의 이름과 칸(''D100''ㆍ''M100'' 등)은 넣은 뒤 자유롭게 고칠 수 있습니다. 정의가 있는 포트에도 **+ 본보기에서 불러오기…**로 더할 수 있으며, 이름이 겹치면 뒤에 번호가 붙습니다. ==== 화면 구성 ==== {{ :products:mp_studio:up-window-marked.svg?1000 |그림 6. 사용자 프로토콜 창(CO2 센서 본보기의 묻고 받기 거래를 고른 모습) }} * **① 통신포트 탭:** 정의할 통신포트를 고르는 탭입니다. 정의가 있는 포트에는 **사용자 프로토콜**과 회선 설정(예: ''9600 · 8-N-1'')이 함께 표시됩니다. * **② 보기:** **정의**ㆍ**PC 직접 시험**ㆍ**통신 기록** 중에서 고를 수 있습니다. 시뮬레이션 중에는 **시뮬 가상 상대**가 더해집니다. **회선 설정…**을 누르면 통신 포트 창이 열립니다. * **③ 거래:** 거래 카드에 이름, 통신 모양, 시작 조건, 보낼 프레임 → 받을 프레임, 상태 칸ㆍ완료 비트가 표시됩니다. 모니터링 중에는 마지막 결과가 함께 표시됩니다. **+ 거래 추가**를 누르고 통신 모양을 고르면 거래가 더해집니다. * **④ 프레임:** 이 포트의 프레임 목록입니다. 프레임마다 **보냄**ㆍ**받음**ㆍ**안 씀**과 바이트 수가 표시됩니다. **+ 프레임**으로 더하고, 프레임을 고르면 **복제**ㆍ**프레임 삭제**를 쓸 수 있습니다. * **⑤ 포트 설정:** **글자 사이 틈 괜찮음**([[#글자_사이_틈_괜찮음|아래]])과 **모니터 중 통신 기록**([[#통신_기록|아래]])을 정하는 칸입니다. **포트 비우기**는 이 포트의 정의를 모두 지웁니다. * **⑥ 거래 설정:** 고른 거래의 이름ㆍ통신 모양ㆍ시작ㆍ응답 대기ㆍ다시 시도ㆍ상태 칸ㆍ완료 비트를 정하는 칸입니다([[#거래|거래]]). * **⑦ 칩 띠:** 거래가 보내는 프레임(**보냄**)과 기다리는 프레임(**받음**ㆍ**오류 응답**)이 칩으로 표시됩니다([[#프레임|프레임]]). * **⑧ 미리보기:** 보낼 바이트를 16진으로 보이고, 받은 바이트를 붙여 넣으면 해석합니다([[#미리보기와_받은_바이트_해석|아래]]). * **⑨ 속성:** 고른 칩(필드)의 속성을 고칩니다. 칩을 고르지 않으면 거래나 프레임의 설명이 표시됩니다. * **⑩ 램ㆍ플래시ㆍ한 번:** 사용자 프로토콜이 쓰는 장비의 램과 플래시(사용자 영역 대비 %), 고른 거래 한 번의 전송 시간 계산값입니다. 전송 시간에는 스캔 시간과 상대 장치의 처리 시간이 들지 않습니다. 고칠 곳이 있으면 램ㆍ플래시는 표시되지 않습니다. * **⑪ 바닥:** 포트ㆍ거래ㆍ프레임 수와 고칠 곳 수가 표시됩니다. **확인**을 누르면 정의가 프로젝트에 들어가고, **취소**를 누르면 고친 내용을 버립니다. 프로젝트를 저장해야 파일에 남습니다. ==== 단축키와 되돌리기 ==== ^ 키 ^ 동작 ^ | ''Ctrl+Enter'' | 확인 | | ''Esc'' | 창 닫기. 고친 내용이 있으면 **고친 내용을 버릴까요?**를 묻습니다. | | ''Ctrl+Z'' / ''Ctrl+Y'' | 창 안에서 고친 내용을 한 단계씩 되돌리거나 다시 합니다. 되돌릴 것이 없으면 프로그램 전체의 실행취소ㆍ다시 실행으로 넘어갑니다. | | ''Ctrl+S'' | 프로젝트 저장. **확인** 전에 창에서 고친 내용은 저장되지 않습니다. | | ''Ctrl+T'' / ''Ctrl+M'' | 다운로드 / 모니터링 | | ''←'' ''→'' · ''Alt+←'' ''Alt+→'' · ''Delete'' · ''Insert'' | 칩 띠에서 칩 사이 이동 · 칩 옮기기 · 칩 지우기 · 칩 더하기 | * 글자 입력칸 안의 ''Ctrl+Z''는 그 칸의 입력을 되돌립니다. 같은 칸에 이어서 입력한 글자는 한 단계로 되돌아갑니다. * **확인**은 프로그램 전체의 실행취소 한 단계입니다. 확인한 뒤에는 **편집 → 실행취소**(''Ctrl+Z'')로 확인 전 정의로 되돌릴 수 있습니다. ===== 프레임 ===== 프레임은 바이트 순서대로 놓인 칩(필드)으로 만듭니다. 칩 아래에는 바이트 자리(1번째부터)가 표시되고, 체크섬 칩을 고르면 체크섬이 계산하는 범위가 띠에 칠해집니다. 칩 띠 끝의 **+**를 눌러 필드 종류를 고르면 칩이 더해집니다. {{ :products:mp_studio:up-add-chip.png?1000 |그림 7. 칩 띠의 +로 필드 종류를 고르는 모습 }} ^ 필드 ^ 보낼 때 ^ 받을 때 ^ | **고정** | 적은 바이트를 그대로 보냅니다. | 같은 바이트여야 이 프레임으로 봅니다(칩에 **같아야 함**으로 표시). | | **값** | PLC 칸의 값을 정한 형식의 바이트로 바꿔 보냅니다. | 바이트를 값으로 바꿔 PLC 칸에 넣습니다. | | **글자열** | PLC 칸의 글자를 보냅니다. | 받은 글자를 PLC 칸에 넣고, 글자 수를 따로 넣을 수 있습니다. | | **건너뜀** | 채움 바이트를 정한 수만큼 보냅니다. | 그 자리의 바이트는 보지 않습니다. | | **길이** | 정한 필드들의 바이트 수를 넣어 보냅니다. | 실제 바이트 수와 맞는지 확인하고, 길이가 바뀌는 프레임의 끝을 정합니다. | | **체크섬** | 계산해 넣습니다. | 계산해 맞춰 봅니다(칩에 **맞춰 봄**으로 표시). 틀리면 값을 넣지 않습니다. | {{ :products:mp_studio:up-frame-bytes.svg?1000 |그림 8. CO2 응답 프레임 9바이트의 필드와 체크섬 범위 }} ==== 고정 바이트 ==== **바이트** 칸에는 16진, 큰따옴표 글자, 제어 문자 이름을 빈칸으로 띄어 적어주시기 바랍니다. 아래에 실제 바이트와 바이트 수가 표시됩니다. ^ 적는 법 ^ 예 ^ 바이트 ^ | 16진 두 자리 | ''FF 01 86'' | ''FF 01 86'' | | 큰따옴표 글자(ASCII) | ''"01R"'' | ''30 31 52'' | | 제어 문자 이름(''NUL''~''US''ㆍ''SP''ㆍ''DEL'') | ''STX ETX CR LF ACK NAK'' | ''02 03 0D 0A 06 15'' | | 반복(''*N'', 1~255) | ''00*5'' | ''00 00 00 00 00'' | 한 칩에는 255바이트까지 적을 수 있습니다. ASCII 밖의 글자는 16진으로 적어야 합니다. ''FF''는 16진 바이트 0xFF로 읽습니다(폼 피드 제어 문자 이름으로 쓰지 않습니다). ==== 값 ==== **PLC 주소**에 값을 주고받을 칸(예: ''D100'')이나 심볼 이름을 적고 **형식**을 골라주시기 바랍니다. {{ :products:mp_studio:up-props-value.png?480 |그림 9. 값 필드의 속성(2진 2바이트, 큰 끝 먼저) }} ^ 형식 ^ 설정 ^ 예 ^ | **2진** | 바이트 수 1ㆍ2ㆍ4, 순서(큰 끝 먼저ㆍ작은 끝 먼저), 부호(없음ㆍ있음) | 2바이트 큰 끝 먼저: ''01 9A'' ↔ 410 | | **ASCII 10진** | 자릿수(1~10, 비우면 가변), 채움(0 채움ㆍ공백), 부호(없음ㆍ음수만 -ㆍ늘 +/-), 소수 자리(0~9), 소수점(안 찍음ㆍ찍음) | 4자리 0 채움: 100 ↔ ''"0100"'' · 소수 자리 2ㆍ찍음: 1234 ↔ ''"12.34"'' | | **ASCII 16진** | 자릿수, 보낼 때 글자(대문자ㆍ소문자) | 4자리: 6699 ↔ ''"1A2B"'' | | **BCD** | 바이트 수 1ㆍ2ㆍ4, 순서 | 2바이트: 1234 ↔ ''12 34'' | | **REAL** | 순서(4바이트 실수) | 실수 칸(''R'' 등)과 주고받습니다. | * ASCII 10진을 받을 때 앞뒤 공백, ''+''ㆍ''-'', 정한 자리보다 짧은 소수(''"12.3"'' → 1230)는 읽습니다. 숫자가 아닌 글자나 정한 소수 자리보다 긴 0이 아닌 소수(''"12.345"'')가 오면 값을 넣지 않고 상태 칸이 **값 바꾸기 실패(F4)**가 됩니다. 가변 자릿수는 받을 때 1~12글자입니다. * 받은 값이 PLC 칸에 들어가지 않을 만큼 크면 값을 넣지 않고 F4가 됩니다. 이런 조합이면 칩에 경고가 표시됩니다. * 데이터 비트가 7이면 ''0x7F''보다 큰 바이트는 맨 위 비트가 사라집니다. 7 데이터 비트 포트에서 2진 값ㆍ''0x7F''보다 큰 고정 바이트를 쓰면 칩이 붉게 표시됩니다. ==== 글자열 ==== * **PLC 주소 (첫 칸)**부터 워드 하나에 두 글자씩 들어갑니다. 아래 바이트가 먼저입니다(''D200''의 아래 바이트 = 첫 글자). * **길이**: **끝 문자 전까지 · 최대 N**은 바로 뒤의 고정 필드(예: ''CR LF'')가 나올 때까지 최대 N글자를 받습니다. **늘 N 글자**는 언제나 N글자입니다. N은 1~255입니다. * **받은 글자 수를 둘 칸**에 워드 주소를 적으면 받은 글자 수가 들어갑니다. **남는 자리 채움 (16진)**은 N글자보다 짧을 때 남는 자리를 채우는 바이트입니다. ==== 길이 ==== **형식**(2진 1바이트ㆍ2진 2바이트ㆍASCII 10진ㆍASCII 16진)과 **세는 범위**(필드 몇 번부터 몇 번까지)를 정해주시기 바랍니다. 보낼 때는 그 범위의 바이트 수를 넣고, 받을 때는 실제 바이트 수와 맞는지 확인합니다. 장치가 바이트 수에 다른 수를 더해 보낸다면 **보정 (더할 수)**에 그 수를 적어주시기 바랍니다. ==== 체크섬 ==== ^ 종류 ^ 계산 ^ | **합 (8 비트)** · **합 (16 비트)** | 범위의 바이트를 더한 값의 아래 8비트ㆍ16비트 | | **2의 보수 합** | 바이트 합의 2의 보수(합을 0x100에서 뺀 값) | | **1의 보수 합** | 바이트 합의 비트를 뒤집은 값 | | **XOR (BCC)** | 범위의 바이트를 XOR한 값 | | **CRC-16** | 아래 갈래 중 하나 또는 직접 정한 값 | | **LRC** | 범위의 ASCII 16진 글자를 두 글자씩 바이트로 바꿔 더한 합의 2의 보수(Modbus ASCII 방식) | * **범위 시작**: **1 번째부터**ㆍ**2 번째부터** 또는 몇 번째 바이트부터인지 적을 수 있습니다. 머리 바이트(STX 등)를 빼고 계산하는 장치에는 **2 번째부터**를 골라주시기 바랍니다. * **범위 끝**: 기본은 **체크섬 바로 앞까지**입니다. 체크섬 뒤에 끝 문자가 오는 프레임도 이 기본값을 그대로 쓸 수 있습니다. * **넣는 모양**: 1바이트ㆍ2바이트(큰 끝 먼저ㆍ작은 끝 먼저) 또는 ASCII 16진 2ㆍ4자리입니다. ASCII 16진은 보낼 때 대문자ㆍ소문자를 고를 수 있으며, 받을 때는 대소문자를 가리지 않습니다. CRC-16은 장치마다 계산 갈래가 다릅니다. **CRC-16 갈래**를 고르면 다항식ㆍ처음 값ㆍ입력 반사ㆍ출력 반사ㆍ끝 XOR 다섯 칸이 채워지고, 문자열 ''"123456789"''로 계산한 확인값이 표시됩니다. 확인값이 장치 설명서의 check 값과 같은 갈래를 골라주시기 바랍니다. 다섯 칸 중 하나를 고치면 **직접 정함**이 됩니다. {{ :products:mp_studio:up-checksum-crc.png?480 |그림 10. 체크섬 속성의 CRC-16 갈래 목록 }} ^ 갈래 ^ 다항식 ^ 처음 값 ^ 반사(입력ㆍ출력) ^ 끝 XOR ^ 확인값 ^ | MODBUS | 8005 | FFFF | 예 | 0000 | 4B37 | | CCITT-FALSE | 1021 | FFFF | 아니오 | 0000 | 29B1 | | XMODEM | 1021 | 0000 | 아니오 | 0000 | 31C3 | | KERMIT | 1021 | 0000 | 예 | 0000 | 2189 | | X-25 | 1021 | FFFF | 예 | FFFF | 906E | | ARC | 8005 | 0000 | 예 | 0000 | BB3D | | USB | 8005 | FFFF | 예 | FFFF | B4C8 | | DNP | 3D65 | 0000 | 예 | FFFF | EA82 | 넣는 모양의 기본값은 MODBUS만 작은 끝 먼저이고, 나머지 갈래는 모두 큰 끝 먼저입니다. ==== 받는 프레임의 끝 ==== 받는 프레임이 어디서 끝나는지는 프레임 모양에서 정해지며, 칩 띠 위에 **끝 알기: …**로 표시됩니다. ^ 표시 ^ 끝을 정하는 것 ^ | **끝 알기: 고정 길이 N** | 모든 필드의 길이가 정해진 프레임 | | **끝 알기: 길이 필드(필드 N)** | 앞에 있는 길이 필드의 값 | | **끝 알기: 끝 문자 …** | 길이가 바뀌는 필드 바로 뒤의 고정 바이트(예: ''CR LF'', ''ETX'') | | **끝 알기: N ms 조용하면** | 프레임의 **끝 조용한 시간 (ms)** 동안 바이트가 오지 않음 | | **끝 알기: 알 수 없음** | 끝을 정할 수 없어 고칠 곳으로 표시됩니다. | **끝 조용한 시간 (ms)**은 프레임을 고르면 오른쪽 속성에 표시되며, 20~10000 ms로 정할 수 있습니다(비우면 쓰지 않음). 길이를 알 수 없는 마지막 필드는 이 시간만큼 조용하면 끝난 것으로 봅니다. 받다 만 바이트가 남은 채 회선이 100 ms 이상 조용할 때도 그 바이트를 앞에서부터 버립니다. {{ :products:mp_studio:up-end-detect.svg?1000 |그림 11. 받는 프레임의 끝을 정하는 네 가지 방법과 한 바이트씩 밀어 다시 맞추기 }} ==== 미리보기와 받은 바이트 해석 ==== 창 아래 미리보기에는 보낼 프레임의 바이트가 16진으로 표시됩니다(값 칸은 0, 길이와 체크섬은 계산한 값). 그 아래 입력칸에 장치가 보낸 바이트를 한 줄에 하나씩 붙여 넣으면 받을 프레임으로 해석해 필드마다 값과 결과를 표시합니다. 16진(''FF 86 01'')과 ''STX "01" ETX'' 같은 고정 바이트 표기를 모두 쓸 수 있습니다. {{ :products:mp_studio:up-preview.png?1000 |그림 12. CO2 응답 바이트를 붙여 넣어 D100 = 410으로 해석한 모습 }} ^ 결과 ^ 뜻 ^ | **✓ …** | 고정 바이트ㆍ길이ㆍ체크섬이 모두 맞습니다. ✓ 뒤에 필드마다 들어갈 값이 표시됩니다(그림 12). 값 필드가 없는 프레임은 **이 프레임이 맞습니다**로 표시됩니다. | | **… 덜 왔습니다** | 프레임이 끝나려면 바이트가 더 와야 합니다. | | **✕ … 번째 바이트가 정한 고정 바이트와 다릅니다** | 이 프레임이 아닙니다. | | **✕ 체크섬 — 기대 …** | 체크섬이 틀립니다. 계산한 값이 함께 표시됩니다. | | **✕ … 값으로 바꿀 수 없습니다** | 숫자가 아니거나 칸에 들어가지 않습니다. | === 맞는 체크섬 갈래 찾기 === 장치 설명서에 체크섬 방식이 없거나 확인값이 맞지 않을 때 사용합니다. 장치가 실제로 보낸 프레임을 둘 이상 붙여 넣어주시기 바랍니다. 체크섬이 틀리면 체크섬 종류ㆍCRC-16 갈래ㆍ넣는 모양ㆍ범위 시작을 바꿔 가며 모든 표본에 맞는 조합을 저절로 찾아, **맞는 갈래 찾기** 줄에 후보마다 **«…» 로 바꾸기** 단추를 표시합니다. 표본이 하나면 우연히 맞는 조합이 있을 수 있으므로 **«…» 로 바꾸기**는 표본이 둘 이상일 때만 켜집니다. 바꾼 내용은 **확인**을 눌러야 정의에 들어갑니다. {{ :products:mp_studio:up-sumfind.png?1000 |그림 13. 표본 두 개로 «2의 보수 합 · 2 번째부터»를 찾은 모습 }} ===== 거래 ===== 거래 목록에서 거래를 고르면 가운데 위에 거래 설정이, 그 아래에 보낼 프레임과 받을 프레임의 칩 띠가 표시됩니다. {{ :products:mp_studio:up-tx-form.png?1000 |그림 14. ASCII 국번 읽기 거래 — 보낼 프레임, 받을 프레임, 오류 응답(NAK) }} ^ 항목 ^ 기본값 ^ 설명 ^ | 이름 | 통신 모양 이름 | 거래의 이름입니다. 포트 안에서 겹치지 않아야 합니다. | | 통신 모양 | — | **묻고 받기**ㆍ**받기만**ㆍ**받으면 답하기**ㆍ**보내기만** | | 시작 | 주기 | 묻고 받기ㆍ보내기만: **주기**ㆍ**래더 UPTRIG 번호**ㆍ**값이 바뀔 때** · 받기만ㆍ받으면 답하기: **늘 듣기** | | 주기 (ms) | 1000 | 10 ms~1시간. 지난번 시작부터 셉니다. | | 번호 | 1 | 래더 ''UPTRIG''의 번호(1~255) | | 볼 칸 · 칸 수 | — | 값이 바뀔 때: 볼 칸부터 칸 수(1~32)만큼의 값이 바뀌면 보냅니다. 장비가 시작할 때도 한 번 보냅니다. | | 응답 대기 (ms) | 200 | 묻고 받기에서 응답을 기다리는 시간(20~60000 ms) | | 다시 시도 | 2 | 응답이 없거나 틀린 응답만 왔을 때 다시 보내는 횟수(0~10) | | 상태 칸 | 비움(안 씀) | 거래 결과를 받을 워드 주소([[#상태_칸|아래]]) | | 완료 비트 | 비움(안 씀) | 거래가 끝나면 한 스캔 동안 켜지는 비트 주소 | | 받은 수 칸 | 비움(안 씀) | 받기만ㆍ받으면 답하기: 맞는 프레임을 받을 때마다 1씩 늘어나는 워드 주소(65535 다음은 0) | * 보낼 프레임과 받을 프레임은 칩 띠 머리의 목록에서 고를 수 있습니다. **+ 새 프레임**을 고르면 빈 프레임이 만들어집니다. 받을 프레임은 **+ 받을 프레임**으로 둘 이상 정할 수 있습니다. * 묻고 받기에서는 **+ 오류 응답 (NAK 등)**으로 장치의 오류 응답 프레임을 정할 수 있습니다. 오류 응답을 받으면 거래가 **오류 응답(F6)**으로 끝납니다. * 받으면 답하기의 **보냄** 프레임이 답입니다. 답에 넣을 값은 PLC 칸에서 읽습니다. ==== 모양별 동작 ==== * **묻고 받기:** 보낸 뒤 응답 대기 시간 안에 받을 프레임이 오면 성공입니다. 응답이 없거나 틀린 응답만 오면 응답 대기를 다 기다린 뒤 다시 보내며, 다시 시도를 모두 쓰면 실패로 끝납니다. 장치가 틀린 응답만 보내면 거래 한 번에 «응답 대기 × (다시 시도 + 1)»만큼 걸립니다. 오류 응답을 받으면 다시 보내지 않고 바로 끝납니다. * **보내기만:** 프레임을 다 보내면 성공으로 끝납니다. * **받기만:** 맞는 프레임을 받은 스캔에 값을 넣고, 상태 칸에 성공을 쓰고, 완료 비트를 한 스캔 켜고, 받은 수 칸을 1 늘립니다. * **받으면 답하기:** 받기만과 같이 값을 넣은 뒤 답 프레임을 바로 보냅니다. 받을 프레임이 맞지 않으면(머리 바이트가 다르거나 체크섬이 틀리면) 답하지 않습니다. ==== 상태 칸 ==== 상태 칸은 워드 하나로, 그 거래의 마지막 결과를 나타냅니다. ^ 값(16진) ^ 화면 표시 ^ 뜻 ^ | ''0000'' | **아직 한 번도 성공 못 함** | 장비가 켜진 뒤 이 거래가 아직 한 번도 끝나지 않았습니다. 이 정의가 장비 프로그램에 없을 때도 0입니다. | | ''0001'' | **마지막 거래 성공** | 마지막 거래가 오류 없이 끝났습니다. | | ''F000'' | **응답 없음(F0)** | 응답이 오지 않았습니다. | | ''F100'' | **체크섬 틀림(F1)** | 체크섬이 맞지 않는 응답이 왔습니다. | | ''F200'' | **모양이 다른 바이트만 왔습니다(F2)** | 받을 프레임과 모양이 다른 바이트만 왔습니다. | | ''F300'' | **회선 바쁨(F3)** | 송신이 진행되지 않아 보내지 못했습니다. | | ''F400'' | **값 바꾸기 실패(F4)** | 받은 값이 숫자가 아니거나 칸에 들어가지 않습니다. 보낼 값을 프레임으로 만들 수 없을 때도 F4입니다. | | ''F500'' | **수신 버퍼 넘침(F5)** | 응답을 기다리는 동안 수신 버퍼가 넘쳤습니다. | | ''F600'' | **오류 응답(F6)** | 오류 응답으로 정한 프레임(NAK 등)을 받았습니다. | * 실패한 거래에서는 받은 값 칸을 바꾸지 않습니다. 앞에서 받은 값이 그대로 남습니다. * 응답 대기가 끝났을 때 그동안 버린 바이트가 있으면 F1 → F4 → F2 순서로 그 까닭을 상태로 씁니다. 버린 바이트가 없으면 F0입니다. * 상태 칸은 거래마다 다른 칸을 써야 합니다. 받는 값 칸과 겹치면 경고가 표시됩니다. {{ :products:mp_studio:up-status-timing.svg?1000 |그림 15. 응답 대기ㆍ다시 시도와 상태 칸ㆍ완료 비트가 바뀌는 때 }} ==== 글자 사이 틈 괜찮음 ==== 포트마다 정하는 설정으로, 새 포트는 켜져 있습니다. * **켜짐:** 한 스캔에 1바이트씩 보냅니다. 스캔 시간이 늘지 않지만, 요청이 바이트 수만큼의 스캔에 걸쳐 나갑니다(스캔 5 ms에서 10바이트면 약 50 ms). 대부분의 ASCII 장치는 글자 사이의 틈을 문제 삼지 않습니다. * **꺼짐:** 프레임을 한 번에 이어서 보냅니다. 그 스캔이 프레임을 보내는 시간만큼 길어집니다. 글자 사이에 틈이 있으면 요청을 버리는 장치에는 꺼야 합니다. {{ :products:mp_studio:up-bytegap.svg?1000 |그림 16. 글자 사이 틈 괜찮음을 켰을 때와 껐을 때 요청 바이트가 나가는 모양 }} ===== 래더에서 시작하기(UPTRIG) ===== 거래의 **시작**을 **래더 UPTRIG 번호**로 정하면, 래더의 ''UPTRIG'' 펑션이 그 거래를 실행합니다. 버튼을 눌렀을 때만 설정 명령을 보내거나, 필요할 때만 값을 읽을 때 사용합니다. - 거래의 **시작**을 **래더 UPTRIG 번호**로 고르고 **번호**(1~255)를 적어주시기 바랍니다. 필요하면 **완료 비트**와 **상태 칸**도 적어주시기 바랍니다. - **확인**을 눌러주시기 바랍니다. - 래더에 ''UPTRIG'' 펑션을 넣고 같은 번호를 적어주시기 바랍니다. 펑션 판 **Serialport** 분류의 **UPTRIG: Start User Protocol Trigger**를 고르거나, 펑션 삽입 창(''Ctrl+E'')에 ''UPTRIG 3''처럼 입력해 넣을 수 있습니다. {{ :products:mp_studio:up-uptrig-rung.png?900 |그림 17. M3이 켜질 때 트리거 3의 거래(영점 명령)를 보내는 렁 }} ''UPTRIG''의 번호 칸을 고치면 사용자 프로토콜에 정한 트리거 번호가 통신포트ㆍ거래 이름과 함께 표시되며, 눌러서 고를 수 있습니다. 같은 자리의 **사용자 프로토콜 열기**를 누르면 사용자 프로토콜 창이 열립니다. {{ :products:mp_studio:up-uptrig-box.png?640 |그림 18. UPTRIG 번호 칸에서 정의된 트리거 번호를 고르는 모습 }} * ''UPTRIG''의 입력이 꺼짐에서 켜짐으로 바뀔 때마다 그 번호의 거래를 한 번 실행합니다. 입력을 켜 둔 채로는 다시 실행하지 않습니다. * 실행 전에 여러 번 불리면 한 번만 실행하고, 실행 중에 불리면 끝난 뒤 한 번 더 실행합니다. * 완료 비트는 성공ㆍ실패와 관계없이 거래가 끝난 뒤 한 스캔 동안 켜집니다. 실패 이유는 상태 칸에서 확인할 수 있습니다. * 같은 통신포트에서 번호가 같은 거래는 함께 실행됩니다. 다른 통신포트의 거래에 같은 번호를 쓸 수는 없습니다. * 트리거로 시작하는 거래는 장비가 켜지거나 다운로드된 뒤 저절로 실행되지 않습니다. * ''UPTRIG''의 번호는 1~255의 상수이고 사용자 프로토콜에 그 번호로 시작하는 거래가 있어야 합니다. 아니면 칸이 붉게 표시되고 컴파일되지 않습니다. 반대로 트리거 번호를 정한 거래에 맞는 ''UPTRIG''가 래더에 없으면 «트리거 번호 3 을(를) 부르는 UPTRIG 칸이 없어 이 거래는 시작되지 않습니다» 경고가 표시됩니다. ===== 검사와 경고 ===== 사용자 프로토콜 창은 고칠 곳을 칩ㆍ칸을 붉게 하거나 주황색으로 표시하고, 창 아래 줄에 첫 문장을 표시합니다. 문장을 누르면 그 자리로 이동하며, **N 건 더**를 누르면 모든 문장이 펼쳐집니다. 붉은 고칠 곳이 있으면 **고칠 곳 N — 고치기 전에는 프로그램을 만들지 않습니다**가 표시되고 다운로드할 수 없습니다. 고칠 곳이 있어도 **확인**은 눌러지므로 쓰던 정의를 잃지 않습니다. {{ :products:mp_studio:up-issues.png?1000 |그림 19. 창 아래 줄의 고칠 곳과 붉게 표시된 칸 }} 래더와 다른 기능에서는 다음 경우를 검사합니다. ^ 경우 ^ 표시 ^ | 같은 통신포트에 ''PUT''ㆍ''GET''ㆍ''PUT_LEN''ㆍ''GET_LEN''을 씀 | 채널이 상수면 붉은 칸, 변수면 경고. 같은 수신 버퍼를 둘이 읽으면 주고받는 바이트가 섞입니다. | | 래더가 사용자 프로토콜이 받는 칸에 씀 | 경고. 래더가 쓴 값은 다음에 받을 때 덮어씁니다. | | 받는 칸끼리 겹침 · 상태ㆍ완료ㆍ받은 수 칸이 받는 칸과 겹침 | 경고 | | Modbus 장비 표나 [[products:mp_studio:device_clock|장비 시계(RTC)]] 블록이 쓰는 칸과 겹침 | 경고 | | 포트 모드가 ''User Protocol''이 아님 · 모드는 ''User Protocol''인데 정의가 없음 · 다운로드 사용이 켜짐 | 오류. 사용자 프로토콜 창에서 **확인**을 누르면 대부분 함께 고쳐집니다. | | 장비의 램이 모자람 · 프로그램이 플래시를 넘침 | 오류. 포트ㆍ거래ㆍ프레임이나 메모리 영역 크기를 줄여야 합니다. | | 프레임이 255바이트를 넘거나 필드가 32개를 넘음 | 오류 | | 송수신 버퍼가 프레임보다 작음 | 오류. **설정 → 데이터 메모리**의 **SERIAL** 칸에서 버퍼를 늘리거나 프레임을 줄여야 합니다. | 사용자 프로토콜이 쓰는 칸은 찾기ㆍ모두 바꾸기ㆍ인스펙터의 쓰인 자리ㆍ**사용한 데이터**에도 표시됩니다. 모두 바꾸기로 주소를 바꾸면 사용자 프로토콜의 칸도 함께 바뀝니다. ===== 시뮬레이션 ===== 시뮬레이션 중에는 각 통신포트의 사용자 프로토콜에 가상 상대가 붙고, 창에 **시뮬 가상 상대** 보기가 더해집니다. 장치 없이 래더의 동작과 상태 칸ㆍ완료 비트를 확인할 수 있습니다. {{ :products:mp_studio:up-sim.png?1000 |그림 20. 시뮬 가상 상대 보기(ASCII 국번 읽기 거래의 응답과 통신 기록) }} * **거래 — 상태 칸 · 응답 예:** 거래를 고르고 가상 상대가 할 일(**응답**ㆍ**응답 없음**ㆍ**체크섬 틀림**ㆍ**오류 응답**)을 고를 수 있습니다. **응답**이면 PLC가 받을 값을 적어주시기 바랍니다. 응답 예를 정하기 전에는 응답이 없습니다(상태 칸 F0). * **가상 상대가 혼자 보내기 — 받기만·받으면 답하기:** 받을 프레임의 값을 적고 **넣기**를 누르면 가상 상대가 그 프레임을 보냅니다. * **바이트 그대로 넣기(쓰레기·재동기 시험):** 적은 바이트를 그대로 넣어 잡음 바이트를 버리고 다시 맞추는 동작을 확인합니다. * **통신 기록(가상 시각):** PLC가 보낸 바이트와 가상 상대가 보낸 바이트가 줄마다 표시됩니다. 시뮬레이션에는 **확인**을 누른 정의만 들어갑니다. 고칠 곳이 있는 정의는 시뮬레이션되지 않습니다. 회선 바쁨(F3)ㆍ수신 버퍼 넘침(F5)은 시뮬레이션되지 않으며, 스캔 시간과 상대 장치의 처리 시간도 들지 않습니다. 가상 상대의 설정은 저장되지 않습니다. ===== 모니터링 ===== ==== 거래 카드의 상태 ==== 모니터링 중에 사용자 프로토콜 창을 열면, 상태 칸을 정한 거래의 카드에 마지막 결과가 표시됩니다. 받기만ㆍ받으면 답하기 거래는 받은 수 칸의 값과 마지막으로 늘어난 뒤 지난 시간도 표시됩니다. 상태는 고른 통신포트의 거래만 읽습니다. {{ :products:mp_studio:up-monitor-cards.png?480 |그림 21. 모니터링 중 거래 카드의 상태(CO2 농도 읽기 — 마지막 거래 성공) }} 카드의 표시는 [[#상태_칸|상태 칸]] 표의 화면 표시와 같습니다. 표시된 상태를 믿을 수 없을 때는 회색으로 그 까닭이 표시됩니다. ^ 회색 표시 ^ 뜻 ^ | **장비 프로그램이 다름** | 장비의 프로그램이 지금 문서와 다를 수 있습니다. 다운로드하면 읽습니다. | | **다운로드 전 설정** | 모니터링을 시작할 때의 정의에 없는 거래입니다. 확인하고 다운로드한 뒤 모니터링을 다시 시작하면 읽습니다. | | **PLC 응답 없음 · 값 모름** · **새 값이 안 옴 · 값 모름** | 모니터 통신에서 새 값이 오지 않습니다. | | **제한 모니터 · 못 읽음** | 프로그램 검사 오류가 있는 동안에는 사용자 메모리의 상태 칸을 읽지 않습니다. | | **이 칸을 런타임이 쓰지 않음** | 사용자 프로토콜이 쓰지 않는 값입니다. 장비 프로그램이 다르거나 래더가 이 칸에 씁니다. | 시뮬레이션 중에는 카드에 **가상**이 함께 표시되며, 확인하지 않은 거래는 **확인 전 설정**, 멈춘 시뮬레이션은 **시뮬레이션 멈춤 · …**으로 표시됩니다. ==== 통신 기록 ==== 포트의 **모니터 중 통신 기록**을 켜고 **확인**을 누른 뒤 다운로드하면, 모니터링 중 **통신 기록** 보기에 장비가 그 통신포트로 보내고 받은 바이트가 줄마다 표시됩니다. 통신 기록을 켜면 장비의 램과 플래시를 조금 더 씁니다. {{ :products:mp_studio:up-trace-marked.svg?1000 |그림 22. 통신 기록 보기(CO2 요청과 응답) }} * **① 방향과 시각:** ''→''는 장비가 보낸 바이트, ''←''는 받은 바이트입니다. 줄은 장비가 주고받은 차례로 놓이며, 시각은 PC가 기록을 읽은 때입니다. * **② 바이트:** 주고받은 바이트입니다. 아래 줄에 거래ㆍ프레임 이름과 해석한 값(예: ''✓ D100 = 410 · ✓ 체크섬 DF'')이 표시됩니다. * **③ 결과:** 보낸 줄은 **성공**ㆍ**응답 기다림**ㆍ**다시 보냄 N**ㆍ**보내지 못함** 또는 실패 까닭, 받은 줄은 **응답**ㆍ**받음**ㆍ**오류 응답(F6)**ㆍ**버림** 등 그 바이트의 결과입니다. **버림**은 어느 프레임에도 맞지 않은 바이트입니다. * **④ 바이트 보기:** **16진**ㆍ**글자**ㆍ**둘 다** 중에서 고를 수 있습니다. 글자 보기에서 제어 문자는 ''‹STX›''처럼 표시됩니다. * **⑤ 복사ㆍ기록 지우기:** 표시된 줄을 글자로 복사하거나 화면의 기록을 지웁니다. 아래로 스크롤해 두면 새 줄을 따라갑니다. * 통신 기록이 꺼진 채 다운로드한 프로그램이나 지금 문서와 다른 프로그램이 장비에 있으면 기록을 읽지 않고 그 까닭이 표시됩니다. * 모니터가 읽기 전에 장비가 새 기록을 쓰면 «… 그사이 N 건 놓침»이 표시됩니다. * 시뮬레이션 중에는 같은 보기에 가상 상대와의 통신이 가상 시각으로 표시됩니다. ===== PC 직접 시험 ===== PC 직접 시험은 PLC 대신 PC의 COM 포트(USB-RS485ㆍUSB-RS232 변환기 등)로 장치와 직접 주고받는 기능입니다. 장치를 PLC에 연결하기 전에 프레임과 체크섬이 맞는지 확인할 때 사용합니다. 창에서 고친 정의(확인 전 내용)로 시험하며, 데스크톱 앱에서만 사용할 수 있습니다. {{ :products:mp_studio:up-pc-marked.svg?1000 |그림 23. PC 직접 시험 보기 }} * **① PC 의 COM 포트:** PC의 COM 포트 목록입니다. USB 장치는 «''COM10 — USB Serial Port''»처럼 장치 이름이 함께 표시되고, 블루투스 포트는 «''COM23 (Bluetooth)''»로 표시됩니다. 처음에는 **(포트를 고르세요)**가 표시되며, 지난번에 이 통신포트에서 연 COM이 있으면 미리 골라집니다. **새로 읽기**로 목록을 다시 읽습니다. * **② 열기ㆍ닫기:** 고른 COM 포트를 엽니다. 회선은 그 통신포트의 통신 포트 설정(보레이트ㆍ데이터 비트ㆍ패리티ㆍ정지 비트)을 그대로 씁니다. 다른 보기로 옮기거나 창을 닫으면 포트가 닫힙니다. * **③ 거래 한 번 — 묻고 받기·보내기만:** 왼쪽에서 거래를 고르고 보낼 값(예시 값)을 적은 뒤 **한 번 보내기**를 누르면, 응답 대기ㆍ다시 시도까지 장비와 같은 방식으로 한 번 주고받고 결과를 표시합니다. * **④ 듣기 — 받기만·받으면 답하기:** **듣기 시작**을 누르면 장치가 보내는 바이트를 받아 해석합니다. 바코드 리더가 실제로 무엇을 보내는지 확인할 때 사용합니다. 받으면 답하기 거래는 ③에 적은 예시 값으로 PC가 답합니다. * **⑤ 통신 기록:** 주고받은 바이트가 통신 기록 보기와 같은 꼴로 표시됩니다. 체크섬이 틀린 응답이 오면 **맞는 갈래 찾기** 줄에 맞는 체크섬 후보가 표시되고, 응답이 둘 이상 모이면 **«…» 로 바꾸기**를 누를 수 있습니다. * 모니터링ㆍ다운로드가 쓰는 COM은 «— 모니터·다운로드가 쓰는 중»으로 표시되며 열 수 없습니다. 모니터링ㆍ다운로드를 끝낸 뒤 열어주시기 바랍니다. * 통신 포트 설정의 다운로드 COM은 «— 다운로드 포트»로 표시되고, 고르면 PLC와 연결된 포트일 수 있다는 안내가 표시됩니다. * PC 직접 시험은 PC 쪽 회선과 장치를 확인하는 기능입니다. 스캔 시간에 따른 동작은 장비에서 다시 확인해주시기 바랍니다. ===== 예제 ===== 아래 예제는 ''MPS-8A8R''의 통신포트1~통신포트3에 본보기 셋을 하나씩 정한 구성입니다. 다른 기종은 통신포트 번호만 바꿔 같은 방법으로 사용할 수 있습니다. ==== 예제 1. CO2 센서 값을 1초마다 읽기 ==== 통신포트1(9600 · 8-N-1)에 CO2 센서를 연결해 1초마다 농도를 읽고, 버튼 입력으로 영점 명령을 보내는 예제입니다. - **설정 → 통신 포트**의 **시리얼 1**을 보레이트 9600, 데이터 비트 8, 패리티 없음, 정지 비트 1로 정해주시기 바랍니다. - **설정 → 사용자 프로토콜…**에서 **통신포트1** 탭을 고르고 본보기 **CO2·가스 센서 — 1 초마다 묻기**를 눌러주시기 바랍니다. - **확인**을 눌러주시기 바랍니다. 통신포트1이 ''User Protocol'' 모드로 바뀝니다. - 래더에 영점 명령을 보낼 렁을 넣어주시기 바랍니다. ^ 렁 ^ 입력 ^ 펑션 ^ 하는 일 ^ | 0 | ''M3''(a 접점) | ''UPTRIG 3'' | ''M3''이 켜질 때 영점 명령을 한 번 보냅니다. | ^ 프레임 ^ 바이트 ^ | CO2 요청 | ''FF 01 86 00 00 00 00 00 79'' (고정 ''FF''ㆍ''01''ㆍ''86''ㆍ''00*5'' + 2의 보수 합, 2번째부터) | | CO2 응답 | ''FF 86'' + 농도 2바이트(큰 끝 먼저 → ''D100'') + 건너뜀 4 + 2의 보수 합 | | 영점 명령 | ''FF 01 87 00 00 00 00 00 78'' | 센서가 ''FF 86 01 9A 00 00 00 00 DF''를 보내면 ''D100''은 410(ppm)이 되고, 상태 칸 ''D101''은 ''0001''(10진 1), 완료 비트 ''M100''은 한 스캔 켜집니다. {{ :products:mp_studio:up-ex1-monitor.png?1000 |그림 24. 예제 1을 모니터링하는 모습(감시 판의 D100 농도ㆍD101 상태ㆍM100 완료 비트) }} ==== 예제 2. 바코드 리더의 글자 받기 ==== 통신포트2(9600 · 8-N-1)에 바코드 리더를 연결해, 읽은 글자를 ''D200''부터 받는 예제입니다. - **시리얼 2**를 9600 · 8-N-1로 정해주시기 바랍니다. - **사용자 프로토콜**의 **통신포트2** 탭에서 본보기 **바코드·QR 리더**를 고르고 **확인**을 눌러주시기 바랍니다. ^ 항목 ^ 값 ^ | 프레임 «바코드» | 글자열(''D200'' · 끝 문자 전까지 · 최대 32 · 받은 글자 수 ''D190'') + 고정 ''CR LF'' | | 거래 «바코드 받기» | 받기만 · 늘 듣기 · 완료 비트 ''M101'' · 받은 수 칸 ''D191'' | 리더가 ''ILOGICS-1234''와 ''CR LF''를 보내면 ''D190''은 12가 되고, ''D200''부터 두 글자씩(''D200'' = ''I''ㆍ''L'') 들어갑니다. ''M101''이 한 스캔 켜지고 ''D191''이 1 늘어납니다. 빈 줄(''CR LF''만)이 오면 글자 수 0인 프레임으로 받습니다. {{ :products:mp_studio:up-ex2-barcode.png?1000 |그림 25. 예제 2의 통신 기록(글자 보기)과 받은 수 }} ==== 예제 3. ASCII 국번 명령으로 인버터 값 읽기 ==== 통신포트3(9600 · 7-E-1)에 국번 01인 ASCII 명령 장치를 연결해, 번지 100의 값을 0.5초마다 ''D11''로 읽는 예제입니다. - **시리얼 3**을 보레이트 9600, 데이터 비트 7, 패리티 짝수, 정지 비트 1로 정해주시기 바랍니다. - **사용자 프로토콜**의 **통신포트3** 탭에서 본보기 **인버터·온도 조절기 (ASCII 국번 명령)**을 고르고 **확인**을 눌러주시기 바랍니다. - 래더에 읽을 번지를 넣는 렁을 넣어주시기 바랍니다. ^ 렁 ^ 입력 ^ 펑션 ^ 하는 일 ^ | 0 | ''@ON'' | ''MOVE 100 D10'' | 읽을 번지 100을 ''D10''에 넣습니다. | ^ 프레임 ^ 모양 ^ 예 ^ | 국번 요청 | ''STX "01" "R"'' + 번지(ASCII 10진 4자리 · ''D10'') + ''ETX'' + 합(8 비트) ASCII 16진 2자리(2번째부터) | ''02 "01R0100" 03 "77"'' | | 국번 응답 | ''ACK "01" "R"'' + 값(ASCII 16진 4자리 · ''D11'') + ''ETX'' + 합(8 비트) ASCII 16진 2자리(2번째부터) | ''06 "01R03E8" 03 "96"'' → ''D11'' = 1000 | | 국번 오류 (NAK) | ''NAK "01" ETX'' | 받으면 상태 칸 ''D12'' = ''F600'' | 거래 «국번 읽기»는 묻고 받기, 주기 500 ms, 응답 대기 300 ms, 다시 시도 3, 상태 칸 ''D12''입니다. 이 본보기는 **글자 사이 틈 괜찮음**이 꺼져 있어 요청을 한 번에 이어서 보냅니다. {{ :products:mp_studio:up-ex3-trace.png?1000 |그림 26. 예제 3의 통신 기록(둘 다 보기 — 16진과 제어 문자) }} ===== 문제 해결 ===== ^ 증상 ^ 확인할 항목 ^ | 상태 칸이 계속 ''0000'' | 다운로드한 프로그램에 사용자 프로토콜이 들어 있는지, 거래 시작이 트리거면 래더의 ''UPTRIG'' 입력이 꺼짐 → 켜짐으로 바뀌었는지 확인해주시기 바랍니다. | | ''F000''(응답 없음) | PC 직접 시험으로 같은 프레임에 장치가 답하는지 확인해주시기 바랍니다. 답하면 통신포트 번호와 단자(RS-232ㆍRS-485ㆍUART), RS-485의 +ㆍ- 배선, 통신 포트 설정을 확인해주시기 바랍니다. 장치의 응답이 늦으면 **응답 대기**를 늘려주시기 바랍니다. | | ''F100''(체크섬 틀림) | 장치가 보낸 바이트를 둘 이상 붙여 넣어 [[#맞는_체크섬_갈래_찾기|맞는 체크섬 갈래 찾기]]로 확인해주시기 바랍니다. | | ''F200''(모양이 다른 바이트만 옴) | 장치가 보낸 바이트를 미리보기에 붙여 넣어 몇 번째 바이트가 다른지 확인해주시기 바랍니다. 국번ㆍ머리 바이트, 데이터 비트(7ㆍ8)와 패리티를 확인해주시기 바랍니다. | | ''F400''(값 바꾸기 실패) | 미리보기에서 값 필드의 형식(자릿수ㆍ소수 자리ㆍ16진)과 PLC 칸의 크기를 확인해주시기 바랍니다. | | ''F500''(수신 버퍼 넘침) | 보레이트에 비해 스캔 시간이 길면 한 스캔 사이에 수신 버퍼보다 많은 바이트가 쌓입니다. 스캔 시간을 줄이거나 **설정 → 데이터 메모리**의 **SERIAL** 칸에서 수신 버퍼를 늘려주시기 바랍니다. 128바이트 버퍼와 115200 bps에서는 스캔 시간이 약 11 ms를 넘지 않아야 합니다. | | 요청은 나가는데 장치가 답하지 않음(글자 사이 틈) | 장치가 글자 사이의 틈을 허용하지 않을 수 있습니다. 포트의 **글자 사이 틈 괜찮음**을 끄고 다운로드해 다시 확인해주시기 바랍니다. | | 긴 바코드가 뒷부분만 들어옴 | 글자열의 최대 글자 수보다 긴 코드가 오면 뒤쪽 최대 글자 수만큼만 들어갑니다. **N**을 가장 긴 코드보다 크게 정해주시기 바랍니다. | | 잡음이 있는데 값이 들어옴 | 장비는 패리티 오류를 검사하지 않습니다. 체크섬이 있는 프레임으로 정의해주시기 바랍니다. | | PC 직접 시험에서 포트가 열리지 않음 | 모니터링ㆍ다운로드나 다른 프로그램이 그 COM을 쓰고 있지 않은지 확인해주시기 바랍니다. | ===== 확인할 점 ===== * 사용자 프로토콜이나 ''UPTRIG''를 쓴 ''.mpx'' 프로젝트는 V1.2.0 이하에서 열 수 없습니다. * 받는 값 칸은 래더가 읽기만 하도록 구성해주시기 바랍니다. ===== 관련 문서 ===== * [[products:mp_studio:download#통신_포트|Phase 6 · 통신 포트]] * [[products:mp_studio:monitoring|Phase 7 · 모니터링과 데이터 테이블]] * [[products:mp_studio:simulation|Phase 8 · 시뮬레이션]] * [[products:mp_studio:modbus_device_table|Modbus 장비 표]] * [[products:mp_studio:functions|Phase 4 · 펑션]] [[products:mp_studio|← MP STUDIO 2 사용설명서로 돌아가기]]
products/mp_studio/user_protocol.txt
· 마지막으로 수정됨:
2026/11/10 00:38
저자
127.0.0.1
문서 도구
문서 보기
이전 판
역링크
맨 위로