Tag Archives: время цикла

Задачи и контроль времени выполнения в CoDeSys

Слово ‘задача’ в CoDeSys служит исключительно для организации планирования вычислительного процесса. На практике мы имеем дело с задачами только в ‘Конфигураторе задач’. Здесь мы создаем задачи, назначаем им имена и настраиваем их параметры. Для выполнения полезной работы с каждой задачей связывается как минимум одна программа (POU типа PROGRAM). Когда мы создаем новый проект в CoDeSys, то в нем неявно организуется одна задача, содержащая вызов одной программы PLC_PRG.

Данная задача всегда выполняется циклически. В зависимости от типа ПЛК могут быть два способа ее вызова. Обычно она запускается так часто как это только можно. Как только программа отрабатывает один цикл вызова, система исполнения выполняет обслуживание входов/выходов и снова запускает прикладную задачу. Очевидно, период вызова такой задачи не стабилен и может плавать в зависимости от того, по какой ветви работает программа в данный момент. Обслуживание системой исполнения аппаратных устройств, коммуникационных каналов, работа отладчика также могут влиять на периодичность такой задачи. В окне ‘Конфигурация ПЛК’ задача такого типа называется ‘свободная’ (freewheeling). Второй способ состоит в поддержке стабильного интервала выполнения единственной задачи. Даже если программа пуста, то она не будет вызываться чаще, чем задано. В окне ‘Конфигурация ПЛК’ такая задача называется ‘циклическая’.

Например, в ПЛК-150 компании Овен по умолчанию единственная задача вызывается циклически с интервалом 1 мс. Время рабочего цикла можно изменять от 0 до 50 мс (параметр MinCycleLength в конфигурации ПЛК). При задании нулевого времени контроль отключается и задача превращается в ‘свободную’. Такой встроенный механизм настройки ПЛК достаточно удобен для начинающих пользователей.

Для любых типов ПЛК мы можем открыть в CoDeSys диалоговое окно ‘Конфигурация ПЛК’, создать новую задачу и настроить ее параметры так, как нам нужно. Обратите внимание на то, что если мы беремся за самостоятельное определение задач в CoDeSys и создаем в конфигураторе хотя бы одну задачу, то действовавший по умолчанию вызов PLC_PRG отключается. Нам нужно будет вручную добавить вызов этой программы в одну из задач, даже если она всего одна. См. рис. 1.

Рис 1. Настройка циклической задачи с вызовом программы PLC_PRG

 

При задании интервала циклической задачи нужно быть реалистом и не задавать физически недостижимых величин. Так, если используемая вами модель ПЛК имеет системный таймер, который ‘тикает’ раз в 10 мс, то установка интервала не кратного 10 мс не имеет смысла. Если в конфигурации ПЛК Овен вы задали время рабочего цикла 50мс, то чтобы вы не задали в конфигураторе задач, никакая задача не будет вызываться чаще.

При малых значениях интервала задачи весьма вероятно написать программу с настолько большим числом вычислений в одном цикле ее вызова, что она не будет ‘помещаться’ в заданный интервал. При этом интервал вызова программы будет нестабилен, что может быть нежелательно. Но как это проверить при отладке?

В ПЛК компании Овен для этой цели реализован встроенный механизм контроля времени рабочего цикла. В конфигурацию ПЛК необходимо добавить модуль статистики, который включает вход Cycle time. Здесь вы получите число, содержащее измеренное время цикла в сотнях миллисекунд.

Рис 2. Измерение длительности цикла в ПЛК 150 Овен

 

Универсальным способом измерения коротких интервалов является использование точного таймера из системной библиотеки SysLibTime.lib. Библиотека содержит функциональный блок CurTime, который дает время системного таймера в микросекундах. Естественно, практически нельзя рассчитывать, что системный таймер любого ПЛК ‘тикает’ каждую микросекунду. Поэтому прежде чем полагаться на результаты этого способа измерения, уточните частоту его работы. Данная библиотека является не обязательной и может неподдерживаться для определенных типов ПЛК. На рисунке 2 показан результат прогона на ПЛК-150 Овен простой программы, которая измеряет интервал своего вызова в мкс, при установленном рабочем цикле 10мс. Для контроля приведены результаты измерений с использованием модуля статистики. С учетом дискретности таймера 100мкс мы получаем одинаковые результаты для обоих способов измерения.

Диалоговое окно ‘Конфигурация задач’ CoDeSys имеет свой встроенный диагностический инструмент. Для его работы необходимо включить в проект библиотеки SysLibTime и SysTaskInfo. Учтите что, они поддержаны не для всех типов ПЛК. На рисунке 3 показана информация о работе одной циклической задачи (5 мс), включающей программу, выполняющую сто тысяч операций с переменной типа REAL в CoDeSys SP RTE. На диаграмме видна заданная длительность цикла (светлая полоса) и реальное время вычислений. Оно занимает до 3.3 мс. Очевидно, что для данной задачи задавать интервал менее 4мс нет смысла.

Рис 3. Конфигурация ПЛК в режиме онлайн.

 

Далеко не в каждом ПЛК удается напрямую измерить длительность выполнения программы. Часто она меньше или сравнима с дискретностью системного таймера.