사용자 도구

사이트 도구


guide:hmi_connection:arduino:modbus

문서의 이전 판입니다!


Arduino IDE · Modbus RTU로 HMI 연결

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

MPINO-8A4R-S · RS-232 Serial1 · 국번 1 · 9600 bps · 8N1 실습입니다. HMI는 요청을 보내는 Modbus RTU Master, 제품은 응답하는 Slave로 설정합니다.

1. HMI 화면에 지정할 주소

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

화면 요소 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의 숫자는 16비트 정수, 소수점 0자리, 배율 1로 설정합니다. D1 입력 범위는 0~9999, M0 스위치는 유지형 토글로 설정하고, 별도 램프가 같은 외부 M0를 읽도록 합니다. HMI 편집기가 1 기반 또는 4xxxx 번호를 쓰면 주소 변환 표로 확인합니다.

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. 검증·업로드 후 동작 확인

  1. 스케치를 저장하고 Arduino IDE의 검증을 실행합니다.
  2. 도구 → 보드와 업로드 COM 포트를 확인한 뒤 업로드합니다. 설치·업로드 안내
  3. HMI 프로젝트를 HMI에 전송한 뒤 제품과 HMI 전원을 켭니다.

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

확인 정상 동작
D0 숫자가 약 1초마다 바뀌고 99 다음 0이 표시됨
D1 → D2 예를 들어 1234를 입력하면 D2에도 1234가 표시됨
M0 스위치를 누를 때마다 별도 램프가 ON/OFF로 바뀜

숫자가 고정되면 동작 확인과 문제 해결에서 국번·속도·주소·결선을 순서대로 확인합니다.

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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki