Реферат по предмету "Информатика, программирование"


Расчет и анализ потерь активной мощности

Введение
 
Задачей дипломного проектаявлялось изучение оценки состояния ЭЭС и концепций построения математическогообеспечения информационно-вычислительных подсистем, знакомство с КП Компоновщикрасчетных схем, освоение Windows‑программирования, приобретение навыков работы винтегрированной среде Developer Studio и разработка некоторых элементов пользовательского интерфейсаКомпоновщика расчетных схем в операционной системе Windows.
В первой главе была выбранаматематическая модель режима, рассмотрены несколько критериев оценки состоянияЭЭС. Обоснован выбор метода обобщенной нормальной оценки для оцениваниясостояния ЭЭС, как обладающего существенными преимуществами по сравнению сдругими критериями. В качестве численного метода принят в общем случае методНьютона-Рафсона. Наряду с этим методом, при наличии некоторых условийцелесообразно применять метод Ньютона-Рафсона по параметру. Для решения системлинейных уравнений по итерационным формулам используется метод Гаусса (LU‑разложение).Вычисления производятся с учетом свойств разреженных матриц. Показаноразнесение вычислений вне реального времени (на подготовительном этапе) инепосредственно в реальном времени.
Во второй главерассматривается назначение и функциональные возможности программы Компоновщикрасчетных схем. Приведен алгоритм формирования расчетной схемы, удовлетворяющийтребованиям, предъявляемым к системам подготовки, отладки и поддержания данных.
В третьей главе описываютсяосновные особенности Windows‑программирования: процесс создания главного окна программы,процедуры обработки сообщений. Показываются отличия модальных и немодальныхокон диалога. Приводится описание панелей инструментов и состояния. Подробнопоказан процесс создания и работы строкового и оконного редакторов, реализацияфункций, предоставляемых пользователю.
В последней, четвертой,главе рассматривается вопрос из раздела техники безопасности на тему:«Разработка мероприятий по безопасной эксплуатации ПЭВМ».

1. Оценка состояния
1.1 Постановка задачи
 
Инвариантность поведенияавтоматизированной системы диспетчерского управления (АСДУ) относительновнешних возмущений, а, значит, обоснованность принятых решений и эффективностьуправлением режимом энергосистемы в реальном времени может быть обеспечена впринципе, если используется достоверная информация о параметрах режима и схемеэлектрических соединений, о составе и состоянии основного оборудования, опараметрах и характеристиках отдельных объектов, и т.д. Наиболее важным итрудным оказывается получение информации о текущих параметрах режима и схемеэлектрических соединений, требующей проведения измерений в реальном времени.Непосредственное измерение всех параметров режима невозможно, недостающая частьдолжна быть восстановлена расчетным путем. Низкая достоверность телеизмеряемойинформации, возможные отказы каналов связи, ограниченные возможностиинформационно-измерительной сети затрудняют непосредственное воспроизведениефизики явлений. Повысить достоверность телеизмерений (ТИ), восстановитьрасчетным путем недостающую часть параметров режима, воспроизвести физикуявлений позволяют методы теории оценок, которые делятся на две группы: методы,учитывающие априорную информацию об оцениваемых параметрах режима; методы, неучитывающие такую информацию.
Установившийся режимэлектроэнергетической системы (ЭЭС) описывается системой нелинейныхалгебраических уравнений
/>           (1.1)

где x, у – соответственно оцениваемые иизмеряемые параметры режима.
Форма записи (1.1) зависитот выбранной схемы замещения отдельных элементов и системы координат,разделения параметров режима на измеряемые и оцениваемые; конкретный составсистемы – составом используемых ТИ. Разделение параметров режима на оцениваемыеи измеряемые производится по смыслу решаемой задачи; руководствоваться следуетлишь двумя требованиями: в качестве оцениваемых принимаются те, зная которые,легко рассчитать все остальные параметры режима без решения дополнительнойсистемы уравнений; в конечном счете необходимо получить параметры режима,которые будут использованы в дальнейшем при оптимизации. По техническимсоображениям, а также для потребностей диспетчерского персонала, измеряютсяпотоки мощностей по ветвям и узлах, напряжения, токи в ветвях. Это и определяетвыбор оцениваемых параметров режима – модули и фазы или действительные и мнимыечасти узловых напряжений.
Связь между оцениваемыми иизмеряемыми параметрами режима
 
y = f(x)                 (1.2)
устанавливается уравнениямипотокораспределения, конкретный вид которых определяется выбранной формойзаписи, в частности:
à длясуммарной активной и реактивной мощности в i-ом узле
/>                (1.3)
à дляпотоков мощностей в начале ветви (i, j)

/>      (1.4)
где: n – число независимых узлов; /> – узловые напряжения (/>);/>/>– проводимость ветви (i, j) (/>); /> – проводимость на землю в узле i (/>).
После введения матричныхобозначений:
/>,         />
мы и получаем (1.2).
В измерениях, проводимых вреальной ЭЭС, всегда присутствуют погрешности, обусловленные погрешностямиизмерительной аппаратуры, помехами в каналах связи, неодновременностью замеров,поэтому вектор измерений /> может быть представлен суммойвектора истинных значений у и вектора ошибок w
/> у + w            (1.5)
Если предположить, чтослучайный вектор ошибок распределен по нормальному закону
/>              (1.6)
где R – ковариационная матрица ошибок измерений; m – число измерений, то наиболее правдоподобными считаются тезначения w, при которых достигается максимум плотности распределения (используетсяметод максимального правдоподобия, основанный на максимизации функции(1.6), называемой функцией правдоподобия. Эта показательная функциядостигает своего максимума, когда ее показатель минимален [1]).
В общем случае в качествемеры близости измеренных параметров режима /> и их расчетных значений f(x) может быть выбран критерий
/>          (1.7)
Задача оценки состояния ЭЭСсводится к нахождению такого вектора оцениваемых параметров режима, которыйдоставляет значения измеряемым, близкие к измеренным в смысле выбранногокритерия (1.7)
Оценка состояния ЭЭС – сложныйпроцесс, в котором можно выделить ряд основных этапов:
1. Выбор математической модели режима.
2. Построение критерия оценки.
3. Разработка численного метода и алгоритма оценивания.
Деление носит условныйхарактер, все этапы взаимосвязаны: свойства математической модели режимаявляются определяющими при построении критерия оценивания, алгоритм оцениваниядолжен учитывать как свойства выбранного критерия близости, так иматематической модели режима. В конечном счете, алгоритм оценивания долженудовлетворять следующим требованиям: высокая скорость и надежность сходимости,высокая точность и устойчивость результатов, высокое быстродействие,незначительный объем требуемой оперативной памяти ЭВМ.
Рассмотрим подробнее каждыйиз этапов.

1.2 Математическая модельрежима
Если в начале каждой ветвидерева измеряется поток активной и реактивной мощности, то соответствующаяматематическая модель режима имеет единственное решение в целом. Любая модельрежима, полученная из указанной добавлением новых измеряемых параметров режима,также имеет единственное решение [1].
Модель режима называетсякорректной, если [1]:
1.  для любого y существует решение (условие разрешимости);
2.  решение является единственным (условие однозначности);
3.  решение непрерывно зависит от у (условие устойчивости).
При нарушении хотя бы одногоиз этих условий задача оценки состояния называется некорректно поставленной(математическая модель называется некорректно поставленной).
1.3 Критерий оценки
На выбор критерия оценкивлияют: характер исследуемого процесса (статический или динамический), наличиеили отсутствие статистических данных об измеряемых и оцениваемых параметрах,корректная или некорректная постановка задачи. Определяющей являетсянекорректная постановка задачи оценивания состояния ЭЭС. Она проявляется в том,что сколь угодно малые погрешности измерений приводят к сколь угодно большимошибкам в результатах оценки. Метод максимального правдоподобия дает один изнаиболее распространенных критериев.
/>             (1.8)
причем оценка состояния ЭСсводится к нахождению

/>                 (1.9)
Метод, основанный на (1.9) (методвзвешенных наименьших квадратов), позволяет получить такую оценку, котораядоставляет значения измеряемым параметрам режима, близкие к измеренным в смыслеминимума дисперсии измерений.
Если матрица ковариацииошибок измерений R неизвестна или ее получение затруднено, вместо (1.8) используется
/>                (1.10)
и оценка находится изусловия достижения
/>             (1.11)
Метод, основанный на (1.11)(метод наименьших квадратов), позволяет получить такую оценку />, котораядоставляет значения измеряемым параметрам режима, близкие к измеренным в смыслеминимума суммы квадратов невязок.
Если система нелинейныхалгебраических уравнений совместна, то решения (1.9.) и (1.11) совпадают. Дляпереопределенных и несовместных нелинейных алгебраических уравнений решение(1.9) и (1.11), вообще говоря, не совпадают: решение (1.9) зависит от выбораматрицы ковариаций.
Некорректностьматематической модели режима отражается на свойствах этих критериев, характеререшения задачи оценивания:
1. нарушено требование однозначности – критерий оценки является многоэкстремальной функцией; каждоерешение модели режима – это точка экстремума критерия оценки;
2. нарушено требование разрешимости – выполняетсянеобходимое условие существования минимума, ранг матрицы частных производных />понижается;
3. нарушено требование непрерывности либо критерий оценки не имеет минимума в области определения (вцелом), либо выполняется необходимое условие существования минимума, рангматрицы частных производных />понижается.
Использование рассмотренныхметодов с учетом некорректности постановки задачи оценивания состояния ЭЭСстановится проблематичным.
Наличие априорных данных /> об оцениваемыхпараметрах и матрице ковариации ошибок задания априорных данных S позволяет использовать критерий
/>            (1.12)
и получить оценку из условиядостижения
/>     (1.13)
Метод, реализующий (1.13) (байесоваоценка), в ряде случаев позволяет локализовать нужное решение за счетиспользования априорных данных.
Каждый из рассмотренныхметодов имеет свои недостатки и достоинства. Общим недостатком являетсяневозможность использования для оценки состояния ЭЭС с учетом ее некорректнойпостановки.
Для решения некорректнопоставленных задач был предложен метод регуляризации

/>/>a>0,
где /> – сглаживающая или регуляризующаяфункция; /> – стабилизирующая функция; /> – параметррегуляризации.
Идея метода основана наиспользовании априорных сведений об оцениваемых параметрах: физический смыслимеют только ограниченные решения.
Проведенные исследования [1] показали:
1) если решение математической модели режима является неоднозначным,то локализовать нужное (действительное) не всегда удается;
2) возможны случаи, когда итерационный процесс решения (1.8)затягивается – в стабилизирующую функцию входят несоизмеримые по величинепараметры режима, и стремление ограничить решение приводит к чрезмерномусглаживанию;
3) целесообразность задания априори параметра регуляризации.
Недостатки методарегуляризации могут быть устранены после соответствующей его модификации.
1.4 Обобщенная нормальнаяоценка
Этот метод соединяет в себедостоинства метода наименьших квадратов, байесовой оценки, метода регуляризациии дает возможность решать задачу в ее некорректной постановке, обеспечиваяустойчивость вычислительного процесса и позволяя получать решение, наиболееблизкое к истинному режиму ЭЭС. Сущность метода обобщенной нормальной оценки состоитв следующем.
К оценке состояния ЭЭС можноподойти с позиций решения системы нелинейных алгебраических уравнений

/>              (1.14)
где: m – количество измеряемых параметров режима; n+1 – общее число узлов ЭЭС.
Если известны точныезначения измеряемых параметров режима у, то решение x математической модели режима (1.14)существует; оно может быть единственным или неединственным (в последнем случаенужное решение локализуется после согласования области определения и областизначений) [2].
Если известны приближенныезначения правых частей (1.14)
/>               (1.15)
где w – вектор случайных величин с математическим ожиданием М[w]=0, то для данной математической моделирежима в пределах заданного уровня погрешности измерений существует целый классрежимов, для каждого из которых решение
/>           (1.16)
может существовать (бытьединственным или неединственным) или не существовать, а сколь угодно малыеизменения измеряемых параметров могут приводить к сколь угодно большим изменениямрешения [2]. По существу f отображает множество различных решений в пространстве оцениваемыхпараметров в неразличимое множество измерений в пространстве наблюдений.
Для некорректной моделирежима требуется уточнить понятие «решение». Среди множества решений (1.15)естественно выбрать наиболее близкое к априорным данным /> и одновременнодоставляющее измеряемым параметрам режима значения, близкие к измеренным />. Если выбратьв качестве меры близости евклидову длину вектора, то этим требованиям отвечаетрешение, доставляющее минимум
/>, />.              (1.17)
Первое слагаемое (аналогобобщенного решения) характеризует близость измеренных /> и расчетных f(x) значений, второе слагаемое (аналогнормального решения) – близость априорных данных /> и решения x. Назначение параметра регуляризации /> – согласованиемеры близости в пространстве оцениваемых параметров и меры близости впространстве наблюдений (косвенно решается проблема согласования областиопределения и области значений).
Решение, доставляющееминимум (1.17), называется обобщенным нормальным решением, а метод,реализующий этот критерий, – методом обобщенной нормальной оценки (МОНО).
Параметр регуляризации /> обобщенноучитывает статистические свойства измерений и априорных данных, его значениезадается априори как
/>
где: /> - дисперсия измерений; /> - дисперсиязадания априорных данных.
При таком выборе параметрарегуляризации МОНО дает неухудшающуюся, устойчивую к погрешности измерений и кизменениям параметра регуляризации оценку, а верхняя норма матрицы ковариацииошибок оценки оказывается минимальной.
В качестве априорнойинформации, используемой при оценке состояния реальной ЭЭС, можно использовать:
1) результаты предыдущейоценки;
2) измеренные значения напряжений (их номинальные значения);ограниченность фаз узловых напряжений (d ® 0).
Второй случай менееблагоприятен. Часть априорных данных (например, измеренные напряжения)принадлежит области определения, другая часть (например, фазы узловыхнапряжений) может и не принадлежать к ним. Достоверность таких данных различна,полученная оценка параметра регуляризации находится в широком диапазоне (10¸105) [2]. Целесообразно для каждой группы априорныхданных ввести свои весовые коэффициенты:
а) CU1 – для измеренных напряжений;
б) CU2 – для номинальных напряжений (если измерений не проводилось);
в) Сd – для фаз узловых напряжений.
Тогда критерий оценкиперепишется в виде
/>,
где: /> – диагональная матрицас вышеуказанными весовыми коэффициентами, /> – априорные данные (для фазузловых напряжений это значения на к-ой итерации).
Для реальных ЭЭС: CU1 =10-2, CU2 =10-4, Cd=1, и диапазон измененияпараметра регуляризации сужается: 103
1.5 Численные методы решения
Принимая во внимание всевыше сказанное, в конечном счете задача оценивания состояния ЭЭС сводится крешению экстремальной задачи

/>                   (1.18)
по итерационной формуле
/>,              (1.19)
где: k – номер итерации; /> – направление продвижения на(к+1) – ой итерации из точки хк; /> – коэффициент, определяющий длинушага в направлении />; /> – приращение на к-ой итерации;начальное приближение /> задается.
В результате решения (1.19)будет получена последовательность />с определенными свойствами.
Для выбранной модели режимаи построенного критерия оценки эффективность алгоритма оценки состояния ЭЭСопределяется свойствами численного метода решения (1.19) и характеризуетсятакими критериями, как: скорость и надежность сходимости, точность решения,время счета, сложность алгоритма, требуемый объем оперативной памяти ЭВМ и т.д.
Численные методы решения(1.19) используют ту или иную аппроксимацию либо целевой функции
/>                   (1.20)
либо вектор-функции f(x). Наибольшее распространение получилметод Ньютона-Рафсона, в котором используется разложение в ряд Тейлоранелинейной вектор-функции f(x) в окрестности произвольной точки хк до членов первогопорядка малости включительно

