Sequential Function Chart (SFC) — это графический язык программирования, стандартизированный нормой IEC 61131-3, который служит для проектирования и визуализации последовательного управления технологиями и процессами в автоматизации.
SFC позволяет наглядно отразить поток исполнения программы, разбив его на отдельные этапы (шаги), снабжённые действиями, и соединить их переходами, которые определяются по заданным логическим условиям или таймерам. Каждый шаг представляет собой состояние системы, в котором выполняются конкретные действия, например, включение оборудования или обработка данных. Переходы между шагами осуществляются при выполнении заданных условий — например, достижение определённого значения датчика или истечение заданного времени.
Визуальное представление процесса с помощью SFC облегчает понимание логики работы программы и контроля состояния оборудования в каждый момент времени. Программные элементы напрямую соответствуют фазам технологического процесса, позволяя инженеру быстро анализировать последовательность и условия перехода между состояниями.
Такая структура особенно ценна при отладке, обслуживании и модификации программ, поскольку визуальная диаграмма снижает вероятность ошибок и повышает прозрачность кода. SFC широко используется для описания логики работы многозадачных и сложных систем, в которых важно чётко определять порядок включения и выключения компонентов.
Применение SFC актуально в производстве, управлении технологическими процессами, робототехнике, системах управления зданиями (например, освещение, вентиляция), пищевой промышленности, машиностроении. SFC помогает эффективно разделять программу на независимые блоки: сложные алгоритмы разбиваются на более простые этапы со своими действиями, которые исполняются последовательно или параллельно. Такой подход делает возможным быстрый анализ, тестирование и адаптацию программы к изменяющимся условиям, а также повторное использование отдельных частей алгоритма.
SFC является одним из пяти графических и текстовых языков, определённых стандартом IEC 61131-3 для программируемых логических контроллеров (ПЛК): наряду с Ladder Diagram (LD), Function Block Diagram (FBD), Structured Text (ST) и Instruction List (IL).
Стандарт SFC официально назван «Функциональные схемы для систем управления» и основывается на французском языке GRAFCET, разработанном для описания и анализа дискретных автоматов с использованием принципов сетей Петри. Это обеспечивает возможность формального моделирования технологических процессов, что важно для сертификации и обеспечения надёжности промышленных систем.
Основные элементы SFC
Основные компоненты SFC включают шаги с соответствующими действиями, переходы с связанными логическими условиями и направленные связи между шагами и переходами. Шаги в диаграмме SFC могут быть активными или неактивными. Действия выполняются только для активных шагов.
Шаг может быть активным по одной из двух причин: он является начальным шагом, как указано программистом, или он был активирован во время цикла сканирования и не деактивирован с тех пор. Шаги активируются, когда все шаги выше него активны и соединяющий переход преодолим (то есть его связанное условие истинно).
Когда переход пересекается, все шаги выше деактивируются сразу, и после этого все шаги ниже активируются сразу. Действия, связанные с шагами, могут быть нескольких типов, наиболее релевантными из которых являются непрерывные (N), установка (S) и сброс (R).
Помимо очевидного значения установки и сброса, действие N гарантирует, что его целевая переменная установлена в 1, пока шаг активен. Правило SFC гласит, что если два шага имеют действие N на одной и той же цели, переменная никогда не должна быть сброшена в 0.
Программы на SFC и LD
Графические символы в программировании SFC
Шаг инициализации является первым графическим символом, используемым для инициализации. Это квадрат с двойными линиями. Внутри квадрата находится имя шага, которое используется для идентификации каждого шага и должно быть уникальным именем в программе.
Когда ПЛК включается, программа переходит в шаг инициализации и остается там. Шаг или состояние представляют собой квадрат с одной линией. Каждый шаг соединяется со следующим шагом линией соединения, и добавляется небольшая горизонтальная линия, которая называется переходом.
На линии перехода должно быть условие. Где B1 является булевой переменной, которая может быть TRUE или FALSE. Когда B1 изменяется с FALSE на TRUE, состояние программы изменяется с Step_10 на Step20.
Переход также может быть логикой. Когда AND добавляется между B1 и B2, оба B1 и B2 должны быть TRUE для изменения с Step_10 на Step20. Другим часто используемым переходом является переход с задержкой. В SFC задержка является частью блока шага и поэтому проста в использовании.
Основные элементы диаграммы SFC
Элемент | Графический символ | Назначение | Правила использования |
---|---|---|---|
Начальный шаг | Квадрат с двойными линиями | Точка входа в программу при запуске ПЛК | Обязательно один в каждой диаграмме SFC |
Шаг | Квадрат с одной линией | Состояние процесса, в котором выполняются определенные действия | Содержит уникальное имя и может иметь действия |
Переход | Горизонтальная линия на вертикальной связи | Условие перехода между шагами | Должен быть между каждыми двумя шагами |
Действие | Прямоугольник, соединенный горизонтально с шагом | Операции, выполняемые в активном шаге | Может содержать лестничную логику или ST-код |
Параллельное ветвление | Двойные горизонтальные линии | Одновременное выполнение нескольких последовательностей | Все ветви активируются одним переходом |
Селективное ветвление | Одинарные линии с отдельными переходами | Выбор одной из нескольких возможных последовательностей | Каждая ветвь имеет независимое условие перехода |
Квалификаторы действий в программировании SFC
Квалификатор | Обозначение | Описание действия | Типичное применение |
---|---|---|---|
N (Non-stored) | N | Действие выполняется только пока шаг активен. Автоматически сбрасывается при выходе из шага | Управление двигателями, индикаторами, временные выходы |
S (Set) | S | Действие активируется при входе в шаг и сохраняется после выхода из шага до явного сброса | Установка флагов состояния, включение режимов работы |
R (Reset) | R | Останавливает и сбрасывает действие, установленное квалификаторами S, SL, SD или DS | Выключение оборудования, сброс режимов, отключение сигнализации |
D (Delay) | D [время] | Выполняет действие после истечения заданной задержки с момента активации шага | Задержанный запуск процессов, паузы перед операциями |
L (Limit) | L [время] | Выполняет действие при активации шага и завершается по истечении заданного времени | Ограниченные по времени операции, импульсы заданной длительности |
P (Pulse) | P | Выполняет действие в течение 1-2 циклов сканирования при активации шага | Триггерные импульсы, однократные срабатывания |
Действия и квалификаторы действий
Действие может быть добавлено к шагу при необходимости. Линия соединяет шаг с действием. Внутри блока действия находится буква квалификатора N, которая указывает, что делать с VarName или именем переменной. VarName является булевой переменной.
Квалификатор N означает, что переменная VarName является TRUE только тогда, когда шаг активен. Поэтому не нужно устанавливать VarName в FALSE при выходе из действия Step_10. При использовании S в качестве квалификатора значение TRUE будет сохранено для VarName в памяти. Это используется для сохранения VarName TRUE при выходе из шага.
Если необходимо сбросить сохраненное значение VarName, можно использовать R в качестве квалификатора. Квалификатор D (Delay) выполняет действие, когда прошло заданное пользователем время с момента активации шага. Если шаг становится неактивным до истечения заданного времени, действие не будет выполнено.
Квалификатор L (Limit) выполняет действие при активации шага и завершается, когда истекает заданное пользователем время. Квалификатор P (Pulse) выполняет действие в течение 2 циклов при активации шага, если включено финальное сканирование, или 1 цикла, если финальное сканирование отключено.
Пример программы на SFC
Эта схема представляет собой простую программу на языке SFC для создания мигающего эффекта сигнальной лампы с интервалом переключения 2 секунды.
Шаг инициализации Init — программа начинается с шага инициализации, обозначенного двойной рамкой, который является начальным состоянием системы. Как уже было сказано ранее, это стандартный элемент SFC для запуска программы при включении ПЛК.
Переход TRUE — после шага Init следует безусловный переход с условием TRUE, что означает немедленный переход к следующему шагу без ожидания каких-либо входных сигналов.
Шаг Step 1 (включение лампы) — первый рабочий шаг выполняет включение лампы. Справа от шага расположен блок действия с квалификатором N и переменной Lamp, что означает, что лампа будет включена только во время активности этого шага.
Квалификатор N — использование квалификатора N (Non-stored) означает, что действие активно только пока шаг активен. Когда программа покидает Step 1, лампа автоматически выключается без необходимости дополнительных команд.
Условие перехода Step1.t>t#2s — переход от Step 1 к Step 2 происходит, когда время нахождения в шаге превышает 2 секунды. Это встроенный таймер шага, который отсчитывает время активности.
Шаг Step 2 (выключение лампы) — второй шаг не имеет блока действий, поэтому лампа остается выключенной. Этот шаг создает паузу в цикле мигания.
Условие перехода Step2.t>t#2s — аналогично первому переходу, система ожидает 2 секунды, прежде чем перейти к следующему шагу.
Циклическая структура — стрелка от Step 2 возвращается обратно к Step 1, создавая бесконечный цикл. Программа непрерывно переключается между двумя шагами, создавая эффект мигания лампы.
Принцип работы
Лампа включается на 2 секунды (Step 1), затем выключается на 2 секунды (Step 2), после чего цикл повторяется. Общий период мигания составляет 4 секунды (2 секунды включено + 2 секунды выключено). Программа использует встроенные таймеры шагов SFC, что упрощает реализацию временных задержек без использования отдельных таймерных блоков.
Тестирование программы SFC
После создания диаграммы SFC программа тестируется с использованием симулятора. Программа передается на симулятор для проверки того, как программа работает, когда условия перехода выполнены. Симулятор позволяет тестировать программы, используя только компьютер.
Устанавливается онлайн-соединение между компьютером и симулятором. Операционный режим ПЛК переключается в режим монитора. Редактор SFC становится серым, и зеленая рамка представляет активный шаг.
Переходы принудительно устанавливаются для проверки работы действий по мере того, как шаги становятся активными или неактивными. Выполняется двойная проверка для подтверждения правильности работы программы. Тест работы программы завершен после успешной проверки всех переходов и действий.
Преимущества программирования на SFC
Сравнение SFC с другими языками программирования ПЛК
Характеристика | SFC | Ladder Diagram (LD) | Function Block Diagram (FBD) | Structured Text (ST) |
---|---|---|---|---|
Визуальное представление | Графическая блок-схема потока | Схема релейной логики | Блоки с соединениями | Текстовый код |
Лучшее применение | Последовательные процессы | Дискретная логика | Сложные вычисления | Алгоритмы и математика |
Сложность изучения | Средняя | Низкая (для электриков) | Средняя | Высокая |
Эффективность сканирования | Высокая (только активные шаги) | Средняя (вся программа) | Средняя | Высокая |
Читаемость | Отличная для последовательностей | Хорошая для простой логики | Хорошая для обработки данных | Требует навыков программирования |
Отладка | Легко видеть активный шаг | Требует трассировки | Требует трассировки потока | Пошаговая отладка |
Sequential Function Chart (SFC) идеально подходит для управления машинами и оборудованием, поскольку позволяет структурировать логику в виде последовательных шагов, аналогично лестничной диаграмме (LD) или структурированному тексту (ST), но с акцентом на состояния и переходы.
Это упрощает организацию кода, делая его более читаемым и модульным, особенно в сложных системах, где традиционные языки могут привести к запутанной логике. Кроме того, SFC повышает эффективность программы, сканируя только активный шаг или состояние, в отличие от полного сканирования всей лестницы в LD, что снижает нагрузку на процессор ПЛК и ускоряет отклик системы.
SFC особенно полезен в приложениях с длинными последовательными процессами, такими как управление химическими реакторами, где каждый шаг соответствует фазе реакции (нагрев, смешивание, охлаждение), с переходами на основе датчиков температуры или давления.
В процессах розлива жидкостей на производственных линиях SFC организует этапы: заполнение, проверка уровня, герметизация, с таймерами для синхронизации и условиями на основе фотоэлементов.
Обработка материалов, например, на конвейере, использует SFC для шагов подачи, резки и сортировки, где циклы повторяются до выполнения условия выхода, минимизируя простои.
В автоматизированных производственных линиях SFC применяется для координации нескольких машин, как в примере управления двигателем: шаг S1 — запуск, S2 — работа на номинальной скорости, переходы по сигналам обратной связи от энкодера, что обеспечивает плавный цикл без перегрузки ПЛК.
В упаковке по стандарту PackML (Packaging Machine Language) SFC преобразует диаграммы состояний в шаги остановки, запуска, выполнения и сброса ошибок, интегрируя обработку аварий для повышения безопасности.
Ещё один пример — роботизированная сборка, где SFC управляет последовательностью захвата, перемещения и установки деталей, с параллельными ветвями для независимых манипуляторов.
SFC является внутренне параллельным языком программирования, позволяющим нескольким потокам управления (ветвям) быть активными одновременно, что реализуется через макрошаги или параллельные последовательности. Это полезно в многопоточных системах, например, в химической промышленности, где один поток контролирует реактор, а другой — параллельно мониторит безопасность (вентиляцию, клапаны).
В производственных линиях параллельные потоки SFC управляют независимыми операциями, такими как одновременная обработка двух конвейеров, с синхронизацией через общие переходы, что повышает общую производительность.
Андрей Повный