====== MPINO STUDIO2 · Modbus RTU로 HMI 연결하기 ====== [[guide:hmi_connection:studio2|← STUDIO2 설치와 시작]] · [[guide:hmi_connection:screen|다음: HMI 화면 만들기 →]] · [[guide:hmi_connection:studio2:cnet|선택: LS산전 Cnet →]] MPINO STUDIO2에서 통신 방식을 **Modbus RTU Slave**로 설정하면 제품의 요청 처리 코드는 앱이 생성합니다. HMI는 **Modbus RTU Master**로 요청합니다. HMI가 읽고 쓸 내부 ''D'' 워드는 Holding Register, ''M'' 비트는 Coil에 대응하며, STUDIO2 생성 코드의 주소는 Arduino IDE SDK 예제와 다릅니다. 아래 표는 STUDIO2 생성 코드가 받는 **Modbus 요청의 0 기반 주소**입니다. HMI가 1 기반 Coil 번호를 받으면 ''M0''는 ''1001''로 표시될 수 있습니다. 1 기반 번호나 ''4xxxx'' 표기의 실제 입력 숫자는 HMI 드라이버 설명서에서 확인하고 [[guide:hmi_connection:screen#주소_입력_방식_확인|HMI 주소 입력 방식]]을 따라주시기 바랍니다. ^ HMI 요소 ^ STUDIO2 메모리 ^ Modbus 영역 ^ 요청 안의 0 기반 주소 ^ | 1초마다 변하는 숫자 | ''D0'' | Holding Register | ''2000'' | | 숫자 입력 | ''D1'' | Holding Register | ''2001'' | | 입력값을 돌려주는 숫자 | ''D2'' | Holding Register | ''2002'' | | 스위치와 확인 램프 | ''M0'' | Coil | ''1000'' | | 래더 결과 확인용 램프 | ''M1'' | Coil | ''1001'' | 다음은 **MPINO-8A4R-S · RS-232 ''Serial1'' · 국번 1 · 9600 bps · 8N1**에서 내부 메모리만 사용하는 간단한 예제입니다. 실제 입출력 단자는 사용하지 않습니다. 제품 채널·결선과 설치·제품 선택은 [[guide:hmi_connection:wiring|HMI 연결방법]]과 [[guide:hmi_connection:studio2|STUDIO2 시작]]을 참고해주시기 바랍니다. ===== 1. 새 프로젝트와 내부 메모리 ===== - **파일 → 새로 만들기**에서 ''MPINO-8A4R(T)-S''를 선택하고 ''HMI_First_Test.mp2''로 저장해주시기 바랍니다. - **설정 → 메모리 영역 설정**에서 P는 ''64'', M·D·C·T·R은 각각 ''16''으로 설정해주시기 바랍니다. 이 숫자는 주소가 아니라 **개수**입니다. - **설정 → 래더 핀맵 설정**에서 물리 입력·출력 핀의 **사용**을 모두 해제해주시기 바랍니다. 이번 프로그램은 내부 ''M''과 ''D''만 사용합니다. {{ :products:mpino_studio2:board-select-modal-marked.svg?900 |실제 STUDIO2 보드 선택 화면 }} 다른 제품은 통신 단자가 다를 수 있습니다. [[guide:hmi_connection:wiring#제품의_통신_채널_선택|제품별 채널 표]]에서 실제 제품의 포트를 확인해주시기 바랍니다. ===== 2. 래더 한 줄과 main 코드 ===== 왼쪽 탐색기의 **래더 → ladderLoop**에서 1행 1열에 **NO 접점**(''F2'') ''M0'', 1행 2열에 **출력 코일**(''F9'') ''M1''을 넣어주시기 바랍니다. ''M1''은 내부 비트이므로 실제 릴레이 출력이 아닙니다. {{ :guide:hmi_connection:revision5-dark:internal-ladder.svg?420 |M0 접점이 M1 내부 코일을 구동하는 실습 회로 }} **Arduino Code → main**을 열어 아래 코드를 입력해주시기 바랍니다. 이 코드는 STUDIO2 프로젝트의 ''main''에 넣는 내용이며, Arduino IDE에서 독립 스케치로 업로드하는 코드가 아닙니다. #include "mpino_runtime.h" #include "ladder_generated.h" unsigned long lastTick = 0; void setup() { M[0] = false; M[1] = false; D[0] = 0; D[1] = 0; D[2] = 0; lastTick = millis(); } void loop() { ladderLoop(); unsigned long now = millis(); if (now - lastTick >= 1000UL) { lastTick = now; D[0] = (D[0] + 1) % 100; } D[2] = D[1]; } ''D0''는 1초마다 0~99를 반복합니다. HMI가 ''D1''에 숫자를 쓰면 ''D2''가 그 값을 따라갑니다. ''M0''을 켜면 래더가 ''M1''을 켭니다. **통신 초기화·요청 처리 코드는 STUDIO2가 통신 설정에서 생성**하므로 이 코드에 ''ImodbusRTUInit()''이나 ''ImodbusRTU()''를 추가하지 않습니다. ===== 3. 실행 → 통신 ===== **실습에 입력할 값은 아래 표입니다.** 그림은 항목 위치를 보여 주는 초기 화면으로, 그림 속 프로토콜 **''없음''**과 속도 **''115200''**은 이 실습값이 아닙니다. ''Modbus RTU Slave''와 ''9600''으로 바꿔 저장해주시기 바랍니다. ^ 그림 번호 ^ 항목 ^ 입력값 ^ | ① | 채널 | ''Serial1'' — 이 제품의 RS-232 | | ② | 프로토콜 | ''Modbus RTU Slave'' | | ③ | Slave ID | ''1'' | | ④ | 통신속도 | ''9600'' | | ⑤·⑥·⑦ | 데이터 비트·정지 비트·패리티 | ''8'' · ''1'' · ''없음'' | {{ :products:mpino_studio2:communication-settings-marked.svg?1000 |항목 위치를 보여 주는 초기 화면. 그림 속 프로토콜 '없음'·115200은 예시이며 이 실습에서는 Modbus RTU Slave·9600으로 변경합니다. }} **실행 → 통신**에서 위 값으로 설정하고 ''Ctrl+S''로 저장해주시기 바랍니다. HMI 쪽은 실제 연결한 RS-232 포트에서 **Modbus RTU Master**로 같은 국번과 통신 조건을 설정해야 합니다. ===== 4. 빌드·업로드와 HMI 주소 ===== - **실행 → 빌드**(''Ctrl+R'')를 실행하고 빌드 출력의 성공 메시지를 확인해주시기 바랍니다. - 상태바에서 **제품용 MP 다운로드 케이블의 PC COM 포트**를 고른 뒤 **실행 → 업로드**(''Ctrl+U'')를 실행해주시기 바랍니다. 하단 패널의 업로드 로그가 **정상 종료**되는지 확인해주시기 바랍니다. 업로드 포트와 HMI용 ''Serial1''은 서로 다른 연결입니다. 자세한 화면과 순서는 [[products:mpino_studio2:first_project#포트_선택과_업로드|포트 선택과 업로드]]를 참고해주시기 바랍니다. - HMI의 숫자 3개와 비트 스위치·램프를 앞의 주소표에 따라 연결해주시기 바랍니다. 숫자는 **부호 있는 16비트 정수 1워드, 소수점 0, 배율 1**로 설정하고 입력 범위는 ''0~9999''로 설정해주시기 바랍니다. 이번 예제의 물리적 HMI 송수신은 사용하는 HMI 모델·케이블에 따라 별도로 확인해야 합니다. **동일 Serial1을 래더 모니터링이나 사용자 시리얼 코드에 중복 지정해서는 안 됩니다.** 먼저 [[guide:hmi_connection:screen|HMI 화면 만들기]]에서 이 페이지의 Modbus 주소를 지정하고 [[guide:hmi_connection:check|동작 확인과 문제 해결]]을 진행해주시기 바랍니다. Cnet 실습도 하려면 [[guide:hmi_connection:studio2:cnet|같은 프로그램을 LS산전 Cnet으로 전환 →]]해주시기 바랍니다.