Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revision | |||
| modularpi:python:pyhmiprogramming:index [2026/04/02 00:25] – admin | modularpi:python:pyhmiprogramming:index [2026/04/02 00:26] (current) – admin | ||
|---|---|---|---|
| Line 49: | Line 49: | ||
| ---- | ---- | ||
| [[..: | [[..: | ||
| - | |||
| - | |||
| - | ====== HMI(UI + CFNET I/O) Programming ====== | ||
| - | 본 장에서는 **Modular Pi + CFNET I/O 모듈(CFDI, | ||
| - | |||
| - | * Qt Designer에서 제작한 .ui 파일을 Python(main.py)에서 로드하여 .ui 파일의 위젯 객체 연결 방법 | ||
| - | * CFNET I/O 모듈을 제어하기 위한 CFRASP.py 라이브러리 함수 사용 방법 | ||
| - | * UI 이벤트(버튼 클릭 등)와 실제 하드웨어 동작(CFDI 입력 확인, CFDO 출력 제어)을 연결 방법 | ||
| - | |||
| - | {{url> | ||
| - | |||
| - | |||
| - | |||
| - | **☞ {{ : | ||
| - | |||
| - | =====HMI 동작 방식 및 구성===== | ||
| - | |||
| - | HMI 프로젝트는 기본 main.py, UI 파일(.ui), | ||
| - | * **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 입출력 제어 수행, 센서/ | ||
| - | |||
| - | {{ : | ||
| - | |||
| - | * 실제 I/O 동작(CFDI 입력 감지, CFDO 출력 On/Off 등)은 CFRASP.py 라이브러리를 통해 제어됩니다. | ||
| - | * Python(main.py) 코드에서 CFRASP의 함수들을 호출하여 하드웨어 상태를 읽고 쓰게 됩니다. | ||
| - | |||
| - | UI는 Qt Designer로 제작한 .ui 파일을 기반으로 렌더링되며, | ||
| - | 또한, 하드웨어 입·출력 제어는 CFRASP.py 라이브러리를 통해 Python(main.py) 코드에서 처리되며 CFNET I/O 모듈(CFDI, | ||
| - | 즉, **UI(.ui 파일) 동작 ↔ Python 프로그램(main.py) 로직 <-> CFNET I/O 제어(CFRASP.py)**로 연결되는 구조로 HMI 시스템이 동작합니다.\\ | ||
| - | |||
| - | |||
| - | ===== UI 위젯 객체 연결(프론트엔드)===== | ||
| - | ===1.) UI Form 구성=== | ||
| - | Qt Designer에서 제공하는 각종 위젯을 드래그 앤 드롭 방식으로 Form에 배치하여 UI를 디자인합니다. | ||
| - | ===2.) 위젯 객체 이름 정의=== | ||
| - | 버튼(Button), | ||
| - | |||
| - | {{ : | ||
| - | =====Python 프로그램 로직 (백엔드)===== | ||
| - | HMI 프로젝트를 구성할 때에는 **' | ||
| - | main.py 프로그램 로직은 QTimer를 사용하여 **300ms 주기**로 CFDI의 0번 포트 입력 값을 읽어 UI에 반영하며, | ||
| - | |||
| - | ☞ [[modularpi: | ||
| - | |||
| - | ===1.) main.py 코드 구조 === | ||
| - | HMI 프로그램의 기본 환경을 설정하며, | ||
| - | |||
| - | {{ : | ||
| - | |||
| - | ===2.) 메인 UI폼 클래스 구조 및 처리로직(MyWindow 클래스) === | ||
| - | **MyWindow** 클래스는 **QMainWindow**와 **form_class**를 상속하여 메인 화면을 구성합니다.\\ | ||
| - | 이 클레스에서 로직동작이 처리되며, | ||
| - | * .ui 파일에서 정의된 위젯 객체 이름(버튼, | ||
| - | * 클래스 내부에서 버튼 클릭 이벤트 , CFDI 입력 모니터링, | ||
| - | * QTimer를 통해 읽어온 입력 상태에 따라 **램프 이미지를 갱신하는 등, 변경된 하드웨어 상태를 UI에 실시간으로 반영**하는 역할을 합니다. | ||
| - | |||
| - | {{ : | ||
| - | |||
| - | [[..: | ||
| - | |||
| - | |||
| - | |||
| - | |||
