{"data":{"slug":"sequential-function-chart-programming","title":"Sequential Function Chart (SFC) Programming for Process Sequences","summary":"Sequential Function Chart (SFC) is the IEC 61131-3 programming language designed for state-based, sequential control.","category":{"slug":"automation-systems","name":"Automation Systems"},"url":"https://wiki.aspotomasyon.com/article/sequential-function-chart-programming","markdown_url":"https://wiki.aspotomasyon.com/article/sequential-function-chart-programming.md","api_url":"https://wiki.aspotomasyon.com/api/v1/articles/sequential-function-chart-programming","published":"2026-08-11T13:05:19+00:00","modified":"2026-09-13T11:07:23+00:00","reading_minutes":4,"word_count":858,"image":"https://wiki.aspotomasyon.com/assets/social/sequential-function-chart-programming-c62ac92e9f4c.png","html":"<p><strong>Sequential Function Chart (SFC)</strong> is the IEC 61131-3 programming language designed for state-based, sequential control. Where ladder logic excels at combinational and interlock logic, SFC structures a program as a sequence of <em>steps</em> and <em>transitions</em> — the same mental model an engineer uses when writing a process description: wait for a condition, then do the next action. SFC is the standard choice for batch processes, machine sequences, recipe-driven production, and any application with clearly defined phases.</p><figure class=\"article-figure\"><img src=\"https://wiki.aspotomasyon.com/assets/diagrams/automation-systems-context.svg\" width=\"1100\" height=\"460\" loading=\"lazy\" decoding=\"async\" alt=\"Conceptual control-system layers. Safety functions, communication paths, and redundancy must be designed for the application; the diagram is not a wiring or safety design.\"><figcaption>Conceptual control-system layers. Safety functions, communication paths, and redundancy must be designed for the application; the diagram is not a wiring or safety design. <a href=\"https://wiki.aspotomasyon.com/assets/diagrams/automation-systems-context.svg\" target=\"_blank\" rel=\"noopener\">View full size</a></figcaption></figure>\n\n<h2 id=\"the-sfc-model\">The SFC Model</h2>\n\n<p>An SFC program is built from four element types:</p>\n\n<ul>\n  <li><strong>Steps</strong> — each step represents a state of the process and contains one or more actions (open a valve, start a pump, heat a vessel). A step is either active or inactive.</li>\n  <li><strong>Transitions</strong> — conditions between steps; when the condition becomes true, the previous step deactivates and the next activates. Transitions must not have logic that can stay true indefinitely — they are evaluated once per scan and the progression must be deterministic.</li>\n  <li><strong>Action blocks</strong> — attach actions to steps with qualifiers such as <code translate=\"no\" class=\"notranslate\">N</code> (non-stored, active while the step is active), <code translate=\"no\" class=\"notranslate\">S</code>/<code translate=\"no\" class=\"notranslate\">R</code> (set/reset), <code translate=\"no\" class=\"notranslate\">P</code> (pulse on entry), <code translate=\"no\" class=\"notranslate\">L</code> (time-limited), and <code translate=\"no\" class=\"notranslate\">D</code> (time-delayed).</li>\n  <li><strong>Divergence and convergence</strong> — single-path branches and parallel (simultaneous) branches: parallel divergence splits the sequence into concurrent flows, which must all complete before parallel convergence re-joins them.</li>\n</ul>\n\n<p>Every SFC must be well-formed: exactly one initial step, no backward loops without a transition (jumps are used for explicit backward movement, e.g., a wash cycle loop), and transitions placed between every pair of connected steps.</p>\n\n<h2 id=\"when-to-choose-sfc\">When to Choose SFC</h2>\n\n<table>\n  <thead>\n    <tr><th>Application type</th><th>Why SFC fits</th></tr>\n  </thead>\n  <tbody>\n    <tr><td>Batch processes (ISA-88 style)</td><td>Phases, operations, and recipes map directly to SFC steps and transitions; state is explicit and auditable.</td></tr>\n    <tr><td>Machine sequences (indexing, transfer, clamping)</td><td>Clear step order with per-step interlocks; commissioning staff can follow the sequence visually.</td></tr>\n    <tr><td>Startup/shutdown sequences for plants</td><td>Complex multi-phase sequences with holds, aborts, and restarts are manageable as structured SFC networks.</td></tr>\n    <tr><td>Interlocked combinatorial logic</td><td>Not a good fit — use ladder or structured text for permissive/guard logic.</td></tr>\n  </tbody>\n</table>\n\n<p>Mixed projects are normal: an SFC supervises the sequence while ladder logic executes the interlocks and device-level controls in parallel tasks.</p>\n\n<h2 id=\"step-design-and-action-details\">Step Design and Action Details</h2>\n\n<p>Good SFC practice keeps actions at the device level (energize outputs, trigger a motor block) and puts the <em>logic</em> — timing, counting, alarm generation — in the action code. Each step should have a defined entry condition (its transition), a defined duration or completion condition, and a defined exit. For batch and recipe applications, associate each step with a phase name from the ISA-88 procedural model so operators see meaningful state names (FILL, HEAT, REACT, EMPTY) instead of step numbers.</p>\n\n<p>Critical design points:</p>\n\n<ul>\n  <li><strong>Hold states</strong> — every sequence needs a defined behavior when a device fails: the step stays active, the action blocks continue to hold outputs in a safe state, and an alarm directs the operator to recovery.</li>\n  <li><strong>Abort and restart paths</strong> — a dedicated transition condition (e.g., E-STOP or a maintenance mode) should jump to a safe step that de-energizes the process and offers a clean restart path.</li>\n  <li><strong>Timeouts on transitions</strong> — a transition waiting for a valve feedback that never arrives must time out into a fault state instead of stalling the sequence forever.</li>\n  <li><strong>Step timing and statistics</strong> — record step entry timestamps for batch reports and diagnostics; operators troubleshooting a stuck sequence need to see which step is active and since when.</li>\n</ul>\n\n<h2 id=\"debugging-sfc-programs\">Debugging SFC Programs</h2>\n\n<p>Modern PLC programming environments animate the SFC on screen: active steps are highlighted, and transitions show their evaluation state. This is one of SFC's greatest advantages — the runtime state of the whole sequence is visible at a glance. To use it effectively:</p>\n\n<ol>\n  <li>Monitor the active step and compare it with the process description.</li>\n  <li>Force only in simulation or with explicit authority; never force transitions on a live process without a procedure.</li>\n  <li>Use breakpoints in simulation mode to step through transition evaluation.</li>\n  <li>Check the step dwell time against the expected duration — a long dwell usually means a device feedback is missing.</li>\n</ol>\n\n<h2 id=\"summary\">Summary</h2>\n\n<p>SFC brings structure and visibility to sequential control. Model the process as steps and transitions, keep actions at device level, define hold/abort/timeout behavior for every state, and exploit the animated debug view during commissioning. Combined with interlock logic in ladder and calculations in structured text, SFC keeps complex sequences readable, maintainable, and safe.</p><section class=\"engineering-check\"><h2 id=\"apply-this-to-your-project\">Apply this to your project</h2><ul><li>Define the process states, timing requirements, and permitted behavior after a controller or communication failure.</li><li>List controller, I/O, network, software, and license dependencies before choosing an architecture.</li><li>Record acceptance results and prove that the delivered configuration can be restored from the handover package.</li></ul><p><a href=\"https://wiki.aspotomasyon.com/guides\">Follow an ASP project guide</a> to connect the fundamentals with implementation and acceptance.</p></section><figure class=\"article-figure\"><img src=\"https://wiki.aspotomasyon.com/assets/diagrams/automation-systems-review.svg\" width=\"1100\" height=\"460\" loading=\"lazy\" decoding=\"async\" alt=\"Engineering review sequence: Requirements → Engineering → Acceptance → Handover. Keep the recorded evidence with the accepted configuration.\"><figcaption>Engineering review sequence: Requirements → Engineering → Acceptance → Handover. Keep the recorded evidence with the accepted configuration. <a href=\"https://wiki.aspotomasyon.com/assets/diagrams/automation-systems-review.svg\" target=\"_blank\" rel=\"noopener\">View full size</a></figcaption></figure><h2 id=\"primary-references-and-further-reading\">Primary references and further reading</h2><p>Use the original specifications and product documentation for implementation details. The examples in this guide are illustrative engineering scenarios, not published project results.</p><ul><li><a href=\"https://new.abb.com/control-systems/system-800xa\" rel=\"noopener noreferrer\" target=\"_blank\">ABB — System 800xA architecture and product documentation</a></li><li><a href=\"https://csrc.nist.gov/pubs/sp/800/82/r3/final\" rel=\"noopener noreferrer\" target=\"_blank\">NIST SP 800-82 Rev. 3 — OT architecture and security guidance</a></li></ul><!-- asp-editorial-202609 -->","markdown":"# Sequential Function Chart (SFC) Programming for Process Sequences\n\n> Sequential Function Chart (SFC) is the IEC 61131-3 programming language designed for state-based, sequential control.\n\n- Canonical URL: https://wiki.aspotomasyon.com/article/sequential-function-chart-programming\n- Publisher: ASP OTOMASYON A.Ş. (ASP OTOMASYON Wiki)\n- Category: Automation Systems\n- Published: 2026-08-11 · Updated: 2026-09-13\n- Reading time: 4 min · Language: English\n\n**Sequential Function Chart (SFC)** is the IEC 61131-3 programming language designed for state-based, sequential control. Where ladder logic excels at combinational and interlock logic, SFC structures a program as a sequence of *steps* and *transitions* — the same mental model an engineer uses when writing a process description: wait for a condition, then do the next action. SFC is the standard choice for batch processes, machine sequences, recipe-driven production, and any application with clearly defined phases.\n\n![Conceptual control-system layers. Safety functions, communication paths, and redundancy must be designed for the application; the diagram is not a wiring or safety design.](https://wiki.aspotomasyon.com/assets/diagrams/automation-systems-context.svg)\n\n*Conceptual control-system layers. Safety functions, communication paths, and redundancy must be designed for the application; the diagram is not a wiring or safety design.*\n\n## The SFC Model\n\nAn SFC program is built from four element types:\n\n- **Steps** — each step represents a state of the process and contains one or more actions (open a valve, start a pump, heat a vessel). A step is either active or inactive.\n- **Transitions** — conditions between steps; when the condition becomes true, the previous step deactivates and the next activates. Transitions must not have logic that can stay true indefinitely — they are evaluated once per scan and the progression must be deterministic.\n- **Action blocks** — attach actions to steps with qualifiers such as `N` (non-stored, active while the step is active), `S` / `R` (set/reset), `P` (pulse on entry), `L` (time-limited), and `D` (time-delayed).\n- **Divergence and convergence** — single-path branches and parallel (simultaneous) branches: parallel divergence splits the sequence into concurrent flows, which must all complete before parallel convergence re-joins them.\n\nEvery SFC must be well-formed: exactly one initial step, no backward loops without a transition (jumps are used for explicit backward movement, e.g., a wash cycle loop), and transitions placed between every pair of connected steps.\n\n## When to Choose SFC\n\n| Application type | Why SFC fits |\n| --- | --- |\n| Batch processes (ISA-88 style) | Phases, operations, and recipes map directly to SFC steps and transitions; state is explicit and auditable. |\n| Machine sequences (indexing, transfer, clamping) | Clear step order with per-step interlocks; commissioning staff can follow the sequence visually. |\n| Startup/shutdown sequences for plants | Complex multi-phase sequences with holds, aborts, and restarts are manageable as structured SFC networks. |\n| Interlocked combinatorial logic | Not a good fit — use ladder or structured text for permissive/guard logic. |\n\nMixed projects are normal: an SFC supervises the sequence while ladder logic executes the interlocks and device-level controls in parallel tasks.\n\n## Step Design and Action Details\n\nGood SFC practice keeps actions at the device level (energize outputs, trigger a motor block) and puts the *logic* — timing, counting, alarm generation — in the action code. Each step should have a defined entry condition (its transition), a defined duration or completion condition, and a defined exit. For batch and recipe applications, associate each step with a phase name from the ISA-88 procedural model so operators see meaningful state names (FILL, HEAT, REACT, EMPTY) instead of step numbers.\n\nCritical design points:\n\n- **Hold states** — every sequence needs a defined behavior when a device fails: the step stays active, the action blocks continue to hold outputs in a safe state, and an alarm directs the operator to recovery.\n- **Abort and restart paths** — a dedicated transition condition (e.g., E-STOP or a maintenance mode) should jump to a safe step that de-energizes the process and offers a clean restart path.\n- **Timeouts on transitions** — a transition waiting for a valve feedback that never arrives must time out into a fault state instead of stalling the sequence forever.\n- **Step timing and statistics** — record step entry timestamps for batch reports and diagnostics; operators troubleshooting a stuck sequence need to see which step is active and since when.\n\n## Debugging SFC Programs\n\nModern PLC programming environments animate the SFC on screen: active steps are highlighted, and transitions show their evaluation state. This is one of SFC's greatest advantages — the runtime state of the whole sequence is visible at a glance. To use it effectively:\n\n1. Monitor the active step and compare it with the process description.\n2. Force only in simulation or with explicit authority; never force transitions on a live process without a procedure.\n3. Use breakpoints in simulation mode to step through transition evaluation.\n4. Check the step dwell time against the expected duration — a long dwell usually means a device feedback is missing.\n\n## Summary\n\nSFC brings structure and visibility to sequential control. Model the process as steps and transitions, keep actions at device level, define hold/abort/timeout behavior for every state, and exploit the animated debug view during commissioning. Combined with interlock logic in ladder and calculations in structured text, SFC keeps complex sequences readable, maintainable, and safe.\n\n## Apply this to your project\n\n- Define the process states, timing requirements, and permitted behavior after a controller or communication failure.\n- List controller, I/O, network, software, and license dependencies before choosing an architecture.\n- Record acceptance results and prove that the delivered configuration can be restored from the handover package.\n\n[Follow an ASP project guide](https://wiki.aspotomasyon.com/guides) to connect the fundamentals with implementation and acceptance.\n\n![Engineering review sequence: Requirements → Engineering → Acceptance → Handover. Keep the recorded evidence with the accepted configuration.](https://wiki.aspotomasyon.com/assets/diagrams/automation-systems-review.svg)\n\n*Engineering review sequence: Requirements → Engineering → Acceptance → Handover. Keep the recorded evidence with the accepted configuration.*\n\n## Primary references and further reading\n\nUse the original specifications and product documentation for implementation details. The examples in this guide are illustrative engineering scenarios, not published project results.\n\n- [ABB — System 800xA architecture and product documentation](https://new.abb.com/control-systems/system-800xa)\n- [NIST SP 800-82 Rev. 3 — OT architecture and security guidance](https://csrc.nist.gov/pubs/sp/800/82/r3/final)\n\n---\n\nCite the canonical article: https://wiki.aspotomasyon.com/article/sequential-function-chart-programming (Sequential Function Chart (SFC) Programming for Process Sequences, ASP OTOMASYON, updated 2026-09-13).\n","headings":[{"id":"the-sfc-model","title":"The SFC Model"},{"id":"when-to-choose-sfc","title":"When to Choose SFC"},{"id":"step-design-and-action-details","title":"Step Design and Action Details"},{"id":"debugging-sfc-programs","title":"Debugging SFC Programs"},{"id":"summary","title":"Summary"},{"id":"apply-this-to-your-project","title":"Apply this to your project"},{"id":"primary-references-and-further-reading","title":"Primary references and further reading"}],"faq":[],"references":[{"name":"ABB — System 800xA architecture and product documentation","url":"https://new.abb.com/control-systems/system-800xa"},{"name":"NIST SP 800-82 Rev. 3 — OT architecture and security guidance","url":"https://csrc.nist.gov/pubs/sp/800/82/r3/final"}],"related":[{"slug":"packml-machine-state-model-omac","title":"PackML Machine State Model: Modes, States, and Tags","summary":"PackML gives packaging machines one unit mode model, one standard state model, and standard tags, so a line controller can command and read every machine the…","category":{"slug":"automation-systems","name":"Automation Systems"},"url":"https://wiki.aspotomasyon.com/article/packml-machine-state-model-omac","markdown_url":"https://wiki.aspotomasyon.com/article/packml-machine-state-model-omac.md","api_url":"https://wiki.aspotomasyon.com/api/v1/articles/packml-machine-state-model-omac","published":"2026-10-11T11:46:21+00:00","modified":"2026-10-11T11:46:21+00:00","reading_minutes":9,"word_count":1906,"image":"https://wiki.aspotomasyon.com/assets/social/packml-machine-state-model-omac-762e3ee18199.png"},{"slug":"iec-61131-3-plc-programming-languages","title":"IEC 61131-3: PLC Programming Languages","summary":"The IEC 61131-3 standard is the international benchmark for programmable logic controller (PLC) and distributed control system (DCS) programming.","category":{"slug":"automation-systems","name":"Automation Systems"},"url":"https://wiki.aspotomasyon.com/article/iec-61131-3-plc-programming-languages","markdown_url":"https://wiki.aspotomasyon.com/article/iec-61131-3-plc-programming-languages.md","api_url":"https://wiki.aspotomasyon.com/api/v1/articles/iec-61131-3-plc-programming-languages","published":"2026-07-21T14:45:28+00:00","modified":"2026-09-13T11:07:23+00:00","reading_minutes":5,"word_count":1025,"image":"https://wiki.aspotomasyon.com/assets/social/iec-61131-3-plc-programming-languages-25b7213c7dc3.png"},{"slug":"plc-programming-best-practices","title":"PLC Programming Best Practices","summary":"Writing reliable, maintainable PLC code is critical for industrial automation systems that must operate 24/7 in harsh environments.","category":{"slug":"automation-systems","name":"Automation Systems"},"url":"https://wiki.aspotomasyon.com/article/plc-programming-best-practices","markdown_url":"https://wiki.aspotomasyon.com/article/plc-programming-best-practices.md","api_url":"https://wiki.aspotomasyon.com/api/v1/articles/plc-programming-best-practices","published":"2026-05-12T12:47:31+00:00","modified":"2026-09-13T11:07:23+00:00","reading_minutes":5,"word_count":1097,"image":"https://wiki.aspotomasyon.com/assets/social/plc-programming-best-practices-d3e7ade0882c.png"},{"slug":"abb-ac500-plc-programming-configuration","title":"ABB AC500 PLC: Programming and Configuration","summary":"ABB''s AC500 programmable logic controller family is one of the most widely deployed PLC platforms in Europe and the Middle East, with a particularly strong…","category":{"slug":"automation-systems","name":"Automation Systems"},"url":"https://wiki.aspotomasyon.com/article/abb-ac500-plc-programming-configuration","markdown_url":"https://wiki.aspotomasyon.com/article/abb-ac500-plc-programming-configuration.md","api_url":"https://wiki.aspotomasyon.com/api/v1/articles/abb-ac500-plc-programming-configuration","published":"2026-05-13T12:05:55+00:00","modified":"2026-09-13T11:07:23+00:00","reading_minutes":9,"word_count":1942,"image":"https://wiki.aspotomasyon.com/assets/social/abb-ac500-plc-programming-configuration-a20a4b8f0d37.png"}],"citation":"ASP OTOMASYON. Sequential Function Chart (SFC) Programming for Process Sequences. Updated 2026-09-13. https://wiki.aspotomasyon.com/article/sequential-function-chart-programming"}}