Государственный комитет РФ по высшему образованию.
Московский Государственный Институт Электронной Техники (Технический Университет).
Факультет ЭКТ.
Кафедра ПКИМС.
Пояснительная записка к
Дипломному Проекту
на тему
«Визуализация инженерных и научных расчетов»
Москва 2002г.
Оглавление
Введение
Раздел 1. Специальный раздел. Создание средств визуализации научных и инженерных расчетов.
Введение
1.1 Обзор средств визуализации расчетов
1.2 Описание визуализатора Compaq Array Visualizer
1.3 Описание библиотеки Array Visualizer
1.4 Разработка программы визуализации
1.5 Работа программы визуализации
1.6 Описание интерфейса между программой визуализации и прикладной инженерной программой.
1.7 Тестирование программы и результаты тестовых расчетов.
Заключение
Раздел 2. Технологический раздел. Технология создания программного обеспечения для визуализации.
Введение.
2.1 Этапы разработки программного обеспечения для визуализации инженерных расчетов.
2.2 Постановка задачи.
2.3 Создание структуры данных и интерфейса с расчетной программой.
2.4 Построение математической модели отображаемой информации.
2.4.1 Использование готовых библиотек.
2.4.2 Построение собственных математических моделей.
2.5. Создание интерфейса пользователя.
Заключение.
Раздел 3. Организационно-экономический раздел. Оценка целесообразности создания ПО с применением методики оценки конкурентоспособности.
Введение
3.1 Понятие конкурентоспособности.
3.2 Оценка конкурентоспособности.
Заключение.
Раздел 4. Производственно-экологическая безопасность и охрана труда. Анализ нормативных документов при работе с ПК.
Введение
4.1 Требования к производственному освещению
4.2 Защита от излучений
4.3 Электробезопасность
4.4 Пожарная безопасность
4.5 Защита от шума и вибраций.
4.6 Психофизические опасные и вредные производственные факторы.
4.7 Расчет воздухообмена.
Заключение
Литература ПЭБ
Выводы по дипломному проекту.
Используемая литература.
Приложение 1. Листинг программы console.
Введение
Язык Фортран - является одним из первых языков высокого уровня. Изначально он предназначался для инженерных и научных прикладных задач. С его помощью написано множество программ расчетов, решений уравнений и матричных преобразований. Этот язык предоставляет мощные математические средства не только при работе с действительными числами, но при работе с комплексными числами. По этой причине многие инженеры и ученые имеют свои библиотеки программ и подпрограмм на Фортране для решения своих задач. Помимо этого Фортран не стоял все эти годы на месте, а развивался (первая версия языка - Фортран-56, далее Фортран-77 и последняя Фортран-90 разработанная в 1993 году). Однако не смотря на развитие язык остается достаточно бедным в планах графического вывода и организации интерфейса пользователя. Для решения таких вопросов компании выпускающие компиляторы Фортрана создают для него свои графические библиотеки и визуализаторы. Наиболее современной версией Фортрана является Compaq Visual Fortran v.6.6. А визуализатором этой среды программирования является отдельный пакет Compaq Array Visualizer v1.5.
На производственной и преддипломной практике мне была поставлена задача изучить язык программирования Фортран и возможности визуализатора Compaq Array Visualizer и написать расширение возможностей этого пакета, для его настройки под специфические нужды разработчиков инженерных программ для моделирования работы полупроводниковых приборов. Изначально такое расширение проектировалось как библиотека подпрограмм Фортрана, но в последствии я пришел к выводу, что выгоднее и удобнее седлать отдельную программу. К тому же отдельная программа проектировалась как способная воспринимать не только результаты Фортран-программ, но и результаты C++, Pascal программ.
Второй задачей на дипломный проект было изучение и составление технологии создания визуализаторов. В Разделе 2 представлены этапы разработки программ и их подробное описание.
В организационно-экономическом разделе будет рассмотрена методика оценки конкурентоспосбоности и ее применение к системам и программам визуализации включая созданное программное обеспечение.
В производственно-экологическом разделе рассмотрены нормативы и нормативные документы при работе с персональными компьютерами. Рассмотрены вопросы освещения, защиты от излучений, электро- и пожаробезопасности, защиты от шума и вибрации, психофизические опасные и вредные факторы. Произведен расчет воздухообмена производственного помещения.
В приложении приведен листинг разработанной программы. Комментарии к нему и описание работы с программой приведены в специальном разделе.
Раздел 1.Специальный раздел. Создание средств визуализации научных и инженерных расчетов.
Введение
В наше время невозможно представить себе процесс проектирования без вывода результатов расчетов в графическом виде. Такой вид отображения гораздо более нагляден и удобен чем алфавитно-цифровой. Последние версии всех САПР имеют такую возможность. Но если прибор моделируется не в рамках какой-либо САПР, а собственной программой инженера, то вывод приходится организовывать самому. Работа с графикой, к тому же трехмерной очень сложна и требует специальных навыков, а так же времени создания таких подпрограмм и их тестирования и отладки.
Разрешить эту проблему помогают различные пакеты для графического отображения данных. Одним из таких пакетов является Compaq Array Visualizer v1.5.(далее AV) Этот пакет удобен в использовании. К тому же имеет ряд преимуществ по быстродействию на слабых машинах (тестирование производилось на P166 с 32Mb ОЗУ) и, в тоже время может работать и с последними технологиями в графических системах, такими как OpenGL.
Однако AV имеет достаточно сложный и развитый API для передачи данных из программы. Это опять же приводит к задаче изучения дополнительных функций. Целью данной дипломной работы является создание программы, использующей AV и данные программы инженера, позволяющее более просто, без дополнительного обучения, просматривать результаты в AV, т.е. организация более простого интерфейса между рассчитывающей программой и графическим пакетом.
К тому же моделирование может иметь много шагов и требовать просмотра полученных данных в разных представлениях. Таким образом созданная программа должна уметь запоминать все шаги и представлять графической оболочке те данные, которые в данный момент необходимы инженеру.
1.1 Обзор средств визуализации инженерных и научных расчетов
Использование вычислительной техники для визуализации и анализа научных данных стало уже традиционным. Это вполне естественно, ведь с задачей наглядного представления и анализа больших массивов числовой информации сталкиваются во многих областях. Это моделирование, обработка результатов экспериментов, анализ данных дистанционного зондирования, решении различных инженерных задач. Многим ученым, студентам и инженерам часто приходится иметь дело с двумерными наборами чисел. Такими наборами могут являться как результаты численного моделирования, так и данные, полученные с различных приборов. Отдельным практически важным примером таких данных являются цифровые изображения. Для получения, обработки и визуализации этих данных на компьютере требуется специальное программное обеспечение.
На сегодняшний день существует довольно большое количество средств обработки и визуализации научных данных, предназначенных для работы под операционными системами семейства UNIX, однако в своем абсолютном большинстве такие программы имеют весьма недружелюбный интерфейс. Несмотря на то, что работа с UNIX - системами очень распространена в научном сообществе, стремление современных пользователей переходить на дружелюбный и интуитивный интерфейс Windows очевидно. Быстрые темпы развития персональных компьютеров обуславливают переход все большего числа ученых и студентов именно на эти системы.
Задача обработки двумерных данных несомненно шире задачи обработки изображений. Трактуя данные в зависимости от их природы различным способом, например как алгебраические матрицы или z=F(x,y), мы можем применять к ним ряд методов алгебры, анализа, математической статистики, решать дифференциальные и интегральные уравнения. Для этих целей можно использовать системы инженерных вычислений. Наиболее мощной из распространенных систем такого рода можно назвать MatLab (http://www.mathworks.com/). У указанных систем есть два ограничения: это низкая скорость, с которой подобные системы ведут свои вычисления, и необходимость писать программу на специализированном внутреннем языке. Написание программы в свою очередь требует не только специальной подготовки, но и довольно большого времени на ее разработку и отладку. Когда же необходимо просто проверить возникшую идею, подготовить промежуточный результат или быстро оформить какую либо несложную работу, желательно иметь более специализированные и мобильные средства.
Более мобильным, но менее функциональным средством является популярный пакет MathCad (http://www.mathsoft.com/).
Он позволяет пользователю проводить достаточно сложные математические расчеты, обрабатывать и визуализировать различные числовые данные и даже писать простые программы на встроенном алгоритмическом языке. Слабость MatCad, в применении к работе с двумерными данными состоит в недостаточно удобных средствах визуализации, низкой скорости, а соответственно в плохой приспособленности к работе с большими объемами информации.
Визуализация двумерных экспериментальных данных часто рассматривается как отдельная задача. Такие данные обычно представляют в виде изображений или поверхностей в перспективной проекции. Описанные выше программы позволяют с определенными ограничениями производить такую визуализацию. Однако для ряда приложений более полезными и удобными оказываются другие системы. Например, во многих науках о Земле возникает задача построения цифровой модели той или иной поверхности, заданной лишь в нескольких точках. При помощи методов интерполяции такие данные переводятся в двумерные наборы чисел - строится так называемая цифровая модель поверхности. Визуально такую поверхность часто представляют либо в виде трехмерного изображения, либо в виде линий уровней. Для решения подобных задач наибольшее распространение получил пакет Surfer (http://www.goldensoftware.com/), который благодаря своей компактности и удобству завоевал симпатии многих исследователей. Основным назначением Surfer является обработка и визуализация двухмерных наборов данных, описываемых функцией типа z=F(x,y) Пакет позволяет строить цифровую модель поверхности, выполнять ряд вспомогательных операций с этой моделью и визуализировать данные различными способами.
Российская программа 3DField (field.hypermart.net) имеет аналогичное предназначение, однако меньший набор доступных средств и при этом обладает более приятным интерфейсом. Другая система научной графики TecPlot (http://www.amtec.com/) , имеет широкие возможности визуализации различных (не только двумерных) данных. В частности, система позволяет строить поверхности, векторные поля, визуализировать объекты, заданные в виде конечных элементов. К сожалению, при всех своих достоинствах она имеет явно перегруженный интерфейс. При всей красоте этих систем, следует заметить, что они более полезны для подготовки к печати статьи или отчета, нежели для повседневной работы исследователя. Но работу по представлению данных в виде, готовом для печати, эти системы выполняют на высоком уровне. К сожалению, такие программы рассчитаны на сравнительно небольшие объемы данных, что ограничивает область их применения.
Стоит также упомянуть о такой программе как Origin - она используется для визуализации различных инженерных расчетов, в том числе и расчетов в микроэлектронике.
Хотя в области микроэлектронных технологий большую популярность имеют визуализаторы, интегрированные в САПР для ИМС, такие как Cadence, ISE, но все-таки инженеры часто используют свои программы для моделирования приборов и возникает необходимость в визуализаторах их расчетов. В этом случае можно помимо вышеназванного Origin упомянуть о пакете фирмы Compaq - Array Visualizer. Этот пакет хорош тем, что может быть как интегрированным в среду разработки программ Visual Studio и работать с такими языками как Visual Basic, Visual C++, Compaq Visual Fortran (CVF), так и быть отдельной программой. Помимо этого он включает ActiveX-компоненты, которые могут быть использованы для WIN32 приложений.
Помимо этих - WINDOWS-пакетов, есть еще DOS-пакеты, например Mapple. Так как он является приложением DOS, то имеет недружелюбный интерфейс, однако является достаточно мощным.
Кроме вышеназванных пакетов и программ есть еще множество других средств для визуализации инженерных и научных расчетов - от сложных и универсальных, до простых, узкоспециальных. Но для своих специфических применений разработчики отдельных подсистем САПР разрабатывают свои пакеты или покупают и настраивают уже существующие стандартные пакеты.
1.2 Описание визуализатора Compaq Array Visulizer.
Array Visualizer (AV) фирмы Compaq позволяет наблюдать как данные числовых массивов, так и их графическое представление. AV содержит в качестве ядра графическую библиотеку OpenGL процедуры которой обеспечивают графический вывод. Дополнительно AV позволяет манипулировать графическими данными, предоставляя возможности для перемещения, поворота и масштабирования изображения, а также для изменения способа его представления на экране. AV содержит:
1. автономно запускаемое приложение, выполняющее отображение данных
2. библиотеку Aview процедур, вызываемых из приложений Фортрана и предназначенных для управления ОМ
3. ActiveX-процедуры библиотек Avis2D и AvisGrid
4. дополнительные визуальные средства
Массив, переданный AV, отображается в двух видах:
1. в виде числовой таблицы, выводимой в верхней части окна AV
2. в графическом виде как трехмерное изображение (3D-вид), или как цветовая карта, или как векторные граф, или как рисунок на плоскости.
Процедуры библиотеки Aview позволяют приложениям CVF или Visual C++ отображать (посредством OLE-автоматизации) данные массива, применяя AV. Также данные массива можно сохранить в виде файла, который загружается в AV в процессе его автономного использования.
ActiveX-процедуры (OCX) библиотек Avis2D и AvisGrid могут быть использованы любой поддерживающей автоматизацию средой, например Visual C++, Visual Basic или CVF, для отображения массивов в разнообразных графических видах. Процедуры Avis2D обеспечивают при выполнении графического вывода более 100 свойств, методов и событий; процедуры AvisGrid применяются для создания представляющих массивы таблиц и предоставляют около 30 свойств, методов и событий.
Возможны несколько вариантов употребления AV. Они, а также присущие им преимущества и недостатки перечислены в следующей таблице:
Вариант
Преимущества
Недостатки
Загрузка agl-файла, созданного ранее выполненным приложением
Не требует написания специального кода для вызова AV
Нет возможности автоматизировать изменение отображаемых данных
Использование отладчика CVF
Не требует написания специального кода, работает с проектом любого типа
Требует ручного задания свойств массива и настройки AV; не может быть использован в Visual C++ или Visual Basic, а также в Release-режиме CVF.
Использование fagl-подпрограмм или в случае С - agl-функций
Небольшое число процедур и , следовательно небольшие затраты на программирование, процедуры работают с проектами любого типа и в Debug-, и в Release-режиме.
Требует ручного задания свойств массива и настройки AV
Использование fagl- и fav- подпрограмм или в случае C++ - agl-функций и функций класса CAViewer.
Можно программно задавать свойства массива и выполнять настройки AV; процедуры работают с проектами любого типа; последовательно в одном экземпляре AV можно отображать несколько массивов.
Потребуется освоить большое число процедур (более 100); функции класса CAViewer нельзя применять в C (необходим C++).
Использование ActiveX-процедур библиотек Avis2D и/или AvisGrid
Дает возможность выводить создаваемые AV графические образы и таблицы данных без вызова AV; обеспечивает более быстрое
Употребляется только в Windows-приложениях Фортрана или MFC в случае Visual C++. Заметим, что в Visual Basic большинство
Воспроизведение образов и больше возможностей для настройки параметров
EXE-проектов могут использовать процедуры библиотек Avis2D и AvisGrid; потребуется освоить большое число Avis2D/AvisGrid-процедур; Avis2D и AvisGrid процедуры не могут отображать HDF и текстовые файлы.
Отображение массивов.
Массивы отображаются в следующих видах:
1) 3-D вид или Height Plot (рис 1):
рис 1.
1. Растровая карта (контрастная заливка) или Image Map(рис 2):
рис 2.
2.
Векторный граф, или Vector Graph. (В данной работе не используется).
рис. 3
3. График или Plane View (рис 3):
Перечисленные режимы могут быть заданы как в AV непосредственно, так и в программе, из которой AV запускается. В AV переключение режима выполняется либо из меню, либо в результате выбора соответствующей иконки.
Для вращения изображения достаточно разместить мышь на поле графического вывода, нажать левую кнопку мыши и затем, оставаясь на поле вывода, перемещать мышь в произвольном направлении.
1.3 Описание библиотеки функций Array Visualizer.
Ввиду сложности создания Windows-приложений, а также того, что ActiveX-компонента Avis2D не корректно отображает одномерные массивы было решено использовать непосредственно оболочку Array Viewer в совокупности с программой, расширяющей его возможности, а так же служащей более простым интерфейсом между программой инженера и AV. Для создания программы был применен подход с использованием fagl- и fav- процедур. Программа писалась на языке CVF v6.5.
Опишем процедуры API AV, встраивание которых в приложение позволяет запускать AV, передавать ему массив, управлять изображением.
FAGL - подпрограммы.
Синтаксис подпрограммы
Описание
faglClose(array,status)
Закрывает экземпляр AV. Если затем возникает потребность отобразить массив array снова, то достаточно вызвать лишь faglShow; вызова faglStartWatch выполнять не нужно
faglEndWatch (array, status)
Удаляет массив array из списка отображаемых массивов и освобождает ресурсы, связанные с array и используемые подпрограммами библиотеки.
faglGetShareName (array, filename, status)
Строка filename, возвращаемая этой подпрограммой, может быть передана процедурам Avis2D и AvisGrid как свойство FileName.
faglHide(array, status)
Делает экземпляр AV невидимым. Экземпляр AV станет видимым, если затем вызвать faglShow. Однако если экземпляр AV создан посредством favStartViewer, то вместо faglShow следует употреблять favShowWindow
faglLBound (array, lbnd, status)
Устанавливает левые границы измерений отображаемого массива в видах Data или Graph Views AV. По умолчанию массив отображается с границами, равными единице.
faglSaveAsFile (array, filename, status)
Сохраняет текущий массив в файле с расширением AGL. Такой файл может быть загружен и отображен в AV.
faglShow (array,
Создает экземпляр AV и отображает данные
status)
массива array. Так же делает экземпляр AV видимым.
faglStartWatch (array, status)
Добавляет массив array в список отображаемых массивов и возвращает дескриптор hv, который используется для доступа к массиву другими подпрограммами библиотеки. Фактически faglStartWatch использует системные ресурсы для приведения array к виду, необходимому для faglShow. Чтобы освободить эти ресурсы, следует вызвать faglEndWatch.
FaglUpdate(array, status)
Приводит в соответствие изображение с данными, хранящимися в массиве array. Употребляется, если приложение изменило отображаемый массив array с момента последнего вызова faglUpdate или faglShow и если есть необходимость обновить изображение. Если же экземпляр AV ассоциируется с массивом, созданным favStartViewer, а не faglShow, то вместо faglUpdate нужно вызвать favUpdate.
Параметры fagl подпрограмм:
Имя
Смысл/вид
Тип.
array
Имя отображаемого массива / входной
Числовой
status
Статус вызова fagl-подпрограммы. В случае успеха равен нулю/ выходной
integer(4)
filename
Строка, возвращаемая faglGetShareName/ выходной
CHARACTER(*)
filename
Имя файла без расширения, если файл пишется в директорию, из которой вызвано приложение, либо полное имя файла / входной.
CHARACTER(*)
lbnd
Массив ранга 1, размер которого равен рангу отображаемого массива / выходной
INTEGER(4)
title
Строка, отображаемая в заголовке экземпляра AV / входной
CHARACTER(*)
Для вызова приведенных выше подпрограмм в использующем их программном компоненте следует выполнить ссылку:
Use avdef ! Ссылка на модуль avdef.f90
Модуль AVDEF содержит интерфейсы fagl-подпрограмм.
Перечисленные подпрограммы обычно используются следующим образом:
1. до отображения массива array вызовите faglStartWatch с параметром array;
2. если необходимо отображать массив, имея нижнюю левую границу, отличную от единицы, примените faglLBound;
3. для отображения сообщения, сопровождающего выводимые данные, вызовите faglName;
4. для запуска AV и отображения массива array вызовите faglShow с первым параметром, равным array. AV будет функционировать до тех пор, пока не выполнена команда faglClose;
5. если хранимые массивом данные подверглись изменениям, то для их отображения вызовите faglClose;
6. для сохранения массива array в виде файла с расширением AGL (Array Graphing Language) вызовите faglSaveAsFile, использовав array в качестве первого параметра. При этом AV может быть некактивным;
7. при необходимости можно вызвать faglGetShareName и получить строку filename, позволяющую процедурам Avis2D и AvisGrid осуществлять доступ к памяти, занятой массивом.
8. после завершения просмотра массива вызовите faglEndWatch.
Для массивов отображаемых в AV рекомендуется использовать атрибут !DEC$ATTRIBUTES array_visualizer :: array. Действие этого атрибута таково: память, занимаемая массивом array, используется и AV и приложением. При отсутствии атрибута будут созданы две области данных array и при каждом обновлении массива после вызова faglUpdate данные будут копироваться из области, принадлежащей приложению, в область, используемую AV.
Заметим, что DEC-атрибут ARRAY_VISUALIZER может быть применен только с динамическими объектами, т.е. объектами, обладающими атрибутом PIONTER или ALLOCATABLE.
FAV - подпрограммы.
Fav - подпрограммы управляют AV и обеспечивают взаимодействие AV с приложением. Как правило, fav- и fagl- подпрограммы используются совместно. Fav - подпрограммы подразделяются на группы, имеющие названия:
· запуск AV
· доступ к данным
· зона вывода
· фильтрация данных
· палитра
· оси координат
· выбор
· виды изображений
· 3D вид
· растровая карта
· векторный граф
· отображение данных
· камера
· маркер
· разное
Работа с fav-подпрограммами станет возможной после выполнения ссылки:
Use avviewer
в которой модуль AVVIEWER содержит интерфейсы и константы подпрограмм.
Поскольку fav - подпрограмм очень много (более 100), приведем описание только тех из них, которые используются в программе.
Подпрограмма
Что выполняет
Запуск AV
favStartViewer
Запускает экземпляр AV
favEndViewer
Завершает работу экземпляра AV
Доступ к данным
favSetArray
Загружает в AV заданный массив
Фильтрация данных
favUpdate
Вызывается, когда нужно обновить изображение, созданное AV, чтобы отобразить изменения, произошедшие с момента последнего обновления данных или начальной загрузки.
Оси координат
favSetDimScale
Ассоциирует ось координат с массивом, содержащим разметку оси.
Задачей ставилось создание ПО, позволяющего просматривать результаты расчетов в графическом виде, использую при этом библиотеки AV и язык Compaq Visual Fortran (CVF).
Интерфейс с рассчитывающей программой был выбран файловый, т.е. входными данными для программы console являются два файла. Один - читающийся первым с начальными установками для массива, осей координат. Второй - непосредственно результаты. Тип файлов - не компрессированные, текстовые. Последнее выбрано исходя из соображений совместимости не только с Fortran-программами, но и с C/C++ и даже Pascal-программами.
Требования к выводу информации.
Для вывода были поставлены следующие задачи:
· для двумерных массивов - вывод в 3D виде с возможностью анимации
· для двумерных массивов - вывод в виде растровой карты (контрастной заливки)
· вывод одномерных случаев (сечений массива) с возможностью анимации.
Выбор пользовательского интерфейса.
Из соображений простоты программы, ее размеров, а также легкости модификации был выбран консольный интерфейс. Благодаря этому программа имеет небольшой листинг, простую структуру и легка для понимания. Для добавления новых возможностей, новых команд нет необходимости изменять файлы ресурсов (как было бы в случае WIN32 приложения), и несколько различных подпрограмм. Достаточно лишь внести в условия проверки команд новую команду и написать подпрограмму ее обработки. В дополнение к этому следует заметить, что также повышена переносимость программы на различные платформы, т.е. достаточно перекомпилировать код (может быть с небольшими изменениями) на соответствующем компиляторе для нужной платформы (естественно для этой платформы должна быть версия AV).
Структура программы.
Программу можно логически разбить на 6 блоков, выполняющих каждый свои функции (в листинге (Приложение 1) они помечены комментариями):
1. Block_1: описание переменных и массивов. Все массивы имеют атрибут allocatable, для совместимости с DEC-атрибутом ARRAY_VISUALIZER. Рабочие массивы следующие: TDMas - трехмерный массив, в который заносятся все результаты расчетов. VMas - двумерный массив, отображаемый в 3D-виде и в растровой заливке. PXMas и PYMas - одномерные массивы, соответствующие сечениям по координатам. XAxis и YAxis - одномерные массивы, содержащие разбивку шкал.
2. Block_2: считывание служебной информации, результатов расчетов, формирование массивов шкал. Этот блок начинается с оператора call Help(), вызывающего соответствующую подпрограмму, показывающую команды программы. Потом задаются значения по умолчанию для имен и масштабов шкал. Далее организовывается ввод имен файлов - сначала файла со служебной информацией, потом файла с данными. Имена должны быть не больше 70 символов (включая пути). Далее идет считывание файла со служебной информацией, потом размещение массивов в памяти, после чего задаются массивы шкал и, наконец считываются отображаемые данные, которые распределяются между всеми массивами, участвующими в визуализации (начальное состояние: для PXMas i=1, для PYMas j=1, для всех массивов k=1)
3. Block_3: задание начальных установок AV с помощью подпрограмм API.
4. Block_4: блок обработки команд. Состоит из операторов if..then…end if . Если команда распознана, то передается управление соответствующей подпрограмме. При вводе команды newfile передается управление блоку 2, а при вводе команды exit передается управление блоку 5.
5. Block_5: завершение программы. Освобождение ресурсов, задействованных для связи с AV, освобождение памяти, выделенной под массивы и закрытие оболочки AV.
6. Block_6: блок описания подпрограмм. Все подпрограммы являются встроенными и содержатся в разделе contains. Все подпрограммы предназначены для обработки команд. Почти все из них (кроме Animat и Paus) не содержат локальных переменных, для упрощения взаимодействия, структуры, сокращения количества требуемых ресурсов.
Графически структуру программы можно изобразить как это сделано на рис 4 (оговоримся сразу - это не блок-схема программы, это только схематичное изображение структуры).
Как легко можно заметить, для модификации программы, добавления в нее новых команд и возможностей достаточно изменять только блоки 4 и 6, т. е. добавлять новые условия и подпрограммы. Так же желательно включать новые команды в подпрограмму Help. Это позволит пользователям в любой момент получить список команд программы.
Почти все подпрограммы, реализующие команды используют глобальные массивы TDMas, VMas, PXMas, PYMas, XAxis, YAxis - это позволяет не передавать их, а также оперировать ими, в случае необходимости в основной программе. Так же подпрограммы используют глобальные переменные plx, ply, pld и vis.
Рис 4.
Каждая из них равна единице если соответствующий режим включен и равна нулю в противоположном случае. Эти переменные используются для того чтобы не переключаться каждый раз в новый режим. Также они используются подпрограммой 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.
Разберем подпрограммы по видам:
1. Подпрограммы помощи: Help() и Stat(): в реализации этих подпрограмм нет ничего сложного - они просто выводят информацию с помощью оператора write.
2. Подпрограмма анимации: Animat() : эта подпрограмма реализована следующим образом - вначале спрашивается шаг моделирования, с которого необходимо начать анимацию, затем конечный шаг. После этого, если выбран один из одномерных случаев запрашивается соответствующая координата. После этого, в зависимости от текущего вида отображения меняется какой-либо массив, после чего происходит вызов подпрограммы
API AV favUpdate, потом с помощью пустого цикла идет задержка. Пустой цикл просто перебирает числа от 1 до значения переменной delay*106. Это повторяется циклически для всех необходимых значений k.
3. Подпрограммы вида отображения: Visu(), Plain(), PlainX, PlainY(): в них сначала происходит проверка на текущий тип отображения. Если он не совпадает с тем, который выбран сейчас, то производится подготовка оболочки AV (масштабы шкал, их названия, тип отображения). Потом заполняется необходимый массив и вызывается favUpdate.
4. Служебные подпрограммы: ChangeK(): изменяет текущий шаг моделирования (переменная k), затем заполняет все массивы новой информацией, после чего вызывает favUpdate. ChangeDelay(): изменяет значение переменной delay, которая влияет на время задержки при анимации, а также на время задержки при исполнении команды pause. Paus(): подпрограмма сделана специально для скриптового режима. Она обеспечивает задержку. Состоит из пустого вложенного цикла.
Таким образом мы разобрали структуру и принципы работы программы console.exe. Приступим теперь к ее описанию.
1.5 Описание работы программы визуализации
В этом подразделе будут рассмотрены следующие вопросы: