Search

시나리오 기반 제어 프로젝트 - SCC 파생 프로젝트

1. 프로젝트 개요

프로젝트 명:
시나리오 기반 제어 시스템 - SCC 파생 프로젝트
프로젝트 목적:
시나리오 기반의 제어 시스템
작은 코드 조각들을 조합하여 복잡한 시스템을 구현하는 구조에 대한 샘플 구조
주요 목표:
중앙 상태 저장소 기반의 시나리오 관리
모든 코드 조각이 중앙 상태 저장소에 접근하여 상태를 확인하고, 변경하며, 제어하는 구조
개발 및 운영 환경의 통합
개발자가 Theia IDE를 사용하여 즉각적인 테스트 및 운영 환경 반영 가능.

2. 시스템 개념 및 아키텍처

2.1 시나리오 기반 제어

코드 조각들이 이벤트 및 상태를 모니터링하고, 필요 시 중앙 저장소를 통해 동작 수행.
예시 시나리오 구성:
코드 조각 0 : 온도 수집
코드 조각 1: "온도 100도가 되면 난로를 꺼라"
코드 조각 2: "온도 0도가 되면 난로를 켜라"
확장 가능 예시:
특정 무게가 확인되고 사라지면 물품이 추가된 것으로 기록.

3. 아키텍처 설계

3.1 주요 구성 요소

구성 요소
설명
Theia IDE
개발자가 웹에서 코드 작성 및 테스트 가능
중앙 상태 저장소
중앙 데이터 기반 상태 관리
시나리오 확인 및 조회, 제어
Python 기반 코드 조각을 통한 작업 처리 - 데이터 확인 - 데이터 가공 - 제어 명령

3.2 시스템 흐름

1.
시나리오 작성 및 테스트
개발자는 Theia IDE에서 시나리오 작성.
2.
시나리오 실행 및 상태 모니터링
시나리오 실행기가 이벤트 감지 및 실행.
중앙 상태 저장소에 데이터 기록 및 변경.
3.
실시간 대시보드 모니터링
웹 대시보드를 통해 상태 모니터링 및 제어.
REST API를 통한 외부 서비스 연동.

4. 시나리오 실행 예시

코드 조각 예시: 온도 제어 시나리오
from prefect import task, flow import time sample_dataspace = { "stove": False, "temperature": 0 } # temp simulation @task def sample_simulation_stove(): global sample_dataspace if sample_dataspace["stove"]: sample_dataspace["temperature"] += 1 else: sample_dataspace["temperature"] -= 1 print("temperature") print(sample_dataspace["temperature"]) # check @task def check_temperature(): global sample_dataspace return sample_dataspace["temperature"] # control @task def control_heater(temp): global sample_dataspace if temp > 100: print("stove off") sample_dataspace["stove"] = False elif temp < 0: print("stove on") sample_dataspace["stove"] = True @flow def temperature_control_flow(): while True: temp = check_temperature() control_heater(temp) # temp code sample_simulation_stove() time.sleep(1) if __name__ == "__main__": temperature_control_flow()
Python
복사
실행 및 배포
python3 temperature_control.py prefect deploy --name temp-control --pool scc-process-pool
Shell
복사

5. 기대 효과

1.
개발 및 운영의 효율성 증가
개발자가 직접 코드를 기반으로 운영 가능.
빠른 기능 추가 및 변경 용이.
2.
시스템의 확장성 및 유지보수 용이성 확보
모듈화된 코드 조각으로 기능 확장 가능.
상태 저장소 기반의 일관된 관리 가능.
3.
실시간 대응 및 자동화된 관리 체계 구축
시나리오 기반의 자동화된 제어 및 실행.
장애 발생 시 즉각적인 복구 및 대응.

6. 시나리오 실행 예시

코드 조각 예시: 개수 측정 시나리오
from prefect import task, flow import time import random sample_dataspace = { "status": False, "count": 0 } # check @task def check_weight(): return random.choice([0, 100]) @flow def count_flow(): global sample_dataspace while True: weight = check_weight() if weight >= 100: sample_dataspace["status"] = True elif weight <= 0: if sample_dataspace["status"]: sample_dataspace["count"] += 1 sample_dataspace["status"] = False time.sleep(1) if __name__ == "__main__": count_flow()
Python
복사