# v0.1.260 — QA-038 ServoAxisActuator.CoilEnable 신설

- 버전: v0.1.260
- 분류: 48th stable seal (v0.1.366) 일괄 봉인 사이클
- 다운로드: [factory00-windows-x64-v0.1.260.zip](../../downloads/archive/factory00-windows-x64-v0.1.260.zip) (archive 보존)
- 캡처: [qa-screenshots/v0.1.260/](../../qa-screenshots/v0.1.260/)

---

## 협업자 PM 회신
QA-038 [P1] — Signal Simulator 서보축 제어 항목에 Enable 누락. spec: Enable / MoveForward / MoveBackward / TargetPosition.
## 설계

### 데이터 (ServoAxisActuator.cs)
`csharp// ── Modbus 매핑 (직렬화) ──
public int CoilEnable = 0;   // 신규 (default 0 — 미할당)
// ── 런타임 (직렬화 제외) ──
[System.NonSerialized] public bool Enabled = true;   // default true (CoilEnable=0 시 영원히 true — 기존 호환)
`.twn 직렬화 영향: JsonUtility는 신규 필드를 default 0으로 자동 채움 -> migration 불필요. 기존 .twn 파일 로드 시 CoilEnable=0 (미할당) 상태로 호환.

### ActuatorPlcBridge.cs
`csharpif (a.CoilEnable > 0)
{
    bool nowEnable = _modbus.ReadBit($"COIL:{a.CoilEnable}");
    bool prevEnable = _lastEnable[ek];
    if (prevEnable && !nowEnable) a.CommandStop();   // falling edge -> 강제 정지
    a.Enabled = nowEnable;
    _lastEnable[ek] = nowEnable;
}
// Enabled 가드 — Disabled 시 Forward/Backward/Stop/Home Coil polling skip
if (a.Enabled)
{
    PollCoilEdge(a.ActuatorId, a.CoilForward, ...);
    ...
}
`- CoilEnable=0 미할당 시 항상 활성 (기존 동작)- Level 추적 (rising/falling 모두)- Falling edge (Enable OFF) -> 즉시 CommandStop- Disabled 시 Command Coil polling 자체 차단 (이중 가드)
### Inspector (Factory00Bootstrap.cs)
RenderServoAxisCard Coil 행 4개 -> 5개:`SensorFloatField(card, "Coil Enable", a.CoilEnable, ...);
SensorFloatField(card, "Coil Fwd",    a.CoilForward, ...);
...
`
### Signal Simulator (SignalSimulatorPanel.cs)
BuildServoControls:`csharpAddCoilToggleRow(parent, "Enable", a.CoilEnable);
AddCoilToggleRow(parent, "MoveForward", a.CoilForward);
...
`
## .twn 호환성 검증
| 케이스 | 동작 |
|---|---|
| v0.1.259 이전 .twn 로드 | CoilEnable=0 (default) -> Enabled=true -> 기존 동작 |
| v0.1.260 신규 저장 | CoilEnable 필드 추가 직렬화 |
| v0.1.259로 다운그레이드 후 로드 | CoilEnable 필드 무시 -> 기존 호환 |
JsonUtility 동작: 미지정 필드 default 0, 누락 시 ignore. 양방향 호환.

## 변경 파일
- Assets/Scripts/Actuators/ServoAxisActuator.cs (+8라인) — CoilEnable / Enabled 필드- Assets/Scripts/Plc/ActuatorPlcBridge.cs (+18라인) — _lastEnable + CoilEnable 처리- Assets/Scripts/Game/Factory00Bootstrap.cs (+1라인) — Inspector "Coil Enable" 행- Assets/Scripts/Communication/Modbus/SignalSimulatorPanel.cs (+1라인) — Signal Simulator "Enable" 토글- ProjectSettings/ProjectSettings.asset — bundleVersion 0.1.259 -> 0.1.260
## 검증 시나리오
1. ServoAxis 부착 -> Inspector 5개 코일 + 1 Register 표시 (Coil Enable 신규)
2. Signal Simulator 제어 팝업 -> Enable 토글 표시
3. CoilEnable=0 (default) -> Enable 토글 비활성 (행 자체 숨김 — coilAddr4. Inspector에서 CoilEnable=100 입력 -> Enable 토글 표시
5. PLC Enable OFF -> falling edge -> actuator 즉시 정지 + Command Coil polling 차단
6. PLC Enable ON -> Command Coil 정상 동작

## 다음 사이클
- v0.1.261 — Signal Simulator 코일 현재값 SSOT (ModbusDataModel polling)- v0.1.262 — 40th stable seal 검토 (v0.1.258~261)- v0.1.263 — QA-014 (PM 회신 받으면)협업자 git origin/main = local. QA-014 PM 회신 계속 대기.


---

## 봉인 참조

본 사이클은 **48th stable seal (v0.1.366, 2026-05-24)** 일괄 봉인에 포함됨.

- journal: [2026-05-24-v0.1.298-366-48th-stable-seal.md](../../journal/2026-05-24-v0.1.298-366-48th-stable-seal.md)
- alias zip: [factory00-windows-x64-v0.1.366-stable.zip](../../downloads/factory00-windows-x64-v0.1.366-stable.zip) (170 MB)
