Duality 8 Cases — ds2 의 이중성 원리
DualSoft DS Language 의 8 가지 이중성 (Cases 1–8)
DS 시스템은 하나의 구성 요소가 맥락에 따라 역할과 의미가 달라지는 설계 구조를 채택한다. 구조적 이중성 (Cases 1–4) 과 실행적 이중성 (Cases 5–8) 두 축으로 분류되며, 모든 ds2 엔티티 (Work / Call / Arrow / Tag) 의 의미론적 기반이 된다. 본 페이지는 HelpDS/ds-language.html 의 정식 정의를 lifting 한 참조 문서이며, 각 Case 는 등장하는 ConceptDescription 으로 직접 링크된다.
이중성 분류 (요약)
🏗️ 구조적 이중성 (Cases 1–4)
| Case | 구성 요소 | 설명 | 예시 |
|---|
| 1 | System ⊕ Device | 호출 방향에 따라 능동/수동 | 컨베이어 ↔ 로봇 |
| 2 | Instance ⊕ Reference | 실행 실체와 참조 대상 구분 | 디지털 트윈 |
| 3 | 원인(Bit) ⊕ 결과(Bit) | 흐름 속에서 원인이자 결과 | 신호 체인 |
| 4 | ReadTag ⊕ WriteTag | 맥락에 따른 읽기/쓰기 해석 | 데이터 전송 |
⚡ 실행적 이중성 (Cases 5–8)
| Case | 구성 요소 | 설명 | 활용 |
|---|
| 5 | WorkBit = R⊕G⊕F⊕H | FSM 기반 상태 흐름 | 상태 머신 |
| 6 | φ(θ) 위상 표현 | 센서 조합 기반 위치 수치화 | 동기화 |
| 7 | Tag = Semantic ⊕ Binding | 의미 이름과 물리 주소 연결 | I/O 매핑 |
| 8 | Arrow = Start ⊕ Reset | 인과 신호 역할 분리 | 제어 흐름 |
상세 Cases
Case 1System ⊕ Device — 동적 역할 전환— System ⊕ Device — Dynamic Role Switching
DS 시스템은 호출 방향에 따라 'System(능동)' 또는 'Device(수동)' 역할을 동적으로 수행한다.
| 상황 1 | A.ApiCall → B.ApiDef | A=System, B=Device |
| 상황 2 | B.ApiCall → A.ApiDef | B=System, A=Device |
컨베이어(A) → 로봇팔(B) 제품 전달 요청 = A=System / B=Device.
로봇팔(B) → 컨베이어(A) 픽업완료 알림 = B=System / A=Device.
Case 2Instance ⊕ Reference — 디지털 트윈 구조— Instance ⊕ Reference — Digital Twin Structure
Instance 는 new 로 생성된 실 시스템, Reference 는 기존 시스템을 참조하는 읽기 전용 별칭.
| 정의 방식 | new 로 생성된 시스템 | 기존 시스템 참조 |
| 실행 가능성 | ✅ Active 설정 시 가능 | ❌ 항상 Passive (읽기 전용) |
| 값 변경 | ✅ 가능 | ❌ 불가능 |
동일 Cylinder 디바이스를 두 번 사용할 때:
- Cylinder1 = Instance (실체)
- Cylinder1_Mirror = Reference (Cylinder1.Id 참조)
→ Mirror 는 정의 변경 불가, 표시·시뮬에만 사용.
Case 3Arrow 인과 연결과 Bit 이중성— Causal Arrows ⊕ Bit Duality
흐름의 최소 단위는 Bit. Bit 는 Arrow 인과 연결 속에서 원인이자 결과의 이중성을 가진다.
| Work(Bit) | 시스템 루트의 Bit 그룹 | 외부 ApiDef 에 의해 트리거 |
| Call(Bit) | Work 내부 Bit 그룹 | ApiCall 포함 |
ApiDef → Work → Call → ApiCall → ApiDef → … (cyclic causal chain)
Case 4Tag = Write ⊕ Read — 데이터 전달— Tag = Write ⊕ Read — Data Transfer
Tag 는 시스템 간 1:1 Pair 연결. Write 측·Read 측이 짝을 이뤄 물리 전송을 표현.
| 기본 구조 | Active → Write Tag → [bus] → Read Tag → Passive | Pair 1:1 |
| Shared Memory | 공유 변수처럼 다수 접근 | 허용 |
| DB 매핑 | 간접 경로로 다수 접근 | 허용 |
Active System → Write Tag M_Trigger(M001) → [PLC bus] → Read Tag M_Trigger(M001) → Passive Cylinder.
→ Cylinder 측은 Read 만 가능 (1:1 페어).
Case 5WorkBit = R ⊕ G ⊕ F ⊕ H — FSM 상태— WorkBit = R ⊕ G ⊕ F ⊕ H — FSM States
Work 의 4개 상태 — 단일 비트(WorkBit) 와 외부 신호 조건에 따라 전이.
| Ready (R) | Homing 완료 → 진입 | Start 신호 → 종료 | 외부 제어 |
| Going (G) | Start 신호 → 진입 | 내부 작업 완료 → 종료 | 내부 제어 |
| Finish (F) | Going 완료 → 진입 | Reset 신호 → 종료 | 외부 제어 |
| Homing (H) | Reset 신호 → 진입 | 초기화 완료 → 종료 | 내부 제어 |
Ready → [Start↑] → Going → [완료] → Finish → [Reset] → Homing → [초기화 완료] → Ready …
Case 6φ(θ) = Phase ⊕ State Inference— φ(θ) = Phase ⊕ State Inference
Work 의 센서·상태 조건을 위상값 φ(θ) 로 수치화. Binary / Exponential 두 인코딩.
| Binary | φ(θ) = (1/2ⁿ) × Σ(2^(i-1) × Vᵢ × Cᵢ,θ) × 2π | 센서 i 별 비트 가중치 |
| Exponential | φ(θ) = (1/eⁿ) × Σ(e^(i-1) × Vᵢ × Cᵢ,θ) × 2π | 고지수 센서에 더 큰 가중 |
디지털 트윈 동기화: 실설비 φ vs 가상설비 φ 비교 → 차이가 임계 초과 시 desync 알람.
알람 탐지: φ 의 급변 또는 역진행 발생 시 이상 징후 분류.
Case 7Tag = SemanticLink ⊕ PhysicalBinding— Tag = SemanticLink ⊕ PhysicalBinding
Tag 는 의미론적 연결과 물리적 바인딩의 이중 역할.
| SemanticLink | 동작의 의미 이름 | StartCommand, RobotArmReady |
| PhysicalBinding | 실제 하드웨어 주소 | X100, Y102, DB100.DBX0.2, %IX0.0 |
{ "tagName": "StartSignal", "semantic": "Start", "binding": "X100", "type": "Digital" }
Case 8Arrow = Start ⊕ Reset — 인과 신호— Arrow = Start ⊕ Reset — Causal Signals
Arrow 는 Start (라이징 엣지) 와 Reset (하이 레벨) 두 의미를 동시에 가진다.
| Start | 라이징 엣지 | 이전 Work 의 Finish | 다음 Work 트리거 |
| Reset | 하이 레벨 | 현재 Work 의 Going | 현재 Work 초기화 |
| t0 | t1 | t2 | t3 | t4 | t5 | t6 |
|---|
| Work A | R | G | G | F | F | F | F |
| Work B | R | R | R | G | G | F | H |
| Start | 0 | 0 | 0 | 1↑ | 0 | 0 | 0 |
| Reset | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
컨베이어 완료 (Finish↑) ⟹ 로봇팔 시작 (Start 신호)
로봇팔 실행 (Going■) ⟹ 초기화 조건 활성 (Reset 신호)