Производство по чертежам Подбор аналогов Цены производителя Оригинальная продукция в короткие сроки
INNERпроизводство и поставка промышленных комплектующих и оборудования
Бесплатно Личный кабинет — избранное и расчёты ★ Регистрация →
Новинка Симуляторы и тренажёры — ЧПУ, допуски, ПИД Попробовать →
Правовая информация →

INNER
Контакты

Структура программы ПЛК: задачи и приоритеты

  • 14.07.2026
  • Познавательное

Структура программы ПЛК определяет, какой код и как часто выполняет контроллер. В основе лежит программная модель стандарта МЭК 61131-3: прикладная логика разбивается на программные модули (POU), а их выполнением управляют задачи с заданными периодом вызова и приоритетом. Правильное распределение кода по задачам и приоритетам напрямую влияет на детерминизм, время реакции и стабильность рабочего цикла.

Разберём иерархию программной модели, типы программных модулей, виды задач (циклические и событийные), смысл периода и приоритета, а также практические правила организации проекта ПЛК.

Содержание статьи
Модель

Программная модель: от конфигурации до задачи

Стандарт описывает выполнение прикладной программы через иерархию вложенных элементов. Верхний уровень — конфигурация (вся система ПЛК); внутри неё ресурсы (вычислительные единицы — процессоры или ядра); в ресурсе объявляются задачи, а задачи связываются с экземплярами программ, которые, в свою очередь, вызывают функциональные блоки и функции.

Конфигурация
вся система контроллера; объединяет ресурсы и глобальные переменные
Ресурс
вычислительная единица (процессор, ядро), на которой выполняются задачи
Задача
механизм запуска: определяет, когда и с каким приоритетом выполняется связанная программа
Программа
прикладная логика; вызывает функциональные блоки и функции

Задача — это не код, а планировщик: она задаёт, когда и с каким приоритетом выполнить связанный с ней программный модуль.

Наверх Модули

Программные модули POU

Прикладной код строится из программных компонентов — POU (program organization unit). Стандарт определяет три типа, различающихся наличием памяти и назначением.

Тип POUПамять между вызовамиНазначение
Функциянет; при одинаковых входах всегда один результатвычисления без состояния (математика, преобразования)
Функциональный блокесть; работает через именованные экземплярыузлы с состоянием: таймеры, счётчики, регуляторы, модели устройств
Программаесть; верхний уровень прикладной логикисвязывается с задачей; компонует блоки и функции в законченную логику

Функциональный блок создаётся как экземпляр: один и тот же блок (например, управление двигателем) можно инстанцировать многократно, и каждый экземпляр хранит своё состояние. Это основа повторного использования кода и модульной структуры проекта.

Наверх Задачи

Типы задач

Задача определяет условие запуска связанной программы. Стандарт предусматривает непрерывное, периодическое и событийное выполнение.

Тип задачиУсловие запускаТиповое применение
Непрерывная (freewheeling)перезапускается сразу после завершения предыдущего проходафоновая логика, некритичная к точному периоду
Циклическая (периодическая)запускается через фиксированный интервал времениосновное детерминированное управление, регулирование
Событийнаязапускается по фронту переменной или аппаратному прерываниюбыстрая реакция на событие: авария, датчик, внешний сигнал

По умолчанию контроллер работает в непрерывном цикле сканирования: чтение входов, последовательное выполнение программных модулей, запись выходов — и снова сначала. Циклические и событийные задачи накладываются на эту модель, позволяя выполнять разные части проекта с разной частотой и разным приоритетом.

Наверх Планирование

Период вызова и приоритет

Циклическая задача характеризуется периодом вызова (интервалом) и приоритетом. Интервал задаёт, как часто запускается программа; приоритет определяет, какая задача получит процессор, если несколько готовы к выполнению одновременно.

