Table of Contents
HMI Programming: Modular Pi + CFNET I/O
본 장에서는 Modular Pi와 CFNET 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 갱신 로직을 통합 관리합니다.

