====== 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 코드에서 호출할 수 있도록 합니다. {{ :modularpi:python:pyhmiprogramming:widget_object.png?nolink |}} ==== 2) Python 프로그램 로직 (Back-end) ==== **main.py**는 전체 시스템의 컨트롤러 역할을 수행합니다. * **실시간 모니터링**: QTimer를 사용하여 **300ms 주기**로 CFDI 입력 값을 읽어 UI에 실시간 반영합니다. * **하드웨어 제어**: 사용자가 UI 버튼을 누르면 CFDO의 특정 포트로 ON/OFF 출력 신호를 전송합니다. * **클래스 구조**: **MyWindow** 클래스가 QMainWindow를 상속받아 버튼 클릭 이벤트, 입출력 모니터링, UI 갱신 로직을 통합 관리합니다. {{ :modularpi:python:pyhmiprogramming:ui_class.png?700 |}} ===== 4. 관련 리소스 ===== * **동영상 가이드**: {{url>https://www.youtube.com/embed/qOjRIi0v8F8 400,400}} * **다운로드**: **☞ {{ :modularpi:python:pyhmi:hmi_1port_manual.zip |(다운로드) HMI 패키지 (CFRASP.py, main.py, .ui, .img)}}** ---- [[..:index|Python을 이용한 CFNET I/O 개발 가이드로 돌아가기]]