f (x) = f (xk) + fx(xk) (x – xk).           (1.21)
Подстановка (1.21) в (1.20)дает:
/>
Из необходимого условияминимума следует:
/>,
тогда приращение на к-ойитерации находится
/>,
где нижний индекс указывает,по какому вектор-аргументу осуществляется дифференцирование; x – xk = Dxk; x, xk – достаточно близкие точки.
Итерационный процесс (1.19)продолжается до достижения заданной точности расчетов e:
½D xk½ £ e.
Для уменьшения времени счетапроверку можно производить только для модулей узловых напряжений.
Наличие стабилизирующейфункции позволяет получить решение независимо от начального приближения,итерационный процесс сходится за две-четыре итерации, а число итераций восновном определяется качеством ТИ и «тяжестью» режима [2].
Оценка, вообще говоря,зависит от параметра регуляризации a. При завышенных значениях a возможно появление т.н. эффекта сглаживания, который может бытьослаблен, если воспользоваться следующим подходом.
Пусть на к-ом шаге методомНьютона-Рафсона получена оценка хК и приращение DхК. Величина шага в направлении DхК может быть выбрана из условия достижения минимумасуммы квадратов небалансов мощностей, т.е.
/>
Приравняв /> к нулю и выразив изэтого равенства />, получим
/>.
Итерационный процесс,реализованный по формуле
/>,               (1.22)
продолжается до тех пор,пока не будет нарушено условие
/>,
где /> характеризует скорость уменьшениясуммы квадратов небалансов мощностей (обычно принимается равной 0.99).
Метод Ньютона-Рафсона попараметру целесообразно использовать в двух случаях:
а) когда имеются точныезначения измеряемых параметров режима у;
б) когда возникаютзатруднения с оценкой числового значения />.
Учитывая вышеперечисленныедостоинства метода обобщенной нормальной оценки, естественно будет использоватьего в дальнейшем для оценки состояния ЭЭС.
1.6 Вычислительные аспекты
Специфические особенностиЭЭС и МОНО играют решающую роль в рациональной организации вычислительногопроцесса.
Используемые при оценкесостояния ЭЭС матрицы – матрица узловых проводимостей, матрица частныхпроизводных, матрица коэффициентов системы линейных алгебраических уравнений
/> (1.23)
содержат незначительноечисло ненулевых элементов, т.е. являются разреженными: значительного сокращениявремени счета и существенной экономии используемого объема оперативной памятиЭВМ можно добиться, если хранить ненулевые элементы и оперировать с ними.
Память, используемая дляхранения разреженных матриц, состоит из двух частей: основной, содержащейчисловые значения, и накладной, предназначенной для хранения информации оместоположении в матрице хранимых значений. Чем сложнее схема хранения, тембольше накладная память и меньше основная, и наоборот. Время доступа к числовымзначениям и, следовательно, время счета зависит также от схемы хранения.Процесс вычислений при статичной схеме хранения, эффективный в смыслетребований к памяти и времени счета, может потребовать катастрофическихнакладных расходов при динамичном изменении схемы хранения. Из вышесказанногоследует, что схему хранения желательно выбирать с учетом процесса вычислений.
Для решения систем линейныхалгебраических уравнений вида (1.23)
/>/>/> />              (1.24)
(/>/> />, />)
используется метод Гауссаили его модификации. В методе Гаусса система уравнений (1.24) решается в двахода – прямой и обратный. При прямом ходе матрица коэффициентов приводится кверхней треугольной форме. Для этого к системе (1.24) с t неизвестными применяется (t -1) – шаговый процесс исключениянеизвестных. В результате на (t -1) – ом шаге будет получена треугольная система:
/>            (1.25)
Обратный ход метода Гауссасостоит в последовательном вычислении неизвестных из (1.25), начиная споследнего уравнения.
Рассмотренные преобразованияудобно реализовать в матричном виде. Если обозначить матрицу коэффициентов(1.25)

/>              (1.26)
и ввести матрицупреобразований наr – том шаге
/>             (1.27)
то
/>.                 (1.28)
Операция обращения матрицыпреобразования (1.27) равносильна инвертированию недиагональных элементов, апроизведение нижних треугольных матриц дает такую же матрицу, поэтому
 
/>                 (1.29)
где

/>                   (1.30)
Выражение (1.29) – т. н.LU – разложение матрицыА в виде произведения нижнейтреугольной матрицы L и верхней треугольной матрицы U.
Замена z=Uh показывает, что h можно получить, решая треугольныесистемы:
Lz=b           (1.31)
Uh=z          (1.32)
Выражение (1.31) – матричнаязапись заключительной части прямого хода метода Гаусса (пересчета свободныхчленов), а (1.32) – матричная запись обратного хода. Для симметричной матрицы
 
/>
где D – диагональная матрица с элементами
/> i=1,2…., t,/>
разложение
/>            (1.33)

называется /> – разложением.
Допущение относительнодиагональных элементов (/>), называемых главными, существенно.В противном случае для обеспечения численной устойчивости необходима та илииная форма выбора главного элемента, т.е. перестановки строк и (или) столбцов.Эти перестановки определяются в процессе решения системы уравнений путемкомпромисса между требованиями численной устойчивости и сохранениемразреженности. Для разреженных матриц общего вида нельзя установить порядокисключения неизвестных, пока не начались собственно вычисления. Более того,такой выбор главного элемента может привести к крайне нежелательному ростучисла ненулевых элементов.
Одно из основных достоинствМОНО состоит в том, что гауссово исключение не требует выбора главных элементовдля поддержания численной устойчивости. Это означает, что матрицу коэффициентовможно переупорядочить, не заботясь о численной устойчивости, причем до началачисленного решения: выбирается такая последовательность исключения неизвестных,которая приводит к появлению минимального числа ненулевых элементов. Еще однаважная особенность такого выбора исключаемой переменной состоит в симметричномпереупорядочении/>матрицы коэффициентов – имеетместо симметричная перестановка строк и столбцов [1].
Отмеченные особенности,присущие только МОНО именно в силу самого выбора параметра регуляризации, имеютдалеко идущие практические последствия. Если порядок исключения неизвестных независит от результатов реального процесса вычислений, то наиболее трудоемкаячасть расчетов, связанная с формированием структуры начального заполненияматрицы коэффициентов, ее упорядочением, резервированием места для новыхненулевых элементов, появляющихся в процессе реальных вычислений, может идолжна выполняться вне реального времени на подготовительном этапе. Схемахранения должна обеспечивать высокую эффективность вычислений в реальномвремени, оставаясь при этом статичной. В реальном времени реализуютсявычисления, связанные с формированием и решением системы уравнений.
Т.к. матрица коэффициентовсимметрична, достаточно пересчитывать и хранить только ее верхнюю треугольнуючасть. Если для каждой строки имеется список столбцов с ненулевыми элементами,то он полностью определяет, в каких строках элементы каких столбцовпересчитываются. Для удобства поиска в этом списке индексы столбцов желательнорасполагать в порядке возрастания. Например, если на r‑ом шаге в r‑ой строке ненулевые элементынаходятся в столбцах r, s, q, то пересчитываются коэффициенты в s‑ой (в столбцах s и q) и в q‑ой (в столбце q) строках.
В матрице частныхпроизводных каждому i‑му узлу соответствует два столбца 2i‑1, 2i, а в матрице коэффициентов А – блочнаяматрица второго порядка:
/>.
Измерению ветви (i, j) соответствуют четыре ненулевые блочныематрицы: Aii,Aij, Aji, Ajj(i
Для каждого такого блокаместоположение всех четырех элементов однозначно определяется номером строки иномером столбца блока, что равносильно указанию места установки измерительногодатчика. Аналогично, номер узла и список смежных с ним узлов определяют блокиненулевых элементов для измерения в r‑ом узле.
Элементы матрицыкоэффициентов хранятся блоками по строкам. Для каждого блока ненулевыхэлементов номер столбца указывается в массиве «индексы столбцов».Местоположение первого блока каждой строки задается в массиве «указательиндексов строк» [1]. Блочное представление дает существенную экономию памятикак при хранении, так и при формировании системы уравнений. В действительностикодировка расстановки ТИ непосредственно определяет местоположение блоковненулевых элементов в схеме хранения, следовательно, отпадает необходимостьзапоминания промежуточных результатов (матрицы частных производных).
Т.о., все необходимыепредпосылки для рациональной организации вычислительного процесса гарантируютсяМОНО. Наиболее трудоемкая часть расчетов должна выполняться вне реальноговремени на подготовительном этапе. К ним относятся:
1. Формирование структуры первоначального заполнения матрицыкоэффициентов. Она (структура) однозначноопределяется расстановкой ТИ и топологией электрической сети; формируется сучетом всех ТИ для типовой схемы электрических соединений, в которой всеобъекты, оснащенные устройствами телесигнализации (ТС), считаются включенными.Текущее состояние объектов, не оснащенных устройствами ТС, отражается висходной схеме электрических соединений. На подготовительном этаперезервируется место для всех возможных ненулевых элементов. Сформированнаятаким образом структура заполнения и, следовательно, схема ее хранения можетиспользоваться при оценивании состояния ЭЭС в реальном времени с любым составомТИ и при любых производимых в сети коммутациях, не приводящих к появлению новыхузлов: отключение части ТИ и (или) ветвей отражается только на числовыхзначениях элементов матрицы.
2. Упорядочение – определениепоследовательности исключения неизвестных. Это равносильно перенумерации узловрасчетной схемы. Предпочтительней такая последовательность исключениянеизвестных, которая приводит к появлению минимального числа новых ненулевыхэлементов. Наиболее часто используются два алгоритма динамическогоупорядочения. В первом из них на каждом шаге метода Гаусса исключаетсянеизвестная, соответствующая строка которой содержит минимальное числоненулевых элементов (если таких неизвестных несколько, то выбор произволен), вовтором – неизвестная, исключение которой приводит к появлению наименьшего числановых ненулевых элементов. Оба алгоритма дают достаточно близкие результаты, нопервый алгоритм динамического упорядочения предпочтительней, так как проще,требует меньших затрат времени и памяти.
3. Имитация исключения Гаусса с резервированием места под новыененулевые элементы и формирование схемы хранения матрицы коэффициентов. Структура первоначального заполнения (верхняя треугольная часть)запоминается блоками по строкам. С учетом установленной последовательностиисключения неизвестных резервируется место для новых ненулевых элементов.
4. Формирование матрицы узловых проводимостей. Для ускорения процесса поиска нужного элемента ненулевыеэлементы этой матрицы, несмотря на симметричность, хранятся полностью. Схемахранения аналогична рассмотренной ранее.
В реальном временивыполняются вычисления, необходимые собственно для оценивания ЭЭС:
1. Ввод текущих ТИ.
2. Формирование системы уравнений (1.24).
3. Решение системы уравнений (1.24).
4. Реализация одного шага итерационного процесса (1.19).
5. Проверка критерия окончания счета />. Если условие не выполняется,перейти к п. 2.
6. Расчет потокораспределения по результатам оценивания.
Разнесение расчетов вовремени существенно упрощает алгоритм оценивания состояния ЭЭС. Возможности,заложенные на подготовительном этапе, определяют как эффективность вычислений вреальном времени в смысле экономии памяти и уменьшения времени счета, так иособенности численной реализации:
а) хранение и обработкатолько верхней треугольной части матрицы коэффициентов системы уравнений(1.24);
б) блочное хранениененулевых элементов;
в) использование кодировкирасстановки ТИ, непосредственно определяющей местоположение блоков ненулевыхэлементов;
г) вычисление в неявном видематрицы частных производных без запоминания промежуточных результатов;
д) использование статичнойсхемы хранения.
Выделение подготовительногоэтапа, который будет называться формированием расчетной схемы, – это основнаяконцепция построения математического обеспечения информационно-вычислительнойподсистемы. Такой подход, поощряя раздельное программирование отдельных задач иих этапов, с одной стороны, максимально упрощает программы решения задачреального времени, с другой стороны, позволяет формировать расчетную схему, пригоднуюдля решения как можно большего числа задач [2].
1.7 Концепции построения математическогообеспечения СПУРТ
Математическое обеспечение (МО) – это совокупность баз данных, программное обеспечение (ПО)и математическая модель электрической системы вместе с кодировкой расстановкиТИ, ТС и схемами хранения используемых разреженных матриц.
Распределение исходныхданных между подсистемами оперативно-информационного управляющего комплекса(ОИУК), их подготовка и хранение организуются таким образом, чтобы максимальнооблегчить работу пользователя, наиболее полно использовать имеющуюся винформационно-управляющей подсистеме (ИУП) нормативно-справочную информацию ипостроить адаптивную математическую модель режима в реальном времени, и, крометого, ввести жесткую адресацию результатов расчетов для отображения ихна дисплеях с использованием форматов. Связь между исходными данными различныхЭВМ, исходными данными и данными, отображаемыми на различные виды терминалов,устанавливается с помощью таблицы соответствия, которая формируется на ЭВМинформационно-вычислительной подсистемы (ИВП) на подготовительном этапе. Наэтом этапе выполняется наиболее трудоемкая часть расчетов, не требующаярасчетов в реальном времени: обслуживание баз данных, выбор и просмотрпроизвольной информации о расстановке ТИ и ТС, проверка правильности подготовкиисходных данных, реализация принципов оптимального упорядочивания, формированиерасчетной схемы, определение местоположения ненулевых элементов и упаковкаразреженных матриц [3].
Имеющаяся на ЭВМ ИУПнормативно-справочная информация дополняется кодировкой расстановки ТИ и ТС, ана ЭВМ ИВП создается единая для МО база данных. Способы задания отдельныхэлементов, представления схем замещения и схем электрических соединенийдостаточно гибки и универсальны и допускают:
à упрощенноеи детальное представление схемы замещения;
à упрощенноеи детальное представление схем электрических соединений;
à любыесочетания представлений схемы замещения и схемы электрических соединенийрасчетного узла;
à физическоеи мнимое удаление элементов из базы данных (элемент не учитывается приформировании расчетной схемы, но сохраняется в базе данных);
à установкуизмерительного датчика в произвольной точке схемы замещения до (после)поперечной проводимости ветви.
Однозначное соответствиемежду данными различных ЭВМ обеспечивается кодировкой расстановки ТИ, ТС ииспользованием «позиционности». Указанное соответствие не меняется (оно можетдополняться) при вводе новых объектов и устройств телемеханики.
Программная проверкаправильности подготовки исходных данных (представление чисел, соответствиепоследовательности чисел определенному элементу расчетной схемы, допустимыеотношения и предельные значения параметров системы и режима, соответствиеклассов напряжений, связности графа электрической сети, расстановка ТИ поусловию полноты математической модели режима, соответствие кодировкирасстановки ТИ, ТС и расчетной схемы, связность узла расчетной схемы поисходным значениям ТС, контроль текущих размерностей массивов и т.п.)осуществляется автоматически при формировании эталонной расчетной схемы [3].
Расстановка ТИ должнавыбираться из условия существования и единственности решения математическоймодели режима ЭЭС. Несмотря на ограниченность числа ТИ, возможные их потери,модель режима, по крайней мере, должна быть полной. С этой целью предусмотреноиспользование априорных данных, данных режимного дня, эксплуатационных замеров.Указанные данные могут вводиться как вручную (оперативно, в реальном времени),так и автоматически (программно).
База данных рассматриваетсякак автономная, локальная, открытая система, допускающая поэтапное накапливаниеи расширение исходных данных по мере освоения задач и подключения новыхкомплексов программ. МО независимо от структуры и содержания базы данных, т. к.используются две базы данных: основная (форматные записи) и рабочая(бесформатные записи). Из основной базы данных в рабочую копируется необходимаяинформация [3].
Достигнут разумныйкомпромисс между противоречивыми требованиями сокращения времени счета иуменьшением используемой оперативной памяти за счет:
à разнесениявычислений как по времени, так и между отдельными программными продуктами;
àиспользования статичных схем хранения разреженных матриц;
à теснойувязки кодировки расстановки ТИ и ТС и блочных схем хранения, применения единойматематической модели ЭС.
Такой подход позволилформировать расчетную схему ЭС вне реального времени (на подготовительном этапе).
Отдельные компоненты ПОвзаимодействуют через единую модель электрической системы, подстраиваемую подвнешние условия за счет:
à коррекциикодировки расстановки ТИ и ТС, текущих значений ТИ, ТС и параметров элементовэлектрической системы в реальном времени (адаптивный контур);
àоперативной коррекции вручную расстановки ТИ. значений ТС и параметровэлементов электрической системы;
à ручной(вне реального времени) коррекции данных на любом уровне предусмотреннойиерархии исходных данных.
Эталонные расчетные схемы,учитывающие ввод новых объектов и (или) устройств телемеханики, а такжетребующие ручной коррекции расстановки ТИ, формируются заблаговременно.
Предусмотрена возможностьодновременного хранения десяти эталонных расчетных схем, отражающих наиболеехарактерные схемы электрических соединений. С этой целью создана база расчетныхсхем, из которой при решении предусмотренных задач одна из эталонных схем(рабочая) копируется в рабочие файлы.
Для моделирования, анализа ихранения режимов создана база режимов (до 12 режимов). Предусмотренавозможность записи произвольного режима, являющегося результатом решения однойиз задач, в базу режимов.
Все расчеты, включая и формированиеотображаемых на дисплеях кадров, производятся на ЭВМ ИВП. В ИВП передаютсятекущие ТИ и ТС циклически или (и) спорадически, информация о местоположенииустройств телемеханики посылается только по запросу, в обратном направлениипередаются отображаемые на дисплеях кадры [3].
Таким образом,математическое обеспечение ИВП удовлетворяет жестким требованиям, характернымдля задач реального времени.
Наиболее трудоемкая частьрасчетов, не требующая вычислений в реальном времени, реализована в КП Компоновщикрасчетных схем.
 
 

