Фев 19 2010

Разработка модели программного имитатора

Настоящий программный имитатор приемника информации от метеорадиолокатора является довольно сложным приложением. К тому же для его функционирования требуется соответствующее аппаратное обеспечение. Поскольку сейчас нас интересуют только вопросы реализации быстрого рисования, в этой главе рассматривается построение упрощенной модели программного имитатора.
В упрощенной модели имитатора приемника информации от метеорадиолокатора мы абстрагируемся от таких проблем, как прием пакетов из цифрового канала связи и их распаковка для извлечения необходимых параметров.
Модель имитатора будет воспроизводить условную радиолокационную картинку в секторе от -60 до +60°, состоящую из четырех «колец» разного цвета.
Период передачи пакетов PACK_PERIOD будет 5 мс. Меню приложения должно позволять выбрать требуемую скорость сканирования из множества значений { 15, 30, 60, 90 } градусов в секунду.
В строке состояния приложения должны отображаться следующие значения: а) скорость сканирования; б) коэффициент размножения лучей; в) расчетное время сканирования всего сектора (в прямом и обратном направлениях); г) фактическое время сканирования всего сектора.


Фев 05 2010

Первая версия модели программного имитатора

Первая версия будет называться ArincReceiverBad. Смысл этого названия станет ясным на этапе тестирования программы.
Создайте новый проект с именем ArincReceiverBad. Скопируйте из папки проекта ToolTip (см. листинг 8.4) в папку проекта ArincReceiverBad файлы KwndEx.h и KwndEx.cpp. Скопируйте из папки проекта KTimer файл KTimer.h. Добавьте скопированные файлы в состав проекта. Также добавьте к настройкам проекта на вкладке Link имена библиотек comctl32.lib и winmm.lib.
Функция GetNextAngle обеспечивает формирование следующего значения кода угла сканирования. При каждом вызове этой функции знак приращения кода угла scanAngle зависит от направления сканирования. При движении по часовой стрелке (FORTH), код угла увеличивается на единицу, при движении против часовой стрелки (BACK) — уменьшается на единицу. На границах сектора сканирования переменная direction изменяет свое значение. Помимо этого вызывается функция SetColorBeamForth или SetColorBeamBack, чтобы заполнить массив cell цветовыми кодами для точек дальности локационного луча. В результате при движении вперед рисуются кольца красного, зеленого, желтого и синего цветов (перечисление идет от центра к периферии). При движении назад рисуются кольца синего, желтого, зеленого и красного цветов.
В реальном имитаторе вызовы функций SetColorBeam Forth и SetColorBeamBack отсутствуют, поскольку массив cell формируется функцией GetPacket.
Рисование луча развертки реализовано в теле функции DrawBeam. Точки дальности локационного луча из массива cell выводятся на экран с помощью функции SetPixel. Для рисования используется контекст устройства с глобальным дескриптором g_hDC. Приложение получает этот контекст один раз при своем старте в блоке обработки сообщения WM_CREATE и освобождает его при завершении работы в блоке обработки сообщения WM_DESTR0Y.
После компиляции проекта перейдем к его тестированию.
На этапе тестирования ресурсоемких приложений очень важно наблюдать за степенью загрузки центрального процессора (ЦП). Операционная система содержит удобный инструмент — системное приложение Диспетчер задач Windows (Task Manager), позволяющее вести такое наблюдение. Для вызова диспетчера задач нужно использовать комбинацию клавиш Ctrl+Alt+ Delete и в появившемся диалоговом окне Безопасность Windows нажать кнопку Диспетчер задач.
После указанных действий на экране появляется окно приложения Диспетчер задач Windows. В строке состояния диспетчера задач отображается текущая загрузка центрального процессора в процентах. Это суммарная загрузка ЦП от всех запущенных процессов. Если переключиться на вкладку Процессы, то можно наблюдать за процентом загрузки ЦП от каждого отдельного процесса.