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:23] – [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 시스템은 사용자 인터페이스(UI)와 실제 하드웨어 제어 로직이 상호작용하는 구조로 동작합니다. | ||
| + | * **프론트엔드 (UI)**: Qt Designer로 제작한 **.ui 파일**이 화면 레이아웃을 결정합니다. | ||
| + | * **백엔드 (Logic)**: **main.py**가 UI 위젯의 이벤트(버튼 클릭 등)와 하드웨어 제어 로직을 연결합니다. | ||
| + | * **드라이버 (Library)**: | ||
| - | **☞ {{ :modularpi: | + | > **동작 흐름:** UI 위젯 |
| - | =====HMI | + | |
| - | HMI 프로젝트는 기본 | + | |
| - | * **main.py** : UI 로드 및 제어 | + | |
| - | * **.ui 파일** : Qt Designer에서 제작한 화면 레이아웃 | + | |
| - | *** CFRASP.py** : CFNET I/O 제어 | + | |
| - | HMI 시스템은 Modular Pi + CFNET I/O 모듈로 구성되며, | + | |
| - | * ** 모듈라 Pi** : UI 화면 표시 및 사용자 입력 처리, | + | |
| - | * **CFNET I/O ** : DI/DO/AD/DA 입출력 제어 수행, 센서/ | + | |
| - | {{ : | + | ===== 2. 프로젝트 필수 구성 요소 ===== |
| - | * 실제 I/O 동작(CFDI 입력 감지, CFDO 출력 On/Off 등)은 CFRASP.py 라이브러리를 통해 제어됩니다. | + | HMI 프로젝트를 |
| - | * Python(main.py) 코드에서 CFRASP의 | + | |
| - | UI는 Qt Designer로 제작한 .ui 파일을 기반으로 렌더링되며, | + | ^ 파일명 ^ 역할 ^ 상세 설명 ^ |
| - | 또한, 하드웨어 | + | | **main.py** | 제어 로직 | UI 로드, 이벤트 |
| - | 즉, **UI(.ui 파일) 동작 ↔ Python 프로그램(main.py) 로직 < | + | | **.ui 파일** | 화면 설계 | Qt Designer에서 제작된 위젯 배치 및 객체 이름 정의 | |
| + | | **CFRASP.py** | 라이브러리 | CFNET I/O(DI/ | ||
| + | ===== 3. 주요 구현 내용 ===== | ||
| - | ===== UI 위젯 객체 연결(프론트엔드)===== | + | ==== 1) UI 위젯 객체 연결 (Front-end) ==== |
| - | ===1.) | + | * **UI Form 구성**: Qt Designer에서 각종 위젯을 드래그 앤 드롭 방식으로 배치하여 디자인합니다. |
| - | Qt Designer에서 | + | * **객체 이름 정의**: 버튼(Button), |
| - | ===2.) 위젯 | + | |
| - | 버튼(Button), | + | |
| {{ : | {{ : | ||
| - | =====Python 프로그램 로직 (백엔드)===== | ||
| - | HMI 프로젝트를 구성할 때에는 **' | ||
| - | main.py 프로그램 로직은 QTimer를 사용하여 **300ms 주기**로 CFDI의 0번 포트 입력 값을 읽어 UI에 반영하며, | ||
| - | \\ | ||
| - | ☞ [[modularpi: | ||
| - | ☞ [[modularpi: | ||
| - | ===1.) main.py 코드 구조 === | + | ==== 2) Python |
| - | HMI 프로그램의 기본 환경을 설정하며, | + | **main.py**는 전체 시스템의 컨트롤러 역할을 수행합니다. |
| - | {{ : | + | * **실시간 모니터링**: QTimer를 사용하여 |
| - | + | * **하드웨어 제어**: 사용자가 UI 버튼을 | |
| - | ===2.) 메인 UI폼 클래스 구조 및 처리로직(MyWindow 클래스) === | + | * **클래스 |
| - | **MyWindow** 클래스는 | + | |
| - | 이 클레스에서 | + | |
| - | * .ui 파일에서 정의된 위젯 객체 이름(버튼, 램프(Label) 등)을 Python 코드에서 불러와, 각 위젯에 해당 기능 | + | |
| - | * 클래스 | + | |
| - | * QTimer를 통해 읽어온 입력 상태에 따라 **램프 이미지를 | + | |
| {{ : | {{ : | ||
| - | [[..: | + | ===== 4. 관련 리소스 ===== |
| + | * **동영상 가이드**: | ||
| + | {{url> | ||
| + | * **다운로드**: | ||
| + | **☞ {{ : | ||
| + | ---- | ||
| + | [[..: | ||
