Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| modularpi:python:pyhmiprogramming:index [2026/04/02 00:19] – [HMI(UI + CFNET I/O) Programming] admin | modularpi:python:pyhmiprogramming:index [2026/04/02 00:26] (current) – admin | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== HMI(UI + CFNET I/O) Programming | + | ====== HMI Programming: |
| - | 본 장에서는 **Modular Pi + CFNET I/O 모듈(CFDI, | + | |
| - | * Qt Designer에서 | + | 본 장에서는 **Modular Pi**와 **CFNET I/O 모듈**(CFDI, CFDO 등)을 활용하여 PyQt 기반의 HMI(Human-Machine Interface) 프로그램을 구현하는 표준 |
| - | | + | |
| - | | + | |
| - | {{url> | + | ===== 1. 시스템 아키텍처 및 동작 방식 ===== |
| - | **☞ {{ : | + | HMI 시스템은 |
| - | =====HMI 동작 방식 및 구성===== | + | |
| - | HMI 프로젝트는 기본 main.py, UI 파일(.ui), | + | |
| - | * **main.py** : UI 로드 및 제어 로직 실행 | + | |
| - | * **.ui 파일** : Qt Designer에서 제작한 화면 레이아웃 | + | |
| - | *** CFRASP.py** : CFNET I/O 제어 라이브러리 | + | |
| - | HMI 시스템은 | + | |
| - | * ** 모듈라 Pi** : UI 화면 표시 및 사용자 입력 처리, | + | |
| - | * **CFNET I/O ** : DI/DO/AD/DA 입출력 | + | |
| - | {{ :modularpi:python:pyhmiprogramming: | + | * **프론트엔드 (UI)**: Qt Designer로 제작한 **.ui 파일**이 화면 레이아웃을 결정합니다. |
| + | * **백엔드 (Logic)**: **main.py**가 UI 위젯의 이벤트(버튼 클릭 등)와 하드웨어 제어 로직을 연결합니다. | ||
| + | * **드라이버 (Library)**: **CFRASP.py** 라이브러리를 통해 CFNET I/O 모듈의 데이터를 읽고 씁니다. | ||
| - | | + | > **동작 |
| - | * Python(main.py) 코드에서 CFRASP의 함수들을 호출하여 하드웨어 상태를 읽고 쓰게 됩니다. | + | |
| - | UI는 Qt Designer로 제작한 | + | ===== 2. 프로젝트 필수 |
| - | 또한, 하드웨어 입·출력 제어는 CFRASP.py 라이브러리를 통해 Python(main.py) 코드에서 처리되며 CFNET I/O 모듈(CFDI, | + | |
| - | 즉, **UI(.ui 파일) 동작 ↔ Python | + | |
| + | HMI 프로젝트를 실행하기 위해서는 Modular Pi의 동일한 프로젝트 폴더 내에 아래 **3가지 필수 파일**이 포함되어야 합니다. | ||
| - | ===== UI 위젯 객체 연결(프론트엔드)===== | + | ^ 파일명 ^ 역할 ^ 상세 설명 ^ |
| - | ===1.) UI Form 구성=== | + | | **main.py** | 제어 로직 | UI 로드, 이벤트 처리, 하드웨어 I/O 통신 실행 | |
| - | Qt Designer에서 제공하는 각종 | + | | **.ui 파일** | 화면 설계 | Qt Designer에서 제작된 |
| - | ===2.) 위젯 | + | | **CFRASP.py** | 라이브러리 | CFNET I/O(DI/DO/AD/DA) 제어를 위한 전용 함수 제공 | |
| - | 버튼(Button), | + | |
| - | {{ : | + | ===== 3. 주요 구현 내용 |
| - | =====Python 프로그램 로직 (백엔드)===== | + | |
| - | HMI 프로젝트를 구성할 때에는 **' | + | |
| - | main.py 프로그램 로직은 QTimer를 사용하여 **300ms 주기**로 CFDI의 0번 포트 입력 값을 읽어 UI에 반영하며, | + | |
| - | \\ | + | |
| - | ☞ [[modularpi: | + | |
| - | ☞ [[modularpi: | + | |
| - | ===1.) main.py 코드 구조 | + | ==== 1) UI 위젯 객체 연결 (Front-end) ==== |
| - | HMI 프로그램의 기본 환경을 설정하며, | + | * **UI Form 구성**: Qt Designer에서 각종 위젯을 드래그 앤 드롭 방식으로 배치하여 디자인합니다. |
| + | * **객체 이름 정의**: 버튼(Button), 라벨(Label) 등 각 요소에 고유한 **Object Name**을 부여하여 Python 코드에서 호출할 수 있도록 합니다. | ||
| - | {{ : | + | {{ : |
| - | ===2.) 메인 UI폼 클래스 구조 및 처리로직(MyWindow 클래스) === | + | ==== 2) Python 프로그램 |
| - | **MyWindow** 클래스는 **QMainWindow**와 **form_class**를 상속하여 메인 화면을 구성합니다.\\ | + | **main.py**는 전체 시스템의 컨트롤러 역할을 수행합니다. |
| - | 이 클레스에서 로직동작이 처리되며, | + | |
| - | * .ui 파일에서 정의된 위젯 객체 이름(버튼, | + | |
| - | * 클래스 내부에서 버튼 클릭 이벤트 , CFDI 입력 모니터링, | + | |
| - | * QTimer를 통해 읽어온 입력 상태에 따라 **램프 이미지를 갱신하는 등, 변경된 하드웨어 상태를 UI에 실시간으로 반영**하는 역할을 | + | |
| - | {{ :modularpi:python: | + | * **실시간 모니터링**: QTimer를 사용하여 **300ms 주기**로 CFDI 입력 값을 읽어 UI에 실시간 반영합니다. |
| + | * **하드웨어 제어**: 사용자가 UI 버튼을 누르면 CFDO의 특정 포트로 ON/OFF 출력 신호를 전송합니다. | ||
| + | * **클래스 구조**: **MyWindow** 클래스가 QMainWindow를 상속받아 버튼 클릭 이벤트, 입출력 모니터링, | ||
| - | [[..:index|Python을 이용한 CFNET I/O 개발]] | + | {{ :modularpi: |
| + | ===== 4. 관련 리소스 ===== | ||
| + | * **동영상 가이드**: | ||
| + | {{url> | ||
| + | * **다운로드**: | ||
| + | **☞ {{ : | ||
| + | ---- | ||
| + | [[..: | ||