2. Комплекс программкомпоновщик расчетных схем
2.1 Назначение комплексапрограмм. Компоновщик расчетных схем
Компоновщик расчетных схем –сервис-оболочка баз данных математического обеспечения, предназначенная дляоблегчения и ускорения процесса подготовки и отладки исходных данных, созданияи поддержания основных баз данных, реализации всех трудоемких расчетов, несвязанных с вычислениями в реальном времени, в частности, формировании(компоновки) эталонных расчетных схем.
КП поддерживает единый стильдиалога с пользователем, имеет достаточный набор подсказок и подменю,существенно упрощающих его освоение и работу. Такие возможности, каккомбинирование параметров в любом сочетании, совместный анализ параметровразличных элементов, классификация параметров по группам, программноеобнаружение ошибок, автоматический поиск источника ошибки значительно облегчаютнаиболее тяжелый и трудоемкий процесс – подготовку и отладку исходных данных.
Компоновщик является базовымкомплексом МО СПУРТ, обеспечивает взаимную увязку всех данных ИУП и ИВП,формирует единую математическую модель электрической системы для всех решаемыхтехнологических задач.
2.2 Алгоритм формированиярасчетной схемы
Исходные данные формируютсяиз различных источников, которыми могут быть ИУП (расстановка ТИ, ТС, значенияТИ, ТС) или, в перспективе, банк данных (параметры системы). Каждый источникможет создаваться и поддерживаться независимо и самостоятельно.
При подготовке, отладке и, вособенности, поддержании исходных данных возникает серьезное противоречие: содной стороны, желательно иметь надежные, практически неизменные исходныеданные, с другой стороны, математическая модель электрической системы должнабыть достаточно гибкой, легко и оперативно подстраиваемой под изменившиесяусловия (в частности, при изменениях схемы электрических соединений и априоризадаваемых мощностей узлов, не оснащенных устройствами телемеханики).
Возможность независимого исамостоятельного создания и поддержания любого уровня установленной иерархииисходных данных (рис. 2.1) решает данную проблему: основная база данныхдолжна содержать полный набор исходных данных, и изменения вносятся по меревведения новых объектов энергосистемы и устройств телемеханики; рабочая базаданных должна отражать оперативное состояние объектов энергосистемы, неоснащенных устройствами телемеханики.
/>
 

Рис. 2.1.Иерархия исходных данных
При таком подходе изменения,вносимые в источники данных, могут автоматически переноситься в базы данных;изменения в основной базе данных – в рабочую базу данных. Вместе с тем любойуровень этой иерархии может создаваться и поддерживаться независимо исамостоятельно.
Сформулированным требованиямотвечает алгоритм формирования расчетной схемы, реализованный по схеме, котораяизображена на рис. 2.2. Порядок выполнения алгоритма зависит от того,какая задача решается: первоначальная подготовка и отладка исходных данных иливнесение изменений на разных уровнях иерархии исходных данных.

/>

Рис. 2.2.Структурная схема алгоритма формирования расчетной схемы
1. Передать из ИУП расстановку ТИ.
2. Передать из ИУП расстановку ТС.
3. Передать из ИУП текущие значения ТИ и ТС или данные из архива.
4. Подготовить параметры узлов с помощью Редактора.
5. Транслировать параметры узлов.
6. Просмотреть Протокол: если обнаружены ошибки, перейти к п. 4;в противном случае выполнить п. 7.
7. Подготовить параметры ветвей с помощью Редактора.
8. Транслировать параметры ветвей.
9. Просмотреть Протокол: если обнаружены ошибки, перейти к п. 7;в противном случае выполнить п. 10.
10. Отредактировать расстановку ТИ.
11. Транслировать файл расстановки ТИ основной базы данных.
12. Просмотреть Протокол: если обнаружены ошибки, перейти к п. 10;в противном случае выполнить п. 13.
13. Отредактировать расстановку ТС.
14. Транслировать файл расстановки ТС основной базы данных.
15. Просмотреть Протокол: если обнаружены ошибки, перейти к п. 13;в противном случае выполнить п. 16.
16. Отредактировать значения ТИ и ТС (соответствующий файлтранслируется автоматически).
17. Подготовить с помощью Отладчика:
a) управляющую информацию;
b) вспомогательные массивы.
18. Если необходимо,изменить с помощью Отладчика:
a) параметры узлов;
b) параметры ветвей;
c) расстановку ТИ;
d) расстановку ТС.
19. Сформировать (скомпоновать) расчетную схему.
20. Просмотреть Протокол: если обнаружены ошибки, то либо перейти к п. 4(если необходимо изменить и основную базу данных), либо перейти к п. 7(если изменяется только рабочая база данных); в противном случае выполнить п. 21.
21. Получить необходимые выходные документы.
22. Завершить работу.
Все функции КП Компоновщикрасчетных схем, позволяющие ему работать по приведенному алгоритму, можноразбить на пять основных групп: трансляция, отладка, компоновка, утилиты дляработы с файлами и вывод выходных документов. Рассмотрим их более подробно.
2.3 Основные функции КПКомпоновщик расчетных схем
Главное меню Компоновщикарасчетных схем включает:
àкопирование, обмен файлами с ИУП, просмотр файлов (Утилиты);
à подготовкуисходных данных, поддержание и отладку основной базы данных (Трансляция);
à создание,поддержание и отладку рабочей базы данных (Отладка);
àформирование расчетных схем и поддержание базы расчетных схем (Компоновка);
à выводвыходных документов (Документы).
Подробное описание меню иподменю приводится ниже.
2.3.1 Утилиты
С помощью утилит выполняютсявспомогательные функции: копирование, обмен файлами с ИУП, просмотр файлов.
Копирование. Расчетная схема с выбранным номером копируется из базы расчетныхсхем в рабочие файлы (становится рабочей).
Прием ТИ и ТС из ИУП. Данные могут быть как архивными, так и текущими. Для архивныхданных ТИ (ТС передаются только для текущего времени) запрашивается дата ивремя. Разница между текущим и указанным временем не должна превышать 24 часа.При успешном обмене на ПЭВМ создается файл с заданной спецификацией.
Прием РТИ из ИУП. После запроса ИУП предлагается указать спецификацию файла. Приуспешном обмене на ПЭВМ создается файл с указанной спецификацией.
Прием РТС из ИУП. После запроса ИУП предлагается указать спецификацию файла. Приуспешном обмене на ПЭВМ создается файл с указанной спецификацией.
Просмотр файлов. Вспомогательная функция, предназначенная для оперативноговизуального контроля файлов (предусмотрен запрос спецификации просматриваемогофайла). Рекомендуется использовать для проверки файлового обмена и выходныхдокументов.
 
2.3.2 Трансляция
Назначение – создание,поддержание и отладка основной базы данных. Файлы основной базы данных могутсоздаваться либо самостоятельно и независимо с помощью встроенного Редактора,либо с помощью утилит. Редактор также позволяет поддерживать основную базуданных, обрабатывать протоколы трансляции и компоновки.
В процессе трансляции файлыосновной базы данных преобразуются в файлы рабочей базы данных. Сообщения обобнаруженных ошибках заносятся в Протокол, содержимое которого после трансляциилюбого файла или компоновки расчетной схемы полностью обновляется.
В подменю «Трансляция»предлагается сначала выбрать тип исходных данных: параметры узлов, параметрыветвей, расстановка ТИ, расстановка ТС, значения ТИ, значения ТС. Затем выбратьрежим работы: трансляция, Редактор, Протокол (Протокол доступен, если онсоздан).
Параметры узлов. Параметры узлов могут создаваться и поддерживаться с помощьюРедактора независимо и самостоятельно.
Каждому узлу соответствуетстрока, состоящая из нескольких полей. Назначение каждого поля поясняетсятитрами.
В процессе редактированияпараметров узлов для пользователя доступны вызовы функций, предоставляющихследующие возможности:
à Помощь.
à Локальнаяпомощь. Выводится подсказка, поясняющая назначение каждого поля, какиепараметры вводятся и их условные обозначения, единицы измерения (если этонеобходимо).
à ВызовПротокола.
à Титры.В ряде случаев, в особенности при отладке, необходимо редактировать лишьопределенную комбинацию параметров. Кроме того, для удобства желательнозадавать параметры в любой комбинации и в любой последовательности. Все этивозможности реализуются данной функцией.
à Поиск.Данная функция облегчает и ускоряет поиск нужного параметра.
à Редактированиеназваний узлов.
Параметры узловредактируются в оперативной памяти, предусмотрен запрос на запись.
Параметры ветвей. Параметры ветвей могут создаваться и поддерживаться с помощьюРедактора независимо и самостоятельно.
Каждой ветви соответствуетстрока, состоящая из нескольких полей. Назначение каждого поля поясняетсятитрами.
В процессе редактированияпараметров ветвей для пользователя доступны вызовы тех же функций, что и приредактировании параметров узлов (см. «Параметры узлов»).
Параметры ветвейредактируются в оперативной памяти, предусмотрен запрос на запись.
Расстановка ТИ. Файл расстановки ТИ может быть создан с помощью утилит, еслинормативно-справочная информация ТИ ИУП дополнена соответствующей кодировкойрасстановки. Редактор позволяет создавать и поддерживать этот файл независимо исамостоятельно.
Каждому ТИ отводитсянесколько полей. Назначение каждого поля поясняется титрами (приведены условныеобозначения).
В процессе редактированиярасстановки ТИ для пользователя доступны вызовы тех же функций, что и приредактировании параметров узлов (см. «Параметры узлов»).
Расстановка ТИ редактируетсяв оперативной памяти, предусмотрен запрос на запись.
Расстановка ТС. Файл расстановки ТС может быть создан с помощью утилит, еслинормативно-справочная информация ТС ИУП дополнена соответствующей кодировкойрасстановки. Редактор позволяет создавать и поддерживать этот файл независимо исамостоятельно.
Каждой ТС отводитсянесколько полей. Назначение каждого поля поясняется титрами (приведены условныеобозначения).
В процессе редактированиярасстановки ТС для пользователя доступны вызовы тех же функций, что и приредактировании параметров узлов (см. «Параметры узлов»).
Расстановка ТС редактируетсяв оперативной памяти, предусмотрен запрос на запись.
Значения ТИ. Редактируются значения ТИ, переданные из ИУП с помощью утилит.Такая необходимость возникает когда либо часть ТИ заведомо ошибочна, либо частьТИ отключена, либо результаты измерений нужно согласовать с данными издиспетчерской ведомости, в частности при обработке данных режимного дня.
Каждому ТИ соответствуетстрока, состоящая из нескольких полей (указывается кодировка расстановки ТИ иизмеренное значение). Назначение полей поясняется титрами (приведены условныеобозначения).
В процессе редактированиязначений ТИ для пользователя доступны вызовы тех же функций, что и приредактировании параметров узлов (см. «Параметры узлов»), за исключением вызоваПротокола.
Значения ТИ редактируются воперативной памяти, причем для редактирования доступны только измеренныезначения, и транслируются автоматически (т.е. использовать режим трансляциинеобязательно). Предусмотрен запрос на запись.
Значения ТС. Редактируются значения ТС, переданные из ИУП с помощью утилит (длятого, чтобы передать значения ТС из ИУП, необходимо при обмене файламизапросить текущие данные). Такая необходимость возникает когда либо часть ТСзаведомо ошибочна, либо часть датчиков ТС отключена, либо значения ТС нужносогласовать с текущей схемой электрических соединений.
Каждой ТС соответствуетстрока, состоящая из нескольких полей (указывается кодировка расстановки ТС,исходное и текущее значение ТС). Назначение полей поясняется титрами (приведеныусловные обозначения).
В процессе редактированиязначений ТС для пользователя доступны вызовы тех же функций, что и приредактировании параметров узлов (см. «Параметры узлов»), за исключением вызоваПротокола.
Значения ТС редактируются воперативной памяти, причем для редактирования доступны только текущие значения,и транслируются автоматически (т.е. использовать режим трансляциинеобязательно). Предусмотрен запрос на запись.
 
2.3.3 Отладка
Назначение – создание,поддержание и отладка рабочей базы данных. Файлы рабочей базы данных могутсоздаваться независимо и самостоятельно с помощью Отладчика или послетрансляции соответствующих файлов основной базы данных. Отладчик позволяеттакже поддерживать рабочую базу данных, обрабатывать как протокол трансляции,так и протокол компоновки.
Предусмотрен широкий наборфункций, облегчающих и ускоряющих отладку. В частности, реализованы различныевозможности сортировки, комбинирования, поиска, совместного анализа исходныхданных. Полностью автоматизирован поиск источника ошибки.
В подменю «Отладка»предлагается выбрать тип исходных данных: управляющая информация, параметрыузлов, параметры ветвей, вспомогательные массивы, расстановка ТИ, расстановкаТС.
Отлаженные исходные данныемогут быть записаны в рабочую базу данных с возвратом в главное меню (функция«Сохранить»). При выходе из меню отладки, если отлаженные данные не былисохранены, последует запрос на запись.
Параметры узлов. Параметры узлов могут создаваться и поддерживаться с помощьюОтладчика независимо и самостоятельно.
Каждому узлу соответствуетстрока, состоящая из нескольких полей. Назначение каждого поля поясняетсятитрами (приведены условные обозначения).
Для облегчения и ускоренияотладки параметров узлов предлагаются различные возможности сортировки,комбинирования, поиска, совместного анализа исходных данных. Параметры узловможно сортировать в порядке возрастания номеров узлов.
В процессе отладкипараметров узлов для пользователя доступны вызовы функций, предоставляющихследующие возможности:
à Редактированиеназваний узлов.
à ВызовПротокола. Протокол доступен либо после трансляции любого файла основнойбазы данных, либо после компоновки расчетной схемы.
à Помощь.
à Поискпо номеру узла. Данная функция облегчает и ускоряет поиск нужного узла поего номеру; одновременно проверяется наличие дубля.
à Поискпо номеру отображения узла. Данная функция облегчает и ускоряет поискнужного узла по его номеру отображения; одновременно проверяется наличие дубля.
à Списокмнимо удаленных узлов. Функция избавляет от необходимости поиска мнимоудаленных узлов и облегчает удаление и включение узлов при формированиирасчетной схемы.
à Априорныеданные. Функция эффективна при оперативном изменении как состава узлов саприорными данными, так и самих априорных данных.
à Связи.Наибольшие трудности вызывает поиск и устранение ошибок, обусловленныхнесоответствием параметров узлов и ветвей. Функция позволяет анализироватьфрагмент электрической сети, для чего по определенному алгоритму формируетсясписок узлов, связанных с указанным. Соответствие параметров выявленных такимобразом связей и параметров ветвей, примыкающих к указанному узлу, можнопроверить визуально, воспользовавшись соответствующей функцией Отладчика.
à Справка.Предоставляется информация об использованных номерах отображений узлов, чтопозволяет избежать возможное их дублирование.
Параметры ветвей. Параметры ветвей могут создаваться и поддерживаться с помощьюОтладчика независимо и самостоятельно.
Каждой ветви соответствуетстрока, состоящая из нескольких полей. Назначение каждого поля поясняетсятитрами (приведены условные обозначения).
Для облегчения и ускоренияотладки параметров ветвей предлагаются различные возможности сортировки,комбинирования и поиска, совместного анализа исходных данных. Параметры ветвейможно сортировать в порядке возрастания номеров инцидентных узлов.
В процессе отладкипараметров ветвей для пользователя доступны вызовы функций, предоставляющихследующие возможности:
à ВызовПротокола. Протокол доступен либо после трансляции любого файла основнойбазы данных, либо после компоновки расчетной схемы.
à Помощь.
à Узел.Одна из возможностей выделения группы ветвей (выбираются ветви, примыкающие куказанному узлу).
à Ветвь. Даннаяфункция облегчает и ускоряет поиск нужной ветви по ее номеру; одновременнопроверяется наличие дубля.
à Поискмнимо удаленных ветвей. Функция избавляет от необходимости поиска мнимоудаленных ветвей и облегчает удаление и включение ветвей при формированиирасчетной схемы.
à Трансформаторы.Функция предназначена для отладки параметров трансформаторных ветвей.
à Реакторы.Функция предназначена для отладки параметров реакторов.
à Справка.Предоставляется информация об использованных номерах ветвей, что позволяетизбежать возможного их дублирования.
Расстановка ТИ. Файл расстановки ТИ рабочей базы данных создается послетрансляции файла расстановки ТИ основной базы данных. Отладчик позволяетсоздавать, поддерживать и отлаживать этот файл независимо и самостоятельно.
Для облегчения и ускоренияотладки расстановки ТИ предлагаются различные возможности сортировки,комбинирования, поиска, совмещения с фрагментом электрической сети. ТИ можносортировать в порядке возрастания их номеров.
В процессе отладкирасстановки ТИ для пользователя доступны вызовы функций, предоставляющихследующие возможности:
à ВызовПротокола. Протокол доступен либо после трансляции любого файла основнойбазы данных, либо после компоновки расчетной схемы.
à Помощь.
à Узел.Одна из возможностей выделения группы ТИ: выбираются ТИ, датчики которыхустановлены возле (в) указанного узла; одновременно выводится фрагментэлектрической сети (список ветвей, примыкающих к указанному узлу), чтозначительно облегчает проверку соответствия кодировки расстановки ТИ ирасчетной схемы.
à Ветвь.Функция облегчает и ускоряет поиск датчиков ТИ, установленных на ветви.
à Списокмнимо удаленных ТИ. Функция избавляет от поиска мнимо удаленных ТИ иоблегчает отключение и включение датчиков ТИ при формировании расчетной схемы.
à Поиск.Данная функция облегчает и ускоряет поиск нужного ТИ по его номеру;одновременно проверяется наличие дубля.
à Код.Автоматически восстанавливается код измеряемого параметра режима ранее мнимоудаленного ТИ независимо от срока давности.
Расстановка ТС. Файл расстановки ТС рабочей базы данных создается послетрансляции файла расстановки ТС основной базы данных. Отладчик позволяетсоздавать, поддерживать и отлаживать этот файл независимо и самостоятельно.
Для облегчения и ускоренияотладки расстановки ТС предлагаются различные возможности сортировки,комбинирования, поиска, совмещения с фрагментом электрической сети. ТС можносортировать в порядке возрастания их номеров.
В процессе отладкирасстановки ТС для пользователя доступны вызовы функций, предоставляющихследующие возможности:
à ВызовПротокола. Протокол доступен либо после трансляции любого файла основнойбазы данных, либо после компоновки расчетной схемы.
à Помощь.
à Узел.Одна из возможностей выделения группы коммутационных аппаратов (КА): выбираютсяКА, относящиеся к указанному узлу; одновременно выводится фрагментэлектрической сети (список ветвей, примыкающих к указанному узлу), чтозначительно облегчает проверку соответствия кодировки расстановки ТС ирасчетной схемы.
à Списокмнимо удаленных ТС. Функция избавляет от поиска мнимо удаленных ТС иоблегчает отключение и включение датчиков ТC при формировании расчетной схемы.
à Поиск.Данная функция облегчает и ускоряет поиск нужной ТС по ее номеру; одновременнопроверяется наличие дубля.
à Код.Автоматически восстанавливается код ранее мнимо удаленной ТС независимо отсрока давности.
Управляющая информация. Управляющая информация создается и поддерживается толькоОтладчиком. Эта информация отражает специфические особенности реализованныхалгоритмов (по умолчанию для большинства параметров берутся рекомендуемыезначения).
В процессе редактированияуправляющей информации для пользователя доступны вызовы функций,предоставляющих следующие возможности:
à Переключение«окон». Весовые коэффициенты, используемые при идентификации параметровэлементов электрической системы и характеризующие достоверность априорныхзначений идентифицируемых параметров, выделены в отдельную группу, для ихпросмотра и коррекции предоставляется отдельное «окно». Переход из одного«окна» в другое осуществляется с помощью этой функции.
à ВызовПротокола. Протокол доступен либо после трансляции любого файла основнойбазы данных, либо после компоновки расчетной схемы.
Вспомогательные массивы. Вспомогательные массивы создаются и поддерживаются толькоОтладчиком. Эти массивы (генераторные узлы, внешние узлы (связи),автотрансформаторы с РПН) используются при формировании выходных форм ИУП,поэтому должна выдерживаться жесткая позиционная привязка; любое их изменениедолжно быть согласовано с выходными формами ИУП. Объекты, указанные в этих массивах,могут быть отключены (не учитываться) в формируемой расчетной схеме.
В процессе редактированиявспомогательных массивов для пользователя доступны вызовы функций,предоставляющих следующие возможности:
à Переключение«окон». Выбирается нужный вспомогательный массив.
à ВызовПротокола. Протокол доступен либо после трансляции любого файла основнойбазы данных, либо после компоновки расчетной схемы.
à Помощь.
à Поиск.Функция облегчает и ускоряет поиск нужного элемента вспомогательного массива,одновременно проверяется наличие дубля.
2.3.4 Компоновка
Компонуется расчетная схемаиз отдельных оттранслированных файлов – формируется единая для всех решаемыхтехнологических задач математическая модель электрической системы.
На этом этапе производитсяосновная программная проверка правильности подготовки отдельных типов исходныхданных (представление чисел, соответствие последовательности чиселопределенному элементу, допустимые отношения и предельные значения параметровсистемы и режима, текущие размерности массивов), а также их соответствие каксоставляющих единой математической модели (соответствие классов напряжений,связность графа электрической сети, соответствие кодировки расстановки ТИ и ТСрасчетной схеме, топологическая наблюдаемость энергосистемы, связность узловрасчетной схемы по исходным значениям ТС). Сообщения об обнаруженных ошибкахзаносятся в Протокол.
В процессе компоновки расчетнойсхемы выполняется наиболее трудоемкая часть расчетов, не требующая вычислений вреальном времени (реализация принципов оптимального упорядочения; формированиесобственно математической модели электрической системы; имитация исключенийГаусса, определение местоположения ненулевых элементов и упаковка разреженныхматриц; формирование и упаковка вспомогательных массивов, обеспечивающихвысокую вычислительную эффективность реализованных в СП СПУРТ алгоритмов).
Подменю «Компоновка»содержит два пункта: Компоновка, Протокол. Протокол доступен либо послетрансляции любого файла основной базы данных, либо после компоновки расчетнойсхемы.
Если выбран пункт«Компоновка», предоставляется справка о сформированных расчетных схемах Следуетвыбрать номер формируемой расчетной схемы и ввести шифр для нее.
Основные этапы компоновкирасчетной схемы контролируются, для чего на экран дисплея выводится их переченьи отмечается характер завершения каждого из них.

