볼 부상 높이 제어 시뮬레이션 및 PLC 프로젝트
  • Python 86%
  • Smalltalk 10.1%
  • Dockerfile 3.9%
Find a file
Xehoon Han 030b21003e Docker 로그 로테이션 설정 추가
50ms 주기 로그로 인한 디스크 점유 방지 (10MB x 3파일, 최대 30MB)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 16:35:11 +09:00
openplc PID 튜닝 개선: 뱅뱅 진동 해소 및 안정 수렴 달성 2026-03-09 16:01:34 +09:00
simulator iec_lib_fmod 심볼 해결 및 전체 파이프라인 동작 완성 2026-03-09 14:40:04 +09:00
CONTROL-LOOP.md 시퀀스 다이어그램을 별도 문서로 분리 2026-03-09 16:32:05 +09:00
docker-compose.yml Docker 로그 로테이션 설정 추가 2026-03-09 16:35:11 +09:00
DOCKER-FLOW.md 시퀀스 다이어그램을 별도 문서로 분리 2026-03-09 16:32:05 +09:00
PLANNING.md iec_lib_fmod 심볼 해결 및 전체 파이프라인 동작 완성 2026-03-09 14:40:04 +09:00
README.md 시퀀스 다이어그램을 별도 문서로 분리 2026-03-09 16:32:05 +09:00

볼 부상 높이 제어 시뮬레이션

볼 부상 높이 제어 실습의 물리 하드웨어(IR 센서, DC 팬, 튜브)를 소프트웨어 시뮬레이터로 대체하고, OpenPLC Runtime과 연동하여 PID 제어가 동작하는 환경을 Docker Compose로 제공한다.

프로젝트 목적

  • PLC로부터 산업용 프로토콜을 통해 데이터를 수집하고 제어하는 실습 환경 제공
  • docker compose up 한 줄로 PID 제어가 동작하는 가상 PLC 환경을 즉시 구동
  • 3개 산업용 프로토콜(Modbus TCP, DNP3, EtherNet/IP) 포트를 외부에 노출하여, 데이터 수집 및 제어 실습에 활용

실행 방법

docker compose up --build -d

시뮬레이터가 자동으로 OpenPLC REST API를 통해 PID 프로그램을 업로드/컴파일/실행한다. 수동 작업 불필요.

시뮬레이터 로그 확인:

docker logs -f ball-simulator

PLC 접속 정보

OpenPLC가 노출하는 프로토콜 포트 정보이다. 외부 클라이언트에서 이 포트에 접속하여 PLC 데이터를 읽거나 제어값을 쓸 수 있다.

프로토콜 포트 용도
Modbus TCP localhost:502 레지스터 읽기/쓰기
DNP3 localhost:20000 데이터 포인트 읽기/쓰기
EtherNet/IP localhost:44818 태그 읽기/쓰기
OpenPLC REST API https://localhost:8443 PLC 관리 (헤드리스, 웹 UI 없음)

Modbus 레지스터 맵 (외부 클라이언트용)

외부 데이터 수집/제어 프로그램은 아래 Holding Register 영역(%QW10~15)을 사용한다. 시뮬레이터가 사용하는 내부 영역(%QW0~1)과 분리되어 있으며, PLC가 매 스캔 사이클마다 자동 복제한다.

Holding Register 주소 PLC 변수 항목 읽기/쓰기 설명
10 %QW10 센서값 (PV) 읽기 공의 현재 높이 (0~1000)
11 %QW11 팬 출력 (MV) 읽기 PID 제어 출력 (0~1000)
12 %QW12 목표 높이 (SP) 읽기/쓰기 PID 제어 목표값 변경
13 %QW13 KP (x10) 읽기/쓰기 비례 게인 (예: 20 = 2.0)
14 %QW14 KI (x10) 읽기/쓰기 적분 게인 (예: 5 = 0.5)
15 %QW15 KD (x10) 읽기/쓰기 미분 게인 (예: 10 = 1.0)

프로젝트 구조

ball-levitation-sim/
├── docker-compose.yml          # 컨테이너 오케스트레이션
├── README.md
├── PLANNING.md                 # 상세 기획 문서
├── openplc/
│   └── pid_control.st          # PID 제어 ST 프로그램
└── simulator/
    ├── Dockerfile
    ├── requirements.txt        # pymodbus
    └── simulator.py            # 물리 모델 + Modbus 통신

관련 문서

  • PLANNING.md - 시스템 아키텍처, 구현 범위, 핵심 이슈 등 상세 기획
  • DOCKER-FLOW.md - Docker Compose 실행 흐름 시퀀스 다이어그램
  • CONTROL-LOOP.md - 제어 루프 시퀀스 다이어그램 (초기화 + 50ms 주기)