Требуется обновление браузера.

Практические проблемы моделирования интерактивных систем в масштабе реального времени в операционной системе WINDOWS


Просмотров: 1878
Июль 2015 года
Е.А. Бурлак, А.М. Набатчиков. Практические проблемы моделирования интерактивных систем в масштабе реального времени в операционной системе WINDOWS // Вестник компьютерных и информационных технологий. – 2015. – №7 (133). – С. 47-51.
ВАК
УДК: 629.7:004.451.7.031.43:004.451.45
DOI: 10.14489/vkit.2015.07.pp.047-051
Ключевые слова: таймеры Windows; синхронизация в реальном масштабе времени; интерактивное моделирование; полунатурный моделирующий стенд; дистанционно-пилотируемый летательный аппарат.

"ВЕСТНИК КОМПЬЮТЕРНЫХ И ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ"
Работа выполнена при поддержке РФФИ, проект № 15-08-06767-а.

Рассмотрен полунатурный комплекс моделирования управления и наведения дистанционно-пилотируемого летательного аппарата для проверки работы алгоритмов программного сопровождения цели. Проведен разбор основных причин, приводящих к существенным ошибкам при численном решении дифференциальных уравнений в интерактивном режиме. Проанализированы особенности поведения операционной системы Windows при использовании некоторых функций. Предложены методы компенсации ошибок, вызванных джиттером сигналов и латентностью программно-аппаратных средств. Приведены результаты экспериментальных исследований, позволяющие учесть особенности различных версий Windows. Изложены предложения по организации архитектуры подобных комплексов.

Введение


В настоящее время отмечается рост интереса к беспилотным авиационным системам и в частности дистанционно-пилотируемым летательным аппаратам (ДПЛА). Использование полунатурных моделирующих стендов управления и наведения ДПЛА позволяет проводить эксперименты по ручному управлению в условиях, приближенных к реальным. Такие стенды используются для отработки бортового оборудования, проверки алгоритмов обработки данных и режимов автоматизированного управления без существенных экономических затрат.

Одно из требований, предъявляемых к полунатурным стендам, – обеспечение интерактивного моделирования, т.е. использование не априорных данных, а поступающих в реальном масштабе времени непосредственно в процессе моделирования. Данная необходимость продиктована взаимодействием с человеком-оператором, синтезирующим управление или обеспечивающим сопряжение с бортовым оборудованием в реальном масштабе времени. В связи с этим возникает проблема синхронизации сигналов, так как рассогласование по времени может приводить к искажению информации.

Широкое распространение получила операционная система (ОС) Windows, имеющая традиционно более привычные для пользователя интерфейс и программное обеспечение. Использование Windows в роли ОС стендовой ПЭВМ упростит эксплуатацию стенда, предоставив программисту большое разнообразие программных средств, позволяющих узнать текущее время с требуемой точностью. Такие программные средства (методы) имеют специфику использования: разную скорость выполнения, шаг квантования возвращаемой величины, чувствительность к аппаратному обеспечению и настройкам ОС. Характеристики функций в некоторых версиях Windows могут меняться в результате выполнения разовых конфигурационных команд другими процессами, формально изолированными от целевого. Очевидно, что изменение нагрузки на центральный процессор приводит к флуктуациям рассматриваемых параметров. Совмещение моделей, использующих интерполяцию заранее вычисленных точек траектории с интерактивными моделями, координаты которых определяются в реальном времени на основе актуальной информации, при определенных обстоятельствах приводит к нежелательным эффектам. Неверный выбор алгоритма стабилизации производительности ведет к искажениям данных моделей.

Определение текущего времени


Для проведения экспериментальных исследований использован пилотажный полунатурный моделирующий стенд [1]. Отметим, что основная трудность экспериментов, проводимых на данном стенде, связана с рекурсивностью задачи: временные параметры функций необходимо измерить самими тестируемыми функциями. Эксперименты доработаны и расширены, новые результаты, представленные в статье, имеют практический характер. Некоторые полученные в ходе экспериментов величины могут быть ограничены сверху производительностью конкретной ПЭВМ, но позволяют оценить относительную производительность функций.

Рассмотрены способы получения времени, встречающиеся в исходных кодах программ, написанных на C++, но аналоги функций, наследующие их характерные черты, присутствуют и в других языках программирования. Приведем протестированные функции, позволяющие оценить текущее время:

  • clock
    ;
  • GetTickCount
    ;
  • timeGetTime
    ;
  • QueryPerformanceCounter
    ;
  • GetSystemTime
    ;
  • _strtime
    ;
  • time
    .

Некоторые из функций для получения необходимых величин требуют использования вспомогательных структур, вызовов вспомогательных процедур, масштабирования или иных преобразований возвращаемого значения. Часть функций может
менять шаг квантования результата при помощи вызовов пары
timeBeginPeriod
/
timeEndPeriod
. Для нахождения диапазона допустимых значений воспользуемся функцией
timeGetDevCaps
[1]. Важная особенность приведенных функций – их влияние на системный таймер ОС Windows, предоставляющий величину времени различным потребителям во всех процессах. Существует утверждение, что ускорение таймера ведет к уменьшению быстродействия системы из-за увеличения числа прерываний [2]. Характеристики функций определения времени приведены в табл. 1.

Очевидно, что программист должен быть ознакомлен с характеристиками ПЭВМ, на которой предполагается выполнять программу, или позаботиться о возможности смены источника времени при необходимости. Объекты различных программных библиотек могут быть построены на одной из рассмотренных функций, и соответственно унаследовать некоторые особенности поведения. Например, фактическая частота таймера, реализованного на функции
timeGetTime
, ограничена 64 Гц, при этом таймер (неожиданно для программиста) изменит свои ограничения (ускорится), что происходит при запуске в системе браузера или мультимедийного плеера.

Таблица 1. Характеристики функций определения времени
ФункцияМаксимальная частота обновления результата, ГцЧувствительность к
timeBeginPeriod
Комментарии
clock
64*
ОС Win7, Win8Возвращает число тактов. Для получения частоты тактов используют макроопределение
CLOCKS_PER_SEC
[3]
GetTickCount
64
ОтсутствуетВозвращает текущее системное время в миллисекундах
timeGetTime
64*
ОС WinXP, Win7, Win8Возвращает текущее системное время в миллисекундах. Для работы используют библиотеку winmm.dll
QueryPerformanceCounter
25×103
(зависит от производительности)
ОтсутствуетВозвращает текущее системное время
в тактах. Для получения частоты тактов – функция
QueryPerformanceFrequency
. Корректность возвращаемых значений зависит от конфигурации ПЭВМ [1, 4]
GetSystemTime
64*
ОС Win7, Win8Возвращает текущее системное время в миллисекундах
_strtime
1
ОтсутствуетЗаполняет переданный через указатель массив байт текстовым представлением текущего времени в соответствии с указанным форматированием
time
1
ОтсутствуетВозвращает время с точностью до секунды в текущей минуте (пилообразный сигнал). Для операций используется структура типа
time_t
* - Возможен «разгон» до 1 КГц.

Стабилизация


Для обеспечения синхронизации при полунатурном моделировании разработчику системы необходимо реализовать алгоритм, который в ходе работы выдает синхроимпульсы с заданной частотой [1]. Программные часы, используемые для
генерации импульсов, имеют ощутимую флуктуацию параметров. Исходя из требований, предъявляемых к решаемой задаче, для компенсации возникающих эффектов программист реализует следующие типы алгоритмов стабилизации: по длине интервала, узлам, числу импульсов.

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

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

По узлам. Алгоритм обеспечивает наименьшее отклонение времени фактической реакции от требуемого, даже если для этого приходится корректировать длину интервала. Данный алгоритм лишен отмеченного выше недостатка − дрейфа границ, но возникает непостоянство величины интервала. Алгоритм «игнорирует» ошибки, превышающие длину интервала.

По числу импульсов. В случае запаздывания алгоритм начинает выдавать импульсы с максимально доступной частотой, пока не будет компенсировано число пропущенных импульсов. Преимущество метода – учет больших ошибок (длиной более интервала). Недостаток – существенное искажение длин интервалов.

Отметим, что возможно реализовать и более деликатные алгоритмы, что приведет к дополнительным расходам процессорного времени в критическом по быстродействию участке кода. Использование таких алгоритмов на практике затруднительно.

Рассмотрим общую логику приведенных алгоритмов. Алгоритм выполняет проверку неравенства:

Tтек-Tимп⩾dt,

где Tтек – текущее время;
Tимп – время наступления последнего импульса;
dt – длина отслеживаемого интервала времени.

При выполнении неравенства выдается синхроимпульс, значение переменной Tимп обновляется. Используя разные выражения для вычисления нового значения Tимп, задается время наступления следующего импульса:

  • по длине интервала:
    Tимп=Tтек;
  • узлам:
    Tимп=dt*int(Tтек/dt),
    где int – целая часть действительного числа;
  • числу импульсов:
    Tимп=T*имп+dt,
    где T*имп – время наступления предпоследнего импульса.

При моделировании задач пилотирования в реальном масштабе времени немалую часть итерации цикла занимает взаимодействие с внешними интерфейсами: построение и отрисовка визуализации рабочей области (внекабинной обстановки,
показаний приборов) и опрос устройств ввода. При реализации таких моделей преимущество имеют многопроцессорные системы [5, 6]. Процесс опроса устройств (в зависимости от времени одной его итерации) имеет смысл вынести в отдельный поток, реализуя при этом «конвейерную» обработку процесса [7 – 9].

Задачу визуализации можно вынести в отдельный поток, одновременно снизив частоту обновления изображения до практически обоснованного значения [10]. Выполняемая на другом ядре визуализация не вносит дополнительных задержек в цикл моделирования. Важно обеспечить равномерную смену кадров, воспользовавшись стабилизацией по длине интервала или узлам.

Заключение


Рассмотрев проблемы моделирования, разработчики программного обеспечения, требующего взаимодействия с пользователем в реальном масштабе времени в ОС Windows, должны обстоятельно подойти к выбору источника времени, обеспечив необходимые параметры измерений: скорость выполнения, шаг квантования, чувствительность к «разгону». При этом особенности конфигурации ПЭВМ могут накладывать ограничения на использование источников времени. В зависимости от поставленной задачи определяют алгоритм стабилизации. На современных ПЭВМ хорошее решение – разделение процесса выполнения программы минимум на два потока: визуализацию и математическое моделирование, что позволит не только распланировать нагрузку на многоядерный процессор, но и проще реализовать разные требования к частоте вызова. Важно при таком подходе обеспечить равномерную смену кадров. Целесообразно вынесение опроса «медленных» устройств в отдельный поток. Отметим, что существует возможность появления нежелательных эффектов (на «медленных» ПЭВМ) при совмещении моделей, использующих интерполяцию заранее вычисленных значений, с моделями, работающими в реальном времени.

Библиографический список


Комментарии

Инкогнито
  Загружаем captcha