2.3.5 Документы
Выходные документы выводятсяв файл, который создается после выбора подменю «Документы».
Выходные документы: таблицасоответствия, каталог кадров, параметры системы, расстановка ТИ, расстановкаТС, идентифицируемые элементы. Все они, за исключением параметров системы ирасстановки ТИ, могут выдаваться для любой существующей расчетной схемы.
à Таблицасоответствия устанавливает жесткую позиционную связь между данными,которыми обмениваются ИУП и ИВП.
à Каталогкадров содержит шаблоны с указанием адресов для отображения обобщеннойинформации.
Выходные документысопровождаются необходимыми пояснениями.
Пользовательский интерфейсКП Компоновщик расчетных схем разработан таким образом, чтобы облегчить работупользователя, а использование при программировании стандартных элементовинтерфейса ОС Windows должно обеспечить единый стиль диалога с пользователем.

3. Особенности windows–программирования
Windows 95 – одна из последних версий графической операционной системы(ОС) Windows, представленной впервые в ноябре 1985 года для использования накомпьютерах типа IBM PC и совместимых с ним. За последнее десятилетие ОС Windows почти полностью вытеснилавсех конкурентов и стала фактически эталоном ОС для персональных компьютеров.
В Windows 95 объединены средства,имеющиеся в более ранних ОС. К ним также добавлены новые средства, позволяющиеболее быстро выполнять большие объемы работ.
Программирование под Windows является одним из видовобъектно-ориентированного программирования (ООП). В основе ОС Windows лежит ее способностьотображать информацию, используя для этого окна. Окно – это прямоугольнаяобласть на экране, оно получает информацию от клавиатуры или мыши пользователяи выводит графическую информацию на своей поверхности (можно одновременно открытьнесколько окон, чтобы одновременно работать с несколькими приложениями, темсамым увеличив производительность компьютера). Пользователь рассматривает окнана экране в качестве объектов и непосредственно взаимодействует с этимиобъектами.
Самой примечательнойособенностью Windows является графический интерфейс пользователя. Дисплей самстановится источником, откуда в машину вводится информация. Он показываетразличные графические объекты в виде картинок и конструкций для вводаинформации (таких, как кнопки или полосы прокрутки). Используя клавиатуру илимышь, пользователь может непосредственно манипулировать этими объектами наэкране. Графический интерфейс пользователя Windows существенно облегчаетдиалог с персональным компьютером.
ОС Windows позволяет создавать т.н.«дочерние окна управления». Дочернее окно обрабатывает сообщения мыши иклавиатуры и извещает родительское окно о том, что состояние дочернего окнаизменилось. Оно инкапсулирует особые действия, связанные с графическимпредставлением окна на экране, реакцией на пользовательский ввод, и извещениядругого окна при вводе важной информации. Можно создавать свои собственныедочерние окна управления, но есть также возможность использовать преимуществанескольких уже определенных классов окна (и оконных процедур), с помощьюкоторых программа может создавать стандартные дочерние окна управления. Windows содержит следующиепредопределенные классы окон: кнопка, радиопереключатель, флажок, окноредактирования, окно списка, окно комбинированного списка, статическое окно,полоса прокрутки.
Для упрощения создания Windows‑программ синтерфейсом пользователя, соответствующим интерфейсу оболочки системы,корпорация Microsoft разработала библиотеку органов управления общего пользования (common control library). Она содержит 17элементов, которые условно можно разделить на четыре категории: органыуправления главного окна (панель инструментов, окно подсказки, строкасостояния), составные диалоговые органы управления (страница свойств, наборстраниц свойств), органы управления Windows Explorer (дерево просмотра, список просмотра) и другие органы управления(например, горячая клавиша, индикатор процесса, окно с движком для выборазначения из диапазона). Как дочерние окна управления, так и органы управленияобщего пользования часто используются при создании Windows‑приложений.
Важной особенностью OC Windows является многозадачность.Под Windows 95 любая программа становится резидентной и несколько программодновременно могут иметь вывод на экран и выполняться. Кроме того, программысами по себе могут иметь несколько потоков выполнения, которые, как кажется,выполняются параллельно. В основе этого принципа лежит использование ОСаппаратного таймера для распределения процессорного времени между одновременновыполняемыми процессами. [4]
К основным преимуществам ОС Windows 95 относятся следующие:
à улучшенныйинтерфейс;
à болеепростое управление файлами, включая поддержку сетевых связей и длинных именфайлов;
à технологияPlug and Play автоматически определяет и настраивает дополнительные устройства,подключаемые к компьютеру;
à 32 – битнаямногозадачная среда позволяет одновременно работать нескольким программам;
à улучшенныесредства поиска;
à улучшеннаяподдержка мультимедиа;
àрасширенные возможности установления связей, включая электронную почту, факсы,электронные доски объявлений, Internet;
à управлениепроцессом печати документов.
Рассмотрим более подробнопроцесс создания прикладной программы Windows.
3.1Главное окно
Прикладная программа Windows– это любая программа, которая специально написана для работы в операционнойсреде Windows и использующая интерфейс прикладной программы (API).
Прикладная программа Windowsимеет следующие основные компоненты: основную функцию WinMain;т.н. «оконную процедуру» – функцию WndProc.
WinMain– это точка входа в программу. В любой программе для Windows имеется функция WinMain, она определяется следующим образом:
integerfunction WinMain (hInstance, hPrevInstance, &
lpszCmdLine,nCmdShow).
hInstance – дескриптор (описатель, хэндл) экземпляра. Это уникальное число,идентифицирующее программу, когда она работает под Windows;
hPrevInstance – дескриптор предыдущего экземплярапрограммы. Под Windows 95 этот параметр всегда NULL;
lpszCmdLine – указатель на оканчивающуюся нулемстроку, в которой содержатся любые параметры, переданные в программу изкомандной строки.
nCmdShow – число, показывающее, каким должно бытьвыведено на экран окно в начальный момент.
В большинстве случаев этафункция делает следующее:
à вызываетфункции инициализации, которые регистрируют классы окон, создают окна ивыполняют другие инициализации;
à запускаетцикл обработки сообщений из очереди прикладной программы;
à завершаетработу программы.
WndProc – это функция многократного вызова, т.е. функция программы,которую вызывает Windows. Сама программа никогда не вызывает эту функциюнапрямую. Каждое окно имеет соответствующую оконную процедуру. Оконнаяпроцедура – это способ инкапсулирования кода, отвечающего за ввод информации иза вывод информации на экран, что реализуется путем посылки «сообщений» окну.
В процессе создания главногоокна программы условно можно выделить четыре этапа:
1) регистрация класса главного окна;
2) создание главного окна;
3) отображение и корректировка главного окна;
4) организация цикла сообщений.
Рассмотрим подробнее каждыйиз этапов.
Регистрация класса окна.
Окно всегда создается наоснове класса окна. Класс окна идентифицирует оконную процедуру, котораявыполняет процесс обработки сообщений, поступающих окну, а также определяетнекоторые атрибуты окна, уникальные для него, такие, например, как формакурсора и имя меню окна. На основе одного класса окна можно создать несколькоокон.
Перед созданием окна дляпрограммы необходимо зарегистрировать класс окна путем вызова функции RеgisterСlаss:
ret= RеgisterСlаss(lpwc).
ret – целочисленная переменная, содержащаявозвращаемое функцией значение;
lpwc– указатель на структурутипа T_WNDCLASS, содержащую в своих двенадцати полях информацию об имени,атрибутах, ресурсах и функции окна данного класса.
Заполнение структуры ирегистрация класса окна производятся в WinMain. Если регистрацияпрошла успешно, функция возвращает число, идентифицирующее регистрируемыйкласс. В противном случае она возвращает ноль.
Создание окна.
Окно создается с помощьюфункции СreateWindowEx (она отличается отаналогичной функции CreateWindow возможностью задания «расширенного» стиля окна и наличиемпараметра, используемого в качестве указателя на какие-то данные, на которыепрограмма в дальнейшем могла бы ссылаться). Эта функция побуждает Windowsсоздать окно, которое имеет указанный тип и принадлежит к определенному классу.Вызов функции СreateWindowEx осуществляется следующимобразом:
hWnd = CreateWindowEx (&
INT4 (WS_EX_DLGMODALFRAME),    ! «расширенный» стиль окна &
lpszClassName,            ! Имя класса окна &
lpszAppName,     ! Заголовок главного окна &
INT4 (WS_OVERLAPPEDWINDOW),              ! Стиль окна &
0,                        ! X – координата левого верхнего угла &
0,                                 ! Y – координата верхнего левого угла &
GetSystemMetrics(SM_CXSCREEN) – 32,        ! Ширина окна &
GetSystemMetrics(SM_CYSCREEN) – 32,        ! Высота окна &
NULL,       ! Дескриптор родительского окна &
hMenu,      ! Дескриптор меню окна &
hInstance,! Дескриптор экземпляра &
NULL)       ! Параметры создания
Параметр с комментарием «имякласса окна» содержит строку, являющуюся именем только что зарегистрированногокласса окна («Krs_w»). Т.о., этот параметр связывает окно с классом окна.
«Заголовок главного окна»содержит текст, который появляется в строке заголовка («Компоновщик расчетныхсхем»).
Окно, созданное программой,является обычным перекрывающимся окном с заголовком, системным меню, главнымменю, иконками для сворачивания, разворачивания и закрытия окна справа настроке заголовка и рамкой окна (стандартный стиль окон WS_ОVЕRLАРРЕDWINDOW).Из предлагаемого ОС Windows набора «расширенных» стилей выбран стиль WS_EX_DLGMODALFRAME,добавляющий окну двойную рамку.
Параметр с комментарием«дескриптор родительского окна» устанавливается в NULL, т. к. у нашегоокна отсутствует родительское окно. Параметр hMenu содержит дескриптор менюокна. В параметр hInstance помещается дескриптор экземпляра программы, переданный программе вкачестве параметра функции WinMain. Параметр с комментарием «параметры создания» при необходимостииспользуется в качестве указателя на какие-нибудь данные, на которые программав дальнейшем могла бы ссылаться (в рассматриваемой программе такие данные неиспользуются – параметр установлен в NULL).
Вызов СreateWindowEx возвращает дескрипторсозданного окна. Этот дескриптор хранится в переменной hWnd. Для многихфункций Windows в качестве параметра требуется hWnd, указывающий Windows, к какому окну применитьфункцию. Если функция СreateWindowEx не может создать окно, онавозвращает NULL.
Отображение и корректировкаокна.
Хотя функция СreateWindowEx и создает окно, онаавтоматически не индицирует его. Программа должна предусмотреть индикацию окнас помощью функции ShowWindow и корректировку области пользователяокна с помощью функции UpdateWindow.
Функция ShowWindow побуждает Windowsиндицировать новое окно:
bret= ShowWindow(hWnd, nCmdShow)
hWnd – дескриптор созданного функцией CreateWindowEx окна;
nCmdShow – величина, передаваемая в качестве параметра функции WinMainи задающая начальный вид окна на экране;
bret – логическая переменная, содержащаявозвращаемое функцией значение.
Функция ShowWindow выводит окно на экран.Вызов функции UpdateWindow вызывает затем перерисовку рабочей области:
bret= UpdateWindow(hWnd).
При обработке этого вызова воконную процедуру посылается сообщение WМ_РАINТ.
Обе функции при успешномзавершении возвращают TRUE, в противном случае – FALSE.
Вид главного окнаКомпоновщика расчетных схем представлен на рисунке 3.1.

