Скидка на подшипники из наличия!
Новое поступление товара в 2026 году!
Структура программы ПЛК определяет, какой код и как часто выполняет контроллер. В основе лежит программная модель стандарта МЭК 61131-3: прикладная логика разбивается на программные модули (POU), а их выполнением управляют задачи с заданными периодом вызова и приоритетом. Правильное распределение кода по задачам и приоритетам напрямую влияет на детерминизм, время реакции и стабильность рабочего цикла.
Разберём иерархию программной модели, типы программных модулей, виды задач (циклические и событийные), смысл периода и приоритета, а также практические правила организации проекта ПЛК.
Стандарт описывает выполнение прикладной программы через иерархию вложенных элементов. Верхний уровень — конфигурация (вся система ПЛК); внутри неё ресурсы (вычислительные единицы — процессоры или ядра); в ресурсе объявляются задачи, а задачи связываются с экземплярами программ, которые, в свою очередь, вызывают функциональные блоки и функции.
Задача — это не код, а планировщик: она задаёт, когда и с каким приоритетом выполнить связанный с ней программный модуль.
Прикладной код строится из программных компонентов — POU (program organization unit). Стандарт определяет три типа, различающихся наличием памяти и назначением.
Функциональный блок создаётся как экземпляр: один и тот же блок (например, управление двигателем) можно инстанцировать многократно, и каждый экземпляр хранит своё состояние. Это основа повторного использования кода и модульной структуры проекта.
Задача определяет условие запуска связанной программы. Стандарт предусматривает непрерывное, периодическое и событийное выполнение.
По умолчанию контроллер работает в непрерывном цикле сканирования: чтение входов, последовательное выполнение программных модулей, запись выходов — и снова сначала. Циклические и событийные задачи накладываются на эту модель, позволяя выполнять разные части проекта с разной частотой и разным приоритетом.
Циклическая задача характеризуется периодом вызова (интервалом) и приоритетом. Интервал задаёт, как часто запускается программа; приоритет определяет, какая задача получит процессор, если несколько готовы к выполнению одновременно.
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) планировании задача с более высоким приоритетом прерывает выполнение менее приоритетной и получает процессор немедленно; при невытесняющем — дожидается завершения текущей. Оба режима допускаются стандартом, конкретное поведение определяется средой исполнения.
Числовое соглашение о приоритетах у разных платформ различается: где-то меньшее число означает более высокий приоритет, где-то наоборот, а диапазон значений ограничен. Перед настройкой задач сверяйтесь с документацией конкретной среды разработки и контроллера.
Событийная задача выполняется не по расписанию, а по наступлению условия — обычно по фронту заданной булевой переменной или по аппаратному прерыванию входа. Её назначают на действия, требующие минимальной задержки реакции: аварийный останов, обработку сигнала быстрого датчика, подсчёт импульсов.
Событийным задачам обычно назначают высокий приоритет, чтобы они вытесняли фоновую и медленную периодическую логику. Важно, чтобы код такой задачи был коротким и быстрым: длительная обработка в высокоприоритетной событийной задаче «задушит» остальные задачи и нарушит детерминизм цикла.
Это механизм запуска: задача определяет, когда и с каким приоритетом выполняется связанная с ней программа. Сам код находится в программных модулях, а задача лишь управляет их вызовом — периодически, непрерывно или по событию.
Циклическая запускается через фиксированный интервал времени и обеспечивает детерминированное управление. Событийная выполняется по наступлению условия — фронту переменной или аппаратному прерыванию — и служит для быстрой реакции на конкретное событие.
По соглашению стандарта высшим является приоритет 0: чем меньше число, тем важнее задача. Но у конкретных платформ нумерация может отличаться, поэтому её всегда проверяют по документации среды разработки.
Сработает контроль времени цикла (сторожевой таймер), и контроллер перейдёт в состояние ошибки. Поэтому суммарное время выполнения программ задачи должно быть меньше её интервала с запасом.
Функция не хранит состояние между вызовами и при одинаковых входах даёт один результат. Функциональный блок хранит состояние и работает через экземпляры. Программа — верхний уровень логики, который связывается с задачей и компонует блоки и функции.
По требуемой частоте и критичности: быстрое и ответственное управление — в задачи с малым интервалом и высоким приоритетом, вычисления и диагностику — в медленные фоновые задачи. Высокоприоритетные задачи должны быть короткими.
Вы можете задать любой вопрос на тему нашей продукции или работы нашего сайта.