순차 기능 차트 (SFC)

순차 기능 차트란

**순차 기능 차트(Sequential Function Chart, SFC)**는 주기적 PLC 프로그램의 상태 머신 뷰입니다. 현재 어떤 단계가 실행 중인지, 그리고 어떤 조건이 다음 단계로의 전환을 유발하는지를 표현합니다. SFC는 **IEC 61131-3:2013 §6.5**에서 정의된 다섯 번째 언어이며, IEC 60848 GRAFCET의 엔지니어링 하위 집합입니다. **ladder**와 **fbd**가 스캔 단위의 조합 논리를 기술한다면, SFC는 그 위에서 동작하는 시간적 순서를 기술합니다. 어떤 스텝이 활성화되어 있는지, 언제 다음으로 넘어가는지, 어떤 동작이 병렬로 실행되는지를 표현합니다.

실제 생산 코드에서 SFC로 작성되는 네트워크 비율은 약 10%이지만, 비순차적이지 않은 시퀀셜 머신이라면 거의 100%가 SFC 차트를 한 장 이상 포함합니다. 배치 반응기, 로봇 셀, 포장 라인, 조립 스테이션 등이 대표적입니다. 지금까지 오픈 소스 SFC DSL은 마땅한 것이 없었으며, Studio 5000, TIA Portal, CODESYS 같은 벤더 IDE만이 유일한 선택지였습니다. Schematex는 AI 생성을 위해 설계된 IEC 61131-3 SFC 하위 집합을 제공합니다.

state(반응형 UI 및 생명 주기 FSM을 위한 UML 상태 차트)와의 차이점: SFC는 순환 스캔 시맨틱, 이중 테두리 초기 스텝, 액션 블록 한정자(N/S/R/L/D/P), 그리고 바(bar) 기반 분기(단일 바 = OR, 이중 바 = AND)를 사용합니다.

sfc·§
↘ preview
100%
SFC: Bottle Filling SFC with 3 step(s), 2 transition(s). Bottle Filling T0 StartBtn T1 TankLevel >= 80.0 S0 Filling Done N FillValve_Closed N FillValve_Open N Confirm_Done DoneBtn → S0
UTF-8 · LF · 19 lines · 328 chars✓ parsed·9.5 ms·5.0 KB SVG

1. 첫 번째 차트

두 개의 스텝, 하나의 트랜지션, 그리고 초기 마커:

sfc
step S0 [initial]
step S1
transition from: S0 to: S1: Trigger

S0이중 테두리 사각형(IEC 초기 스텝 표기 방식)으로, S1은 단일 테두리 사각형으로 렌더링됩니다. 두 스텝 사이에는 수평 트랜지션 바가 있으며, 조건 텍스트 Trigger가 오른쪽에 표시됩니다.

[initial]을 지정하지 않으면 첫 번째로 선언된 스텝이 자동으로 초기 스텝으로 승격됩니다.


2. 스텝

step S_Filling [label: "Filling tank"]
  N FillValve_Open
  D Mixer_Run T#30s
  P StartChime

스텝은 다음으로 구성됩니다.

  • id (차트 내 고유값) — 트랜지션 및 점프에서 사용됩니다.
  • 선택적 [label: "..."] — 표시명.
  • 선택적 [initial](하나만 허용) 또는 [final](벤더의 정지 스텝, 삼중 테두리).
  • 한 수준 들여쓴 액션 블록 0개 이상, 각각 한정자 문자를 가집니다.

3. 트랜지션

트랜지션은 불리언 조건과 함께 두 스텝 간의 방향성 있는 연결을 선언합니다.

transition from: S0 to: S1: StartBtn
transition from: S1 to: S2: TankLevel >= 80.0 AND NOT EmergencyStop
transition T_Reset from: S5 to: S0: ResetBtn

조건 텍스트는 불투명합니다. Schematex는 이를 그대로 저장하고 바 옆에 렌더링합니다. 모든 트랜지션은 비어 있지 않은 조건을 가져야 합니다. 무조건부 연결에는 TRUE를 사용하십시오.

fromto가 본문에서 선형으로 인접한 트랜지션은 스텝들 사이에 인라인 바로 렌더링됩니다. 선형으로 인접하지 않은 쌍(예: 이전 스텝으로의 점프)은 차트의 좌측 또는 우측에 마진 화살표로 렌더링됩니다.


4. 액션 한정자

액션은 스텝의 오른쪽에 부착되며, 한정자 문자에 따라 실행됩니다.

한정자동작
N스텝이 활성인 동안 실행 (가장 일반적)
S저장(Stored) — 진입 시 true로 설정되고, 대응하는 R이 나올 때까지 유지
R리셋(Reset) — 이전에 저장된 액션을 초기화
L시간 제한(Time-Limited) — 스텝 진입 후 T 시간까지만 활성
D시간 지연(Time-Delayed) — 진입 후 T 시간이 지나서 활성화
P펄스(Pulse) — PLC 스캔 한 번 동안만 true
P0비활성화 시 펄스 (Siemens)
P1P의 동의어 (Siemens)
SD저장 및 지연
DS지연 및 저장
SL저장 및 시간 제한

시간 매개변수화된 한정자(L, D, SD, DS, SL)는 지속 시간 리터럴을 사용합니다.

step S1
  L LimitedRun T#5s
  D DelayedRun T#2s

5. 대안 분기 (단일 바 — OR)

스캔당 하나의 분기만 실행되며, 트랜지션 조건에 의해 선택됩니다.

step S0 [initial]
step S_Pick