/>Рис. 3.1.Вид главного окна
Как видно из рис. 3.1,главное окно Компоновщика содержит заголовок, строчку меню (структура которогобыла рассмотрена во 2‑ой главе), рабочую область, а также панельинструментов и панель состояния, которые более подробно будут рассмотрены ниже.
Цикл обработки сообщений
Итак, окно окончательновыведено на экран. Теперь программа должна подготовить себя для полученияинформации от пользователя через клавиатуру и мышь. Windows поддерживает «очередьсообщений» для каждой программы, работающей в данный момент в системе Windows. При вводе информации Windows преобразует ее в«сообщение», которое помещается в очередь сообщений программы.
Цикл обработки сообщений – этопрограммный цикл, при работе в котором функция WinMain извлекаетсообщения из очереди сообщений и направляет их соответствующим окнам. Длярассматриваемой программы цикл обработки сообщений выглядит следующим образом:
do while (GetMessage(mesgt, NULL, 0, 0))! Получить сообщение
i = 0
if(hDlgModeLess. NE. NULL) then! Диалоговое окно активно?
if (IsDialogMessage(hDlgModeLess, mesgt)) i =1! Есть сообщение
! для немодальногодиалогового окна
end if
………! Аналогичным образомраспределяются
………! сообщения для другихнемодальных
………! диалоговых окон,создаваемых программой
if (i.ne.0)cycle
i = TranslateMessage(mesgt)          ! Транслировать сообщение
i= DispatchMessage (mesgt)           ! Отправить сообщение
end do
Вызов функции GetMessage, с которого начинаетсяцикл обработки сообщений, извлекает сообщение из очереди сообщений. Этот вызовпередает Windows указатель на структуру mesgt типа T_МSG. Второй, третий и четвертый параметры, установленные в NULL или 0, показывают, чтопрограмма получает все сообщения от всех окон, созданных этой программой. Windows заполняет поля структурысообщений информацией об очередном сообщении из очереди сообщений. Наиболееважными полями этой структуры являются:
à hWnd– дескриптор окна, для которого предназначено сообщение;
à message– тип сообщения;
à wParam,lParam – два 32‑разрядных параметрасообщения, смысл и значение которых зависят от особенностей сообщения.
Если поле message сообщения, извлеченногоиз очереди сообщений, равно любому значению, кроме WМ_QUIТ, то функция GetMessage возвращает TRUE. Сообщение WМ_QUIТзаставляет программу прервать цикл обработки сообщений.
При организации циклаобработки сообщений программы, создающей в ходе работы немодальные окна диалога[1],необходимо учитывать, что сообщения для немодальных окон диалога проходят черезочередь сообщений программы. Цикл обработки сообщений должен передавать такиесообщения соответствующим оконным процедурам окон диалога. Это реализуетсяследующим образом. Функция создания немодального диалога CreateDialog возвращаетдескриптор окна (не равный 0), который запоминается в глобальной переменной(например, hDlgModeLess). Если диалог создан и сообщение предназначено для него, тофункция IsDialogMessage отправляет сообщение оконной процедуре окна диалога, возвращая TRUE, тогда вспомогательнаяпеременная i принимает значение 1, сигнализируя тем самым о перехватесообщения диалоговым окном. В противном случае функция возвращает FALSE и переменнаяi не меняется. Если созданы идругие активные немодальные диалоги, то для них реализуются аналогичныеоперации. Таким образом гарантируется, что функции TranslateMessage и DispatchMessage будутвызываться только тогда, когда немодальные окна диалога не созданы или нетсообщений для них.
Т.к. программе необходимообрабатывать вводимые с клавиатуры символы, нужно преобразовывать каждоеполученное сообщение с помощью функции TranslateMessage. Этафункция отыскивает пары сообщений WM_KEYDOWN и WM_KEYUP игенерирует соответствующее сообщение WM_CHAR.
Функция DispatchMessage отправляетсообщение для его обработки соответствующей оконной процедуре. Врассматриваемой программе такой оконной процедурой является функция MainWndProc. После того, как MainWndProc обработает сообщение,оно возвращается в Windows, которая все еще обслуживает вызов функции DispatchMessage. Windows возвращает управление впрограмму к следующему за вызовом DispatchMessage операторуи цикл обработки сообщений в очередной раз возобновляет работу, вызывая GetMessage.
Реальная работа начинается воконной процедуре, которая обеспечивает реакцию на вводимую информацию исообщения системы управления окнами, получаемые от Windows.
3.2 Процедура обработкисообщений
Оконная процедураопределяется следующим образом:
integerfunction MainWndProc (hWnd, mesg, wParam, lParam).
Первым параметром является hWnd, дескриптор получающего сообщение окна. Второй параметр – число,которое идентифицирует сообщение. Параметры wParam и lParam содержат дополнительнуюинформацию о сообщении и называются «параметрами сообщения». Конкретноезначение этих параметров определяется типом сообщения.
Обработка сообщений
Оконная процедура получаетсообщения от Windows. Это могут быть сообщения о вводе, переданные функцией WinMain(например, WM_KEYDOWN, WM_KEYUP, WM_MOUSEMOVE, WM_TIMER), или сообщениясистемы управления окнами, поступающие непосредственно от Windows в обходочереди прикладной программы или цикла обработки сообщений (например, WM_CREATE,WM_DESTROY, WM_PAINT). Каждое получаемое окном сообщение идентифицируетсяномером, который содержится в параметре mesg оконной процедуры. В модулеMSFWINTY.F90 Fortran PowerStation 4.0 определены именованныеконстанты, начинающиеся с префикса WМ для каждого типа сообщений.
Обычно используетсяконструкция selectcase для определения того,какое сообщение получила оконная процедура и как его обрабатывать. Если оконнаяпроцедура обрабатывает сообщение, то ее возвращаемым значением должен быть 0.Все сообщения, не обрабатываемые оконной процедурой, должны передаватьсяфункции Windows, которая называется DefWindowProc. Значение,возвращаемое этой функцией, должно быть возвращаемым значением оконнойпроцедуры.
Первое сообщение, котороеполучает оконная процедура – это WМ_СRЕАТЕ. Когда Windows обрабатывает функцию СreateWindowEx в WinMain,она вызывает MainWndProc с дескриптором окна в качестве первого параметра и с WМ_СRЕАТЕ в качестве второго. MainWndProcобрабатывает сообщение WМ_СRЕАТЕ и передает управление обратно в Windows, которая, в свою очередь, возвращается обратно в WinMain.
Следующим обрабатываетсясообщение WM_SIZE. Определяются размеры рабочей области, панели инструментов ипанели состояния. Windows посылает в оконную процедуру сообщение WM_SIZE при любом измененииразмеров окна. Переменная lParam, переданная в оконную процедуру, содержит ширину рабочей областив младшем слове и высоту в старшем слове.
Сообщения WM_PARENTNOTIFY и WM_RBUTTONDOWN обрабатываютсообщения, поступающие соответственно от панели инструментов и всплывающегоменю.
В программе необходимообрабатывать символы клавиатуры, поэтому она должна обрабатывать сообщения WM_CHAR. Параметр lParam, передаваемый в оконнуюпроцедуру как часть символьного сообщения, является таким же, как параметр lParam аппаратного сообщенияклавиатуры, из которого сгенерировано символьное сообщение. Параметр wParam – это код символа ASCII. Особым образом обрабатываются клавиши , и . Все остальные символыобрабатываются похожим образом.
Сообщение WM_KEYDOWN используется дляопределения нажатой клавиши или комбинации клавиш.
При щелчке мыши наразрешенном пункте меню генерируется сообщение WM_COMMAND (при выборе недоступногоили запрещенного пункта меню данное сообщение не генерируется).
Сообщение WМ_РАINТсообщает программе, что часть или вся рабочая область окна недействительна, иее следует перерисовать.
При создании окнанедействительна вся рабочая зона, поскольку программа еще ничего в окне ненарисовала. При изменении размера окна рабочая область также становитсянедействительной и содержимое рабочей области не сохраняется. В графическойсреде это привело бы к тому, что пришлось бы хранить слишком много данных.Вместо этого Windows делает недействительным все окно. Оконная процедура получаетсообщение WМ_РАINТ и восстанавливаетсодержимое окна.
При перемещении окон так,что они перекрываются, Windows не сохраняет ту часть окна, котораязакрывается другим окном. Когда эта часть окна позже открывается, Windows помечает его какнедействительное. Оконная процедура получает сообщение WМ_РАINТ для восстановления содержимого окна.
Последним сообщением являетсясообщение WМ_DESTROY. Это сообщениепоказывает, что Windows находится в процессе ликвидации окна в ответ на полученную отпользователя команду. Программа стандартно реагирует на это сообщение, вызываяPostQuitMessage (0). Эта функция помещает сообщение WМ_QUIT в очередьсообщений программы. Когда функция GetMessage получает этосообщение, работа цикла обработки сообщений прерывается и программа заканчиваетсвою работу, выходя в систему.

3.3 Модальный и немодальныйдиалог
Окно диалога – это окно,которое прикладные программы используют для индицирования или запросаинформации. Наиболее часто окна диалога используются для получения отпользователя дополнительной информации сверх той, которую может обеспечитьменю.
Окно диалога обычно имеетвид всплывающего окна с разнообразными дочерними окнами элементов управлениявнутри. Размер и расположение этих дочерних окон задается в шаблона окнадиалога в файле описания ресурсов программы. Windows 95 обеспечивает возможностьсоздания всплывающих окон диалога и дочерних окон элементов управления в нем, атакже возможность обработки оконной процедурой сообщений окна диалога. Прииспользовании дочерних окон элементов управления, Windows берет на себя решениемногих задач (например, управляет всей логикой переключения фокуса ввода междудочерними окнами элементов управления в окне диалога).
Оконная процедура окнадиалога – это функция многократного вызова, которую вызывает Windows, когда онаимеет сообщение для окна диалога. Как правило, внутри процедуры диалога нереализуется слишком много функций. Исключение составляют лишь инициализациядочерних окон элементов управления при создании окна диалога, обработкасообщений от дочерних окон элементов управления и завершение работы с окномдиалога (т.е. обрабатываются сообщения WM_INITDIALOG, WM_COMMAND, WM_DESTROY). Оконная процедура окнадиалога возвращает FALSE (0), если она не обрабатывает сообщение, или TRUE (ненулевое значение), еслиобрабатывает.
Рассмотрим отдельномодальные и немодальные окна диалога.
Модальное окно диалога.
Модальное окно диалога – этоокно, которое индицирует информацию и запрос на ввод от пользователя. Ононазывается модальным, поскольку делает родительское окно временно недоступным изаставляет пользователя закончить запрашиваемые действия перед возвратомуправления родительскому окну, т.е. нельзя переключаться между окном диалога идругими окнами программы. Но, несмотря на наличие на экране окна диалога,пользователь может переключиться на другие программы. Некоторые окна диалога(называемые системными модальными окнами – systemmodal) этого делать не позволяют.Системное модальное окно диалога вынуждает пользователя, перед тем как онполучит возможность сделать что-либо другое в Windows, завершить работу с ним.
Модальное окно диалогазапускает свой собственный цикл обработки сообщений из очереди прикладнойпрограммы без возврата в функцию WinMain.
Для создания модального окнадиалога программа вызывает функцию DialogBox (могут такжеиспользоваться функции DialogBoxIndirect, DialogBoxParam, DialogBoxIndirectParam):
nResult = DialogBox(hInstance, lpTemplate, hWndParent, lpDialogFunc).
nResult– переменная, принимающаязначение -1 при неуспешном завершении функции, в обратном случае возвращаемоезначение – параметр nResult функции EndDialog, которая завершает работу модального окна диалога;
hInstance – дескриптор экземпляра;
lpTemplate – этот параметр идентифицирует шаблон окна диалога;
hWndParent – дескриптор родительского окна модального окна диалога;
lpDialogFunc – адрес процедуры диалога.
Работа модального окнадиалога завершается с помощью функции EndDialog:
bret= EndDialog(hDlg, nResult).
nResult– определяет значение, которое будет возвращено приложению отфункции DialogBox, создавшей диалоговое окно;
hDlg – дескриптор диалогового окна.
Логическая переменная bret принимает значение TRUE или FALSE соответственно при успешномили неуспешном завершении.
Windows не возвращает управление родительскому окну до тех пор, пока невызвана функция EndDialog.
Немодальное окно диалога.
В отличие от модального окнадиалога, немодальное окно диалога не делает недоступным родительское окно,позволяя тем самым пользователю переключаться между окном диалога и окном, вкотором оно было создано, а также между окном диалога и остальными программами.
Немодальное окно диалогаполучает информацию через цикл обработки сообщений функции WinMain (см.п. 3.1).
Для создания немодальногоокна используется функция CreateDialog(могут также использоватьсяфункции CreateDialogIndirect, CreateDialogParam, CreateDialogIndirectParam):
hDlgModeLess= CreateDialog (hInstance, lpTemplate, &
hWndParent, lpDialogFunc).
Параметры этой функции теже, что и параметры функции DialogBox. Отличие состоит в том, что дескриптор окна диалога возвращаетсясразу же после выполнения функции CreateDialog и, какправило, хранится в глобальной переменной.
Для закрытия немодальногоокна диалога используется функция DestroyWindow:
bret= DestroyWindow(hDlg).
hDlg – дескриптор диалогового окна (локальнаяпеременная, используемая в оконной процедуре окна диалога).
Функция возвращает значение bret, равное TRUE или FALSE соответственно при успешномили неуспешном завершении. После вызова функции DestroyWindow глобальнаяпеременная, содержащая дескриптор немодального окна диалога, должна бытьустановлена в ноль.
К немодальным окнам диалогаотносятся окна панели состояния и панели инструментов, используемые в КПКомпоновщик. Эти два окна всегда находятся на экране.
3.4 Панель инструментов
Панель инструментовпредназначена для реализации дополнительных функций, предоставляемыхпрограммой.
Панель инструментовпредставляет собой немодальное окно диалога, содержащее набор битовых картиноки стандартные (зарегистрированные) дочерние окна управления. Выводится панельинструментов в верхнюю часть главного (родительского) окна, размер иместоположение панели устанавливаются с помощью функции SetWindowPos.
Вид панели инструментовпредставлен на рис. 3.2.
/>
Рис. 3.2.Вид панели инструментов
В рассматриваемой программена панель инструментов вынесены следующие наиболее часто употребимые функции:
à вставитькопию текущей строки;
à вставитьновую строку после текущей;
à удалитьтекущую строку;
àвосстановить ранее удаленные строки;
à ввестишаблон поиска (эта функция реализована с помощью стандартного дочернего окнауправления класса «окно редактирования»);
à поиск пошаблону вниз;
à поиск пошаблону вверх;
àсортировать в порядке возрастания;
àсортировать в порядке убывания;
à буферобмена;
àкалькулятор;
à печать;
à выбортитров;
à локальнаяпомощь;
à помощь.
Кроме того, на панелиинструментов имеются радиокнопки, предназначенные для реализации дополнительныхфункций подготовки и обработки данных: трансляции, протокола, редактированияназваний узлов и др.
Каждый раз при открытиидочернего окна панель инструментов активизирует доступные ему функции.
Входные параметры панелиинструментов.
В рассматриваемой программепанель инструментов создается путем вызова функции CreateDialog:
hPnUpr = CreateDialog(hInstance, LOC («PnUpr» C), hWnd, LOC(PnUpr)).
Параметры этой функциисодержат следующую информацию:
hInstance – дескриптор экземпляра программы;
LOC(‘’PnUpr’’C) – идентифицирует шаблон блока диалога. Этот параметр являетсяадресом символьной строки, в которой содержится имя шаблона диалогового окна;
hWnd – дескриптор родительского окна. Дляпанели инструментов родительским является главное окно программы;
LOC(PnUpr) – адрес процедуры диалога.
Функция возвращаетдескриптор панели инструментов, который хранится в глобальной переменной hPnUpr.
Процедура диалогового окнапанели инструментов определяется следующим образом:
integerfunction PnUpr (hDlg, message, wParam, lParam)
Параметры процедуры диалогааналогичны параметрам оконной процедуры главного окна: hDlg – дескриптор окна диалога; message – переменная, идентифицирующая сообщение; параметры wParam и lParam содержат дополнительнуюинформацию о сообщении.
Процедура диалогового окнапанели инструментов обрабатывает только два типа сообщений:
а) WM_INITDIALOG; это сообщениепосылается процедуре диалога при создании диалогового окна прежде, чем оноотображается на дисплее. При получении этого сообщения процедура диалогавычисляет высоту панели инструментов, используя для этого функцию GetWindowRect:
bret = GetWindowRect(hDlg, rect).
Функция заполняет поляструктуры rect типа T_RECT информацией о размерах рабочей области диалогового окна панелиинструментов. Затем вычисляется высота диалогового окна:
YDlg = rect % bottom – rect% top.
Вычисленное значениехранится в глобальной переменной YDlg.
б) дочерние окна управления панелиинструментов посылают процедуре диалогового окна сообщения WM_COMMAND. Параметры этого сообщениясодержат идентификатор дочернего окна (младшее слово параметра wParam), код уведомления (старшееслово wParam) и дескриптор дочернего окна управления, пославшего сообщение (lParam). В рассматриваемойпрограмме дочерними окнами управления панели инструментов являются окно вводашаблона поиска и радиокнопки. Процедура диалога при получении сообщения WM_COMMAND определяет по младшемуслову параметра wParam идентификатор дочернего окна, от которого пришло сообщение, ивыполняет соответствующие действия.
Выходные параметры панелиинструментов.
Выходными параметрами панелиинструментов являются сообщения активному на данный момент дочернему окну илипанели состояния.
Сообщение активномудочернему окну посылается в случае, если левой кнопкой мыши выбран какой-либоорган управления на панели инструментов. Щелчок правой кнопкой мыши на любоморгане управления (исключая окно ввода шаблона поиска) заставляет программувывести в панель состояния текст, поясняющий предназначение выбранного органауправления.
Алгоритм, реализующийвышесказанное, выглядит следующим образом.
1. Нажата кнопка мыши?
Если нажата правая кнопка:
а) определить выбранный напанели инструментов орган управления;
б) вывести соответствующеевыбранному органу управления текстовое пояснение в предназначенное для этогополе панели состояния.
Если дочернее окно активно инажата левая кнопка:
а) определить выбранный напанели инструментов орган управления;
б) отправить активномудочернему окну сообщение, содержащее идентификатор выбранного органауправления.
2. Продолжить выполнениепрограммы.
Приведенный алгоритм требуетнекоторых пояснений.
Каждый раз при щелчке правойили левой кнопкой мыши над рабочей областью панели инструментов оконнойпроцедуре главного окна посылается сообщение WM_PARENTNOTIFY, содержащее в своихпараметрах следующую информацию:
àидентификатор панели инструментов;
à какая именнокнопка мыши нажата;
à координатыкурсора в момент нажатия.
Оконная процедура приобработке этого сообщения вызывает последовательно две подпрограммы – HelpPnUpr и (при условии, чтодочернее окно активно) GetIdPnUpr, в которых и реализуется первый шаг алгоритма.
Когда дочернему окнупосылается сообщение на поиск по шаблону, оно, в свою очередь, посылаетсообщение IDOK панели инструментов для насильственного чтения шаблона.
По окончании работыподпрограмм возобновляется выполнение цикла обработки сообщений.
В рассматриваемой программепроцедура диалога панели инструментов и указанные подпрограммы объединены водном модуле, что позволяет рассматривать панель инструментов как «черный ящик»(объект). «Черный ящик» получает некоторые сообщения и определенным образом наних реагирует (рис. 3.3).
/>


