목차

Arduino IDE · LS Cnet으로 HMI 연결

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

LS산전 Cnet에서는 HMI가 Cnet 직렬 요청을 보내고 제품이 Slave로 응답합니다. LS산전·M2I·이지뷰 HMI 편집기에는 D000·M000처럼 M/D 메모리 이름을 입력해주시기 바랍니다. Cnet 요청의 %DW0은 제품의 D0, %MX00000은 M0에 대응합니다.

이 페이지 뒤쪽의 간단한 사용 예는 MPINO-8A4R-S · RS-232 Serial1 · 국번 1 · 9600 bps · 8N1 기준입니다. 채널·결선과 SDK 설치·보드 선택을 확인해주시기 바랍니다. Arduino IDE의 Cnet 예제는 Modbus 예제를 선행하지 않아도 됩니다.

1. HMI 화면에 지정할 주소

화면 요소 SDK 내부 메모리 HMI 입력 예 동작
통신 확인 숫자 D0 D000 16비트 워드 읽기, 0~99 반복
숫자 입력 D1 D001 16비트 워드 0~9999 쓰기
되돌린 값 D2 D002 16비트 워드 읽기, D1과 같음
시험 스위치·램프 M0 M000 비트 토글 쓰기·읽기

표의 HMI 입력 예는 LS산전·M2I·이지뷰 기준입니다. 다른 HMI는 선택한 Cnet 드라이버의 주소 입력 형식을 확인해주시기 바랍니다. Modbus 주소 변환표는 Cnet에 적용하지 않습니다. 숫자 형식·스위치·램프의 공통 설정은 HMI 화면 만들기에서 안내합니다.

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

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

#include <Arduino.h>
 
unsigned long lastTick = 0;
 
void setup() {
  ICnetMem(16, 16, 0);       // M0, D0~D2를 포함; R 영역 미사용
  ICnetAdr(0, 0, 0);          // 외부 주소도 0부터
  ICnetInit(Serial1, 1, 9600);
  lastTick = millis();
}
 
void loop() {
  if (M == nullptr || D == nullptr) return;
  ICnet();
 
  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];
}

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

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

제품 스케치를 업로드한 뒤 아래 화면 구성 예와 주소표를 참고하여 HMI 요소를 배치해주시기 바랍니다. 그림의 D0·D1·D2·M0은 제품 내부 메모리 이름이며, HMI 편집기 입력값은 위 표의 D000·D001·D002·M000입니다.

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

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

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

HMI가 Cnet %DW·%MX 요청을 보내는 드라이버인지 확인해주시기 바랍니다. 정상 결과와 증상별 확인 위치는 동작 확인과 문제 해결에 정리되어 있습니다.