Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > SCADA-системы и контроллеры стандарта IEC (МЭК) > Как обеспечивается реальное время?


Автор: LeonidPr 30.3.2012, 18:19
Мучает меня вот такой вопрос. Два раза прочитал http://www.rtsoft-training.ru/?p=600014 статью и все равно многое не понял. Это не единственная статья, где я встречаю понятие "ядро реального времени", причем относительно к некоторому прикладному приложению. Если бы разговор шел о ядре реального времени ОСРВ, то тут вроде все понятно. Но вот в контексте прикладного (по отношению к ОС) программного обеспечения, мне этот термин не понятен.
Непонятно собственно вот что:
Как обеспечивается жесткое реальное время в прикладном ПО? Какие требования при этом накладываются на архитектуру такого ПО? Та же SCADA. Она же ведет периодический опрос устройств. Если событие на объекте возникло в некоторый момент времени, SCADA узнает о нем только при следующем опросе и время это (между событием и опросом) недетерминированно. О каком же жестком реальном времени может идти речь? Или задача реального времени "крутится" внутри ПЛК? А SCADA занимается только взаимодействием с пользователем  и архивацией.
Есть много литературы и статей об операционных системах реального времени, их архитектуре, алгоритмах планирования и т.д. Можете посоветовать литературу по разработке ПО на базе ОСРВ?

Добавлено через 14 минут и 17 секунд
Сейчас обдумывал все, что здесь понаписал и вдруг мысль проскочила. Может говоря о ядре реального времени имеют в виду, что интервал опроса датчиков неизменен?

Автор: xvr 31.3.2012, 11:25
Цитата(LeonidPr @  30.3.2012,  18:19 Найти цитируемый пост)
Непонятно собственно вот что:
Как обеспечивается жесткое реальное время в прикладном ПО? 

Никак. Все уверения в том, что 'супер пупер ПО', работающее в среде стандартной Windows (без своих драйверов) обеспечивает real-time за счет 'хитроумной организации приоритетов процессов, своего планировщика или еще чего то' не более, чем рекламный ход  smile 
Да, можно запустить real-time приложение под Windows (и под Linux), но эти приложения требуют установки специально real-time подсистемы в ядро, и собственно само приложение крутится там же - в ядре (по крайней мере в RT-Linux это точно так)
Таким образом вся RT часть работает совершенно независимо от основной системы и на голом железе, а все обращения в основную систему RT не являются

Цитата(LeonidPr @  30.3.2012,  18:19 Найти цитируемый пост)
Сейчас обдумывал все, что здесь понаписал и вдруг мысль проскочила. Может говоря о ядре реального времени имеют в виду, что интервал опроса датчиков неизменен?

По статье очень сложно сказать, о чем они там думали. Даже в Windows можно сделать нечто, что с натяжкой можно назвать real-time системой. В Windows есть система приоритетов процессов и нитей. В том числе есть приоритет REALTIME. Нити с таким приоритетом может прервать только обработчик прерываний в ядре ОС. Гарантий RealTime это не дает, но выглядеть будет очень похоже  smile 

Автор: LeonidPr 31.3.2012, 12:30
Ну то, что на винде и линухе без примочек (RTX, RT-Linux, KURT) реальное время обеспечить нельзя это понятно. Я наверное не совсем точно вопрос сформулировал.
Цитата

По статье очень сложно сказать, о чем они там думали.

Да эта статья одна из многих, где о всяких таких вещах говорится, но всегда в общем без особой конкретики.
Цитата

выглядеть будет очень похоже

Ага, квазиреальное время получим.
Так вот, вопрос наверное чуть по другому сформулирую. Пусть есть нижний уровень, обеспечивающий возможность создания ПО реального времени (например ОСРВ типа QNX). Тогда, какие есть рекомендации, может паттерны, требования к архитектуре такого ПО? Т.е. имея в руках ОСРВ, как создавать приложения реального времени?
Например, вот http://wiki.oscada.org/Doc/OpenSCADA050?show_files=1 в разделе 2 есть такая фраза:
Цитата

Во все задачи периодического опроса добавлена поддержка режима жесткого реального времени на основе POSIX функции clock_nanosleep()

там конечно говорится о Linux, но насколько я понял, любая POSIX совместимая ОСРВ эту функцию предоставляет. То есть, получается, что поддержка реального времени заключается в том, что поток проснется точно по истечение времени, указанного в качестве аргумента clock_nanosleep() (если конечно не будет активного потока в более высоким приоритетом)?

Автор: xvr 31.3.2012, 19:21
Цитата(LeonidPr @  31.3.2012,  12:30 Найти цитируемый пост)
Т.е. имея в руках ОСРВ, как создавать приложения реального времени?

Они автоматом получатся (ну или почти автоматом)  smile 
ОСРВ отличается от не РВ тем, что она гарантирует, что на любое событие (как внутри, так и снаружи ОС) его обработчик будет вызван не позже, чем через некоторое константное время. 
Вот http://en.wikipedia.org/wiki/Real-time_computing неплохо написанно.


Цитата(LeonidPr @  31.3.2012,  12:30 Найти цитируемый пост)
Тогда, какие есть рекомендации, может паттерны, требования к архитектуре такого ПО?

Ну собственно требование одно - ОС вам обеспечивает работу своих служб в РВ, а вот обеспечение работы пользовательской программы в РВ - это уже задача самой программы

Цитата(LeonidPr @  31.3.2012,  12:30 Найти цитируемый пост)
 То есть, получается, что поддержка реального времени заключается в том, что поток проснется точно по истечение времени, указанного в качестве аргумента clock_nanosleep() (если конечно не будет активного потока в более высоким приоритетом)?

Это всего лишь один из аспектов РВ. И он один (сам по себе) еще не сделает из системы ОСРВ

Автор: LeonidPr 31.3.2012, 20:05
Понятно. В общем, я так понимаю пора найти хорошую книжку по какой-нибудь ОСРВ и основательно её проштудировать:-) Спасибо за объяснения.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)