문서의 이전 판입니다!
목차
02-A · Arduino IDE로 HMI 프로그램 만들기
1. Arduino IDE와 SDK 준비
Arduino IDE로 시작하기의 설치·보드 선택·포트 선택을 먼저 완료합니다. 아이로직스 Arduino SDK가 포함된 ILOGICS 보드 패키지를 사용합니다. 아래 통신 명령어와 전역 M, D 메모리는 해당 패키지에 포함되어 있습니다.
이 문서의 기준 제품은 MPINO-8A4R-S, HMI 통신 채널은 RS-232 Serial1입니다. 다른 모델은 제품의 통신 채널 표를 확인합니다.
2. 실습 프로그램의 메모리
| 메모리 | 프로그램에서 하는 일 | HMI가 하는 일 |
|---|---|---|
D[0] | 1초마다 증가, 99 다음에 0 | 숫자로 읽기만 함 |
D[1] | HMI가 써준 값을 보관 | 0 ~ 9999를 입력 |
D[2] | D[1] 값을 복사 | 돌려받은 값으로 읽기만 함 |
M[0] | HMI가 써준 ON/OFF 값을 보관 | 시험 스위치로 변경하고 램프로 읽음 |
3. 새 스케치에 전체 코드 입력
아래 전체 코드를 빈 스케치에 넣습니다. 릴레이 출력이나 입력 핀을 제어하는 코드는 포함하지 않습니다.
#include <Arduino.h> unsigned long lastTick = 0; void setup() { ImodbusRTUMem(16, 16); ImodbusRTUAdr(0, 0); ImodbusRTUInit(Serial1, 1, 9600); M[0] = false; D[0] = 0; D[1] = 0; D[2] = 0; lastTick = millis(); } void loop() { ImodbusRTU(); unsigned long now = millis(); if (now - lastTick >= 1000UL) { lastTick = now; D[0] = (D[0] + 1) % 100; } D[2] = D[1]; }
4. 코드의 읽는 순서
| 코드 | 역할 |
|---|---|
ImodbusRTUMem(16, 16) | 내부 비트 M 16개와 워드 D 16개를 통신 시작 전에 준비 |
ImodbusRTUAdr(0, 0) | M과 D의 외부 시작 주소를 각각 0으로 설정 |
ImodbusRTUInit(Serial1, 1, 9600) | Serial1에서 국번 1, 9600bps Slave 통신 시작 |
ImodbusRTU() | HMI 요청을 받아 처리. loop()에서 계속 호출 |
millis() | 통신을 기다리게 만드는 delay(1000) 없이 1초 계산 |
D[2] = D[1] | 제품이 받은 입력값을 다른 주소로 돌려줌 |
이 초기화는 8 데이터 비트·패리티 없음·정지 비트 1(8N1)을 사용합니다. HMI도 동일하게 설정합니다.
ImodbusRTUMem()은 setup()에서 한 번만 호출합니다. 실행 중 다시 호출하면 M/D 메모리가 다시 할당되고 기존 값과 다른 통신에서 참조하던 메모리에 영향을 줍니다. 이 실습에서는 다른 통신 프로토콜을 같은 채널에 추가하지 않습니다.
5. 검증하고 제품에 업로드
- 프로젝트를
HMI_First_Test같은 이름으로 저장합니다. - 도구 → 보드에서 실제 제품에 해당하는 ILOGICS 보드를 선택합니다.
- 도구 → 포트에서 MP 다운로드 케이블의 업로드 COM 포트를 선택합니다.
- 검증을 실행하고 컴파일 오류가 없는지 확인합니다.
- 업로드를 실행하고 완료 메시지를 확인합니다.
- 제품 전원과 HMI 통신 케이블 연결을 확인합니다.
ImodbusRTUInit 또는 M/D를 찾지 못한다는 오류가 나면 코드에 임의의 라이브러리를 추가하기 전에 ILOGICS 보드 패키지 설치와 보드 선택을 확인합니다. 업로드 오류는 HMI 주소 문제와 구분하여 첫 업로드 안내를 확인합니다.
6. HMI에 설정할 주소
이 코드에 대응하는 0 기반 통신 주소입니다.
| HMI 대상 | 주소 | 읽기 / 쓰기 |
|---|---|---|
통신 확인 숫자 D0 | Holding Register 0 | 읽기 FC03 |
입력값 D1 | Holding Register 1 | 읽기 FC03 / 쓰기 FC06 또는 FC16 |
제품에서 돌려준 값 D2 | Holding Register 2 | 읽기 FC03 |
시험 스위치·램프 M0 | Coil 0 | 읽기 FC01 / 쓰기 FC05 또는 FC15 |
예: 국번 1, FC03, 시작 주소 0, 개수 3으로 읽으면 D0, D1, D2 순서의 세 워드를 받습니다. Coil 0과 Holding Register 0은 영역이 달라 서로 다른 메모리입니다.
HMI 편집기가 40001 같은 표기를 요구하면 주소 표기 변환 안내를 확인하세요. STUDIO2용 2000을 이 SDK 예제에 입력하지 않습니다.
7. 검증 범위
이 설명서의 예제는 ILOGICS 보드 패키지 대상 컴파일로 확인합니다. 컴파일 확인과 실제 HMI 연결 시험은 별도입니다. 사용 중인 HMI의 드라이버·케이블·전원·단자 번호를 확인한 후 네 가지 동작 확인을 진행합니다.
