Showing posts with label Task configuration. Show all posts
Showing posts with label Task configuration. Show all posts

February 16, 2015

Многозадачность системы реального времени


Система TwinCAT позволяет создать до четырех подсистем реального времени (Run-Time System). Они будут работать параллельно, если доступно четыре ядра процессора, или как-то делить процессорное время, если ядер меньше.

В каждом рантайме можно организовать параллельную работу четерех задач (Task), т. е. всего получается 16 параллельных задач, которые могут взаимодействовать друг с другом внутри своего рантайма. Фактически задачи работают последовательно, но внутри задачи будет казаться, что все работает параллельно. Как таковые задачи нужны для удобства задания времени цикла программы; это спорно, но похоже на правду.

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



  • Переменные, имена программ, ФБ и пр. POU "принадлежат" рантайму, а не задачам (см. у них номер порта отличается от номера порта задач и совпадает с номером порта рантайма).
  • ADS.API библиотеки подключаются к рантайму (опять-таки, см. номер порта), т. к. именно образ рантайма публикуется ADS-сервером.
  • В System Manager'e переменные из разных задач отображаются в первой задаче: просто так сделано.



  • Задачи - это по сути список вызова программ или глобальных экземпляров ФБ (Program Call, см. PLC Control → Resources → Task configuration).
  • Задачи одного рантайма могут иметь разное время циклов. Это влияет на время цикла программы, назначенной задаче. Например, вызов одной и той же программы из разных задач, заставит работать программу со временем цикла вызывающей задачи.
  • При вызове одной и той же программы из разных задач, программа по прежнему существует в единственном экземпляре, с единым набором локальных переменных и состояний.
  • Порядок обработки задач в рамках рантайма задается приоритетом задачи: 0 - первая, ..., 3 - последняя.
  • В рамках одного рантайма программы могут вызывать друг-друга, передавать данные через IN/OUT и глобальные переменные/константы.
  • Если задаче назначено несколько программ, они вызываются в порядке их следования и делят между собой время цикла задачи.
  • Точки останова прерывают все задачи рантайма разом, т. е. действуют на весь рантайм сразу.