46985 (588457), страница 3
Текст из файла (страница 3)
Use avviewer
в которой модуль AVVIEWER содержит интерфейсы и константы подпрограмм.
Поскольку fav – подпрограмм очень много (более 100), приведем описание только тех из них, которые используются в программе.
Подпрограмма | Что выполняет |
Запуск AV | |
favStartViewer | Запускает экземпляр AV |
favEndViewer | Завершает работу экземпляра AV |
Доступ к данным | |
favSetArray | Загружает в AV заданный массив |
Фильтрация данных | |
favUpdate | Вызывается, когда нужно обновить изображение, созданное AV, чтобы отобразить изменения, произошедшие с момента последнего обновления данных или начальной загрузки. |
Оси координат | |
favSetDimScale | Ассоциирует ось координат с массивом, содержащим разметку оси. |
favSetUseAxisLabel | Включает/отключает вывод заданных пользователем имен осей координат |
favSetAxisLabel | Задает имя указанной оси координат. |
Виды изображений | |
favSetGraphType | Задает видовой режим |
Разное | |
favSetArrayName | Задает текст, выводимый на заголовочной полосе AV |
favShowWindow | Отображает/скрывает окно AV |
1.4 Разработка программы визуализации
Задачей ставилось создание ПО, позволяющего просматривать результаты расчетов в графическом виде, использую при этом библиотеки AV и язык Compaq Visual Fortran (CVF).
Интерфейс с рассчитывающей программой был выбран файловый, т.е. входными данными для программы console являются два файла. Один – читающийся первым с начальными установками для массива, осей координат. Второй – непосредственно результаты. Тип файлов – не компрессированные, текстовые. Последнее выбрано исходя из соображений совместимости не только с Fortran-программами, но и с C/C++ и даже Pascal-программами.
Требования к выводу информации.
Для вывода были поставлены следующие задачи:
-
для двумерных массивов – вывод в 3D виде с возможностью анимации
-
для двумерных массивов – вывод в виде растровой карты (контрастной заливки)
-
вывод одномерных случаев (сечений массива) с возможностью анимации.
Выбор пользовательского интерфейса.
Из соображений простоты программы, ее размеров, а также легкости модификации был выбран консольный интерфейс. Благодаря этому программа имеет небольшой листинг, простую структуру и легка для понимания. Для добавления новых возможностей, новых команд нет необходимости изменять файлы ресурсов (как было бы в случае WIN32 приложения), и несколько различных подпрограмм. Достаточно лишь внести в условия проверки команд новую команду и написать подпрограмму ее обработки. В дополнение к этому следует заметить, что также повышена переносимость программы на различные платформы, т.е. достаточно перекомпилировать код (может быть с небольшими изменениями) на соответствующем компиляторе для нужной платформы (естественно для этой платформы должна быть версия AV).
Структура программы.
Программу можно логически разбить на 6 блоков, выполняющих каждый свои функции (в листинге (Приложение 1) они помечены комментариями):
-
Block_1: описание переменных и массивов. Все массивы имеют атрибут allocatable, для совместимости с DEC-атрибутом ARRAY_VISUALIZER. Рабочие массивы следующие: TDMas – трехмерный массив, в который заносятся все результаты расчетов. VMas – двумерный массив, отображаемый в 3D-виде и в растровой заливке. PXMas и PYMas – одномерные массивы, соответствующие сечениям по координатам. XAxis и YAxis – одномерные массивы, содержащие разбивку шкал.
-
Block_2: считывание служебной информации, результатов расчетов, формирование массивов шкал. Этот блок начинается с оператора call Help(), вызывающего соответствующую подпрограмму, показывающую команды программы. Потом задаются значения по умолчанию для имен и масштабов шкал. Далее организовывается ввод имен файлов – сначала файла со служебной информацией, потом файла с данными. Имена должны быть не больше 70 символов (включая пути). Далее идет считывание файла со служебной информацией, потом размещение массивов в памяти, после чего задаются массивы шкал и, наконец считываются отображаемые данные, которые распределяются между всеми массивами, участвующими в визуализации (начальное состояние: для PXMas i=1, для PYMas j=1, для всех массивов k=1)
-
Block_3: задание начальных установок AV с помощью подпрограмм API.
-
Block_4: блок обработки команд. Состоит из операторов if..then…end if . Если команда распознана, то передается управление соответствующей подпрограмме. При вводе команды newfile передается управление блоку 2, а при вводе команды exit передается управление блоку 5.
-
Block_5: завершение программы. Освобождение ресурсов, задействованных для связи с AV, освобождение памяти, выделенной под массивы и закрытие оболочки AV.
-
Block_6: блок описания подпрограмм. Все подпрограммы являются встроенными и содержатся в разделе contains. Все подпрограммы предназначены для обработки команд. Почти все из них (кроме Animat и Paus) не содержат локальных переменных, для упрощения взаимодействия, структуры, сокращения количества требуемых ресурсов.
Графически структуру программы можно изобразить как это сделано на рис 4 (оговоримся сразу – это не блок-схема программы, это только схематичное изображение структуры).
Как легко можно заметить, для модификации программы, добавления в нее новых команд и возможностей достаточно изменять только блоки 4 и 6, т. е. добавлять новые условия и подпрограммы. Так же желательно включать новые команды в подпрограмму Help. Это позволит пользователям в любой момент получить список команд программы.
Почти все подпрограммы, реализующие команды используют глобальные массивы TDMas, VMas, PXMas, PYMas, XAxis, YAxis – это позволяет не передавать их, а также оперировать ими, в случае необходимости в основной программе. Так же подпрограммы используют глобальные переменные plx, ply, pld и vis.
Каждая из них равна единице если соответствующий режим включен и равна нулю в противоположном случае. Эти переменные используются для того чтобы не переключаться каждый раз в новый режим. Также они используются подпрограммой Animat() для определения, какой массив ей заполнять.
Полный список всех подпрограмм и команд, им соответствующих:
Подпрограмма | Команда |
Помощь | |
Stat() | status |
Help() | help |
Анимация | |
Animat() | anim |
Виды отображения | |
PlainX() | plainx |
PlainY() | plainy |
Plain() | plain3d |
Visu() | visual |
Служебные | |
Paus() | pause |
ChangeDelay() | delay |
ChangeK() | k |
- | newfile |
- | exit |
Команды newfile и exit не имеют своих подпрограмм – они выполняются оператором goto n.
Разберем подпрограммы по видам:
-
Подпрограммы помощи: Help() и Stat(): в реализации этих подпрограмм нет ничего сложного – они просто выводят информацию с помощью оператора write.
-
Подпрограмма анимации: Animat() : эта подпрограмма реализована следующим образом – вначале спрашивается шаг моделирования, с которого необходимо начать анимацию, затем конечный шаг. После этого, если выбран один из одномерных случаев запрашивается соответствующая координата. После этого, в зависимости от текущего вида отображения меняется какой-либо массив, после чего происходит вызов подпрограммы
API AV favUpdate, потом с помощью пустого цикла идет задержка. Пустой цикл просто перебирает числа от 1 до значения переменной delay*106. Это повторяется циклически для всех необходимых значений k.
-
Подпрограммы вида отображения: Visu(), Plain(), PlainX, PlainY(): в них сначала происходит проверка на текущий тип отображения. Если он не совпадает с тем, который выбран сейчас, то производится подготовка оболочки AV (масштабы шкал, их названия, тип отображения). Потом заполняется необходимый массив и вызывается favUpdate.
-
Служебные подпрограммы: ChangeK(): изменяет текущий шаг моделирования (переменная k), затем заполняет все массивы новой информацией, после чего вызывает favUpdate. ChangeDelay(): изменяет значение переменной delay, которая влияет на время задержки при анимации, а также на время задержки при исполнении команды pause. Paus(): подпрограмма сделана специально для скриптового режима. Она обеспечивает задержку. Состоит из пустого вложенного цикла.
Таким образом мы разобрали структуру и принципы работы программы console.exe. Приступим теперь к ее описанию.
1.5 Описание работы программы визуализации
В этом подразделе будут рассмотрены следующие вопросы:
-
Терминология программы
-
Формат файла со служебной информацией (pre-файла).
-
Команды программы
-
Скриптовый режим программы
-
Запуска программы.
Терминология программы.
Прежде чем приступить к описанию работы с программой, необходимо пояснить несколько терминов, которые будут использоваться.
-
k – шаг моделирования. Т.е. если у вас прибор промоделирован в нескольких режимах (например, при разных потенциалах на контактах полупроводника), то число k отражает номер этого режима.
-
pre-файл – файл со служебной информацией (например, размерности массива)
-
скрипт – последовательность команд (сценарий), записанных в текстовый файл, которые программа может интерпретировать.
-
i – переменная в трехмерном массиве TDMas. Ее аналог – координата y
-
j – переменная в трехмерном массиве TDMas. Ее аналог – координата x.
-
Формат данных – формат по которому записываются данные в файл.
Формат pre-файла.
Pre-файл (от preset – предварительные установки)– это файл с установками, необходимыми для работы программы, а также с оформлением шкал.
Минимальная длина этого файла в строках – три, максимальная не ограничена, но читаться будут только первые восемь. Итак построчно:
-
Максимальное значение k. Формат: I2 (integer, две цифры)
-
Максимальное значение i. Формат: I2
-
Максимальное значение j. Формат: I2
Очень важно! Эти три строки обязательно должны быть в файле, иначе работа программы завершится с ошибкой. К тому же их нужно обязательно правильно и точно указать. Согласно этим параметрам формируются внутренние массивы программы и потом заполняются данными. Ошибка может повлечь за собой потерю данных или их искажение.
-
Коэффициент по оси X (j). Это позволяет отобразить данные не с теми координатами, которые предлагает AV, а с необходимыми вам. Т.е. индексы массива будут переведены, например, в микроны. По умолчанию равен 1 (т.е. на шкале отображаются индексы массива). Формат: E4.2 (т.е. вещественный, две цифры после запятой. Например, 0.50)
-
Коэффициент по оси Y (i). По умолчанию равен 1. Формат: E4.2
-
Имя оси X. Это имя отображается как имя заданной оси. Длина – не более 20 символов. По умолчанию : ‘X’.
-
Имя оси Y. Не более 20 символов. По умолчанию: ‘Y’.
-
Имя оси Z. (ось результатов). Не более 20 символов. По умолчанию: ‘Z’
Далее можно вставлять свои комментарии и пояснения. Программой они не учитываются.
Команды программы.