사용자 도구

사이트 도구


guide:hmi_connection:arduino:modbus

Arduino IDE · Modbus RTU로 HMI 연결

HMI 연결 전체 순서 · Arduino IDE 방식 선택

Modbus RTU에서는 HMI가 Master로 요청하고 제품이 Slave로 응답합니다. 이 SDK의 M 비트는 Coil, D 워드는 Holding Register에 대응합니다. HMI에 입력할 번호는 드라이버의 0 기반·1 기반 주소 규칙을 확인해야 합니다.

이 페이지 뒤쪽의 간단한 사용 예는 MPINO-8A4R-S · RS-232 Serial1 · 국번 1 · 9600 bps · 8N1 기준입니다. 제품 채널과 결선은 HMI 연결방법, 개발 환경은 Arduino IDE 설치·보드 선택에서 확인해주시기 바랍니다.

1. HMI 화면에 지정할 주소

화면 요소 SDK 메모리 Modbus 요청의 0 기반 주소 동작
통신 확인 숫자 D0 Holding Register 0 FC03 읽기, 0~99 반복
숫자 입력 D1 Holding Register 1 0~9999 쓰기(FC06/FC16)
되돌린 값 D2 Holding Register 2 FC03 읽기, D1과 같음
시험 스위치·램프 M0 Coil 0 토글 쓰기 FC05/FC15, FC01 읽기

HMI 편집기가 1 기반 또는 4xxxx 번호를 쓰면 주소 변환 표에서 확인해주시기 바랍니다. 숫자 형식·스위치·램프의 공통 설정은 HMI 화면 만들기에서 한 번에 진행합니다.

2. 새 스케치에 전체 코드 입력

다음은 위 주소로 내부 메모리 값을 주고받는 간단한 예제입니다. 이 코드는 실제 입력·릴레이 출력 핀을 사용하지 않습니다.

#include <Arduino.h>
 
unsigned long lastTick = 0;
 
void setup() {
  ImodbusRTUMem(16, 16);     // M0, D0~D2를 포함한 통신 메모리
  ImodbusRTUAdr(0, 0);       // 외부 주소도 0부터
  ImodbusRTUInit(Serial1, 1, 9600);
  lastTick = millis();
}
 
void loop() {
  if (M == nullptr || D == nullptr) return;
  ImodbusRTU();
 
  unsigned long now = millis();
  if (now - lastTick >= 1000UL) {
    lastTick = now;
    D[0] = (D[0] >= 99) ? 0 : D[0] + 1;
  }
 
  if (D[1] > 9999) D[1] = 9999;
  D[2] = D[1];
}

ImodbusRTUMem()은 시작할 때 메모리를 만들고, ImodbusRTU()는 매 반복에서 HMI 요청을 처리합니다. 이 스케치는 실제 입력·릴레이 핀을 사용하지 않습니다.

3. 검증·업로드 후 HMI 화면 만들기

제품 스케치를 업로드한 뒤 아래 화면 구성 예와 주소표를 참고하여 HMI 요소를 배치해주시기 바랍니다.

D0 통신 확인 숫자, D1 입력, D2 되돌린 값, M0 시험 스위치와 램프

  1. 스케치를 저장하고 Arduino IDE의 검증을 실행해주시기 바랍니다.
  2. 도구 → 보드와 업로드 COM 포트를 확인한 뒤 업로드해주시기 바랍니다. 설치·업로드 안내
  3. HMI 화면 만들기에서 위의 Holding Register 0~2와 Coil 0을 외부 장치 요소에 지정하고 HMI 프로젝트를 전송해주시기 바랍니다.
  4. 제품과 HMI 전원을 켜고 동작 확인과 문제 해결에서 읽기 → 쓰기 → 비트 순서로 시험해주시기 바랍니다.

HMI가 D1과 M0를 쓰고 제품의 D2와 M0를 다시 읽어 결과를 확인

정상 결과와 증상별 확인 위치는 동작 확인과 문제 해결에 정리되어 있습니다.

guide/hmi_connection/arduino/modbus.txt · 마지막으로 수정됨: 저자 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki