HMI Programming: Modular Pi + CFNET I/O

본 장에서는 Modular PiCFNET I/O 모듈(CFDI, CFDO 등)을 활용하여 PyQt 기반의 HMI(Human-Machine Interface) 프로그램을 구현하는 표준 방법을 설명합니다.

1. 시스템 아키텍처 및 동작 방식

HMI 시스템은 사용자 인터페이스(UI)와 실제 하드웨어 제어 로직이 상호작용하는 구조로 동작합니다.

  • 프론트엔드 (UI): Qt Designer로 제작한 .ui 파일이 화면 레이아웃을 결정합니다.
  • 백엔드 (Logic): main.py가 UI 위젯의 이벤트(버튼 클릭 등)와 하드웨어 제어 로직을 연결합니다.
  • 드라이버 (Library): CFRASP.py 라이브러리를 통해 CFNET I/O 모듈의 데이터를 읽고 씁니다.
동작 흐름: UI 위젯 동작 ↔ Python 프로그램(main.py) 로직 ↔ CFNET I/O 제어(CFRASP.py)

2. 프로젝트 필수 구성 요소

HMI 프로젝트를 실행하기 위해서는 Modular Pi의 동일한 프로젝트 폴더 내에 아래 3가지 필수 파일이 포함되어야 합니다.

파일명 역할 상세 설명
main.py 제어 로직 UI 로드, 이벤트 처리, 하드웨어 I/O 통신 실행
.ui 파일 화면 설계 Qt Designer에서 제작된 위젯 배치 및 객체 이름 정의
CFRASP.py 라이브러리 CFNET I/O(DI/DO/AD/DA) 제어를 위한 전용 함수 제공

3. 주요 구현 내용

1) UI 위젯 객체 연결 (Front-end)

* UI Form 구성: Qt Designer에서 각종 위젯을 드래그 앤 드롭 방식으로 배치하여 디자인합니다. * 객체 이름 정의: 버튼(Button), 라벨(Label) 등 각 요소에 고유한 Object Name을 부여하여 Python 코드에서 호출할 수 있도록 합니다.

2) Python 프로그램 로직 (Back-end)

main.py는 전체 시스템의 컨트롤러 역할을 수행합니다.

* 실시간 모니터링: QTimer를 사용하여 300ms 주기로 CFDI 입력 값을 읽어 UI에 실시간 반영합니다. * 하드웨어 제어: 사용자가 UI 버튼을 누르면 CFDO의 특정 포트로 ON/OFF 출력 신호를 전송합니다. * 클래스 구조: MyWindow 클래스가 QMainWindow를 상속받아 버튼 클릭 이벤트, 입출력 모니터링, UI 갱신 로직을 통합 관리합니다.

4. 관련 리소스