문서의 이전 판입니다!
목차
02-B · MPINO STUDIO2로 HMI 프로그램 만들기
MPINO STUDIO2에서는 실행 → 통신에서 HMI 통신을 설정하고, Arduino Code와 Ladder Logic에서 같은 메모리를 사용합니다. 이 실습은 Arduino Code로 숫자를 만들고 래더로 내부 비트를 복사합니다. 실제 입출력 단자는 사용하지 않습니다.
1. 새 프로젝트와 메모리 설정
- 파일 → 새로 만들기에서 MPINO-8A4R-S에 해당하는 MPINO-8A4R(T)-S를 선택합니다.
Ctrl+S로HMI_First_Test.mp2라는 이름으로 저장합니다.- 설정 → 메모리 영역 설정을 엽니다.
- 이번 실습은 P 64, M 16, D 16, C 16, T 16, R 16으로 설정합니다. 숫자는 주소가 아니라 메모리 개수입니다.
- 설정을 적용하고 저장합니다.
- 설정 → 래더 핀맵 설정에서 실제 입출력 핀의 사용을 모두 해제한 상태로 둡니다. 이 실습에는 실제 핀을 연결하지 않습니다.
메모리 설정 상세는 메모리 이해하기를 확인합니다. M0/M1은 내부 비트, D0 ~ D2는 내부 숫자 메모리입니다. Arduino 핀 D0와 내부 메모리 D0는 다른 개념입니다.
2. 실행 → 통신 설정
| 그림 번호 | 항목 | MPINO-8A4R-S 실습값 |
|---|---|---|
| ① | 채널 | Serial1 — RS-232 |
| ② | 프로토콜 | Modbus RTU Slave |
| ③ | Slave ID | 1 |
| ④ | 통신속도 | 9600 |
| ⑤ | 데이터 비트 | 8 |
| ⑥ | 정지 비트 | 1 |
| ⑦ | 패리티 | 없음 |
- 실행 → 통신을 엽니다.
- 실제 배선한 채널을 고릅니다. 다른 제품은 제품별 채널 표를 확인합니다.
- 위 표대로 설정하고 창을 닫은 뒤
Ctrl+S로 저장합니다.
기본 속도 115200을 그대로 두지 않고 9600으로 바꿉니다. 설정을 변경해도 이미 업로드된 제품 프로그램은 즉시 바뀌지 않습니다. 마지막 단계에서 다시 빌드·업로드합니다.
3. 내부 비트 래더 한 줄 만들기
왼쪽 탐색기에서 래더 → ladderLoop를 엽니다. M0 접점 → M1 코일 한 줄을 만듭니다. HMI가 변경한 내부 비트를 다른 내부 비트에 복사하는 회로입니다.
- 1행 1열을 선택하고 NO 접점 또는
F2를 누릅니다. - 접점을 더블클릭하거나
Enter를 누르고 주소에M0를 입력합니다. - 1행 2열을 선택하고 출력 코일 또는
F9를 누릅니다. - 코일의 주소에
M1을 입력합니다. - 회로의 주소가 아래 그림처럼
M0 → M1인지 확인합니다.
이름이 출력 코일이어도 주소가 내부 비트 M1이면 물리 릴레이 출력이 아닙니다. 이 실습에 P32 같은 실제 출력 주소를 넣지 않습니다. 기존 첫 프로젝트의 P0 → P32 회로를 복사하지 않습니다.
4. main의 Arduino Code 입력
왼쪽 탐색기의 Arduino Code → main을 열고 아래 전체 코드로 바꿉니다.
#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]; }
ladderLoop()는 위에서 만든 내부 비트 회로를 매번 실행합니다. D0는 1초마다 증가하고, D2는 HMI가 쓴 D1을 복사합니다. 긴 delay()를 사용하지 않습니다.
통신 초기화와 요청 처리는 실행 → 통신 설정으로 생성됩니다. 이 프로젝트에 SDK용 ImodbusRTUMem()·ImodbusRTUInit()·ImodbusRTU()를 추가하지 않습니다. STUDIO2가 준비한 메모리를 재할당하거나 같은 포트를 다른 코드가 초기화하면 충돌할 수 있습니다.
5. 빌드와 업로드
Ctrl+S로 프로젝트를 저장합니다.- 실행 → 빌드를 실행하고 오류가 없는지 확인합니다.
- 상태바에서 제품에 연결한 MP 다운로드 케이블의 PC 포트를 선택합니다.
- 실행 → 업로드를 실행하고 완료 메시지를 확인합니다.
- 업로드가 끝나면 HMI의 실제 RS-232 통신 케이블과 제품 전원을 확인합니다.
HMI용 Serial1은 제품의 통신 채널이고, 업로드 포트는 PC의 COM 포트입니다. 같은 Serial1을 다른 Arduino Code나 래더 모니터링 통신에 동시에 지정하지 않습니다. 포트 사용 관계와 첫 프로젝트의 빌드·업로드에서 자세히 확인할 수 있습니다.
6. 이 프로젝트의 HMI 주소
STUDIO2 내장 Modbus 통신 프레임의 0 기반 주소입니다. Arduino IDE SDK 예제의 0/1/2와 다릅니다.
| 화면 요소 | 메모리 | 영역·주소 |
|---|---|---|
| 통신 확인 숫자 | D0 | Holding Register 2000 |
| 입력값 | D1 | Holding Register 2001 |
| 제품에서 돌려준 값 | D2 | Holding Register 2002 |
| 시험 스위치 / 시험 램프 | M0 | Coil 1000 |
| 선택: 래더 결과를 보는 추가 램프 | M1 | Coil 1001 |
M1 램프를 추가하면 접점과 코일로 만든 래더 결과도 확인할 수 있습니다. 첫 화면의 필수 요소는 D0/D1/D2/M0입니다.
HMI가 실제로 사용할 수 있는 메모리 개수는 프로젝트 설정을 따릅니다. 주소 구간 M 1000 ~ 1999와 D 2000 ~ 2999가 모든 프로젝트에 해당 메모리를 1000개씩 할당한다는 뜻은 아닙니다. 이번 실습에서 M·D는 각각 16개입니다.
D는 부호 있는 16비트 정수로 다루며, 이번 숫자 입력은 0 ~ 9999로 제한합니다. HMI에서 16비트 1워드·소수점 0·배율 1로 맞춥니다. 주소를 1 기반이나 4xxxx로 입력하는 드라이버는 주소 표기 안내를 확인합니다.
7. 확인한 범위
이 실습 프로젝트는 STUDIO2 설치본의 ILOGICS 보드 패키지로 MPINO-8A4R-S 대상 코드 생성·컴파일을 확인했습니다. 실물 HMI 연결은 별도의 확인 단계입니다. 사용하는 HMI의 드라이버·단자·주소 입력 규칙을 확인한 뒤 아래 단계로 진행합니다.
