← 개념 인덱스

ActionType 4종 (v16)

출력(OutTag)의 인터페이스 — 디바이스를 자극하는 방식. ApiDef 의 출력 축.

v16 사양 (최신): 이전 v3 의 5종 (Normal · Push · Pulse · TimeTotal(ms) · TimeAppend(ms)) 은 4종 (Normal · Pulse · Latch · Virtual) 으로 재정의되었습니다. Normal / PulsetimeMs: int option 으로 통합, Push → Latch, 새 Virtual 추가. 불법 조합은 설정 시 예외 (타입으로 차단).
F# 타입 정의 (Ds2.Core · Enum.fs)
[<RequireQualifiedAccess>]
type ActionType =
    | Normal of timeMs: int option   // None: 센서 완료까지 출력 유지 / Some T: 감지 후 T(ms) 연장 유지 → off
    | Pulse  of timeMs: int option   // None: 1 scan 펄스 / Some T: T(ms) 유지 후 off
    | Latch                          // SET — 같은 Device 의 다른 Api 호출 때까지 유지 (mutex)
    | Virtual                        // 출력 없음 (Latch 의 상대 해제 동작에 사용)

ApiDef 2축 직교 모델

Ds2 의 ApiDef 는 두 독립 축으로 정의됩니다. 이 페이지는 ActionType (출력 정책) 축입니다.

Axis 1 — 출력
ActionType (4종)
OutTag 가 어떻게 ON/OFF 되는가 — 이 페이지
Axis 2 — 완료
SensingType (3종)
완료를 어떻게 판정하는가 → 상세

⚠ Work.Duration (디바이스 내부 동작 시간) 은 v16 에서 ActionType / SensingType 과 별개의 독립 속성입니다.

① Normal

Normal of timeMs: int option

출력을 ON 한 뒤 SensingType 완료 판정 시 OFF. timeMs 로 완료 후 추가 연장 여부를 지정.

Normal(None) — 표준
센서 완료 즉시 OFF.
공압 실린더, 클램프, 컨베이어 등 대부분.
Normal(Some T) — 후행연장
완료 감지 후 T ms 더 유지 → OFF.
도어 닫힘 +500ms 솔레노이드 유지, 압입 후 추가 가압.
None 완료감지→OFF Some T 감지 +T ms
// Cyl1.Adv — 표준 패턴 (S01 Cylinder)
{ ActionType  = Action.Normal None
  SensingType = Sensing.Normal None }

// Door.Close — 후행연장 (닫힘 후 +500ms)
{ ActionType  = Action.Normal(Some 500)
  SensingType = Sensing.Normal None }
적용 — S01S03S04S06S16

② Pulse

Pulse of timeMs: int option

1 shot 트리거 출력. 외부 시스템(비전·로봇·AGV)에 명령 신호를 보내고, 완료는 SensingType 이 결정.

Pulse(None) — 1 scan
1 PLC 스캔 동안 ON 후 즉시 OFF.
인덱서 step, 이동 명령 트리거.
Pulse(Some T) — T ms
T ms 동안 ON 후 OFF.
진공흡착 1s, 블로우 300ms, 펀칭.
None 1 scan Some T T ms
// Indexer.Step — 1 scan 트리거 (S02)
{ ActionType  = Action.Pulse None
  SensingType = Sensing.Normal None }

// Vacuum.On — 1000ms 흡착 (S07)
{ ActionType  = Action.Pulse(Some 1000)
  SensingType = Sensing.Virtual 1000 }

③ Latch

Latch (매개변수 없음)

SET 출력 — 같은 Device 의 다른 ApiDef 가 호출될 때까지 출력 유지. 상대 ApiDef 가 Action.Virtual 로 RESET 역할을 담당. Mutex 해제 패턴.

대표 패턴: 단동(Single-Acting) 실린더
Adv = Action.Latch × Sensing.Normal(None) — 전진 출력 SET, 리미트 감지 완료
Ret = Action.Virtual × Sensing.Virtual(T) — 출력 없음(스프링 복귀), T ms 후 완료
Latch OUT 상대 ApiDef 호출 시 RESET SET RESET (Virtual)
// SingleActing Cylinder — S01-A 단동실린더
// Adv: SET 출력 + 리미트 센서
{ ActionType  = Action.Latch
  SensingType = Sensing.Normal None }
// Ret: 출력 없음 (스프링 복귀) + 시간 완료
{ ActionType  = Action.Virtual
  SensingType = Sensing.Virtual 800 }
적용 — S05S15 (HMI 모드 토글)

④ Virtual

Virtual (매개변수 없음)

출력 없음. Latch ApiDef 의 상대 RESET 동작에 사용하거나, 딜레이/분기 등 가상 노드 패턴에 사용. 항상 Sensing.Virtual(T) 와 쌍을 이룸.

가상 노드 패턴 (S21) — ActionType·Virtual + SensingType·Virtual(T)
OutTag 없음 · InTag 없음 · T ms 후 자동 완료
딜레이, 동기 대기, 분기 전 준비 시간에 활용
OUT (없음) 출력 없음 — Virtual(T) ms 후 완료 T ms → 완료
// Delay Node — 가상 노드 (T=500ms)
{ ActionType  = Action.Virtual
  SensingType = Sensing.Virtual 500 }
// OutTag 없음, InTag 없음 — 500ms 후 완료
적용 — 단동실린더 Ret · 가상 딜레이 노드

v3 → v16 ActionType 마이그레이션

v3 (구)v16 (신)비고
NormalNormal(None)센서 완료까지 출력 유지 (동일 의미)
TimeAppend(ms)Normal(Some T)완료 감지 후 T ms 추가 유지 — Normal 에 통합
PulsePulse(None)1 scan 펄스 (동일 의미)
TimeTotal(ms)Pulse(Some T)T ms 유지 펄스 — Pulse 에 통합
PushLatchSET 출력 (이름 변경)
Virtualv16 신규 — 출력 없음, Latch 상대 역할

SensingType 3종 →

완료 판정 정책 — ActionType 의 짝꿍.

SensingType (v16) 보기 →

유효 조합 매트릭스 →

ActionType × SensingType 유효 조합 + 8 대표 패턴.

매트릭스 보기 →