ActionType 4종 (v16)
출력(OutTag)의 인터페이스 — 디바이스를 자극하는 방식. ApiDef 의 출력 축.
v16 사양 (최신):
이전 v3 의 5종 (Normal · Push · Pulse · TimeTotal(ms) · TimeAppend(ms)) 은 4종 (Normal · Pulse · Latch · Virtual) 으로 재정의되었습니다.
Normal / Pulse 는 timeMs: 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 솔레노이드 유지, 압입 후 추가 가압.
도어 닫힘 +500ms 솔레노이드 유지, 압입 후 추가 가압.
// Cyl1.Adv — 표준 패턴 (S01 Cylinder)
{ ActionType = Action.Normal None
SensingType = Sensing.Normal None }
// Door.Close — 후행연장 (닫힘 후 +500ms)
{ ActionType = Action.Normal(Some 500)
SensingType = Sensing.Normal None }
② Pulse
Pulse of timeMs: int option
1 shot 트리거 출력. 외부 시스템(비전·로봇·AGV)에 명령 신호를 보내고, 완료는 SensingType 이 결정.
Pulse(None) — 1 scan
1 PLC 스캔 동안 ON 후 즉시 OFF.
인덱서 step, 이동 명령 트리거.
인덱서 step, 이동 명령 트리거.
Pulse(Some T) — T ms
T ms 동안 ON 후 OFF.
진공흡착 1s, 블로우 300ms, 펀칭.
진공흡착 1s, 블로우 300ms, 펀칭.
// 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 =
Ret =
Adv =
Action.Latch × Sensing.Normal(None) — 전진 출력 SET, 리미트 감지 완료Ret =
Action.Virtual × Sensing.Virtual(T) — 출력 없음(스프링 복귀), T ms 후 완료
// SingleActing Cylinder — S01-A 단동실린더
// Adv: SET 출력 + 리미트 센서
{ ActionType = Action.Latch
SensingType = Sensing.Normal None }
// Ret: 출력 없음 (스프링 복귀) + 시간 완료
{ ActionType = Action.Virtual
SensingType = Sensing.Virtual 800 }
④ Virtual
Virtual (매개변수 없음)
출력 없음. Latch ApiDef 의 상대 RESET 동작에 사용하거나, 딜레이/분기 등 가상 노드 패턴에 사용. 항상 Sensing.Virtual(T) 와 쌍을 이룸.
가상 노드 패턴 (S21) — ActionType·Virtual + SensingType·Virtual(T)
OutTag 없음 · InTag 없음 · T ms 후 자동 완료
딜레이, 동기 대기, 분기 전 준비 시간에 활용
OutTag 없음 · InTag 없음 · T ms 후 자동 완료
딜레이, 동기 대기, 분기 전 준비 시간에 활용
// Delay Node — 가상 노드 (T=500ms)
{ ActionType = Action.Virtual
SensingType = Sensing.Virtual 500 }
// OutTag 없음, InTag 없음 — 500ms 후 완료
적용 — 단동실린더 Ret · 가상 딜레이 노드