Differences

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

Link to this comparison view

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