Файл: Методические рекомендации к выполнению курсового проекта по мдк 01. 02 Прикладное программирование.docx

ВУЗ: Не указан

Категория: Методичка

Дисциплина: Не указана

Добавлен: 04.02.2024

Просмотров: 281

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Программная компонента отображения данных



Программная компонента отображения данных является основной частью программной компоненты отображения данных профилографа. Она выполняет прием обработанных данных и отображение их в виде, заданным пользователем. Данная компонента реализуется классом ProfilographMainObject. Данный класс можно разделить на два блока: блок приема данных и блок отображения данных.

      1. Блок приема данных



Для приема данных организуются три очереди данных, организованных на основе классов DataOutQueue (две очереди) и DoubleDataQueue(одна очередь). При помощи данных очередей передаются данные непосредственно профилографа, данные о линии дна, амплитудные отметки эхолота.

Прием всех данных осуществляется следующим образом:

  • для приема данных по очередям DataOutQueue заводится по одному параллельному потоку приема данных;

  • в приемной части организуются два циклических буфера на основе класса FIFOQueue;

  • в каждом потоке происходит ожидание события от очереди приема данных;

  • после того, как событие становится активным, что свидетельствует о появлении данных в очереди, поток приема данных читает последовательно все данные из очереди данных, записывая их в циклический буфер;

  • после того, как все данные прочитаны, основной программе посылается событие DepthDataReceiveEvent (если были приняты данные о текущей глубине) или событие ProfilographDataReceiveEvent (если были приняты данные профилографа);

  • основная программа, получив одно из событий, проверяет, имеются ли данные, как о линии дна, так и для профилографа;

  • если данные есть для линии дна и профилографа, то производится отображение данных, иначе ничего не происходит.

Прием данных осуществляется классом ProfilographMainObject. Прием данных о линии дна осуществляется потоком thread_procedure. Циклическая очередь для данных о линии дна – data_list. Прием данных профилографа осуществляется потоком profilograph_thread_procedure. Циклическая очередь для данных профилографа – profilograph_data_list.


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

Данный класс создается в классе ProfilographMainObject, и имеет следующие методы:

  • structItem. Тип хранения данных. В данной структуре хранятся данные эхолота и профилографа;

  • const Item& operator[]( int index ) const. Возвращает блок данных по смещению, относительно последнего сохраненного блока;

  • void append( constFathometerPeriodData&append_data, constOnLineTestPeriodData&append_profilograph_data ). Добавляет на хранение очередной блок данных. Если места в буфере нет, то перетирается самый последний сохраненный блок данных;

  • intcount() const. Возвращает число реально хранящихся блоков данных.



      1. Блок отображения данных



Блок отображения данных класса ProfilographMainObject реализует следующие основные задачи:

  • отображение вертикальной и горизонтальной шкал;

  • отображение поля маркеров;

  • отображение непосредственно самих данных.

Блок отображения данных создает для отображения две горизонтальные шкалы: шкалу времени и шкалу дистанций. Одновременно отображается только одна из них (в зависимости от значения переменной ProfilographParameters::scale_type).

Шкала дистанций реализуется классом ProfilographDistanceScale. Данный класс наследуется от класса ProfilographBaseScale. Из доступных методов данный класс имеет только конструктор, который на вход принимает только один параметр – дескриптор родительского окна. Шкала будет автоматически занимать всю клиентскую область родительского окна.

Шкала времени реализуется классом ProfilographTimeScale. Данный класс наследуется от класса ProfilographBaseScale. Он имеет следующие методы:

  • ProfilographTimeScale( HWND parent_window, intoffset_from_border). Конструктор класса. Первым параметром принимает дескриптор родительского окна, вторым - величину смещения от правого края экрана;

  • voidcorrect_scale(). Данный метод заставляет передвинуть шкалу времени на один пиксель. Он должен вызываться при каждом приеме данных.

Вертикальная шкала (шкала глубин) реализуется классом ProfilographDepthScale. Данный класс наследуется от класса ProfilographBaseScale. В классе дополнительно определен только конструктор, принимающий на вход дескриптор родительского окна.

Отображением линий шкал на отображаемых данных занимается класс ProfilographScaleDraw. Данный класс имеет следующие методы:



  • ProfilographScaleDraw( HWND parent_window ). Конструкторкласса. Входной параметр – дескриптор родительского окна;

  • voiddraw_scale(HDCdc ). Данный метод отображает линии шкал (в соответствии с текущими настройками) на указанный контекст устройства;

  • voidcorrect_scale(). Данный метод сдвигает вертикальные линии на один пиксель влево;

  • voidresize(). Данный метод должен вызываться, когда меняются геометрические размеры родительского окна;

  • voidapplay_settings(). Данный метод должен вызываться, когда меняются настройки программы.

