Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
modularpi:python:pyhmiprogramming:index [2026/04/02 00:19] – [HMI(UI + CFNET I/O) Programming] adminmodularpi: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 ======
-본 장에서는 **Modular Pi + CFNET I/O 모듈(CFDI, CFDO 등)**을 활용하여 PyQt 기반 HMI(UI)프로그램을 구현하는 방법을 설명합니다.+
  
-  * Qt Designer에서 제작한 .ui 파일을 Python(main.py)에서 로드하여 .ui 파일의 위젯 객체 연결 방법 +본 장에서는 **Modular Pi**와 **CFNET I/O 모듈**(CFDI, CFDO 등)을 활용여 PyQt 기반의 HMI(Human-Machine Interface프로그램을 구현하는 표준 방법을 설명합니다.
-  * CFNET I/O 모듈을 제어하기 위한 CFRASP.py 라이브러리 함수 사용 방법 +
-  UI 이벤트(버튼 클릭 등)와 실제 드웨어 동작(CFDI 입력 확인, CFDO 출력 제어)을 연결 방법+
  
-{{url>https://youtube.com/shorts/qOjRIi0v8F8?si=hKlq0BJ_6Ojy2nO0 580,380}}+===== 1시스템 아키텍처 및 동작 방식 =====
  
-**☞ {{ :modularpi:python:pyhmi:hmi_1port_manual.zip |(다운로드) HMI 패키지 (CFRASP.py, main.py, .ui, .img)}}**  +HMI 시스템은 사용자 인페이스(UI)와 실제 하드웨어 제어 로직이 호작용하는 구조로 동작다.
-=====HMI 동작 방식 및 구성===== +
-HMI 프로젝트는 기본 main.py, UI 파일(.ui), CFRASP.py 3가지 파일로 구성됩니다. +
-  * **main.py** : UI 로드 및 제어 로직 실행 +
-  * **.ui 파일** : Qt Designer에서 제작한 화면 레이아웃 +
-  *** CFRASP.py** : CFNET I/O 제어 라이브러리 +
-HMI 시스템은 Modular Pi + CFNET I/O 모듈로 구성되며, UI 화면은 로컬 모니터 또는 원격 접속(VNC 등)을 통해 표시할 수 있습니다.\\ +
-  * ** 모듈라 Pi** :   UI 화면 표시 및 사용자 입력 처리,   Python 기반 제어 로직 행,   CFNET 통신을 통한 I/O 제어 명령 전송 +
-  *  **CFNET I/O ** : DI/DO/AD/DA 입출력 제어 수행, 센서/스위치 등 외부 장치의 태 값 전달, 실시간 I/O 동작 및 모터링+
  
-{{ :modularpi:python:pyhmiprogramming:hmi_with_modpi.png?nolink |}}+  * **프론트엔드 (UI)**Qt Designer로 제작한 **.ui 파일**이 화면 레이아웃을 결정합니다. 
 +  * **백엔드 (Logic)****main.py**가 UI 위젯의 이벤트(버튼 클릭 등)와 하드웨어 제어 로직을 연결합니다. 
 +  * **드라이버 (Library)****CFRASP.py** 라이브러리를 통해 CFNET I/O 모듈의 데이터를 읽고 씁니다.
  
-  실제 I/O 동작(CFDI 입력 감지, CFDO 출력 On/Off 등)은 CFRASP.py 라이브러리를 통해 제어됩니다. +> **동작 흐름:** UI 위젯 동작 ↔ Python 프로그램(main.py) 로직 ↔ CFNET I/O 제어(CFRASP.py)
-  * Python(main.py) 코드에서 CFRASP의 함수들을 호출하여 하드웨어 상태를 읽고 쓰게 됩니다.+
  
-UI는 Qt Designer로 제작한 .ui 파일을 기반으로 렌더링되며, UI에서 발생하는 모든 값과 상태 변화는 Modular Pi에서 실행되는 Python(main.py) 코드에 의해 처리합니다.\\ +===== 2. 프로젝트 필수 성 요소 =====
-또한, 하드웨어 입·출력 제어는 CFRASP.py 라이브러리를 통해 Python(main.py) 코드에서 처리되며 CFNET I/O 모듈(CFDI, CFDO 등)에 전달됩니다.\\ +
-즉, **UI(.ui 파일) 동작 ↔ Python 프로그램(main.py) 로직 <-> CFNET I/O 제어(CFRASP.py)**로 연결되는 조로 HMI 시스템이 동작합니다.\\+
  
 +HMI 프로젝트를 실행하기 위해서는 Modular Pi의 동일한 프로젝트 폴더 내에 아래 **3가지 필수 파일**이 포함되어야 합니다.
  
-===== UI 위젯 객체 연결(프론)===== +^ 파일명 ^ 역할 ^ 상세 설명 ^ 
-===1.) UI Form 구성=== +| **main.py** | 제어 로직 | UI 로드, 이벤트 처리, 하웨어 I/O 통신 실행 | 
-Qt Designer에서 제공하는 각종 위젯을 드래그 앤 드롭 방식으로 Form에 배치하여 UI를 디자인합니다. +| **.ui 파일** | 화면 설계 | Qt Designer에서 제작된 위젯 배치 및 객체 이름 정의 | 
-===2.) 위젯 객체 이름 정의=== +| **CFRASP.py** | 이브러리 | CFNET I/O(DI/DO/AD/DA제어를 위한 전용 함수 제공 |
-버튼(Button), (Label/램프 이미지), 텍스트(Text) 등 UI 요소는 사자가 지정한 객체 이름(Object Name) 으로 .ui 파일에 저장됩니다.+
  
-{{ :modularpi:python:pyhmiprogramming:widget_object.png?nolink |}} +===== 3. 주요 구현 내용 =====
-=====Python 프로그램 로직 (백엔드)===== +
-HMI 프로젝트를 구성할 때에는 **'main.py', 'UI 파일(.ui)', 'CFRASP.py'**의 총 3개 파일이 Modular Pi의 프로젝트 폴더에 포함되어 있어야 합니다.\\ +
-main.py 프로그램 로직은 QTimer를 사용하여 **300ms 주기**로 CFDI의 0번 포트 입력 값을 읽어 UI에 반영하며, 사용자가 버튼을 눌렀을 때는 CFDO의 0번 포트에 ON/OFF 출력 신호를 전송하는 역할을 합니다.\\ +
-\\ +
-☞ [[modularpi:pyhmiprogramming:uimain_code:|[main.py 전체 코드 보기]]]\\ +
-☞ [[modularpi:python:pyhmiprogramming:uimain_code:|[main.py 전체 코드 보기]]]\\+
  
-===1.main.py 코드 구조 === +==== 1) UI 위젯 객체 연결 (Front-end) ==== 
-HMI 프로그램의 기본 환경을 설정하며, 프로그램의 실행 경로를 기준으로 UI 파일(.ui)과 이미지 파일을 불러오고, PyQt UI 구성을 위한 클스(form_class)를 생성는 역할을 합니다.\\ 또한CFNET I/O 제어 이브러리를 사용할 수 있도록 준비합니다.+* **UI Form 구성**: Qt Designer에서 각종 위젯을 그 앤 드롭 방식으로 배치여 디자인합니다. 
 +* **객체 이름 정의**: 버튼(Button), 라벨(Label) 등 각 요소에 고유한 **Object Name**을 부여하여 Python 코드에서 호출할 수 있도록 합니다.
  
-{{ :modularpi:python:pyhmiprogramming:hmi_main_1.png?700 |}}+{{ :modularpi:python:pyhmiprogramming:widget_object.png?nolink |}}
  
-===2.메인 UI폼 클래스 구조 및 처리로직(MyWindow 클래스) === +==== 2) Python 프로그램 로직 (Back-end==== 
-**MyWindow** 클래스는 **QMainWindow**와 **form_class**를 상속하여 메인 화면을 구성합니다.\\ +**main.py**는 전체 시템의 컨러 역할을 수행합니다.
-이 클레에서 로직동작이 처리되며, 버튼 클릭 이벤, CFDI, DO 입출력 처리및 모니터링이 처리됩니다. 또한 변경된 UI이를 반영합니다. +
-  * .ui 파일에서 정의된 위젯 객체 이름(버튼, 램프(Label) 등)을 Python 코드에서 불와, 각 위젯에 해당 기능 로직을 연결하는 방식으로 프로그램이 구성됩니다. +
-  * 클래스 내부에서 버튼 클릭 이벤트 , CFDI 입력 모니터링, CFDO 출력 제어 로직이 CFNET 객체와 연동되어 실제 장비 제어가 수행됩니다.\\ +
-  * QTimer를 통해 읽어온 입력 상태에 따라 **램프 이미지를 갱신하는 등, 변경된 하드웨어 상태를 UI에 실시간으로 반영**하는 역할을 합니다.+
  
-{{ :modularpi:python:pyhmiprogramming:ui_class.png?700 |}}+* **실시간 모니터링**QTimer를 사용하여 **300ms 주기**로 CFDI 입력 값을 읽어 UI에 실시간 반영합니다. 
 +* **하드웨어 제어**사용자가 UI 버튼을 누르면 CFDO의 특정 포트로 ON/OFF 출력 신호를 전송합니다. 
 +* **클래스 구조****MyWindow** 클래스가 QMainWindow를 상속받아 버튼 클릭 이벤트, 입출력 모니터링, UI 갱신 로직을 통합 관리합니다.
  
-[[..:index|Python을 이용한 CFNET I/O 개발]]+{{ :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 개발 가이드로 돌아가기]]