TASK Fast   (INTERVAL := T#1ms,   PRIORITY := 0);
TASK Main   (INTERVAL := T#10ms,  PRIORITY := 10);
TASK Slow   (INTERVAL := T#100ms, PRIORITY := 20);

PROGRAM P_Motion WITH Fast : MotionControl;
PROGRAM P_Logic  WITH Main : MachineLogic;

По соглашению стандарта приоритет 0 — наивысший: чем меньше число, тем важнее задача. При вытесняющем (preemptive) планировании задача с более высоким приоритетом прерывает выполнение менее приоритетной и получает процессор немедленно; при невытесняющем — дожидается завершения текущей. Оба режима допускаются стандартом, конкретное поведение определяется средой исполнения.

Числовое соглашение о приоритетах у разных платформ различается: где-то меньшее число означает более высокий приоритет, где-то наоборот, а диапазон значений ограничен. Перед настройкой задач сверяйтесь с документацией конкретной среды разработки и контроллера.

Каждая задача должна укладываться в свой интервал: суммарное время выполнения всех программ задачи обязано быть меньше её периода. Если циклическая задача не успевает отработать за отведённое время, срабатывает контроль времени цикла (сторожевой таймер) и контроллер переходит в ошибку. Ориентир: держите загрузку с запасом, не заполняя интервал под завязку.
Наверх События

Событийные задачи

Событийная задача выполняется не по расписанию, а по наступлению условия — обычно по фронту заданной булевой переменной или по аппаратному прерыванию входа. Её назначают на действия, требующие минимальной задержки реакции: аварийный останов, обработку сигнала быстрого датчика, подсчёт импульсов.

Событийным задачам обычно назначают высокий приоритет, чтобы они вытесняли фоновую и медленную периодическую логику. Важно, чтобы код такой задачи был коротким и быстрым: длительная обработка в высокоприоритетной событийной задаче «задушит» остальные задачи и нарушит детерминизм цикла.

Наверх Практика

Организация проекта: рекомендации

  1. Разделяйте логику по частоте. Быстрое управление (позиционирование, критичные блокировки) — в быструю задачу с малым интервалом; вычисления, обмен данными, диагностику — в медленные задачи.
  2. Назначайте приоритет по критичности, а не по желанию. Наивысший приоритет — задачам с жёсткими требованиями к времени реакции; фоновую логику держите на низком приоритете.
  3. Держите высокоприоритетные задачи короткими. Чем выше приоритет, тем короче должен быть код: длинная высокоприоритетная задача блокирует всё остальное.
  4. Стройте проект из функциональных блоков. Оформляйте типовые узлы (двигатель, клапан, регулятор) как ФБ и переиспользуйте их экземпляры — это упрощает сопровождение.
  5. Контролируйте загрузку и время цикла. Оставляйте запас по времени в каждом интервале и следите за сторожевым таймером, чтобы избежать переполнения цикла.
Наверх

Частые вопросы

Что такое задача в структуре программы ПЛК?

Это механизм запуска: задача определяет, когда и с каким приоритетом выполняется связанная с ней программа. Сам код находится в программных модулях, а задача лишь управляет их вызовом — периодически, непрерывно или по событию.

Чем циклическая задача отличается от событийной?

Циклическая запускается через фиксированный интервал времени и обеспечивает детерминированное управление. Событийная выполняется по наступлению условия — фронту переменной или аппаратному прерыванию — и служит для быстрой реакции на конкретное событие.

Какой приоритет считается высшим?

По соглашению стандарта высшим является приоритет 0: чем меньше число, тем важнее задача. Но у конкретных платформ нумерация может отличаться, поэтому её всегда проверяют по документации среды разработки.

Что произойдёт, если задача не успеет отработать за свой период?

Сработает контроль времени цикла (сторожевой таймер), и контроллер перейдёт в состояние ошибки. Поэтому суммарное время выполнения программ задачи должно быть меньше её интервала с запасом.

Чем отличаются функция, функциональный блок и программа?

Функция не хранит состояние между вызовами и при одинаковых входах даёт один результат. Функциональный блок хранит состояние и работает через экземпляры. Программа — верхний уровень логики, который связывается с задачей и компонует блоки и функции.

Как распределять код по задачам?

По требуемой частоте и критичности: быстрое и ответственное управление — в задачи с малым интервалом и высоким приоритетом, вычисления и диагностику — в медленные фоновые задачи. Высокоприоритетные задачи должны быть короткими.

Статья носит ознакомительный характер. Конкретный набор типов задач, диапазон и трактовка приоритетов, а также синтаксис конфигурирования различаются в реализациях разных изготовителей; при разработке руководствуйтесь документацией применяемой среды и контроллера. Автор и издатель не несут ответственности за последствия применения приведённых сведений на практике.

Источники

  1. ГОСТ Р МЭК 61131-3-2016 — Контроллеры программируемые. Часть 3. Языки программирования.
  2. Петров И.В. Программируемые контроллеры. Стандартные языки и приёмы прикладного проектирования. — М.: СОЛОН-Пресс.
  3. John K.-H., Tiegelkamp M. IEC 61131-3: Programming Industrial Automation Systems. — Springer.
  4. Техническая документация сред разработки, поддерживающих языки стандарта МЭК 61131-3 (руководства по конфигурированию задач).

© Компания Иннер Инжиниринг. Все права защищены.

Появились вопросы?

Вы можете задать любой вопрос на тему нашей продукции или работы нашего сайта.