alt from: S_Pick:
  branch [priority: 1]:
    transition: IsExpressShipping
    step S_Express
      N PrepExpressBox
    transition: TRUE
  branch [priority: 2]:
    transition: IsStandardShipping
    step S_Standard
      N PrepStandardBox
    transition: TRUE
merge_to: S_Ship

step S_Ship

transition from: S0 to: S_Pick: ProductOrdered
transition from: S_Ship to: S0: Shipped

분기 위아래의 단일 수평 선이 각각 발산 바(divergence bar)와 수렴 바(convergence bar)입니다. 각 분기는 진입 트랜지션(발산 바와 첫 번째 스텝 사이)으로 시작하고 종료 트랜지션(마지막 스텝과 수렴 바 사이)으로 끝납니다.


6. 동시 분기 (이중 바 — AND)

모든 분기가 동시에 실행되며, 모든 분기가 완료될 때까지 차트는 수렴 지점에서 대기합니다.

sim from: S_Heat: TRUE
  branch:
    step S_Bake
      D Oven_Run T#15m
  branch:
    step S_Cool
      L Cooler_On T#5m
merge_to: S_Done: Bake_Done AND Cool_Done

분기 위아래의 두 개의 수평 평행선(간격 4px)이 동시 바입니다. 상단의 공유 트랜지션(여기서는 TRUE)이 발산을 유발하고, 하단의 공유 트랜지션(Bake_Done AND Cool_Done)이 수렴 발생 전에 확인됩니다.


7. 점프 (루프)

대상이 이전 스텝인 트랜지션은 마진 화살표로 렌더링됩니다.

step S0 [initial]
step S1
step S2
transition from: S0 to: S1: A
transition from: S1 to: S2: B
transition T_Reset from: S2 to: S0: ResetBtn
transition from: S2 to: S1: NOT ResetBtn

전방 S2 → S1(역방향 엣지)은 우측 마진 화살표로, T_ResetS0으로의 점프는 좌측으로 표시됩니다. 각 마진 화살표에는 대상 id와 조건이 표시됩니다.


8. 변수

ladderfbd에서 재사용됩니다.

var StartBtn: bool
var TankLevel: real
var BakeReady: bool
var Counter: counter
var T1: timer

조건 및 액션에서 선언된 변수는 유효성 검사가 이루어지지 않습니다. Schematex는 조건/액션 본문 텍스트를 불투명한 문자열로 처리하며, 이는 state가 가드 및 액션을 처리하는 방식과 동일합니다.


9. v0.1 제한 사항

  • 중첩 분기(alt-in-sim, sim-in-alt)는 파싱되지만, 레이아웃 축소 휴리스틱이 기본적이므로 깊은 중첩은 겹칠 수 있습니다.
  • S/R 액션 쌍의 점선 연결자(S 액션과 다른 곳의 대응하는 R을 시각적으로 연결)는 지연되었습니다.
  • 활성 스텝 런타임 표시기(현재 활성 스텝의 노란색 채우기)는 지연되었습니다. PLC 런타임 상태를 표면화하는 디버깅 통합에 유용합니다.
  • GRAFCET 강제 명령(IEC 60848 전용 기능으로 범위 외).
  • 최종 스텝[final]로 파싱되지만 초기 스텝과 동일한 이중 테두리로 렌더링됩니다. IEC 삼중 테두리 표기 방식은 지연되었습니다.

관련 예제

예제 갤러리의 바로 사용 가능한 시나리오:

sfc·§ IEC 61131-3:2013 §6.5
SFC: Bottle Filling SFC with 3 step(s), 2 transition(s). Bottle Filling T0 StartBtn T1 TankLevel >= 80.0 S0 Filling Done N FillValve_Closed N FillValve_Open N Confirm_Done DoneBtn → S0
Bottle filling sequence (SFC)
Three-step sequential function chart for a bottle-filling station — idle with valve closed, fill while tank level rises, signal done. Exercises the IEC 61131-3 §6.5 initial-step double border, N-qualified actions, and condition expressions on transitions.
manufacturing
sfc·§ IEC 61131-3:2013 §6.5
SFC: Bake and cool concurrently SFC with 5 step(s), 3 transition(s). Bake and cool concurrently TRUE Bake_Done AND Cool_Done T0 BakeReady S0 S_Heat S_Bake S_Cool S_Done N Heater_On D Oven_Run T#15m L Cooler_On T#5m N AnnounceDone NOT BakeReady → S0
Bake & cool concurrent batch (SFC)
Simultaneous-branch SFC of a batch oven that bakes (15-minute D-qualified action) and cools the chamber jacket (5-minute L-qualified action) concurrently after a heat-up phase. Both branches must complete before the converge bar fires. Exercises the IEC 61131-3 §6.5.4 double-bar simultaneous divergence and time-parameterized action qualifiers.
chemical-processing
sfc·§ IEC 61131-3:2013 §6.5
SFC: Order routing SFC with 5 step(s), 5 transition(s). Order routing IsExpressShipping TRUE IsStandardShipping TRUE T0 ProductOrdered S0 S_Pick S_Express S_Standard S_Ship N PickFromBin N PrepExpressBox N PrepStandardBox N CarrierPickup Shipped → S0
Order routing — express vs standard shipping (SFC)
Alternative-branch SFC of an order-fulfillment routing decision. After picking the product, exactly one branch fires per scan based on the leftmost-true entry transition (priority 1 = express shipping first). Both branches converge to a common shipping step. Exercises the IEC 61131-3 §6.5.4 single-bar OR semantics, branch priority annotations, and per-branch entry/exit transitions.
logistics

Found this useful?

Schematex is free, fully open source, and zero-dependency. A star helps other developers discover it.