Линии маркеров глубин на отображаемых данных рисует класс ProfilographDepthsMark. Данный класс наследуется от класса ProfilographBaseScale. Класс ProfilographDepthsMark имеет следующие методы:

  • ProfilographDepthDraw( HWND parent_window ). Конструкторкласса. Входной параметр – дескриптор родительского окна;

  • voiddepth_receive(floatdata ). Данный метод вызывается, когда получены новые данные о глубине.

Отображением данных занимается класс ProfilographDraw. Данный класс принимает значение глубины и данные профилографа, производит их масштабирование в соответствии с текущими настройками, и отображает их.

Данный класс имеет следующие методы:

  • ProfilographDraw( HWND parent_window, BaseEventHandler* parent ). Конструктор класса. Принимает в качестве параметров дескриптор окна и указатель на объект родителя (для будущего использования);

  • voidresize(). Данный метод должен вызываться, когда родительское окно меняет свои размеры;

  • intdepth_receive(constFathometerPeriodData& data, const Real32Vector&profilograph_data ). Данный метод вызывается, когда поступают новые данные. Первый параметр – текущая глубина, второй – массив значений данных профилографа. Возвращаемое значение – число столбов отображенных данных (для шкалы времени всегда 1);

  • voidupdate(). Вызов данного метод приведет к перерисовке изображения на экране;

  • voidapplay_settings(). Данный метод должен вызываться, когда меняются настройки программы.

Подготовленные данные классом ProfilographDraw отображаются классом ProfilographBitmapDraw. Он имеет следующие методы:

  • ProfilographBitmapDraw( HWND parent_window ). Конструкторкласса. Принимает в качестве параметра дескриптор окна родителя;

  • voidresize(). Данный метод должен вызываться, когда родительское окно меняет свои размеры;

  • draw_data(int x, conststd::vector& data, intdata_count, int begin ). Данный метод вызывается, когда поступают новые данные. Первый параметр – текущая глубина, второй – массив значений данных профилографа, третий – количество данных, четвертый – первый пиксель, с которого надо производить отображение данных;

  • voiddraw_bitmap(HDCdc ). Данный метод отображает данные на указанный контекст устройства;

  • voidapplay_settings(). Данный метод должен вызываться, когда меняются настройки программы.


Амплитудные отметки отображаются классом ProfilographAmplitudeDraw. Он имеет следующие методы:

  • ProfilographAmplitudeDraw( HWND parent_window ). Конструкторкласса. Принимает в качестве параметра дескриптор окна родителя;

  • voidset_data( float depth, const Real32Vector& data ). Отображает амплитуду сигнала. Первый параметр – текущая глубина (не используется), второй – массив отображаемых данных;

  • voidset_data( float depth, const Int16Vector& data ). Тоже, что и предыдущий метод, отличие в формате принимаемых данных.


Пример окна отображения данных представлен на рисунке 3.4


Рисунок 3.4
2.6 ИСПОЛЬЗУЕМЫЕ ТЕХНИЧЕСКИЕ СРЕДСТВА
Программная компонента отображения данных профилографа предназначения для функционирования на платформе «Intel» под управлением ОС Windows.


2.7 ВЫЗОВ И ЗАГРУЗКА


Программная компонента отображения данных профилографа представляет собой встраиваемый модуль. Для ее создания необходимо создать объект класса ProfilographMainObject. В качестве параметра parent_window – указывается дескриптор родительского окна, data_queue – указатель на очередь с данными о глубине, profilograph_data_queue – указатель на очередь с данными профилографа, amplitude_queue – очередь с данными об амплитудных отметках.

Объект через очереди будет принимать и отображать данные профилографа.

При изменении размеров родительского окна необходимо вызывать метод resize.

При изменении настроек программы необходимо вызывать метод applay_settings.
    1. ВХОДНЫЕ ДАННЫЕ


Программная компонента отображения данных профилографа принимает на вход следующие данные:

  • FathometerPeriodData – данные о текущей глубине;

  • OnLineTestPeriodData – данные профилографа;

  • Int16Vector – данные амплитудных отметок.

2.9ВЫХОДНЫЕ ДАННЫЕ


Программная компонента отображения данных профилографа не имеет выходных данных.

3 Тестирование программы


Тестирование созданного программного продукта следует начинать с разработки плана тестирования. При этом следует помнить, что весь процесс тестирования можно разделить на три этапа:

    • Проверка в нормальных условиях. Предполагает тестирование на основе данных, которые характерны для реальных условий функционирования программы.

    • Проверка в экстремальных условиях. Тестовые данные включают граничные  значения области изменения входных переменных, которые должны восприниматься программой как правильные данные. Типичными примерами таких значений являются очень маленькие или очень большие числа и отсутствие данных. Еще один тип экстремальных условий — это граничные объемы данных, когда массивы состоят из слишком малого или слишком большого числа элементов.

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

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