Рис. 3.3.Панель инструментов
Панель инструментовотображается на поверхности главного окна все время и уничтожается только позавершении работы.
3.5 Панель состояния (строкасостояния)
Панель состоянияпредназначена для вывода на экран необходимой пользователю информации.
Панель состоянияпредставляет собой немодальное окно диалога, которое выводится в нижнюю частьглавного (родительского) окна. Размер и местоположение панели устанавливаются спомощью функции SetWindowPos.
Вид панели состояния показанна рис. 3.4.
/>
Рис. 3.4.Вид панели состояния.
В рассматриваемой программепанель состояния используется для отображения краткого описания органовуправления панели инструментов при их просмотре пользователем, а при наличииактивного дочернего окна – и для отображения количества записей и номеразаписи, с которой пользователь работает в текущий момент времени. Поля панелисостояния, в которых отображается вышеуказанная информация, представляют собойстатические дочерние окна управления (предопределенного класса «статическоеокно»). Панель состояния содержит также один орган управления общегопользования – т.н. прогресс-индикатор, отображающий динамику длительнойоперации как процент от выполненной задачи.
Входные параметры панелисостояния.
В рассматриваемой программепанель состояния создается функцией CreateDialog:
hPnSost = CreateDialog(hInstance, LOC («PnSost» C), hWnd, LOC(Pnsost)).
Параметры этой функцииявляются входными параметрами для панели состояния. Первый и третий из ниханалогичны соответствующим входным параметрам панели инструментов. Параметр LOC(«PnSost» C) идентифицирует шаблон диалогового окна панели состояния.Параметр LOC(Pnsost) содержит адрес процедуры диалога панели состояния.
Функция возвращаетдескриптор панели состояния, который хранится в глобальной переменной hPnSost.
Процедура диалогового окнапанели состояния определяется следующим образом:
integerfunction Pnsost (hDlg, message, wParam, lParam).
Ее параметры аналогичны параметрампроцедуры диалога панели инструментов.
В рассматриваемой программепроцедура диалогового окна панели состояния получает и обрабатывает толькосообщение WM_INITDIALOG. При получении этого сообщения процедура диалога вычисляет высотупанели состояния аналогично тому, как это реализовано в процедуре диалогапанели инструментов. Вычисленное значение хранится в глобальной переменной YPnSost.
Отображение информации.
Для вывода информации вдочернее окно управления панели состояния используется функция
SetDlgItemText(hwndDlg, idControl, lpsz).
Параметры этой функцииследующие:
hwndDlg – дескриптор диалогового окна (в нашем случае это глобальнаяпеременная hPnSost);
idControl – идентификатор дочернего окна управления;
lpsz – указатель на Си-строку, содержащую текст, который нужно вывестив данное дочернее окно управления.
Для управленияпрогресс-индикатором ему посылаются сообщения при помощи функции
SendDlgItemMessage(hwndDlg, idControl, Msg,wParam, lParam).
Параметр Msg здесь – переменная,содержащая посылаемое сообщение, а параметры wParam и lParamсодержат дополнительную информацию о сообщении.
Панель состоянияотображается на поверхности главного окна все время работы программы иуничтожается только по завершении работы.
3.6 Строковый редактор
Строковый редакторпредназначен для отображения и редактирования текстовых данных.
Строковый редактор являетсядочерним окном оконного редактора и выводится на его рабочую поверхность.Размер и местоположение строкового редактора устанавливаются с помощью функции SetWindowPos в оконномредакторе. Высота окна строкового редактора определяется высотой используемогошрифта, ширина – длиной редактируемого текста.
Работа со строковымредактором.
Оконный редактор содержиттекстовые данные в виде страницы, состоящей из нескольких строк. Каждая строкаразбивается на поля. Каждое поле – это определенное число (параметр).Содержимое текущего поля, т.е. поля, доступного для редактирования, помещаетсяв окно строкового редактора (далее – «окно»), которое отмечено двойным бордюром.
Каретка перемещается внутри«окна». Если каретка достигает границы «окна» (левой или правой), то дальнейшеедвижение в том же направлении приводит к перемещению «окна». Если же «окно»находится на левой или правой границе страницы, то его дальнейшее перемещение втом же направлении приводит к «листанию» страницы вправо / влево.
Перемещения «окна» постранице (страницам) возможны следующие: вверх / вниз на одну строку;влево / вправо на одно поле; в начало / конец строки; на ту жепозицию предыдущей / последующей страницы («листание» вверх / вниз);на ту же позицию первой / последней страницы.
Ввод текстовых данных и всекоррекции производятся внутри «окна». Если каретка находится на правой границе«окна», то после ввода «окно» перемещается вправо на одно поле (если этовозможно).
Внутри «окна» символы можноудалять по одному или группами (слева / справа от позиции каретки, удалитьвсе содержимое «окна»).
Создание окна строковогоредактора.
Создание окна строковогоредактора происходит при обработке сообщения WM_CREATE в оконной процедуреоконного редактора. Для этого используется рассмотренная ранее функция CreateWindowEx.Она возвращает дескриптор окна строкового редактора, который хранится вглобальной переменной hWEdit. Следует отметить, что при регистрации класса окна строковогоредактора стиль окна задается как комбинация следующих стилей:
à CS_VREDRAW,CS_HREDRAW – разрешают перерисовку рабочей области окна в случаеизменения его высоты или ширины;
à CS_OWNDC– создает уникальный контекст устройства для каждого окна, созданного на основеданного класса;
à CS_DBLCLKS– разрешает посылку оконной процедуре сообщения о двойном щелчке мышью надрабочей областью окна.
При создании окна строковогоредактора используется «расширенный» стиль WS_EX_DLGMODALFRAME,создающий двойную рамку вокруг окна.
Оконная процедура строковогоредактора определяется следующим образом:
integerfunction Editw (hEdit, mesg, wParam, lParam)
Ее параметры аналогичныпараметрам оконной процедуры главного окна: hEdit – дескриптор окна строкового редактора; mesg – переменная, идентифицирующая сообщение; параметры wParam и lParam содержат дополнительнуюинформацию о сообщении.
Вид строкового редакторапредставлен на рис. 3.5.
/>
Рис. 3.5.Вид строкового редактора

Входные параметры строковогоредактора.
Входными параметрами длястрокового редактора являются нажатия алфавитно-цифровых и некоторыхфункциональных клавиш. Он также отслеживает состояние системных клавиш длязадействования т.н. «горячих клавиш». Строковый редактор должен реагировать ина нажатия левой или правой кнопок мыши.
Выходные параметрыстрокового редактора.
Выходными параметрамистрокового редактора являются:
àотображение редактируемого текста;
à сообщение WM_LBUTTONDBLCLK, посылаемое оконнойпроцедуре родительского окна;
à сообщение WM_COMMAND, посылаемое оконнойпроцедуре родительского окна.
Сообщение WM_COMMAND посылается в случае, еслинеобходимо переместить окно строкового редактора или нажата «горячая клавиша».
Алгоритм работы строковогоредактора.
1. Отображение редактируемого текста.
2. Обработка сообщений, связанных с вводом с клавиатуры.
3. Обработка сообщений, связанных с нажатиями кнопок мыши.
При работе по приведенномуалгоритму используются следующие переменные:
à Bufed– символьная строка, содержащая редактируемый текст;
à Leng– длина редактируемого текста (содержимого Bufed) в символах;
à Poz – положение каретки (число символов) от левого края окна;
à Cod – главный код нажатой клавиши;
à Sccod – информационный код нажатой клавиши;
à Codv – код возврата (0‑нет коррекций; 1‑есть коррекция).
Все переменные, кроме Bufed, – целочисленные.
Первый пункт алгоритма реализуется следующим образом.
После создания окнастрокового редактора, но перед его отображением, оконная процедура получаетсообщение WM_CREATE. При его обработке обнуляются переменные Cod, Sccod, Codv. Задаются шрифт и цвет выводимого в окно текста. Окно получаетфокус ввода. Вывод редактируемого текста, т.е. содержимого Bufed,происходит при получении сообщения WM_PAINT и осуществляется функцией TextOut:
bret = TextOut(hdc,     nXStart, nYStart, lpString, cbString),
где: bret – логическая переменная, принимающая значение TRUE или FALSE соответственно при успешномили неуспешном завершении функции; hdc – дескриптор контекстаустройства, на которое выводится текст; nXStart и nYStart – координатыначальной позиции вывода текста; lpString – указатель на символьнуюстроку, которая содержит текст; cbString – количество символов в этойстроке.
Затем кареткаустанавливается на позицию, определяемую переменной Poz (если каретка отсутствует, она предварительно создается и отображается).
При получении сообщения WM_DESTROY обнуляется переменная hWEdit, уничтожается каретка изакрывается окно строкового редактора.
Второй пункт алгоритма.
Для удобства работы вКомпоновщике расчетных схем предусмотрена возможность использования т.н.«горячих клавиш». «Горячая клавиша» – это комбинация клавиш, которуюпользователь может нажать для вызова к.-л. функции. В рассматриваемой программеиспользуются две группы комбинаций: CTRL + , ALT + . Отслеживание к.-л. комбинации из первой группыне вызывает особых затруднений, в то время как использование клавиши ALT имеет свои особенности.
ОС Windows нажатия клавиш делятся насистемные и несистемные. Системные нажатия – это нажатия клавиш, используемыхдля управления приложением и Windows. В IBM PC для этой цели Windows использует клавишу ALT, поэтому можно сказать, что нажатия клавиши ALT являются системными. Принажатии клавиши ALT (или любой другой клавиши, если ALT при этом удерживаетсянажатой) оконная процедура имеющего фокус ввода окна получает сообщение WM_SYSKEYDOWN.Нажатия всех остальных клавиш считаются несистемными, в этом случае оконнаяпроцедура окна с фокусом ввода получает сообщение WM_KEYDOWN.
В оконной процедурестрокового редактора при получении любого из этих сообщений фиксируетсяинформационный код нажатой клавиши (sccod), переменная cod обнуляется. Затемвызывается подпрограмма edit с параметром hEdit.
При получении сообщения WM_CHAR, генерируемогорассмотренной ранее функцией TranslateMessage, фиксируется главный код нажатой клавиши (cod), переменная sccod обнуляется, а затем такжевызывается подпрограмма edit с параметром hEdit.
Предусмотрена перекодировкаиз Windows‑кодировкив MS DOS‑кодировку. При необходимости этот модуль можно убрать.
В подпрограмме edit производятся следующиеоперации:
а) если нажата одна из тех«горячих клавиш», которые дублируют органы управления панели инструментов, топараметру wParam присваивается значение идентификатора соответствующего органауправления и в оконную процедуру родительского окна посылается сообщение WM_COMMAND.
б) если нажата одна из тех«горячих клавиш», которые дублируют операции выделения строк или блоков,операцию снятия маркировки, то параметру wParam присваивается значениеидентификатора соответствующего пункта всплывающего меню оконного редактора и вего оконную процедуру посылается сообщение WM_COMMAND.
в) если нажата клавиша «ESCAPE» или «ENTER», переменной sccod присваиваетсясоответственно 0 или значение, соответствующее информационному коду клавиши«стрелка вправо», а затем оконной процедуре оконного редактора посылаетсясообщение WM_COMMAND с параметром wParam, равным -1.
г) если значение переменной cod не равно нулю, т.е. быланажата клавиша в алфавитно-цифровой части клавиатуры, происходит изменениередактируемого текста, переменной sccod присваивается значение, соответствующее информационному кодуклавиши «стрелка вправо».
д) если значение переменной cod равно нулю, поинформационному коду нажатой клавиши проверяется ее принадлежность к группефункциональных клавиш или клавиш управления курсором, которые выполняютследующие действия:
à клавиша«стрелка влево» (VK_LEFT) – каретка перемещается на одну позиции влево. Если одновременнос клавишей была нажата клавиша Ctrl или каретка вышла за левую границу окна строкового редактора,оконной процедуре оконного редактора посылается сообщение WM_COMMAND с параметром wParam, равным -1;
à клавиша«стрелка вправо» (VK_RIGHT) – каретка перемещается на одну позиции вправо. Если одновременнос клавишей была нажата клавиша Ctrl или каретка вышла за правую границу окна строкового редактора,оконной процедуре оконного редактора посылается сообщение WM_COMMAND с параметром wParam, равным -1;
à клавиша«Delete» (VK_DELETE) – происходит удаление символа над кареткой,переменной codv присваивается значение 1;
à клавиша «Home» (VK_HOME) – происходит перемещениекаретки в начало окна. Если одновременно с клавишей была нажата клавиша Ctrl, оконной процедуре оконногоредактора посылается сообщение WM_COMMAND с параметром wParam, равным -1;
à клавиша «End» (VK_END) – происходит перемещениекаретки в конец окна. Если одновременно с клавишей была нажата клавиша Ctrl, оконной процедуре оконногоредактора посылается сообщение WM_COMMAND с параметром wParam, равным -1;
à клавиша «F5» (VK_F5) – происходит удаление текста слева от каретки;
à клавиша «F6» (VK_F6) – происходит удаление текста справа от каретки;
à клавиша «F7» (VK_F7) – происходит удаление всего текста.
При изменении редактируемоготекста код возврата принимает значение, равное 1, а оконная процедурастрокового редактора получает сообщениеWM_PAINT путем вызова функции InvalidateRect.
Третий пункт алгоритма.
При получении оконнойпроцедурой строкового редактора сообщения WM_LBUTTONDOWN определяютсякоординаты курсора мыши и каретка перемещается в позицию (с учетом ширинысимволов), соответствующую местоположению курсора мыши.
При получении оконнойпроцедурой строкового редактора сообщения WM_RBUTTONDOWN на экранвыводится всплывающее меню, вид которого представлен на рис. 3.6.
/>
Рис. 3.6.Всплывающее меню строкового редактора
При щелчке левой кнопкоймыши на к.-л. пункте всплывающего меню оконной процедуре строкового редакторапосылается сообщение WM_COMMAND, содержащее в младшем слове параметра wParamидентификатор выбранного пункта меню. Переменной sccod присваивается значениеидентификатора выбранного пункта меню и вызывается подпрограмма edit.
Двойной щелчок левой кнопкоймыши на рабочей области окна строкового редактора порождает сообщение WM_LBUTTONDBLCLK. При получении этогосообщения оконная процедура строкового редактора «переправляет» егородительскому окну, т.е. оконному редактору, где оно и обрабатывается.
В рассматриваемой программе оконнаяпроцедура строкового редактора и подпрограмма editобъединены в одном модуле, что позволяет рассматривать строковый редакторкак «черный ящик». «Черный ящик» получает некоторые сообщения и определенным образомна них реагирует (рис. 3.7).
/>
 

Рис. 3.7.Строковый редактор
Строковый редакторотображается на поверхности оконного редактора все время и уничтожается толькопо завершении его работы.
3.7 Оконный редактор
Оконный редакторпредназначен для отображения и редактирования базы данных.
Оконный редактор является дочернимокном главного окна и выводится на его рабочую поверхность. Размер и местоположениеоконного редактора устанавливаются с помощью функции SetWindowPos. Ширина окнаопределяется длиной строки базы данных, а высота – условием неперекрытия диалоговыхокон (панели инструментов, панели состояния и, если активен режим ввода названийузлов, окна ввода названий узлов).
Создание оконного редактора.
Для создания окна оконногоредактора вызывается функция CreateWch, которая определяется следующим образом:
hWch = CreateWch(hWnd, szClassName, UnschWProc, LengStr),
где: hWnd – дескриптор родительского окна (т.е. главного окна); szClassName– имя класса окна (оно же является и заголовком окна); UnschWProc – имяпроцедуры обработки сообщений оконного редактора; LengStr – длина строкибазы данных.
В процессе выполнения этой функциивычисляется максимальная ширина окна в пикселях, регистрируется класс окна (причемустанавливается предопределенный в Windows стиль курсора «IDC_CROSS», т.е. «перекрестие»).Затем при помощи функции CreateWindowEx создается окно оконного редактора.Стиль окна – дочернее, видимое, имеет строку заголовка с кнопкой закрытия окна,вертикальную и горизонтальную полосы прокрутки.
Функция CreateWchвозвращает дескриптор оконного редактора, который хранится в глобальнойпеременной hWch.
Оконная процедура оконногоредактора определяется следующим образом:
integerfunctionUnschWProc (hWch, mesg, wParam, lParam)
Ее параметры аналогичныпараметрам оконной процедуры главного окна: hWch – дескриптор оконного редактора; mesg – переменная, идентифицирующая сообщение; параметры wParam и lParam содержат дополнительнуюинформацию о сообщении.
Вид оконного редакторапредставлен на рис. 3.8 (см. на следующей странице).
/>
Рис. 3.8.Вид оконного редактора
Входные параметры оконногоредактора.
Входными параметрами дляоконного редактора являются сообщения о нажатии кнопок мыши, перемещении мыши(сообщение WM_MOUSEMOVE), сообщения от полос прокруток (WM_VSCROLL и WM_HSCROLL). Как говорилось ранее, оконный редактор может получать сообщениеWM_COMMAND от панели инструментов истрокового редактора, а также сообщение WM_LBUTTONDBLCLK.
Выходные параметры оконногоредактора.
Выходными параметрамиоконного редактора являются:
àотображение редактируемой базы данных и строкового редактора;
à реализациядополнительных функций, предоставляемых рассматриваемой программой.
Примечание: вызов дополнительных функций может осуществляться через «горячиеклавиши», через панель инструментов или через всплывающее меню оконногоредактора.
Алгоритм работы оконногоредактора.
1. Отображение редактируемой базы данных и строкового редактора.
2. Обработка сообщений мыши.
3. Обработка сообщений полос прокрутки.
4. Обработка сообщения WM_COMMAND.
5. Реализация дополнительных функций, предоставляемых программой.
Смысл некоторых переменных, использующихсяпри работе по приведенному алгоритму, поясняется на рис. 3.9.
/>

Рис. 3.9
 
js, jsMax – номер текущей записи и максимальноечисло полей в записи базы данных соответственно;
jsLeft, jsRight – границы отображаемого текста базыданных (содержимого оконного редактора) по горизонтали (номера столбцов);
MaxRow, MaxCol – максимальное число символов,отображаемых в оконном редакторе, по вертикали и горизонтали соответственно;
in, iv – границы отображаемого текста базыданных (содержимого оконного редактора) по вертикали (номера записей);
Row– номер записи, на которой находится строковый редактор (принимаетзначения от 1 до MaxRow);
Kol – количество записей (строк) в базеданных.
Используются также следующиепеременные и массивы:
Text – исходный массив (база данных);
Bufv – символьный массив, отображаемый наэкране (содержимое оконного редактора);
Par – целочисленный массив, содержащийграницы полей базы данных (табуляция);
Ndn, Nup – минимальный и максимальный номерастрок массива Bufv, в пределах которых его необходимо заполнить новыми данными из Text;
BVpol, Bhpol – логические переменные, указывающие наналичие полос прокрутки.
Все упомянутые переменные,кроме BVpol и Bhpol – целочисленные. Назначение некоторыхдругих переменных, используемых в программе, будет пояснено далее.
Первый пункт алгоритма реализуется следующим образом.
После создания оконногоредактора, но перед его отображением, оконная процедура получает сообщение WM_CREATE. При его обработке путемвызова функции SetStatePnUpr на панели инструментовактивизируются доступные оконному редактору функции. Затем вызывается функция WMCREATE:
Ret= WMCREATE(hWch, NumbRowTitr, Par),
где NumbRowTitr – число строк титров (в рассматриваемой программе равно 1).
В процессе выполнения этойфункции задаются шрифт и цвет выводимого в окно текста, рассчитываются значенияпеременных js, jsMax, jsLeft, jsRight, MaxRow, MaxCol. После этого вызывается подпрограмма коррекции данных corUnsch с параметром hWch, в которой данныеподготавливаются для вывода на экран (более подробно работа подпрограммы corUnsch будет рассмотренадалее). Затем путем вызова функции CreateEdit с параметром hWch создается строковыйредактор.
При получении сообщения WM_PAINT оконная процедура вызываетфункцию WMPAINT:
ret = WMPAINT (hWch,TitrUnsch, NumbRowTitr, Par, Bufv),
где    TitrUnsch – символьныймассив, содержащий титры.
В процессе выполнения этойфункции производится вывод на экран строки (строк) титров и содержимого массиваBufv.Если имеются отмеченные строки или блоки текста, они выводятся инвертированными.
При получении сообщенияWM_SIZE оконная процедура вызываетфункцию WMSIZE:
ret = WMSIZE (hWch, Kol, NumbRowTitr, LengStr),
в которой, исходя из новогоразмера рабочей области оконного редактора, пересчитываются переменные MaxRow, MaxCol, и анализируется, нужно ли отображать полосы прокрутки. Далее воконной процедуре рассчитывается новое значение переменной jsRight, а затем, в случаенеобходимости, корректируется положение окна строкового редактора (приуменьшении размеров рабочей области оконного редактора) или содержимое массива Bufv (при увеличении размероврабочей области оконного редактора).
При получении сообщения WM_DESTROY обнуляется переменная hWch, уничтожается окнострокового редактора и закрывается окно оконного редактора.
Рассмотрим более подробноподпрограмму corUnsch.
В случае, если код возвратаотличен от нуля, сначала в символьный массив Bufv, а затем и в Text, заносятся изменения,произведенные в строковом редакторе. Затем вызывается функция MoveEditWithMouse:
ret = MoveEditWithMouse (Par,Kol),
Если в результате щелчкалевой кнопкой мыши или действия полос прокрутки окно строкового редакторанеобходимо переместить, функция возвращает положительное значение, взависимости от которого вызывается функция Metka4 или Metka5, а затем Metka6. Если в результате действия полосы прокрутки требуется изменитьсодержимое оконного редактора, то пересчитываются границы отображаемого текстабазы данных in, iv, в соответствии с нимизаполняется массив Bufv, а затем вызываются функции Metka4, Metka5, Metka6. Если функция MoveEditWithMouseвозвращает 0, т.е. перемещение окна не производилось ни мышью, ни полосамипрокрутки, то вызывается подпрограмма управления окном contw, и в случаеперемещения строкового редактора с помощью клавиатуры или всплывающего меню(влево / вправо, вверх / вниз, в начало / конец строки, в начало /конец базы данных, листание вверх / вниз) пересчитывается положениестрокового и оконного редакторов. В том случае, если перемещение строковогоредактора не производилось, проверяется, был ли запрос на поиск по шаблону.
Функция Metka4 выполняет пересчет переменных jsLeft, jsRight в зависимости от того, вкаком столбце (js) находится строковый редактор. Пересчитывается также егогоризонтальная координата XEdit.
Функция Metka5 выполняет пересчет вертикальной координаты строкового редактора YEdit, а в символьную строку Bufed помещается редактируемыйтекст.
В процессе выполненияфункции Metka6 в соответствующие поляпанели состояния выводится количество записей в базе данных и номер текущейзаписи.
Второй пункт алгоритма реализуется следующим образом.
Оконная процедура оконногоредактора обрабатывает пять сообщений мыши: WM_LBUTTONDOWN, WM_RBUTTONDOWN, WM_MOUSEMOVE, WM_LBUTTONDBLCLKиWM_LBUTTONUP.
При получении сообщения WM_LBUTTONDOWNвызывается функция WMLBUTTONDOWN:
ret = WMLBUTTONDOWN(hWch, mesg, lParam, corUnsch).
В процессе выполнении этойфункции переменной cod присваивается значение переменной mesg, т.е. идентификаторсообщения WM_LBUTTONDOWN, а переменной sccod – значение переменной lParam, содержащей горизонтальную позицию курсора мыши в младшем слове ивертикальную позицию курсора мыши в старшем слове. Затем вызываетсяподпрограмма corUnsch, в которой рассчитываются новые координаты окна строковогоредактора. Обновляется его содержимое, каретка устанавливается на первуюпозицию. Для перемещения окна строкового редактора вызывается функция SetWindowPos, послечего управление возвращается в оконную процедуру, где выполняются еще несколькооператоров, связанных с реализацией дополнительных функций, и о которых болееподробно будет рассказано при описании четвертого пункта алгоритма.
При получении оконнойпроцедурой оконного редактора сообщения WM_RBUTTONDOWN на экранвыводится всплывающее меню. Перед его созданием для каждого пункта меню задаетсяидентификатор и отображаемый текст. Затем вызывается подпрограмма popupm с параметром hWch, в которой происходитсоздание и отображение меню. Вид всплывающего меню оконного редакторапредставлен на рис. 3.10.

/>
Рис. 3.10.Вид всплывающего меню оконного редактора
При щелчке левой кнопкоймыши на к.-л. пункте всплывающего меню оконной процедуре оконного редакторапосылается сообщение WM_COMMAND, содержащее в младшем слове параметра wParamидентификатор выбранного пункта меню.
Обработка оконной процедуройсообщений WM_MOUSEMOVE, WM_LBUTTONDBLCLKиWM_LBUTTONUPнеобходима для реализации дополнительных функций, предоставляемых программой, иподробнее будет рассмотрена при описании четвертого пункта алгоритма.
Третий пункт алгоритма реализуется следующим образом.
При обработке действийпользователя вертикальная и горизонтальная полосы прокрутки посылаютродительскому окну (т.е. оконному редактору) сообщения WM_VSCROLL и WM_HSCROLL соответственно. При этомпеременная wParam в младшем слове содержит одну из величин, идентифицирующихдействие пользователя, и определенных в файле msfwinty.f90 (приведены только те, которыеобрабатываются в рассматриваемой программе):
à SB_LINEDOWN         – прокрутка на строку вниз;
à SB_LINEUP               – прокрутка на строку вверх;
à SB_PAGEDOWN       – прокрутка на страницу вниз;
à SB_PAGEUP             – прокрутка на страницу вверх;
à SB_THUMBTRACK– перетаскивание бегунка. Номер текущей позиции бегунка содержится в старшемслове wParam.
При обработке сообщения WM_VSCROLL вызывается функция WMVSCROLL:
ret = WMVSCROLL(hWch, mesg, wParam, corUnsch).
При обработке сообщения WM_HSCROLLвызывается функция WMHSCROLL:
ret = WMHSCROLL(hWch, mesg, wParam, corUnsch).
Алгоритмы работы этихфункций схожи. В случае, если младшее слово wParam содержит идентификатор SB_LINEDOWN,SB_LINEUP, SB_PAGEDOWN или SB_PAGEUP, переменная cod обнуляется, а переменной sccod присваивается значение идентификатора соответствующего пункта всплывающегоменю. Если младшее слово wParam содержит идентификатор SB_THUMBTRACK,переменной cod присваивается значение переменной mesg, а переменной sccod– значение переменной wParam. (Во всех остальных случаях управление возвращается оконной процедуре.)Затем вызывается подпрограмма corUnsch, в которой рассчитываются новые координаты окна строкового редактора.Обновляется его содержимое, каретка устанавливается на первую позицию. Для перемещенияокна строкового редактора вызывается функция SetWindowPos, после чегоуправление возвращается оконной процедуре.
Если указанное сообщение поступилоот горизонтальной полосы прокрутки, то соответствующие операции осуществляются влево /вправо.
Четвертый пункт алгоритма.
При получении сообщения WM_COMMAND вспомогательной переменной ret присваивается значение младшего слова wParam. Дальнейшая работа программыорганизуется с помощью конструкции SelectCase, тест-выражением для которой является переменная ret.
Если ret = -1, т.е. сообщение пришлоот оконной процедуры строкового редактора, или ret является идентификаторомпункта всплывающего меню оконного редактора (кроме последних пяти), вызываетсяфункция MYCASE:
ret = MYCASE(hWch, ret, corUnsch).
При выполнении функциисначала анализируется значение переменной ret, и если retявляется идентификатором пункта всплывающего меню, переменная cod обнуляется, а sccod присваивается значение ret. Затем вызываетсяподпрограмма corUnsch. Обновляется содержимое строкового редактора, кареткаустанавливается на первую позицию. Для перемещения окна строкового редакторавызывается функция SetWindowPos и управление возвращается оконной процедуре.
Если ret является идентификаторомрадиокнопки или одного из органов управления панели инструментов, т.е. былавызвана одна из функций, доступных данному дочернему окну, выполняетсясоответствующая переменной retCase‑секция.
Во всех остальных случаях(по оператору CaseDefault) управление передается функции DefWindowProc.
Пятый пункт алгоритма.
В рассматриваемой программереализованы следующие дополнительные функции:
1. «Выбор титров».
2. «Вызов Протокола».
3. «Ввод названий узлов».
4. «Отметить строку (строки)».
5. «Отметить блок».
6. «Снять маркировку».
7. «Поиск по шаблону вниз / вверх».
Рассмотрим работу каждой изних подробнее.
1. «Выбор титров».
Назначение – предоставлениепользователю возможности задавать порядок отображения параметров в любойкомбинации и в любой последовательности.
При вызове этой функции на экранвыводится окно модального диалога, в котором предлагается выбрать желаемый порядокследования полей записей базы данных. Вид модального диалога представлен на рис. 3.11(см. на следующей странице).
/>
Рис. 3.11.Вид модального диалога «Выбор титров»
Оконная процедура диалога иподпрограммы, необходимые для реализации данной функции, объединены в модуле Titr.
При инициализации диалогаоконная процедура вызывает подпрограмму TitreInit, в которойинициализируются необходимые переменные и на экран выводится список титров,доступных для выбора.
В процессе работы с даннымдиалогом пользователь может выполнять следующие действия.
à Нажатькнопку переноса титра вправо. Оконная процедура диалога получаетсоответствующее сообщение, по которому вызывает подпрограмму Move,где выполняются операции переноса выделенного титра из одного окна списка вдругой. Если ни один титр в левом окне списка не выбран или список пуст, кнопканедоступна.
à Нажатькнопку переноса титра влево. Вызывается подпрограмма Move, гдевыполняются операции переноса выделенного титра из одного окна списка в другой.Если ни один титр в правом окне списка не выбран или список пуст, кнопканедоступна.
à Нажатькнопку «Выбрать все». Все содержимое левого окна списка добавляется в правый,после чего левый список очищается. Если левый список пуст, кнопка недоступна.
à Нажатькнопку «Очистить все». Содержимое обоих окон списков уничтожается, а затемвызывается подпрограмма TitreInit. Данная кнопка недоступна, еслилевый список пуст.
à Нажатькнопку «Отмена». Восстанавливается прежний порядок следования титров, окнодиалога завершает свою работу и управление передается оконной процедуреоконного редактора.
à Нажатькнопку «Ок». В переменную jsMax записывается количество выбранных титров. После этогопоследовательно вызываются подпрограмма Change_By_Places_Titr, вкоторой производится коррекция символьного массива TitrUnsch, содержащего титры, иподпрограмма Change_By_Places_Text, в которой производитсякоррекция символьного массива Bufv и целочисленного массива табуляции Par в соответствии с выбраннымпорядком отображения параметров. Окно модального диалога уничтожается иуправление передается оконной процедуре оконного редактора. Данная кнопканедоступна, пока не будет выбран по крайней мере один титр.
Модуль Titr также содержит подпрограммуVosvrat_Titr, в которой производится восстановлениепервоначального порядка следования титров, и подпрограмму Vosvrat_Text,в которой производится восстановление первоначального порядка следованияэлементов массивов Bufv и Par.
Глобальная логическаяпеременная TitrFlag по умолчанию устанавливается в FALSE и принимает значение TRUE только в том случае, еслипорядок отображения параметров был изменен. В процессе работы оконногоредактора перед началом обмена данными между массивами BufvиText анализируется состояние переменной TitrFlag и, если онаустановлена в TRUE, вызывается подпрограмма Vosvrat_Text, а призавершении обмена вызывается подпрограмма Change_By_Places_Text.
2. «Вызов Протокола».
Эта функция становитсядоступной либо после трансляции любого файла основной базы данных, либо послекомпоновки расчетной схемы. При ее вызове пользователю предоставляется списокобнаруженных при трансляции ошибок. Предусмотрена возможность автоматическогопоиска источника ошибки, принадлежащего к редактируемому типу исходных данных.
При вызове протокола наэкран выводится модальное окно диалога. Вид модального диалога представлен нарис. 3.12.
/>
Рис. 3.12.Вид модального диалога «Вызов Протокола»

Оконная процедура диалога иподпрограмма ProtocolInit, которая вызывается при инициализациидиалога, объединены в модуле ProtMod.
Каждому сообщению об ошибкесоответствует одна строка. Общее количество строк (сообщений) и номер текущейстроки указываются в соответствующих полях («Всего записей» и «Запись №»).
Предусмотрены три группысообщений: «!» – использование данных, как правило, при решении технологическихзадач приводит к их аварийному завершению; «?» – возможны ошибки при решенииряда технологических задач; «» – предупреждения, не обязательно связанные сошибками.
Для удаления какого либосообщения необходимо отметить его с помощью клавиатуры или щелчком левой кнопкимыши, а затем нажать кнопку «Удалить». Удаление является мнимым: все удаленныесообщения легко восстанавливаются – следует закрыть, а затем повторно вызватьпротокол.
Автоматический поискисточника ошибки осуществляется следующим образом: сначала необходимо отметитьнужное сообщение, а затем нажать кнопку «Перейти». Окно протокола закрывается,в оконный редактор выводится нужная страница данных, а окно строковогоредактора устанавливается на записи, содержащей ошибку. Переход к месту ошибкивозможен также по двойному щелчку левой кнопкой мыши на сообщении об ошибке.
Выход из окна протоколаосуществляется автоматически, если удалены все сообщения об ошибках, или понажатию кнопки «Выход из Протокола».
При изменении редактируемыхданных вызов функции «Протокол» становится недоступен до тех пор, покаизмененные данные не будут вновь оттранслированы.
3. «Ввод названий узлов».
Данная функция доступнатолько при редактировании параметров узлов и дает возможность пользователюредактировать названия узлов.
Ее вызов осуществляетсящелчком левой кнопкой мыши на соответствующей радиокнопке панели инструментов.В нижней части экрана непосредственно над панелью состояния выводитсянемодальное окно диалога, вид которого представлен на рис. 3.13.
/>
Рис. 3.13.Вид немодального диалога «Ввод названий узлов».
Размеры оконного редакторасоответствующим образом корректируются. В случае, если при отображениинемодального диалога «Ввод названий узлов» оконному редактору останетсянедостаточно места для отображения хотя бы одной записи, выводитсясоответствующее сообщение, немодальный диалог не создается, а вызов функцииигнорируется.
Оконная процедура диалогасодержится в модуле NameUzlMod.
В окно диалога выводитсяномер узла, соответствующего записи, на которой установлено окно строковогоредактора, и название этого узла (не более 50 символов). При перемещениистрокового редактора по записям эта информация обновляется.
Для редактирования названияузла необходимо щелкнуть левой кнопкой мыши на окне редактирования немодальногодиалога и при появлении в нем курсора отредактировать текст окна. Чтобы вернутькурсор строковому редактору, достаточно щелкнуть левой кнопкой мыши над рабочейобластью оконного редактора.
Все время, пока активенрежим ввода названий узлов, соответствующая радиокнопка на панели инструментовостается отмеченной. При повторном ее нажатии осуществляется выход из этогорежима: считывается и запоминается содержимое окна редактирования, окнонемодального диалога уничтожается, корректируются размеры оконного редактора, арадиокнопка разотмечается.
4. «Отметить строку(строки)».
Для удобства работыпользователя реализована возможность отметки строки (строк). Маркировать можноотдельную строку или несколько строк. В последнем случае при использовании«горячей клавиши» (ALT+L) или всплывающего меню оконного редактора отмечаются верхняя инижняя строки в произвольной последовательности, допускается расширениеотмеченного блока вверх и вниз.
Реализована возможностьмаркировки строки (строк) с помощью мыши путем ее перемещения с нажатой левойкнопкой. В момент отпускания кнопки операция выделения прекращается.
Отмеченная строка (строки)выводится на экран инвертированной.
5. «Отметить блок».
Для удобства работыпользователя реализована возможность отметки блока с помощью клавиатуры(используется «горячая клавиша» ALT+B) и с помощью мыши (используется двойной щелчок левой кнопкой иливсплывающее меню оконного редактора). Маркировать можно отдельное поле илигруппу (блок) полей; в последнем случае отмечается левый верхний и правыйнижний угол в произвольной последовательности. Допускается расширениеотмеченного блока вверх и влево, вниз и вправо.
При отметке начала блока(к.-л. поля) оно инвертируется, а на панель состояния выводится надпись«Отметьте конец блока». При отметке конца блока отмеченная группа полейвыводится на экран инвертированной, а надпись в панели состояния стирается.
6. «Снять маркировку».
Снять маркировку ужеотмеченного блока или строки (строк) можно с помощью клавиатуры («горячаяклавиша» ALT+U) и с помощью мыши (используется щелчок левой кнопкой мыши надрабочей областью оконного редактора или всплывающее меню оконного редактора).
7. «Поиск по шаблону вниз /вверх».
Данная функция облегчает иускоряет поиск нужного параметра.
Шаблон поиска вводится вокно редактирования на панели инструментов (см. п. 3.4). Затем с помощьюсоответствующих органов панели инструментов («поиск по шаблону вниз», «поиск пошаблону вверх»), которые продублированы «горячими клавишами» (ALT+P и CTRL+P соответственно) и всплывающим менюоконного редактора, производится поиск.
Поиск ведется по столбцам,начиная с поля, на котором находится окно строкового редактора. «Листание»вверх / вниз производится автоматически, если это необходимо. Если поискуспешный, то окно строкового редактора устанавливается на поле, найденноепервым; в противном случае пользователь информируется о том, что поискнеуспешен, а местоположение окна не изменяется.
Введенный последним шаблонсохраняется неизменным до тех пор, пока не будет введен новый.
 

4. Разработка мероприятий побезопасной эксплуатации ПЭВМ
Государственный комитетсанитарно-эпидемиологического надзора Российской Федерации осуществляетразработку и надзор за исполнением федеральных санитарных правил, норм игигиенических нормативов, которые:
à содержатнормативные акты, устанавливающие критерии безопасности и (или) безвредностидля человека факторов среды его обитания и требования к обеспечениюблагоприятных условий его жизнедеятельности;
àобязательны для соблюдения всеми государственными органами и общественнымиобъединениями, предприятиями и иными хозяйствующими субъектами, организациями иучреждениями, независимо от их подчиненности и форм собственности, должностнымилицами и гражданами.
Федеральные санитарныеправила и нормы в числе прочих включают в себя раздел «Гигиенические требованияк видеодисплейным терминалам (ВДТ) и ПЭВМ и организация работы с ними», наоснове которого разрабатываются мероприятия по безопасной эксплуатации ПЭВМ.
Рассмотрим некоторыенаиболее важные с точки зрения безопасной эксплуатации ПЭВМ требования,устанавливаемые федеральными санитарными правилами и нормами.
4.1 Требования к ВДТ и ПЭВМ
Конструкция ВДТ и ПЭВМдолжна обеспечивать соответствие санитарно-гигиеническим нормам следующихпараметров:
à мощностьэкспозиционной дозы рентгеновского излучения;
à уровеньультрафиолетового излучения на рабочем месте пользователя;
àнапряженность электромагнитного поля на рабочем месте пользователя поэлектрической и по магнитной составляющей;
àнапряженность электростатических полей на поверхностях ВДТ;
à уровеньзвука при работе ВДТ и ПЭВМ и при включении их в сеть.
Конструкция ВДТ ПЭВМ должнапредусматривать:
àвозможность поворота корпуса в горизонтальной и в вертикальной плоскостях сфиксацией в заданном положении;
àантибликовое покрытие экрана и другие конструктивные решения для обеспеченияоптимального качества изображения при наличии внешних источников освещения.
Конструкция клавиатурыдолжна предусматривать:
à исполнениев виде отдельного устройства;
à опорноеприспособление, позволяющее изменять угол наклона поверхности клавиатуры.
4.2 Требования к помещениямдля эксплуатации ВДТ и ПЭВМ
Помещения с ВДТ и ПЭВМдолжны иметь естественное и искусственное освещение. Естественное освещениедолжно осуществляться через светопроемы, ориентированные преимущественно насевер и северо-восток и обеспечивать нормированные для различных климатическихпоясов значения коэффициенты естественной освещенности (КЕО).
Расположение рабочих мест сВДТ и ПЭВМ в цокольных и подвальных помещениях допускается только посогласованию с органами Государственного санитарно-эпидемиологического надзора.
Звукоизоляция ограждающихконструкций помещений с ВДТ и ПЭВМ должна отвечать гигиеническим требованиям иобеспечивать нормируемые параметры шума.
Помещения с ВДТ и ПЭВМдолжны оборудоваться системами отопления, кондиционирования воздуха илиэффективной приточно-вытяжной вентиляцией.
Поверхность пола впомещениях эксплуатации ВДТ и ПЭВМ должна быть ровной, без выбоин, нескользкой,удобной для очистки и влажной уборки, обладать антистатическими свойствами.
4.3 Требования к защите отшума и вибрации
В производственныхпомещениях, в которых работа на ВДТ и ПЭВМ является основной (диспетчерские,операторские, расчетные, кабины и посты управления, залы вычислительной техникии др.), в дошкольных и всех учебных помещениях с ВДТ и ПЭВМ фоновый уровеньшума не должен превышать 40 дБА, (при работе систем воздушного отопления,вентиляции и кондиционирования – 35 дБА), а во время работы на ВДТ и ПЭВМ 50дБА. Вибрация также не должна превышать нормируемых значений.
4.4 Требования к освещениюпомещений и рабочих мест с ВДТ и ПЭВМ
Искусственное освещение впомещениях эксплуатации ВДТ и ПЭВМ должно осуществляться системой общегоравномерного освещения. В производственных и административно-общественныхпомещениях, в случаях преимущественной работы с документами, допускаетсяприменение системы комбинированного освещения (к общему освещению дополнительноустанавливаются светильники местного освещения, предназначенные для освещениязоны расположения документов).
Искусственное освещениедолжно обеспечивать на рабочих местах с ВДТ и ПЭВМ в производственных,административно-общественных, дошкольных и учебных помещениях освещенность нениже нормируемых значений.
В качестве источников светапри искусственном освещении должны применяться преимущественно люминесцентныелампы типа ЛБ. При устройстве отраженного освещения в производственных иадминистративно-общественных помещениях допускается применениеметаллогалогенных ламп мощностью до 250 Вт. Допускается применение лампнакаливания в светильниках местного освещения.
Общее освещение следуетвыполнять в виде сплошных или прерывистых линий светильников, расположенныхсбоку от рабочих мест, преимущественно слева, параллельно линии зренияпользователей.
4.5 Общие требования корганизации и оборудованию рабочих мест с ВДТ и ПЭВМ
Рабочие места с ВДТ и ПЭВМдолжны размещаться в помещениях с естественным освещением при ориентацииоконных проемов на север или северо-восток.
Рабочие места с ВДТ и ПЭВМпри выполнении творческой работы, требующей значительного умственногонапряжения или высокой концентрации внимания, следует изолировать друг от другаперегородками высотой 1,5–2,0 м.
Шумящее оборудование (АЦПУ идр.), следует размещать вне помещений с использованием ВДТ и ПЭВМ.
При конструированииоборудования и организации рабочего места пользователя ВДТ и ПЭВМ следуетобеспечить соответствие конструкции элементов рабочего стола и их взаимногорасположения, конструкции стула (кресла) гигиеническим и эргономическимтребованиям с учетом характера выполняемой деятельности, комплексности техническихсредств, форм организации труда и основного рабочего положения пользователя.
Экран видеомониторов долженнаходиться от глаз пользователя на оптимальном расстоянии 700 мм, но неближе 500 мм.
В помещениях с ВДТ и ПЭВМежедневно должна проводиться влажная уборка.
4.6 Требования к организациирежима труда и отдыха при работе с ПЭВМ и ВДТ
Режимы труда и отдыха припрофессиональной работе с ПЭВМ и ВДТ должны организовываться в зависимости отвида и категории трудовой деятельности. Виды трудовой деятельности разделяютсяна 3 группы:
à группа А –работа по считыванию информации с экрана ВДТ или ПЭВМ с предварительнымзапросом;
à группа Б –работа по вводу информации;
à группа В-творческаяработа в режиме диалога с ЭВМ.
Для видов трудовойдеятельности устанавливается 3 категории тяжести и напряженности работы с ВДТ иПЭВМ, которые определяются:
à для группА и Б – по суммарному числу считываемых или вводимых знаков за рабочую смену;
à для группыВ-по суммарному времени непосредственной работы с ВДТ и ПЭВМ за рабочую смену.
Продолжительность работыпедагогов при ведении занятий с ВДТ и ПЭВМ во всех учебных заведениях не должнапревышать 4 часов в день.
Продолжительность работы сВДТ и ПЭВМ инженеров, обслуживающих занятия в кабинетах вычислительной техникиили дисплейных классах высших учебных заведений, не должна превышать 6 часов вдень.
Для обеспечения оптимальнойработоспособности и сохранения здоровья профессиональных пользователей, напротяжении рабочей смены должны устанавливаться регламентированные перерывы.Время регламентированных перерывов в течение рабочей смены следуетустанавливать в зависимости от ее продолжительности, вида и категории трудовойдеятельности с ВДТ и ПЭВМ. Продолжительность непрерывной работы с ВДТ и ПЭВМбез регламентированного перерыва не должна превышать 2 часов.
Для профилактики зрительногоутомления после каждых 25 минут работы следует выполнять комплекс упражненийдля глаз.
Во время регламентированныхперерывов, с целью снижения нервно-эмоционального напряжения, устранениявлияния гиподинамии и гипокинезии, предотвращения развития познотоническогоутомления следует выполнять комплексы упражнений.
4.7 Требования к организациимедицинского обслуживания пользователей ВДТ и ПЭВМ
Профессиональныепользователи ВДТ и ПЭВМ должны проходить обязательные предварительные (припоступлении на работу) и периодические медицинские осмотры в порядке и в сроки,установленные Министерством здравоохранения Российской Федерации иГосударственным комитетом санитарно-эпидемиологического надзора РоссийскойФедерации. К непосредственной работе с ВДТ и ПЭВМ допускаются лица, не имеющиемедицинских противопоказаний.
Женщины со времениустановления беременности и в период кормления ребенка грудью к выполнению всехвидов работ, связанных с использованием ВДТ и ПЭВМ, не допускаются.
Медицинскоеосвидетельствование студентов высших учебных заведений и учащихся среднихспециальных учебных заведений должно проводиться в соответствии с действующиминормативно-методическими документами Министерства здравоохранения РоссийскойФедерации.
Медицинскоеосвидетельствование детей дошкольного и школьного возраста проводится в порядкеи в сроки, установленные Министерством здравоохранения Российской Федерации иМинистерством образования Российской Федерации. [8]

Заключение
В ходе работы над проектомбыла дана математическая формулировка задачи оценивания и рассмотрены еевычислительные аспекты, приведены концепции построения математическогообеспечения информационно-вычислительной подсистемы, в соответствии с которымидолжна формироваться единая математическая модель режима ЭЭС. Описаны такженазначение и основные функции КП Компоновщик расчетных схем.
Рассмотрены требования,предъявляемые к системам подготовки, отладки и поддержания данных.
Приведен алгоритмформирования расчетной схемы, удовлетворяющий этим требованиям.
Описан пользовательскийинтерфейс КП Компоновщик расчетных схем в операционной системе MS DOS.
Реализованы основныеэлементы пользовательского интерфейса в операционной системе Windows: панель инструментов,панель состояния, строковый и оконный редакторы, модальные и немодальныедиалоговые окна.
Рассмотрены некоторыенаиболее важные с точки зрения организации безопасной эксплуатации ПЭВМтребования, устанавливаемые федеральными санитарными правилами и нормами.
Разработанные программынасчитывают порядка трех с половиной тысяч операторов.

Список литературы
1. Унароков А.А. Управлениережимом энергосистемы в реальном времени. // Докторская диссертация. – М.:МЭИ, 1997 г.
2. Унароков А.А. Вычислительныеаспекты оценки состояния ЭЭС. // Известия РАН. Энергетика, 1995 г., №2.
3. Унароков А.А. Математическоеобеспечение информационно-вычислительной подсистемы: состав, концепциипостроения и технические характеристики. // Сборник научных трудов №9. – Смоленск:СФ МЭИ, 1996 г.
4. Петзолд Ч. Программированиедля Windows 95; в двух томах. / Пер. с англ. – СПб.: BHV – Санкт-Петербург, 1997 г.
5. Бартеньев О.В. СовременныйФортран. – М.: Диалог-МИФИ, 1998 г.
6. Гладков С.А., Фролов Г.В. Программированиев Microsoft Windows, в двух частях. Часть 1. – М.: Диалог-МИФИ, 1992 г.
7. Руководство по программированиюв среде Microsoft Windows. – М.: Наука, 1991 г.
8. Федеральные санитарныеправила, нормы и гигиенические нормативы. Гигиенические требования квидеодисплейным терминалам и персональным электронно-вычислительным машинам иорганизация работы с ними. – ГК СЭН РФ, М.: СанПин, 1994 г.


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.