Исследование структурной надежности методом статистического моделирования

СОДЕРЖАНИЕ



ВВЕДЕНИЕ

1 МЕТОДЫ ИССЛЕДОВАНИЯ СТРУКТУРНОЙ НАДЕЖНОСТИ

	1.1 Точный метод анализа структурной надежности

	1.2 Приближенные методы анализа структурной надежности

1.2.1 Метод разложения

1.2.2 Метод сечений или совокупности путей

1.2.3 Метод двухсторонней оценки

1.2.4 Метод статистической оценки структурной надежности

		2 ИССЛЕДОВАНИЕ СТРУКТУРНОЙ НАДЕЖНОСТИ МЕТОДОМ СТАТИСТИЧЕСКОГО МОДЕЛИРОВАНИЯ

	2.1 Критерии оценки структурной надежности методом статистического моделирования

	2.2 Разработка алгоритма расчета структурной надежности

	2.2.1 Алгоритм расчета структурной надежности сети связи методом статистического моделирования 

	2.2.2 Алгоритм интерфейсной части программы расчета надежности сети методом статистического моделирования

		2.3 Разработка программы расчета структурной надежности методом статического моделирования

2.3.1 Разработка расчетной части программы расчета структурной надежности сети

2.3.2 Разработка интерфейсной части программы расчета структурной надежности сети

3 БЕЗОПАСНОСТЬ ЖИЗНЕДЕЯТЕЛЬНОСТИ

ЗАКЛЮЧЕНИЕ

Приложение А Методические указания по работе с программой

БИБЛИОГРАФИЯ




ВВЕДЕНИЕ



Разработка современных информационных систем включает в качестве одного из обязательных этапов проектирования анализ их надежности. Проблема усложняется тем, что коммутационные сети, к анализу которых в конечном итоге сводится данная задача, являются сильно связными структурами (междугородние сети связи, системы управления). Это затрудняет, а порой делает невозможным расчет их надежности строго аналитическими методами, как это имеет место, например, для параллельно-последовательных сетей. Единственным численным методом расчета надежности сильно связанных сетей остается метод полного перебора, который, однако, даже с привлечением быстродействующих ЭВМ, не позволяет анализировать сети, содержащие более 15-20 случайных компонент.

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

В инженерной практике при решении подобного рода задач часто прибегают к методу частичного перебора. Так, например, при выборе оптимальной структуры сети связи в качестве частных вариантов могут анализироваться некоторые типовые схемы соединения узловых пунктов. Например, так называемый, радиальный принцип соединения узлов, принцип связи ”каждого с каждым” или ”каждого с ближайшим”, иерархический принцип соединения и другие. Одним из основных критериев оценки этих вариантов является, прежде всего, надежность передачи сообщения в сети.

Среди методов вероятностного анализа коммуникационных сетей будем различать алгоритмические, являющиеся по существу программами для решения задач на ЭВМ, и методы аналого-вероятностного моделирования.

Одним из основных методов решения поставленных задач является метод статистического моделирования. Критерием оценки структурной надежности сетей связи, по этому методу, является вероятность наступления события - сеть связанна.




1 МЕТОДЫ ИССЛЕДОВАНИЯ СТРУКТУРНОЙ НАДЕЖНОСТИ.



1.1 Точный метод анализа структурной надежности



Введем несколько определений из теории графов.

Определение: ориентированная сеть  считается заданной, если заданы множества вершин  и ребер .

Индексы при элементах множества X указывают на их ориентацию [1]. Так, для ребра  началом будет вершина , а концом вершина . Если элементам множества  сопоставлены весовые коэффициенты, равные единице, а элементам множества X – единицы и нули, то такая сеть называется булевой или детерминированной. Элементы множества X при этом называются двоичными (релейными) компонентами сети. 

Определение: ориентированная релейно-стохастическая сеть – 

, считается заданной если одновременно с множествами  и  заданы множества весовых коэффициентов 



 и 







причем  и  – это вероятности независимых событий  и , находятся в пределах: , . 

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

Вероятность сложного события  принимает значение “единица”, если полюсы  и  при заданном наборе независимых двоичных компонент образуют связанную пару. Вероятность  сложного события  может принимать значения от нуля до единицы. 

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

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

Обозначим , тогда  и пусть  задает одно из  возможных состояний компонент, а именно:



,



где  .

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



,



где , 

таким образом, поскольку  является полной группой несовместных событий, то , .

Определим переключательную функцию  через величину проводимости сети между вершинами  и   для набора r. Для проводящих наборов соответствующие функции  примем равными единице, а для непроводящих – нулю. Каждой паре вершин графа, таким образом, сопоставляется общая функция проводимости (соответствующая совершенной дизъюнктивной нормальной форме при задании сети в виде булевой функции): 



,


где  – наборы, для которых функция равна единице, а  – число таких наборов (  ). Учитывая это, вероятность проводимости сети между узлами  и  определится формулой:



,(1.1)



где .

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

Как составление, так и решение формулы (1.1) – исключительно трудоемкий процесс, поскольку в ее основе лежит перебор всех состояний системы. Решение же данной формулы с использованием ЭВМ при  времени выполнения операции умножения двух чисел, порядка , и состоящей из  ненадежных компонент составит около 50 часов, а для сети с  почти тысячу лет! 



1.2 Приближенные методы анализа структурной надежности



1.2.1 Метод разложения

Несколько менее трудоемким является метод, основанный на разложении структуры сети относительно какого-нибудь ее элемента (метод разложения Шеннона  Мура). Идея этого метода заключается в том, чтобы свести анализируемую структуру к последовательно-параллельным соединениям [2] и тем самым избежать полного перебора состояний. Для примера рассмотрим сеть простейшей структуры в виде мостика (рисунок 1.1). Рисунок 1.1. Метод разложения



Для простоты положим, что узлы этой сети идеально надежны, а ветви имеют конечную надежность рi, i = . Нумерация ветвей приведена на рисунке. Проделаем с элементом под номером 5 (“ перемычка ” мостика) два опыта – “ короткого замыкания ”, соответствующий исправному состоянию элемента, и “ холостого хода ”, соответствующий его неисправному состоянию. Если перемычка находится в исправном состоянии, что случается с вероятностью p5, то соединяемые ею узлы можно “ стянуть ” в смысле надежности (рисунок 1.1) и сеть будет иметь вид двух последовательно соединенных и параллельно включенных пар ветвей [3]. Если перемычка находится в неработоспособном состоянии, что случается с вероятностью 1 – p5, то оставшаяся сеть будет иметь вид параллельного соединения цепочек.

Таким образом, мы “ разложили ” сеть относительно элемента 5, в результате чего получили две подсети с числом элементов на единицу меньше, чем в исходной сети. Поскольку обе подсети представляют собой последовательно-параллельные структуры, то можно сразу записать искомое выражение для вероятности связности сети относительно узлов r, l, используя для компактности обозначение :



.



В более сложных структурах может потребоваться неоднократное применение теоремы разложения. Так, на рисунке 1.2 показано разложение относительно элемента 7 (верхняя строка), а затем по элементу 8 (нижняя строка). Получившиеся четыре подсети имеют последовательно-параллельные структуры и больше не требуют разложений. Легко видеть, что на каждом шаге число элементов в получающихся подсетях уменьшается на единицу, а число подсетей, требующих дальнейшего рассмотрения удваивается. Поэтому описанный процесс в любом случае конечен, а число результирующих последовательно-параллельных структур составит 2m, где т — число элементов, по которым пришлось провести разложение. Трудоемкость этого метода можно оценить величиной 2m, что меньше трудоемкости полного перебора, но все еще неприемлемо для расчета надежности реальных сетей коммутации.





Рисунок. 1.2. Последовательное разложение сети



1.2.2 Метод сечений или совокупности путей

Рассмотрим еще один метод расчета структурной надежности сетей. Предположим, что необходимо определить вероятность связности сети между заданной парой узлов A и B. 

Критерием исправной работы сети в данном случае является наличие хотя бы одного пути передачи информации между рассматриваемыми узлами. Предположим, что имеется список возможных путей в виде перечня элементов (узлов и направлений связи), входящих в каждый путь. В общем случае пути будут зависимы, поскольку любой элемент может входить в несколько путей. Надежность Rs любого пути s можно вычислить по формуле последовательного соединения , где pi s  – надежность элемента i пути s.

Искомая надежность  зависит от надежности каждого пути и вариантов их пересечений по общим элементам. Обозначим надежность, которая обеспечивается первыми r путями, через . Добавление очередного (r + 1) пути, с надежностью , очевидно, приведет к увеличению структурной надежности, которая теперь будет определяться объединением двух событий: исправен хотя бы один из первых r путей или исправен (r + 1)-й путь. Вероятность наступления этого объединенного события с учетом возможной зависимости отказов (r + 1)-го и остальных путей



,(1.2)



где  – вероятность исправности хотя бы одного из первых r путей при условии, что исправен (r + 1)-й путь.

Из определения условной вероятности  следует, что при ее расчете вероятность исправной работы всех элементов, входящих в (r + 1)-й путь, необходимо положить равной единице. Для удобства дальнейших расчетов представим последний член выражения (1.2) в следующем виде:



,(1.3)


где символ (¤) означает, что при перемножении показатели надежности всех элементов, входящих в первые r путей и общих с (r + l)-м путем, заменяются единицей. С учетом (1.3) можно переписать (1.2):



∆,(1.4)



где ∆ – приращение структурной надежности при введении 

(r + 1)   пути;   вероятность того, что произойдет одновременный отказ первых r путей.

Учитывая, что приращение надежности ∆Hr+1 численно равно уменьшению ненадежности ∆Qr+1 получаем следующее уравнение в конечных разностях:



∆. (1.5)



Легко проверить, что решением уравнения (1.5) является функция:



(1.6)



В случае независимых путей операция символического умножения совпадает с обычным умножением и выражение (1.6) дает коэффициент простоя системы, состоящей из параллельно включенных элементов. В общем случае необходимость учета общих элементов путей заставляет производить умножение согласно (1.6) в алгебраическом виде. При этом число членов в результирующей формуле с умножением на каждый очередной двучлен удваивается и окончательный результат будет иметь 2r  членов, что эквивалентно полному перебору совокупности всех r путей. Например, при r = 10 число членов в окончательной формуле превысит 1000, что уже выходит за рамки ручного счета. С дальнейшим увеличением числа путей довольно быстро исчерпываются и возможности современных ЭВМ.

Однако свойства введенной выше операции символического умножения позволяют существенно сократить трудоемкость расчетов. Рассмотрим эти свойства более подробно. Согласно операции символического умножения для показателя надежности pi любого элемента справедливо следующее правило:



pi ¤ pi = pi (1.7)



Напомним, что второй сомножитель (1.7) имеет смысл вероятности исправной работы i-го элемента при условии его исправности, которая, очевидно, равна единице.

Для сокращения дальнейших выкладок введем следующее обозначение ненадежности i-го элемента:



 (1.8)



С учетом (1.7) и (1.8) можно записать следующие простые правила преобразования выражений:

;

;



;(1.9)



;

;

;

Для примера использования этих правил при расчете надежности рассмотрим простейшую сеть связи, изображенную на рисунке 1.3. Буквы, стоящие у ребер графа, обозначают показатели надежности соответствующих линий связи. Узлы для простоты будем считать идеально надежными. Предположим, что для связи между узлами А и В можно использовать все пути, состоящие из трех и менее последовательно включенных линий, то есть следует учесть подмножество путей {μ} = { ab, cdf, cgb, ahf }. Определим приращение надежности, обеспечиваемое каждым последующим путем, по формуле (1.4) с учетом (1.6): 



∆ ,(1.10)



где  аналогично (1.8).





Рисунок.1.3 - Пример сети расчета на ограниченном подмножестве путей





Рисунок 1.4 - Пример сети для расчета надежности по полной совокупности путей



Применяя последовательно формулу (1.10) и правила символического умножения (1.9) к рассматриваемой сети, получаем:



∆;



∆;



∆;



∆.



При расчете последнего приращения мы использовали правило 4, которое можно назвать правилом поглощения длинных цепей короткими; в данном случае его применение дает b ¤ cgb = b. Если разрешено использование других путей, например пути cdhb, то не представляет труда рассчитать обеспечиваемое им приращение надежности ∆. Результирующую надежность сети можно теперь вычислить как сумму приращений, обеспечиваемых каждым из рассмотренных путей:



HR =∆Hi (1.11)



Так, для рассмотренного примера в предположении, что надежность всех элементов сети одинакова, то есть a = b = c = d = f = h = g = p, получаем:



.



При машинной реализации в основу расчета можно также положить формулу (1.5) ,с учетом того, что



∆.(1.12)



Таким образом, окончательное выражение, согласно формуле (1.5), можно записать в виде следующего рекуррентного соотношения:



. (1.13)



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

В качестве примера рассчитаем надежность сети, изображенной на рисунке 1.4, относительно узлов А и В, между которыми имеется 11 возможных путей передачи информации. Все расчеты сведены в таблицу 1.1: перечень элементов, входящих в каждый путь, результат умножения надежности данного пути на значение Qr, полученное при рассмотрении всех предыдущих путей, и результат упрощения содержимого третьего столбца по правилам (1.9). Окончательная формула для  содержится в последней колонке, если ее читать сверху вниз. 



Таблица 1.1 Результаты расчета надежности сети, изображенной на рисунке 1.4

Номер

Пути







1







2







3







4







5







6









7









8











9









10











11













Для уменьшения объема вычислений не следует без необходимости раскрывать скобки; если промежуточный результат допускает упрощения (приведение подобных членов, вынесение за скобку общего множителя и так далее), их следует выполнить.

Поясним несколько шагов расчета. Поскольку Q0 = 1 (при отсутствии путей сеть разорвана), то для Q1 из (1.13) . Делаем следующий шаг и, согласно (1.13), получаем:  и так далее.

Рассмотрим подробнее шаг, на котором учитывается вклад пути 9. Произведение показателей надежности составляющих его элементов, записанное во втором столбце таблицы 1.1, переносится в третий. Далее в квадратных скобках записана вероятность разрыва всех предыдущих восьми путей, накопленная в четвертом столбце (начиная с первой строки), с учетом правила (1.7), согласно которому показатели надежности всех элементов, вошедших в путь 9, заменяются единицами. Вклад четвертой, шестой и седьмой строк оказывается равным нулю по правилу 1. Далее выражение, стоящее в квадратных скобках, упрощается по правилам (1.9) следующим образом:



.



Аналогичным образом производится расчет относительно всех других путей.

Использование рассматриваемого метода позволяет получить общую формулу структурной надежности, содержащую в рассмотренном случае всего 15 членов вместо максимального числа 211=2048, получающегося при непосредственном перемножении вероятностей отказов этих путей. При машинной реализации метода удобно представить все элементы сети в позиционном коде строкой бит и использовать встроенные булевы функции для реализации логических элементов преобразований (1.9).

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

Для расчета структурной надежности по этому критерию достаточно ввести обобщение понятия пути в виде дерева, соединяющего все заданные узлы сети. Тогда сеть будет связана, если существует, по крайней мере, одно связывающее дерево, и расчет сводится к перемножению вероятностей отказа всех рассматриваемых деревьев с учетом наличия общих элементов. Вероятность отказа дерева s определяется аналогично вероятности отказа пути, то есть:


,



где pis – показатель надежности элемента i, входящего в дерево s; ns – число элементов в этом дереве.

Рассмотрим для примера простейшую сеть в виде треугольника, стороны которого взвешены показателями надежности а, b, с соответствующих ветвей. Для связности такой сети достаточно существования, по крайней мере, одного из деревьев аb, bс, са. Используя рекуррентное соотношение (1.4), определяем вероятность связности этой сети 



H cb = ab + bca + cab.



Если а = b = с = р, получаем следующее значение вероятности связности, которое легко проверить перебором:



H cb = 3р2 – 2р3.



Для расчета вероятности связности достаточно разветвленных сетей вместо перечня связывающих деревьев, как правило, удобнее пользоваться перечнем сечений {σ} которые приводят к потере связности сети по рассматриваемому критерию. Легко показать, что для сечения справедливы все введенные выше правила символического умножения, только вместо показателей надежности элементов сети в качестве исходных данных следует использовать показатели ненадежности q = 1 – p. Действительно, если все пути или деревья можно считать включенными “ параллельно ” с учетом их взаимозависимости, то все сечения включены в этом смысле “ последовательно ”. Обозначим вероятность того, что в некотором сечении s нет ни одного исправного элемента, через . Тогда можно записать



,(1.14)



где qis – показатель ненадежности  элемента, входящего в пятое сечение.

Вероятность Нcb связности сети можно тогда представить аналогично (1.6) в символическом виде:



,(1.15)



где r – число рассматриваемых сечений. Другими словами, для того чтобы сеть была связна, необходимо, чтобы одновременно были исправны хотя бы по одному элементу в каждом сечении с учетом взаимной зависимости сечений по общим элементам. Формула (1.15) является в некотором смысле двойственной по отношению к формуле (1.6) и получается из последней заменой путей на сечения и вероятностей исправной работы на вероятности пребывания в состоянии отказа. Аналогично двойственным по отношению к формуле (1.13) является рекуррентное соотношение:



Hr+1 = Hr – πr+1 ¤ Hr.(1.16)

Рассчитаем для примера вероятность связности рассмотренной выше треугольной сети с набором сечений ab, bc, ca. Согласно (1.15) при начальном условии  имеем:



Hcd = ab – bca – cab,


а при одинаковых показателях ненадежности элементов сети (a = b = c = q) получим: . Этот результат совпадает с ранее полученным по методу перечисления деревьев.

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



1.2.3 Метод двухсторонней оценки

При проектировании реальных сетей обычно отсутствует необходимость точного расчета надежности сети, так как исходные данные по надежности элементов задаются, как правило, с некоторой конечной точностью. Проектировщикам необходимо лишь убедиться в том, что надежность сети, с одной стороны, не ниже заданной и, с другой стороны, не имеет экономически необоснованного запаса. Другими словами, на практике достаточно гарантировать, что истинное значение надежности  находится в некоторых пределах Hmin<  < Hmax. 

Можно ожидать, что оценка надежности сети с заданной конечной точностью позволит сократить трудоемкость расчетов в тем большей мере, чем ниже требуемая точность оценки. Действительно, при расчете надежности по совокупности путей, добавление каждого следующего пути приводит к увеличению надежности, а при расчете по совокупности сечений добавление каждого следующего сечения приводит к уменьшению структурной надежности, что создает предпосылки для двусторонней оценки структурной надежности с гарантированной точностью по ограниченным наборам путей и сечений. Рассмотрим эту возможность более подробно.

Обозначим через  результат, полученный при перемножении вероятностей отказов  первых r из общего числа n путей. Тогда с учетом следующего (r + 1) пути согласно (1.13) получим уточненную оценку  :



                        (1.17)



Функция  является монотонно неубывающей с возрастанием r и при  дает точное значение . Промежуточные значения  при  можно рассматривать, как оценки  снизу. Аналогично, исходя из формулы (1.15), можно получить монотонно не возрастающую последовательность , которую можно рассматривать, как последовательность оценок  сверху. Характер зависимости  и  от r представлен на рисунке 1.5. Опыт показывает, что рассматриваемые зависимости при малых r меняются весьма круто, а с дальнейшим увеличением r очень медленно приближаются к общему пределу . Это свойство можно использовать для сокращения трудоемкости оценок надежности с заданной точностью. Действительно, для решения задачи достаточно последовательно просматривать пути μ, пока не выполнится условие , а затем просматривать сечения σ, пока не выполнится условие . Если для некоторого m окажется, что, то можно прекратить расчеты и принять решение, что в сети заложена излишняя избыточность. Если же для некоторого r окажется, что , то это значит, что требования к надежности сети не выполняются. Число требующих просмотра путей m и сечений r обычно гораздо меньше общего числа путей n и общего числа сечений k (m << n, k << r), чем и достигается сокращение трудоемкости оценки. Одновременно гарантируется, что истинное значение надежности сети лежит в заданных пределах, а именно: .





Рисунок 1.5. Характер изменения оценок структурной надежности по совокупности путей и сечений



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



.



В ходе расчетов, решения о рассмотрении на следующем шаге очередного пути или сечения целесообразно принимать по критерию большего абсолютного приращения надежности по соответствующему параметру, то есть по m или r.

Пример. Пусть необходимо оценить надежность сети, представленной графом на рисунке 1.6, с точностью H ± 0,01. Узлы сети идеально надежны. Линии, обозначенные буквами, имеют одинаковую надежность .

Выпишем первые несколько путей и сечений, которые могут потребоваться для расчета:



М' = { аbс, def, abhf, dgbc...};

S' = { ad, be, cf, age...}.



Полные множества путей М и сечений S для рассматриваемого метода можно не выписывать. При необходимости, если на начальном подмножестве М', S' не удается достичь необходимой точности, эти подмножества можно будет расширить по ходу расчетов.

Поскольку первые два пути из М' независимы, можно сразу записать начальную нижнюю оценку вероятности несвязности сети:



. 


Переходя к оценке надежности, , получаем . Начальную верхнюю оценку надежности можно получить по первым трем независимым сечениям множества S':

	

	. (1.18)



При рассмотрении сечений запись вида  интерпретируется как наличие, по крайней мере, одного исправного элемента в сечении, поэтому при подстановке исходных данных в (1.18) получим:



.



Разница между полученными верхней и нижней оценками составляет 0.044, что больше 0.02, поэтому необходимо продолжить расчет.

Добавление следующего пути дает большее абсолютное приращение надежности, чем добавление следующего сечения. Поэтому вводим в рассмотрение очередной путь abhf из множества М' согласно формуле (1.17):



. 



Отсюда получаем очередную оценку надежности снизу 



.



Убеждаемся, что заданная точность еще не достигнута и добавление очередного пути снова даст большее абсолютное приращение надежности, поэтому вводим следующий путь dgbc из множества М' для уточнения нижней границы надежности:



,



что соответствует .

Разница между верхней и нижней оценками надежности теперь составляет: , что позволяет прекратить расчеты, так как заданная точность H ± 0,01 достигнута. В качестве оценки надежности рассматриваемой сети принимаем среднеарифметическое  с гарантией, что . При этом из полного множества, включающего девять сечений и восемь путей, нам удалось ограничиться рассмотрением всего трех сечений и четырех путей.



e

d

g

a

b

h

f

c









Рисунок 1.6. - Пример сети для двусторонней оценки надежности



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



1.2.4 Метод статистической оценки структурной надежности

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

Опыт показывает, что основные затраты времени при статистических испытаниях сложной системы сопряжены с проверкой ее работоспособности в каждой реализации [6]. При высокой исходной надежности pi элементов или большой структурной, избыточности, характерной для разветвленных сетей коммутации, проверка на работоспособность подавляющего большинства реализации дает положительный результат, что обусловливает их малую информативность. Поэтому возникает естественное желание найти некоторое преобразование сети, позволяющее искусственно уменьшить исходную надежность ее элементов, чтобы быстрее набрать необходимую статистику отказов и получить обратное преобразование, позволяющее пересчитывать получаемые результаты на реальные показатели надежности элементов сети. Покажем, что такая возможность действительно существует.

Назовем разрезом подмножество элементов системы, удаление которых приводит к потере работоспособности. Рассмотрим некоторый разрез u, в который входит ровно z элементов. Частота выпадения такого разреза при статистических испытаниях стремится по ходу испытаний к ее вероятности :



 .



Если обозначить через N общее число элементов сети, то вероятность Ри можно записать в виде: 



.


Изменим исходные показатели надежности системы таким образом, чтобы каждый сомножитель  второго произведения увеличился в γ раз. Другими словами, вместо элемента с надежностью pj введем элемент с надежностью p'j такой, чтобы удовлетворялось условие:



(1.19);



Тогда надежность нового элемента будет определяться формулой: 



.(1.20)



Если произвести преобразование (1.19) для всех элементов сети, то вероятность выпадения разреза u в процессе испытаний изменится и составит:



;



Введем коэффициент  увеличения частоты выпадания разреза



(1.21)



тогда, подставляя в (1.21) старое и новое значения частоты выпадания разреза u, получим: 



.


Если в разрез u входит ровно z элементов, то:



,



где второй сомножитель является константой для исходной системы. Отсюда следует, что предлагаемое преобразование показателей надежности не приводит к нарушению относительной частоты появления разрезов фиксированного веса z, так как коэффициент убыстрения для всех этих разрезов одинаков. Однако, относительная частота появления разрезов веса z + w, по сравнению с разрезами веса z, увеличивается в  раз. Поэтому в ходе статистических испытаний преобразованной системы можно набрать достаточную статистику по разрезам большего веса, вероятность появления которых в исходной системе бывает обычно очень малой.

Пересчет вероятности появления разреза u из преобразованной системы в исходную производится в соответствии с (1.21):



(1.22)



Для выполнения обратного преобразования (1.22) кроме факта отказа системы необходимо фиксировать и вес z соответствующего разреза.

Из (1.22) следует, что каждый случай появления разреза u с весом z в преобразованной системе соответствует  случаям появления такого же разреза в исходной системе. При этом если; в преобразованной системе за время испытаний произошло m отказов, то для исходной системы эквивалентное число отказов будет выражаться следующим выражением:



,

где  – число элементов, вышедших из строя при i-м отказе системы. 

При возникновении очередного отказа m в преобразованной системе оценки надежности Рm исходной системы уточняются в соответствии с выражением: 



,



где  – общее число просмотренных реализации состояний преобразованной системы.

Возникает вопрос, каким следует выбирать параметр преобразования γ для максимального убыстрения процесса статистических испытаний конкретной системы? Из (1.20) следует, что при γ = 1 изменение исходной надежности не происходит и убыстрение отсутствует. Если выбрать γ слишком большим, то в преобразованной системе будут в основном возникать разрезы большого веса, не характерные для исходной системы, причем их вклад в результирующую надежность при больших z в соответствии с (1.22) будет невелик. Поэтому параметр γ следует выбирать таким образом, чтобы максимизировать вероятность возникновения наиболее “ вероятных ” разрезов.

Рассмотрим этот вопрос более подробно. Для простоты положим, что показатели надежности всех элементов системы одинаковы и равны р. Обозначим через P(z) вероятность возникновения отказовых состояний веса z. Очевидно, что вероятность потери работоспособности системы тогда будет:



.(1.23)

Обычно для реальных систем значение  достаточно плавно меняется с увеличением веса разреза, поэтому в качестве наиболее вероятного разреза можно выбрать класс разрезов среднего веса.



.



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



.(1.24)



Из условия  получаем оптимальное значение



.(1.25)



Подставляя выражение (1.25) в (1.20), нетрудно убедиться, что оптимальное значение  соответствует пересчитанному значению надежности элемента системы . Другими словами, для максимального убыстрения процедуры статистических испытаний необходимо таким образом пересчитать надежность элементов системы, чтобы средний вес отказов в преобразованной системе соответствовал весу наиболее вероятного разреза.

Убыстрение темпа набора статистики отказов в соответствии с (1.24), когда , составит:



.



Так, для системы с параметрами p = 0,99, N = 20, z0 = 3 время испытаний можно сократить приблизительно в 150 раз для достоверности получаемых результатов не хуже, чем в случае прямого набора статистики отказов системы.




2 ИССЛЕДОВАНИЕ СТРУКТУРНОЙ НАДЕЖНОСТИ МЕТОДОМ СТАТИСТИЧЕСКОГО МОДЕЛИРОВАНИЯ



2.1 Критерии оценки структурной надежности методом статистического моделирования



Современные сети коммутации имеют весьма сложную структуру [7]. Прежде всего, необходимо сформулировать критерий отказа сети. 

Через сеть обменивается информацией большое число пар абонентов, причем часто требуется, чтобы вероятность наличия связи между корреспондентами выделенной пары (r, l) была не менее заданной Рrl. Под наличием связи понимается существование, по крайней мере, одного исправного пути между соответствующими узлами. Конечно, в сложной сети наличие исправного пути еще не гарантирует немедленного установления соединения, так как элементы этого пути могут быть заняты для обмена информацией других корреспондентов. Однако, если предположить, что термин “наличие связи” относится только к информации высшей категории (доля которой в реальных сетях обычно весьма мала) и элементы любого исправного пути способны обеспечить обмен этой информацией в интересах всех корреспондентов, которые им могут воспользоваться, то возникает возможность рассматривать все пары корреспондентов независимо с точки зрения наличия связи между ними. В элементах сети, производительность которых недостаточна для обслуживания суммарной нагрузки высшей категории, можно предусмотреть большее число s рабочих компонентов.

Таким образом, сеть обладает заданной надежностью, если вероятность наличия связи или, как говорят, вероятность связности Hrl для каждой пары узлов не менее заданной Рrl. В этих условиях расчет структурной надежности сети сводится к расчету вероятности связности между узлами. 

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

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



2.2 Разработка алгоритма расчета структурной надежности



2.2.1 Алгоритм расчета структурной надежности сети 

связи методом статистического моделирования

Опишем сначала принцип расчета структурной надежности сети методом статистического моделирования [4]. 

Сеть связи задают в виде вероятностной матрицы смежности , где  – элемент матрицы, отражающий величину надежности линии связи между узлом и узлом , а  – коэффициент готовности данной линии связи . В свою очередь коэффициент готовности может быть определен по следующей формуле:



(2.1)



где  – время наработки на отказ,  – среднее время восстановления. 

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

На первом этапе вырабатывают  независимых случайных, равномерно распределенных в интервале  чисел . Затем, значения  последовательно сравниваются с величинами  по следующему алгоритму: 

если  – элемент сети отказал, результат равен нулю;

если  – элемент сети находится в исправном состоянии, результат равен единице.

Результаты сравнения записываются в матрицу , . 

На втором этапе производится проверка структуры сети, которая описана матрицей , на связность. Если сеть связна, то исход испытания относится к числу благоприятных .

Результатом оценки структурной надежности сети является значение  – отношение числа благоприятных исходов к общему числу испытаний. 

Проверка сети на связность может осуществляться, например, на основе процедуры “соединения”. Ее суть заключается в следующем. 

На анализируемой сети выбирается произвольный узел. Далее находят смежные ему узлы и соединяют с ним. Это происходит до тех пор, пока сеть не представится в виде одного узла – “точки” (в случае если, сеть связана) или множества узлов (если сеть не связана).

Разработанный на основе всего выше изложенного алгоритм программы, в общем виде, отобразим на рисунке 2.1. Опишем с начала переменные, используемые в этом алгоритме: 

i, e и j – переменные используемые в циклах типа for – next основной процедуры расчета надежности сети;

PlasResult – хранит число благоприятных исходов;

x( ) – динамический массив, равномерно распределенных в интервале (0, 1) чисел;

Nnoi – хранит текущий номер испытания;

maxNnoi – хранит общее число испытаний;

PP – хранит значение вероятности события – сеть связна;

Imeny – хранит номер случайно выбранного узла;

S( ) – динамический массив, для хранения номеров смежных узлов;

Nnew – хранит информацию о наличии новых смежных вершин;

sngStartWork(1, 2) – массив дат начала и конца расчета надежности сети;

sngStartWorkSEC – хранит число секунд расчета надежности сети;

bar – промежуточная переменная для хранения текущего номера испытаний.






Начало





PrgBarWSind.Min =

= 0

PrgBarWSind.Max =

=100





PlasResult = 0

Randomize







x (kolvolin)

S (kolvouzlov)



Формирование массивов нужной размерности





Nnoi = 1, maxNnoi





Из стр. 

К стр. 

6

5





sngStartWork(1, 1) =

= Now

sngStartWorkSEC =

= Timer

LblSwrE(1).Caption =

= sngStartWork(1, 1)

x (e) = Rnd

e = 1, kolvolin

Nnoi = 1

Да 

Нет 

1




































1



firstStepp 



Imeny =

= (((kolvouzlov ) –

– 1 ) • Rnd) + 1







S (Imeny) = Imeny







j = 1, kolvouzlov







A(Imeny, j) = 1





S ( j ) = j









VektStrok 







SvjazNet 







FinishAnswer 







3

2








Да

Нет

Nnew <> 0

i = 1, kolvouzlov

j = 1, kolvouzlov

S ( i ) = 0

A (i, j) = 0

4

2

3
















































4



bar = Nnoi





PrgBarWSind.Value =

= ((bar / maxNnoi) * 

* 100)







PrgBarWSind.Visib _

le = True







К стр. 

6

5

Из стр. 



PP = (PlasResult / 

/ maxNnoi)







sngStartWorkSEC = 

= (Timer –

– sngStartWorkSEC)







SngStartWork (1, 2) = 

= Now 







LblSwrE (0).Caption =

= sngStartWork (1, 2)









UserFormVork _

Closed 









Конец



Рисунок 2.1 – Алгоритм расчета структурной надежности сети

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



Таблица 2.1 – Процедуры определения связности сети

Имя процедуры

Задача процедуры

VektStrok Nnew, Imeny, S, A

Соединение смежных узлов

SvjazNet Imeny, A, p

Проверка на единичность полученной 

вектор-строки

FinishAnswer A, PlasResult, Imeny, p, S, Nnew

Вынесение решения о связности сети, проверка наличия новых смежных узлов для формирования нового массива смежных узлов






Nnew = 0

Конец

A (Imeny, j) > 1

A (Imeny, j) = 1

A (Imeny, j) =

= A (Imeny, j) +

+ A (k, j)

j = 1, kolvouzlov

S(k) > 0

k = 1, kolvouzlov

Начало











Нет 

















Нет 



Да 

Да 





















Рисунок 2.2 – Алгоритм процедуры “ VektStrok ”




Начало

j = 1, kolvouzlov

A (Imeny, j) = 0

p = 0

p = 1

Прервать программу

Конец

Нет 

Да  

































Рисунок 2.3 – Алгоритм процедуры “ SvjazNet ”








PlasResult = 

= PlasResult + 1

Начало

p <> 0

1

Прервать программу

Нет 

Да  











1

Nbg = 0

Nnew = 0

nUlvekt = 0

j = 1, kolvouzlov

A (Imeny, j) = 1

Pm (j) = j

nUlvekt =

= nUlvekt + 1

Нет 

Да  

Прервать программу

nUlvekt =

= kolvouzlov

Нет 

Да 

S (j) = Pm (j)

Nnew = Nnew + 1

j = 1, kolvouzlov

Pm(j) <> S(j)

Конец 

Да  

Нет 

Рисунок 2.4 – Алгоритм процедуры “ FinishAnswer ”


2.2.2 Алгоритм интерфейсной части программы расчета надежности сети методом статистического моделирования



Приведем рисунок алгоритма программы интерфейса.





Начало

Стартовое окно программы

Активизация меню ‘Файл’

1

1

Открыть выбранный файл?

Да 

Нет 

Удаление окна

“ открытие файла ”

Правильное имя файла ?

Нет 

Да 

2

Ввод имени файла

Окно “ открытие файла”

Выбор пункта в меню

Новый 

Открыть 

Выход 

Конец 

Пункт не доступен

Пункт не доступен

Окно разработки

3

Доступность пунктов:

“ Закрыть ”

“ Сохранить ”

“ Сохранить как… ”

4



















































Чтение файла и формирование массивов данных

2

3

Перерисовка линий



















4

Ожидание события

Определение события

Активизация меню ‘Файл’

Активизация меню ‘ Сетка ’

Нажатие кнопки

” Узел ”

Нажатие кнопки

” Линия ”

5

6

7

8

Нажатие кнопки

” Вперед ”

Нажатие кнопки

” Назад ”

9

10

Нажатие кнопки

“ Перейти к расчету ”

11























К стр. 

К стр. 

К стр. 

К стр. 

К стр. 




















Выбор пункта в меню

Закрыть 

Сохранить 

Сохранить как…

Не доступность пунктов:

“ Сохранить ”

“ Сохранить как… ”

Закрыть 

Сохранение 

1

4

5

К стр. 



























6

Установка флажка активно / не активно кнопки “ сетка ”

4

Доступность пункта меню “ Сетка ”: “ Параметры ”

Ожидание события 

” Параметры ”

Флажок = активно

12

Да 

Нет 




























Окно “ конфигурация масштабной сетки ”

Конфигурация масштабной сетки

4

12

К стр. 



















Из стр. 

7

Ожидание события :

“Рабочая область_ MouseDown ”

Ожидание события :

“Область ввода номера узла_ GotFocus ”

Прорисовка / удаление 

узла и обновление массива узлов

4

Этап = 2

Запись номера в массив узлов и

массив  линий 

Нет 

Да 

К стр. 





















Этап = 2

Ожидание события :

“ Область узла_ MouseDown ”

Ожидание события :

“Рабочая область_ MouseDown ”



Поиск выбранной линии и изменение ее цвета

Определение координат начала или конца линии

14

13

8

Из стр. 




















14

Окно “ Ввод числовой характеристики выбранной линии ”

13

Внесение изменений в массив линий 

4

К стр. 



















Из стр. 

9

Недоступность кнопки “ Вперед ”

Этап = 2

Доступность кнопки “ Перейти

 к расчету ” и кнопки “ Назад ”

Проверка на связность всех узлов

Все узлы связаны ?

Отображение полей для ввода номеров узлов

Недоступность кнопки “ Перейти к расчету ”

Сообщение об ошибке

4

Да 

Нет 

































К стр. 







Из стр. 

Ввод числа испытаний

11

Проверка на наличие у узлов и линий их параметров и коррекция соответствующих массивов

Ошибки есть ?

Окно “ Расчет структурной надежности ”

Ожидание нажатия на кнопку

Нажата “ Ок ” 

Да 

Ожидание нажатия на кнопку “ Начать ”

Ожидание нажатия на кнопку “ Стоп ”

Сообщение “ Прервано пользователем ”

Расчет структурной надежности сети

Результаты расчета

Закрытие окна

Ожидание нажатия на кнопку “ ОК ”

Нет 

Сообщение об ошибке

4



Нет 

Да 




2.3 Разработка программы расчета структурной надежности методом 

статического моделирования



2.3.1 Разработка расчетной части программы расчета структурной надежности сети

Option Explicit

Dim A (200, 200) As Single, p As Integer

Public maxNnoi As Single, flgstopuser As Boolean





Private Sub firstStepp (A( ) As Single, x( ) As Single)

Dim n As Integer

Dim i As Integer

Dim j As Integer

n = 1

For i = 1 To ((FrmSSN.kolvouzlov) - 1) '4

For j = i + 1 To (FrmSSN.kolvouzlov) '5

If A (i, j) > 0 Then

  If x (n) < A (i, j) Then

A (i, j) = 1

  Else

A (i, j) = 0

End If

n = n + 1

End If

A (j, i) = A (i, j)

Next j

Next i

End Sub

Private Sub VektStrok (Nnew, Imeny As Integer, S( ) As Integer, A( ) As Single)

Dim k As Integer

Dim j As Integer

For k = 1 To (FrmSSN.kolvouzlov)

If S (k) > 0 Then

  For j = 1 To (FrmSSN.kolvouzlov)

A (Imeny, j) = A (Imeny, j) + A (k, j)

    If A (Imeny, j) > 1 Then

A (Imeny, j) = 1

    End If

  Next j

End If 

Next k

Nnew = 0

End Sub

Private Sub SvjazNet (Imeny As Integer, A( ) As Single, p As Integer)

Dim j As Integer

p = 1

For j = 1 To (FrmSSN.kolvouzlov)

If A (Imeny, j) = 0 Then

p = 0

Exit Sub

End If

Next j

End Sub

Private Sub FinishAnswer (A( ) As Single, PlasResult As Integer, Imeny As Integer, p _ As Integer, S() As Integer, Nnew As Integer)

Dim j As Integer

Dim Pm (1 To 6) As Integer

Dim Nbg As Integer, nUlvekt As Integer

If p <> 0 Then

PlasResult = PlasResult + 1

Exit Sub

End If

Nbg = 0

Nnew = 0

nUlvekt = 0

For j = 1 To (FrmSSN.kolvouzlov)

If A (Imeny, j) = 1 Then

Pm (j) = j

Else: nUlvekt = nUlvekt + 1

End If

Next j

If nUlvekt = (FrmSSN.kolvouzlov) Then

Exit Sub

End If

For j = 1 To (FrmSSN.kolvouzlov)

If Pm (j) <> S (j) Then

S (j) = Pm (j)

Nnew = Nnew + 1

End If

Next j

End Sub

Private Sub FormirNLmassWork ( )

Dim initm As Integer

    For initm = 1 To FrmSSN.kolvolin

FrmSSN.numUZmu initm, FrmSSN.kolvouzlov, 2, na1, na2

A (na1, na2) = FrmSSN.UvmLN (initm)

A (na2, na1) = A (na1, na2)

    Next initm

End Sub

Public Sub cmdrasch_workmod ( )

Dim i As Integer, j As Integer

Dim PlasResult As Integer, e As Integer 

Dim x( ) As Single, C As Integer

Dim Nnoi As Integer

Dim PP As Currency, Imeny As Integer

Dim S ( ) As Integer

Dim Nnew As Integer

Dim sngStartWork (1, 1 To 2) As Date

Dim sngStartWorkSEC As Single, bar As Integer

frmBrWk.PrgBarWSind.Min = 0: frmBrWk.PrgBarWSind.Max = 100

frmBrWk.PrgBarWSind.Visible = False 

frmBrWk.LblSwrE(1).Caption = 0

PlasResult = 0

ReDim Preserve x (FrmSSN.kolvolin)

ReDim Preserve S (FrmSSN.kolvouzlov)

Randomize

For Nnoi = 1 To maxNnoi

DoEvents

If MdlWorkSpase.flgstopuser = True Then Exit For

If Nnoi = 1 Then

sngStartWork(1, 1) = Now

sngStartWorkSEC = Timer

frmBrWk.LblSwrE(1).Caption = sngStartWork(1, 1)

End If

For e = 1 To FrmSSN.kolvolin

x (e) = Rnd

Next e

firstStepp A, x'1

Imeny = (((FrmSSN.kolvouzlov) - 1) * Rnd) + 1

S (Imeny) = Imeny

For j = 1 To FrmSSN.kolvouzlov

    If A (Imeny, j) = 1 Then

S (j) = j

    End If

Next j

VektStr:

VektStrok Nnew, Imeny, S, A'2

SvjazNet Imeny, A, p'3

FinishAnswer A, PlasResult, Imeny, p, S, Nnew'4

If Nnew <> 0 Then

GoTo VektStr

End If

For i = 1 To FrmSSN.kolvouzlov

S (i) = 0

  For j = 1 To FrmSSN.kolvouzlov

A (i, j) = 0

  Next j

Next i

bar = Nnoi

frmBrWk.PrgBarWSind.Value = ((bar / maxNnoi) * 100)

frmBrWk.PrgBarWSind.Visible = True

Next Nnoi

If MdlWorkSpase.flgstopuser = True Then Exit Sub

PP = (PlasResult / maxNnoi)

sngStartWorkSEC = (Timer - sngStartWorkSEC)

sngStartWork (1, 2) = Now: frmBrWk.LblSwrE(0).Caption = sngStartWork(1, 2)

UserFormVorkClosed sngStartWorkSEC, maxNnoi, PP, sngStartWork

End Sub

Private Sub UserFormVorkClosed (sngStartWorkSEC, maxNnoi, PP, sngStartWork)

Dim work As Integer, TimeWork As String

Dim bufchench1 As Date, bufchench2 As Currency

If sngStartWork (1, 1) <> sngStartWork (1, 2) Then

  If (sngStartWork (1, 2) - sngStartWork (1, 1)) > sngStartWorkSEC _

   And (sngStartWork (1, 2) - sngStartWork (1, 1)) < 1 Then GoTo 12

bufchench1 = (sngStartWork(1, 2) - sngStartWork(1, 1))

TimeWork = Str(bufchench1)

  Else

12:

bufchench2 = sngStartWorkSEC

TimeWork = Str (0) & Str (bufchench2) & " секунды"

End If

work = MsgBox("Расчет структурной надежности закончен !" & vbCrLf & Chr$(13) & "Число испытаний : " & maxNnoi & vbCrLf & "Вероятность связности : " & PP & vbCrLf & "Расчет длился около : " & TimeWork, vbInformation + vbOKOnly, " ")

sngStartWork(1, 1) = 0: sngStartWork(1, 2) = 0

sngStartWorkSEC = 0: frmBrWk.PrgBarWSind.Value = 0

Unload frmBrWk

End Sub



2.3.2 Разработка интерфейсной части программы расчета структурной надежности сети

Интерфейсная часть программы состоит из четырех частей, а именно:

первая, основная часть, располагается в файле формы основного окна 

“ FrmSSN ”;

следующая часть располагается в файле формы окна расчета структурной надежности “ frmBrWk ”;

третья часть программы находится в файле формы окна конфигурирования координатной сетки “ FrmPrWeb ”;

четвертая, последняя, часть программы – в файле формы окна ввода числовой характеристики выбранной линии “ FrmNwORsZ ”.

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



Первая часть



Option Explicit

Public kolvouzlov As Integer, needFRsave As Boolean 

Public kolvolin As Integer

Dim znak As Boolean, zamok As Boolean

Dim x1 As Integer, y1 As Integer

Dim x2 As Integer, y2 As Integer

Dim MasKoLuZv(1 To 200, 1 To 5) As Single

Dim keeCH As Boolean

Dim deletealluz As Boolean, deletealllinsv As Boolean

Dim keeAB As Boolean, testimonial As Boolean 

Dim testNyn As Boolean, change As Boolean 

Dim mlinesSV(1 To 400, 1 To 10) As Single, SFALNAME As String

Const myORno As String = "sns"

Dim zapros As Boolean

Public poweb As Boolean

Public shwebx As Single, shweby As Single

Public bJampWeb As Boolean

Private Sub svayzy (x1, x2, y1, y2, iduzla, Index, mlinesSV, kolvolin)

    Dim i As Integer, j As Integer

            On Error GoTo metSVx

If deletealllinsv = True And kolvolin > 0 Then

    FrmSSN.Enabled = False

    FrmSSN.MousePointer = 3

For i = 1 To kolvolin

For j = 1 To 10

mlinesSV(i, j) = 0

Next j: Next i

kolvolin = 0

Else

    For i = 1 To kolvolin

If mlinesSV(i, 1) = 0 Then

  mlinesSV(i, 1) = iduzla: mlinesSV(i, 2) = Index

  mlinesSV(i, 3) = x1: mlinesSV(i, 4) = y1

  mlinesSV(i, 5) = x2: mlinesSV(i, 6) = y2

  mlinesSV(i, 7) = 0

  mlinesSV(i, 8) = 0: mlinesSV(i, 9) = 0 '-номера вершин (новые)

  mlinesSV(i, 10) = 0 '-вес линии

Exit Sub

End If

    Next i

End If

    FrmSSN.Enabled = True

    FrmSSN.MousePointer = 0

brcoutSVX:

Exit Sub

metSVx:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcoutSVX

End Sub

Private Sub LinColorsv (NuMl As Integer, LcolorS, mlinesSV)

On Error GoTo HTYH

    Select Case mlinesSV(NuMl, 7)

  Case Is = 0

LcolorS = vbBlue

  Case Is = 1

LcolorS = vbRed

  Case Is = 2

LcolorS = RGB(210, 0, 210)

    End Select

HTYH:

End Sub

Private Sub CmdBk_Click ( )

    Dim nnoN As Integer

    

    CmdWORKsch.Enabled = False

    Cmd1.Visible = True

    Cmd2.Visible = True

    keeAB = False

For nnoN = 1 To kolvouzlov

    nnOuzN((MasKoLuZv(nnoN, 1))).Enabled = False

Next nnoN

    CmdFwd.Enabled = False

    CmdBk.Enabled = False

Frame1.Enabled = True

Frame1.Caption = ("План сети")

End Sub

Private Sub CmdFwd_Click ( )

    CmdFwd.Enabled = False

    CmdBk.Enabled = True

    If keeAB = False Then Frame1.Caption = ("Параметры")

    Cmd1.Visible = False

    Cmd2.Visible = False

       keeAB = True

 If change = True Or change = False Then TestNet testNyn

End Sub

Private Sub TestNet (testNyn) '-проверка связанных узлов

    Dim tuZnSvYnOk As Integer, nuzysy As Integer

On Error GoTo metTNx

    If change = False And kolvouzlov = 0 Then GoTo 101

  For tuZnSvYnOk = 1 To kolvouzlov

If MasKoLuZv(tuZnSvYnOk, 1) > 0 And MasKoLuZv(tuZnSvYnOk, 4) >= 1 Then

  nuzysy = nuzysy + 1

End If

  Next tuZnSvYnOk

    If nuzysy = kolvouzlov And nuzysy > 1 Then

testNyn = True

     For tuZnSvYnOk = 1 To kolvouzlov

      If MasKoLuZv(tuZnSvYnOk, 1) > 0 Then

       nnOuzN(MasKoLuZv(tuZnSvYnOk, 1)).Move (MasKoLuZv(tuZnSvYnOk, 2) – _ (nnOuzN(MasKoLuZv(tuZnSvYnOk, 1)).Width / 2)), (MasKoLuZv(tuZnSvYnOk, 3) –

– (nnOuzN(MasKoLuZv(tuZnSvYnOk, 1)).Height / 2))

        nnOuzN(MasKoLuZv(tuZnSvYnOk, 1)).Visible = True: nnOuzN(MasKoLuZv(tuZnSvYnOk, 1)).Enabled = True

       End If

      Next tuZnSvYnOk

        change = False

    Else

101:    nuzysy = 0

    nuzysy = MsgBox(" ВЫ допустили ошибку. Данная сеть НЕ связна !!! " _

& vbCrLf & vbCr & " Это не позволит вам ввести характеристики сети" _ 

& vbCrLf & " Для исправления ошибки нажмите : << Назад >>" _

, vbCritical + vbOKOnly, " Проверка связности сети ")

    Frame1.Enabled = False

    CmdFwd.Enabled = False

 End If

brcoutTN:

Exit Sub

metTNx:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcoutTN

End Sub

Private Sub CmdWEB_Click ( )

    Dim Wsetki As Single, Hsetki As Single

    Dim i As Integer, j As Integer

    Dim shag As Boolean, LcolorS As Double

    Const webxy As Single = 201

        On Error GoTo metWEBx

If poweb = False Then

  shwebx = webxy

  shweby = shwebx

End If

 If bJampWeb = True And keeCH = True Then

            shag = True: GoTo 7

 ElseIf bJampWeb = True And keeCH = False Then

            shag = False: GoTo 7

 End If

If keeCH = False Then

8:  Picture1.DrawStyle = 2

    For Wsetki = (shwebx) To (Picture1.Width) Step (shwebx)

    Picture1.Line ((Wsetki), 1)-((Wsetki), (Picture1.Height - 1))

    Next Wsetki

    For Hsetki = (shweby) To (Picture1.Height) Step (shweby)

    Picture1.Line (1, Hsetki)-((Picture1.Width - 1), Hsetki)

    Next Hsetki

      keeCH = True

Else            '*перерисовка линий S-T*

7:    Picture1.DrawStyle = 6

      Picture1.Cls

      For i = 1 To kolvolin 

       If mlinesSV(i, 1) <> 0 Then

LinColorsv i, LcolorS, mlinesSV '- определение цвета линии

Picture1.Line ((mlinesSV(i, 3)), (mlinesSV(i, 4)))-((mlinesSV(i, 5)), _

   (mlinesSV(i, 6))), LcolorS

       End If           '*перерисовка линий E-D*

      Next i

If shag = True Then GoTo 8

      keeCH = False

End If

Picture1.DrawStyle = 6

brcoutWEB:

Exit Sub

metWEBx:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcoutWEB

End Sub

Private Sub Cmd1_Click ( ) '-уменьшение узла

  Dim ti As Integer, tip As Integer

On Error GoTo metGGG

If Optuzel.Value = False Then Exit Sub:

    Picture1.AutoRedraw = False: Picture1.Enabled = False

For ti = Pct1.lBound To kolvouzlov

  If (Pct1(0).Width) > 402 Then '-мин размер для индекса=400

  If ti > 0 Then tip = MasKoLuZv(ti, 1) Else tip = ti

  

      Pct1(tip).Visible = False

 Pct1(tip).Width = (Pct1(0).Width - 20)

 

Pct1(tip).Height = (Pct1(0).Height - 20)

    If ti <> 0 Then

Pct1(tip).Left = (Pct1(tip).Left + 10)

Pct1(tip).Top = (Pct1(tip).Top + 10)

Pct1(tip).Visible = True

    End If

  End If

Next ti

Picture1.AutoRedraw = True: Picture1.Enabled = True

brcoutGGG:

Exit Sub

metGGG:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcoutGGG

End Sub

Private Sub Cmd2_Click ( ) '-увеличение узла

    Dim i As Integer, pip As Integer

On Error GoTo metTYP

If Optuzel.Value = False Then Exit Sub:

Picture1.AutoRedraw = False: Picture1.Enabled = False

For i = 0 To kolvouzlov

If (Pct1(0).Width) < 700 Then

    If i > 0 Then pip = MasKoLuZv(i, 1) Else pip = i

    

   Pct1(pip).Visible = False

 Pct1(pip).Width = (Pct1(0).Width + 20)

 Pct1(pip).Height = (Pct1(0).Height + 20)

  If i <> 0 Then

     Pct1(pip).Left = (Pct1(pip).Left - 10)

     Pct1(pip).Top = (Pct1(pip).Top - 10)

     Pct1(pip).Visible = True

  End If

End If

Next i

Picture1.AutoRedraw = True: Picture1.Enabled = True

brcoutTYP:

Exit Sub

metTYP:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcoutTYP

End Sub

Private Sub CmdWORKsch_Click ( )

   Dim parallyn As Integer, zn As Integer

   Dim zun As Integer

   Dim ikf As Integer

            On Error GoTo metBRsy

    If testimonial = True Then

        zn = 0

 For parallyn = 1 To kolvolin

    If mlinesSV(parallyn, 10) > 0 And mlinesSV(parallyn, 8) > 0 _

     And mlinesSV(parallyn, 9) = 0 Then

        For ikf = 1 To kolvouzlov

If MasKoLuZv(ikf, 1) > 0 And MasKoLuZv(ikf, 1) = mlinesSV(parallyn, 2) Then

mlinesSV(parallyn, 9) = MasKoLuZv(ikf, 5)

Exit For

End If

  Next ikf

    ElseIf mlinesSV(parallyn, 10) > 0 And mlinesSV(parallyn, 8) = 0 _

         And mlinesSV(parallyn, 9) > 0 Then

  For ikf = 1 To kolvouzlov

If MasKoLuZv(ikf, 1) > 0 And MasKoLuZv(ikf, 1) = mlinesSV(parallyn, 1) Then

mlinesSV(parallyn, 8) = MasKoLuZv(ikf, 5)

Exit For

End If

  Next ikf

    ElseIf mlinesSV(parallyn, 10) > 0 And mlinesSV(parallyn, 8) = 0 _

And mlinesSV(parallyn, 9) = 0 Then

     For ikf = 1 To kolvouzlov

If MasKoLuZv(ikf, 1) > 0 And MasKoLuZv(ikf, 1) = mlinesSV(parallyn, 1) Then

mlinesSV(parallyn, 8) = MasKoLuZv(ikf, 5)

   ElseIf MasKoLuZv(ikf, 1) > 0 And MasKoLuZv(ikf, 1) = mlinesSV(parallyn, 2) Then

mlinesSV(parallyn, 9) = MasKoLuZv(ikf, 5)

End If

     Next ikf

    End If

       If mlinesSV(parallyn, 8) > 0 And mlinesSV(parallyn, 9) > 0 _

And mlinesSV(parallyn, 10) > 0 Then zn = zn + 1

     Next parallyn

zun = 0

      For parallyn = 1 To kolvouzlov

If MasKoLuZv(parallyn, 5) <> 0 Then zun = zun + 1

     Next parallyn

If zn = kolvolin And zun = kolvouzlov Then

   Load frmBrWk

frmBrWk.Show vbModal

   Exit Sub

Else

247:

zn = MsgBox(" Вы ввели НЕ все параметры сети. " & vbCrLf & _

  " Проверьте ! ВСЕ ЛИ узлы пронумерованы " & vbCrLf & _

" Для ВСЕХ ЛИ линий вы ввели характеристики ?", _

   vbCritical + vbOKOnly, _

            " Ошибка ввода числовых характеристик сети !")

       Exit Sub

       End If

    Else

        GoTo 247

    End If

brcoutZZ:

Exit Sub

metBRsy:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcoutZZ

End Sub

Private Sub Form_Load ( )

On Error GoTo metLFM

    FrmSSN.MousePointer = vbArrow

    Picture2.Visible = True

    keeCH = False

 bJampWeb = False

 deletealluz = False

 deletealllinsv = False

 CmdFwd.Enabled = False

 CmdBk.Enabled = False

 CmdWORKsch.Enabled = False

 keeAB = False

 testNyn = False

 change = False

 testimonial = False

 needFRsave = False

 zapros = False

 poweb = False

 

'&&& начальная установка подменю

 mnuClose.Enabled = False

 mnuSave.Enabled = False

 mnuSaveAs.Enabled = False

 mnuweb.Enabled = False

 mnuwebYN.Checked = False

 mnuWBconf.Enabled = False

'&&&

 Picture1.Visible = False: Frame1.Visible = False

 Cmd1.Visible = False: Cmd2.Visible = False

 CmdWEB.Enabled = False

brcoutLFM:

Exit Sub

metLFM:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcoutLFM

End Sub

Private Sub mnuClose_Click ( )

   Dim emss As Integer

On Error GoTo metClDf

    If needFRsave = True Then

emss = MsgBox(" Вы хотите сохранить внесенные изменения ?",_

vbExclamation + vbYesNo, " Закрытие файла ")

       If emss = vbYes Then mnuSave_Click

    End If

            SFALNAME = ""

Picture2.Visible = True: Picture1.Visible = False

 Frame1.Visible = False: Cmd1.Visible = False

 Cmd2.Visible = False: CmdWEB.Visible = False

 Opt1.Value = True: CmdWORKsch.Enabled = False

 zapros = False

 poweb = False

 mnuOpen.Enabled = True

deletealluz = True: deletealllinsv = True

Picture1.Cls: svayzy 0, 0, 0, 0, 0, 0, mlinesSV, kolvolin

NeWorKorrkolUZ 0, kolvouzlov, 0, 0, 0

LblLN(1).Caption = 0

LbluZ(1).Caption = 0

mnuNew.Enabled = True

mnuClose.Enabled = False

mnuSave.Enabled = False

mnuSaveAs.Enabled = False

mnuweb.Enabled = False

mnuwebYN.Checked = False

keeAB = False

testimonial = False

needFRsave = False

CmdFwd.Enabled = False

CmdBk.Enabled = False

brcoutDf:

Exit Sub

metClDf:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcoutDf

    

End Sub

Private Sub mnuExit_Click ( )

   Dim emss As Integer

    If needFRsave = True Then

     emss = MsgBox(" Вы хотите сохранить внесенные изменения ?", _

vbExclamation + vbYesNo, " Завершение работы с программой ")

If emss = vbYes Then mnuSave_Click

    End If

Unload FrmSSN

Set FrmSSN = Nothing

End Sub

Private Sub mnuNew_Click ( )

On Error GoTo metOUTsbA

 Picture2.Visible = False: Picture1.Visible = True

 Frame1.Visible = True: Cmd1.Visible = True

 Cmd2.Visible = True: CmdWEB.Visible = True

 mnuOpen.Enabled = False

 mnuNew.Enabled = False

 mnuClose.Enabled = True

 mnuSave.Enabled = True

 mnuSaveAs.Enabled = True

 mnuweb.Enabled = True

deletealluz = False

deletealllinsv = False

testimonial = False

needFRsave = False

brcoutA0:

Exit Sub

metOUTsbA:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", _

vbCritical, "Error"

    GoTo brcoutA0

End Sub

Private Sub mnuOpen_Click ( )

    Dim ORnost As String, msNMF As Integer

    Dim nF As Integer

    Dim BREDpt As Boolean

On Error GoTo metERSSst

     BREDpt = False

    mnuNew.Enabled = False

    mnuweb.Enabled = True

     deletealluz = False

     deletealllinsv = False

    cldfilfunk.Flags = cdlOFNHideReadOnly

    cldfilfunk.ShowOpen

    SFALNAME = cldfilfunk.FileName

    ORnost = Right$(SFALNAME, 4)

    If Len(SFALNAME) = 0 Then

564:mnuNew.Enabled = True

mnuweb.Enabled = False

Exit Sub

    End If

  If myORno = Right$(SFALNAME, 3) And 46 = Asc(Mid(ORnost, 1, 1)) Then

FCnetR BREDpt

cldfilfunk.FileName = ""

If BREDpt = True Then GoTo 564

netUPload

  Else

       msNMF = MsgBox("Данный файл НЕ является файлом приложения SSN", _

vbCritical + vbOKOnly, " Не верный формат файла ")

cldfilfunk.FileName = " "

mnuNew.Enabled = True

mnuweb.Enabled = False

Exit Sub

  End If

brcout77:

Exit Sub

metERSSst:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", _

vbCritical, "Error"

    GoTo brcout77

End Sub

Private Sub netUPload ( )

  Dim w As Integer

On Error GoTo metERSS03

   For w = 1 To kolvouzlov

Load nnOuzN(MasKoLuZv(w, 1))

Load Pct1(MasKoLuZv(w, 1))

Pct1(MasKoLuZv(w, 1)).Move MasKoLuZv(w, 2) –

– Pct1(MasKoLuZv(w, 1)).Width / 2, _

MasKoLuZv(w, 3) – Pct1(MasKoLuZv(w, 1)).Height / 2

Pct1(MasKoLuZv(w, 1)).Visible = True

If MasKoLuZv(w, 1) > 0 Then

nnOuzN(MasKoLuZv(w, 1)).Move (MasKoLuZv(w, 2) –

– (nnOuzN(MasKoLuZv(w, 1)).Width / 2)), _

(MasKoLuZv(w, 3) – (nnOuzN(MasKoLuZv(w, 1)).Height / 2))

nnOuzN(MasKoLuZv(w, 1)).Visible = True

nnOuzN(MasKoLuZv(w, 1)).Enabled = True

End If

If testimonial = True And MasKoLuZv(w, 5) > 0 Then

   nnOuzN(MasKoLuZv(w, 1)).Text = MasKoLuZv(w, 5)

   nnOuzN(MasKoLuZv(w, 1)).BackColor = RGB(0, 250, 243)

   nnOuzN(MasKoLuZv(w, 1)).Locked = True

End If

    Next w

     bJampWeb = True

     CmdWEB_Click

     bJampWeb = False

Picture2.Visible = False: Picture1.Visible = True

Frame1.Visible = True: Cmd1.Visible = True

Cmd2.Visible = True: CmdWEB.Visible = True

mnuClose.Enabled = True

mnuSave.Enabled = True

mnuSaveAs.Enabled = True

mnuOpen.Enabled = False

LbluZ(1).Caption = kolvouzlov

   LblLN(1).Caption = kolvolin

If keeAB = True Then

   Cmd1.Visible = False

   Cmd2.Visible = False

End If

brcout3:

Exit Sub

metERSS03:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcout3

End Sub

Private Sub FcnetR (Bpt As Boolean)

    Dim st0 As String, j As Integer

    Dim nF As Integer, nwwd As Integer

    Dim clermgs As String, st1 As String

    Dim stx As String

On Error GoTo kasjakmet

nF = FreeFile

st1 = "777*NSN!& – _

&!SEV_*_ftAC*&&&*015401680161013101470146013600163046014101740162 _

0174099016801610168011209901700*777"

   Open SFALNAME For Input As #nF

        Input #nF, st0

  If st0 <> st1 Then

     clermgs = "Данный файл НЕ является файлом приложения SSN"

     GoTo 22

  End If

Input #nF, stx

   keeAB = CBool(stx)

Input #nF, stx

    testimonial = CBool(stx)

Input #nF, stx

    kolvouzlov = CInt(stx)

 For nwwd = 1 To kolvouzlov

    For j = 1 To 5

Input #nF, MasKoLuZv(nwwd, j) 'stx

    Next j

 Next nwwd '-конец ввода массива узлов

Input #nF, stx

Input #nF, stx

    kolvolin = CInt(stx)

   For nwwd = 1 To kolvolin

     For j = 1 To 10

If j = 10 Then

Input #nF, mlinesSV(nwwd, j)

mlinesSV(nwwd, j) = mlinesSV(nwwd, j) / 1000

Else

Input #nF, mlinesSV(nwwd, j) 'stx

End If

     Next j

   Next nwwd '- конец ввода массива линий

23:

Close #nF

Exit Sub

kasjakmet:

    Select Case Err

Case Is = 76

clermgs = " Путь " & SFALNAME & " НЕ найден "

Case Is = 62

GoTo 23

Case Else

clermgs = "Данный файл НЕ является файлом приложения SSN"

End Select

22:

    nwwd = MsgBox(clermgs, vbInformation + vbOKOnly, " Ошибка чтения файла")

    Bpt = True

    GoTo 23

End Sub

Private Sub mnuSave_Click ( )

If SFALNAME <> "" And needFRsave = True And zapros = False Then

cldfilfunk.Flags = cdlOFNOverwritePrompt

FCnetM

ElseIf needFRsave = True Then

mnuSaveAs_Click

End If

End Sub

Private Sub mnuSaveAs_Click ( )

cldfilfunk.Flags = cdlOFNOverwritePrompt

cldfilfunk.ShowSave

SFALNAME = cldfilfunk.FileName

If Len(SFALNAME) = 0 Then Exit Sub

myNfkorr

End Sub

Private Function CheckNames (name As String) As Boolean

Dim Result As Boolean

Result = True

If (InStr(name, "\")) Then Result = False

If (InStr(name, "/")) Then Result = False

If (InStr(name, ":")) Then Result = False

If (InStr(name, ";")) Then Result = False

If (InStr(name, "*")) Then Result = False

If (InStr(name, """")) Then Result = False

If (InStr(name, "?")) Then Result = False

If (InStr(name, ">")) Then Result = False

If (InStr(name, "<")) Then Result = False

If (InStr(name, "|")) Then Result = False

If (InStr(name, ",")) Then Result = False

CheckNames = Result

End Function

Private Sub myNfkorr ( )

   Dim chstras As String, snumpoint As Integer

   Dim rrr As String

On Error GoTo 898

rrr = cldfilfunk.FileTitle

If CheckNames(rrr) = False Or Len(rrr) = 0 Then

11:MsgBox " Недопустимое имя файла "

zapros = True

cldfilfunk.FileName = ""

Exit Sub

ElseIf 46 = Asc(Mid(rrr, 1, 1)) Then GoTo 11

End If

chstras = Right$(SFALNAME, 4)

    If myORno <> Right$(SFALNAME, 3) And 46 = Asc(Mid(chstras, 1, 1)) Then

Mid(SFALNAME, (Len(SFALNAME) - 2), 3) = myORno

    ElseIf myORno <> Right$(SFALNAME, 3) And 46 <> Asc(Mid(chstras, 1, 1)) Then

 If InStr(1, SFALNAME, ".") <> 0 Then

SFALNAME = Left$(SFALNAME, (InStr(1, SFALNAME, ".") - 1))

SFALNAME = SFALNAME & ".sns"

Else

SFALNAME = SFALNAME & ".sns"

End If

    End If

FCnetM

brcout:

Exit Sub

898:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcout

End Sub

Private Sub FcnetM ( )

    Dim st0 As String, j As Integer

    Dim nF As Integer, nwwd As Integer

    Dim clermgs As String

 

On Error GoTo kasjakmet

nF = FreeFile

st0 = "777*NSN!& – _

&!SEV_*_ftAC*&&&*015401680161013101470146013600163046014101740162 _

0174099016801610168011209901700*777"

FrmSSN.Enabled = False

FrmSSN.MousePointer = 11

   Open SFALNAME For Output As #nF

Write #nF, st0

Write #nF, CStr(keeAB)

Write #nF, CStr(testimonial)

Print #nF, CStr(kolvouzlov),

  For nwwd = 1 To kolvouzlov

    If MasKoLuZv(nwwd, 1) > 0 Then

Write #nF,

For j = 1 To 5

Print #nF, MasKoLuZv(nwwd, j),

Next j

    End If

  Next nwwd '-конец ввода массива узлов

Write #nF,

Write #nF,

Print #nF, CStr(kolvolin),

   For nwwd = 1 To kolvolin

      If mlinesSV(nwwd, 1) > 0 Then

Write #nF,

For j = 1 To 10

   If j = 10 Then

Print #nF, (mlinesSV(nwwd, j) * 1000),

   Else

Print #nF, mlinesSV(nwwd, j),

   End If

Next j

      End If

   Next nwwd '- конец ввода массива линий

Write #nF,

needFRsave = False

23:

   Close #nF

FrmSSN.Enabled = True

FrmSSN.MousePointer = 0

Exit Sub

kasjakmet:

    Select Case Err

Case Is = 76

clermgs = " Путь " & SFALNAME & " НЕ найден "

SFALNAME = ""

Case Is = 62

GoTo 23

Case Is = 53

   clermgs = " Требуемый файл был удален или перемещен "

   clermgs = clermgs & vbCrLf & " Используйте меню " & " Файл \ Сохранить как..."

Case Else

   MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

GoTo 23

End Select

nwwd = MsgBox(clermgs, vbInformation + vbOKOnly, _

" Ошибка сохранения файла")

cldfilfunk.FileName = ""

GoTo 23

End Sub

Public Sub ZAPWEB ( )

If keeCH = False Then

CmdWEB_Click

Else

CmdWEB_Click

keeCH = False

CmdWEB_Click

End If

End Sub

Private Sub mnuWBconf_Click ( )

On Error GoTo 1111

Load FrmPrWeb

FrmPrWeb.Show vbModal

brt1:

Exit Sub

1111:

   MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brt1

End Sub

Private Sub mnuwebYN_Click ( ) '-активизация/де активизация сетки

  Static webyes As Integer

On Error GoTo metERSS01

webyes = webyes + 1

If webyes = 1 Then

mnuwebYN.Checked = True: CmdWEB.Enabled = True

mnuWBconf.Enabled = True

Else

webyes = 0

mnuwebYN.Checked = False: CmdWEB.Enabled = False

mnuWBconf.Enabled = False

End If

brcout1:

Exit Sub

metERSS01:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcout1

End Sub

Private Sub nnOuzN_GotFocus (Index As Integer)

nnOuzN(Index).SelStart = 0

nnOuzN(Index).SelLength = 3

End Sub

Private Sub nnOuzN_KeyPress (Index As Integer, KeyAscii As Integer)

    Dim messege0 As Integer, zapMuzElin As Integer

On Error GoTo metERSS1

If Optlinswyazi.Value = True Or Opt1.Value = True Then Exit Sub

    If KeyAscii = 13 Then

    If KeyAscii = 13 And nnOuzN(Index).Locked = True Then Exit Sub

     If Val(nnOuzN(Index).Text) = 0 Or Not IsNumeric(nnOuzN(Index)) Then

messege0 = MsgBox("Данный параметр НЕ может содержать буквенные или нулевые значения ", vbCritical + vbOKOnly, " Ошибка пользовательского ввода !!! ")

     Exit Sub

     Else

nnOuzN(Index).Text = Val(nnOuzN(Index).Text)

nnOuzN(Index).BackColor = RGB(0, 250, 243)

nnOuzN(Index).Locked = True: nnOuzN(Index).Locked = True

'- код присвоения нового номера узлу < и в м линий >

  For zapMuzElin = 1 To kolvouzlov

   If MasKoLuZv(zapMuzElin, 1) = Index Then

MasKoLuZv(zapMuzElin, 5) = Val(nnOuzN(Index).Text)

   End If

  Next zapMuzElin

For zapMuzElin = 1 To kolvolin

 If mlinesSV(zapMuzElin, 1) > 0 Then

  If mlinesSV(zapMuzElin, 1) = Index Then

mlinesSV(zapMuzElin, 8) = Val(nnOuzN(Index).Text)

  ElseIf mlinesSV(zapMuzElin, 2) = Index Then

mlinesSV(zapMuzElin, 9) = Val(nnOuzN(Index).Text)

  End If

 End If

Next zapMuzElin

'-присвоение нового номера узлу<и в м линий>

needFRsave = True

testimonial = True

     End If

    Else

If nnOuzN(Index).Locked = True Then

   messege0 = MsgBox("Вы хотите изменить номер выбранного узла : " _

   & nnOuzN(Index).Text , vbQuestion + vbYesNo, " Изменение номера узла ")

   If messege0 = vbYes Then

nnOuzN(Index).BackColor = vbGreen

nnOuzN(Index).Locked = False

Exit Sub

   End If

     End If

    End If

brcout10:

Exit Sub

metERSS1:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcout10

End Sub

Private Sub Opt1_Click ( )

Opt1.Value = True

If keeAB = False Then CmdFwd.Enabled = True

End Sub

Private Sub Opt1_GotFocus ( )

Opt1.DownPicture = LoadPicture(App.Path & "\Arrow_1.cur")

If keeAB = False Then

CmdFwd.Enabled = True

Else

CmdFwd.Enabled = False

CmdWORKsch.Enabled = True

CmdBk.Enabled = True

End If

End Sub

Private Sub Opt1_LostFocus ( )

Opt1.Picture = LoadPicture(App.Path & "\Busy_m.cur")

End Sub

Private Sub Optlinswyazi_Click ( )

CmdFwd.Enabled = False

CmdBk.Enabled = False

Optlinswyazi.Value = True

Opt1.Picture = LoadPicture(App.Path & "\Busy_m.cur")

Picture1.MousePointer = vbArrow

End Sub

Private Sub Optuzel_Click ( )

CmdFwd.Enabled = False

CmdBk.Enabled = False

Optuzel.Value = True

Opt1.Picture = LoadPicture(App.Path & "\Busy_m.cur")

Picture1.MousePointer = 2

End Sub

Private Sub svjaziuz (idsuz1 As Integer, idsuz2 As Integer, MasKoLuZv, kolvouzlov)

    Dim nomuz As Integer

On Error GoTo metERSS2

For nomuz = 1 To kolvouzlov

If MasKoLuZv(nomuz, 1) > 0 And MasKoLuZv(nomuz, 1) = _

idsuz1 Or MasKoLuZv(nomuz, 1) = idsuz2 Then

MasKoLuZv(nomuz, 4) = MasKoLuZv(nomuz, 4) + 1

End If

Next nomuz

brcout20:

Exit Sub

metERSS2:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcout20

End Sub

Private Sub Pct1_GotFocus(Index As Integer)

Pct1(Index).MousePointer = vbArrow

End Sub

Private Sub testlSN (tochka1 As Integer, tochka2 As Integer, SVLT( ) As Single, _

  zkk As Boolean)

    Dim mnl As Integer, msSVsp As Integer

On Error GoTo metERSS3

FrmSSN.Enabled = False

FrmSSN.MousePointer = 11

FrmSSN.Picture1.MousePointer = 11

  For mnl = 1 To kolvolin

   If SVLT(mnl, 1) > 0 Then

    If SVLT(mnl, 1) = tochka1 And SVLT(mnl, 2) = tochka2 Or SVLT(mnl, 2) = _

   tochka1 And SVLT(mnl, 1) = tochka2 Then

     msSVsp = MsgBox(" Выбранная вами пара узлов уже соединена ", _

vbInformation + vbOKOnly, " Ограничение ввода ")

zkk = True

FrmSSN.Enabled = True

FrmSSN.MousePointer = 0

Exit Sub

    End If

   End If

  Next mnl

zkk = False

FrmSSN.Enabled = True

FrmSSN.MousePointer = 0

FrmSSN.Picture1.MousePointer = 1

brcout30:

Exit Sub

metERSS3:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcout30

End Sub

Private Sub Pct1_MouseDown (Index As Integer, Button As Integer, Shift As Integer, _

x As Single, Y As Single)

 Static iduzla As Integer, i As Integer

    Dim nResult As Integer, niduzla As Integer

    Dim nPredeL1 As Integer

On Error GoTo metERSS4

If Optlinswyazi.Value = True And Button <> vbRightButton Then

        If keeAB = True Then Exit Sub

Pct1(Index).BackColor = vbBlack

If znak = True Then

x1 = Pct1(Index).Left + ((Pct1(Index).Width) / 2)

y1 = Pct1(Index).Top + (Pct1(Index).Height / 2)

iduzla = Index

znak = False

Else:

    If iduzla = Index Then Exit Sub

x2 = Pct1(Index).Left + (Pct1(Index).Width / 2)

y2 = Pct1(Index).Top + (Pct1(Index).Height / 2)

nResult = MsgBox(" Соединить узлы ? ", vbYesNo + vbExclamation, _

 " Соединение выбранных узлов !")

If nResult = vbYes Then

zamok = False

Pct1(iduzla).BackColor = vbBlue: Pct1(Index).BackColor = vbBlue

  svjaziuz iduzla, Index, MasKoLuZv, kolvouzlov

  testlSN iduzla, Index, mlinesSV, zamok

If zamok = True Then GoTo 2

kolvolin = kolvolin + 1

LblLN(1).Caption = Str(kolvolin)

   If kolvolin > 400 Then

nPredeL1 = MsgBox(" количество линий = 400 ! ", vbOKOnly, _

  " предел количества линий ")

If nPredeL1 = vbOK Then GoTo 2

   End If

svayzy x1, x2, y1, y2, iduzla, Index, mlinesSV, kolvolin

needFRsave = True

change = True

Picture1_GotFocus

Else:

2:

x1 = 0

x2 = 0

y1 = 0

y2 = 0

znak = True

Pct1(iduzla).BackColor = vbBlue: Pct1(Index).BackColor = vbBlue

End If

End If

ElseIf Button = vbRightButton And Optuzel.Value = True Then

If keeAB = True Then Exit Sub

Pct1_deluzel Index, Button, Shift, x, Y '- удаление узла и его линий

Exit Sub

End If

brcout40:

Exit Sub

metERSS4:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcout40

End Sub

Private Sub Pct1_deluzel (Index As Integer, Button As Integer, Shift As Integer, _

  x As Single, Y As Single)

  Dim nResult As Integer, eraseslin As Integer

  Dim i As Integer, j As Integer

  Dim o As Integer

On Error GoTo metERSS5

    Pct1(Index).BackColor = vbRed

     nResult = MsgBox(" Удалить узел ?", vbYesNo + vbExclamation, _

      " Удаление выбранного узла ! ")

   If nResult = vbYes Then

NeWorKorrkolUZ Index, kolvouzlov, x, Y, 0 '-коррекция числа узлов

kolvouzlov = kolvouzlov - 1

LbluZ(1).Caption = Str(kolvouzlov)

Unload nnOuzN(Index)

Unload Pct1(Index)

needFRsave = True

change = True

eraseslin = 0 '- удаление связанных с узлом линий

      If kolvolin > 0 Then

FrmSSN.Frame1.Enabled = False

FrmSSN.Picture1.MousePointer = 11

       For i = 1 To kolvolin

        If mlinesSV(i, 1) = Index Or mlinesSV(i, 2) = Index Then

mlinesSV(i, 1) = 0: mlinesSV(i, 2) = 0: mlinesSV(i, 3) = 0

mlinesSV(i, 4) = 0: mlinesSV(i, 5) = 0: mlinesSV(i, 6) = 0

mlinesSV(i, 7) = 0: mlinesSV(i, 8) = 0: mlinesSV(i, 9) = 0: mlinesSV(i, 10) = 0

eraseslin = eraseslin + 1

        End If

       Next i

FrmSSN.Frame1.Enabled = True

FrmSSN.Picture1.MousePointer = 0

  korrmlinesSV mlinesSV, kolvolin, eraseslin

 bJampWeb = True

CmdWEB_Click

 bJampWeb = False

      End If

   Else: Pct1(Index).BackColor = vbBlue: End If

brcout50:

Exit Sub

metERSS5:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcout50

 

End Sub

Private Sub korrmlinesSV (mlinesSV, kolvolin, eraseslin)

    Dim masslinesSV() As Single, fth As Integer

    Dim i As Integer, j As Integer

  FrmSSN.Frame1.Enabled = False

  FrmSSN.Picture1.MousePointer = 11

On Error GoTo metERSS6

ReDim Preserve masslinesSV((kolvolin - eraseslin), 10)

fth = 0

  For i = 1 To kolvolin

If mlinesSV(i, 1) > 0 Then

fth = fth + 1

  If fth <= (kolvolin - eraseslin) Then

    For j = 1 To 10

masslinesSV(fth, j) = mlinesSV(i, j): mlinesSV(i, j) = 0

    Next j

  End If

End If

  Next i

   For i = 1 To (kolvolin - eraseslin)

    For j = 1 To 10

mlinesSV(i, j) = masslinesSV(i, j)

masslinesSV(i, j) = 0

    Next j

   Next i:

kolvolin = kolvolin - eraseslin

LblLN(1).Caption = Str(kolvolin)

FrmSSN.Frame1.Enabled = True

FrmSSN.Picture1.MousePointer = 1

brcout60:

Exit Sub

metERSS6:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcout60

End Sub

Private Sub Picture1_GotFocus ( )

If Optlinswyazi.Value = True And x1 <> 0 And y2 <> 0 And y1 <> 0 Or x2 <> 0 Then

Picture1.DrawStyle = 6

Picture1.Line (x1, y1)-(x2, y2), vbBlue

x1 = 0

x2 = 0

y1 = 0

y2 = 0

znak = True

End If

Picture1.DrawStyle = 6

End Sub

Private Sub Picture1_MouseDown (Button As Integer, Shift As Integer, x As Single, _

Y As Single)

    Dim i As Integer, txtid As Integer

On Error GoTo metERSS7

Picture1.DrawStyle = 6

i = Pct1.UBound

txtid = nnOuzN.UBound

Pct1(i).MousePointer = vbArrow

            If Optuzel.Value = True And kolvouzlov <= 200 Then

    If keeAB = True Then Exit Sub

If x < (Pct1(i).Width / 2) Or ((Picture1.Width) - x) < (Pct1(i).Width / 2) Or _

  Y < (Pct1(i).Height / 2) Or ((Picture1.Height) - Y) < (Pct1(i).Height / 2) Then Exit Sub

Load nnOuzN (txtid + 1)

Load Pct1(i + 1)

Pct1(i + 1).Move x - Pct1(i + 1).Width / 2, Y - Pct1(i + 1).Height / 2

Pct1(i + 1).Visible = True

znak = True

kolvouzlov = kolvouzlov + 1

NeWorKorrkolUZ 0, kolvouzlov, x, Y, i '- запись новых узлов

LbluZ(1).Caption = Str(kolvouzlov)

needFRsave = True

change = True

Else

If Optlinswyazi.Value = True And Button = vbRightButton Then

SVPprln mlinesSV, x, Y

End If

End If

brcout70:

Exit Sub

metERSS7:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcout70

End Sub

Private Sub svjasiUZdel (numlinBRC As Integer, allUZsee As Integer)

    Dim UNz As Integer

On Error GoTo metERSS8

FrmSSN.Frame1.Enabled = False

FrmSSN.Picture1.MousePointer = 11

      For UNz = 1 To allUZsee

        If MasKoLuZv(UNz, 1) > 0 Then

If MasKoLuZv(UNz, 1) = mlinesSV(numlinBRC, 1) Or MasKoLuZv(UNz, 1) = _

mlinesSV(numlinBRC, 2) Then

MasKoLuZv(UNz, 4) = MasKoLuZv(UNz, 4) - 1

End If

        End If

      Next UNz

FrmSSN.Frame1.Enabled = True

FrmSSN.Picture1.MousePointer = 1

brcout80:

Exit Sub

metERSS8:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcout80

End Sub

Private Sub SVPprln (mlinesSV, x, Y)

    Dim l As Integer, yyy As Double

    Dim xxx As Double, nSovpad As Integer

    Dim StrLinsV As Integer, DelAscK As Integer

    Dim flagsovp As Boolean, raznostimin() As Double

    Dim nuy As Integer, whatlin( ) As Integer

On Error GoTo metERSS9

FrmSSN.Frame1.Enabled = False

FrmSSN.Picture1.MousePointer = 11

nSovpad = 0

For l = 1 To kolvolin

    If mlinesSV(l, 3) >= mlinesSV(l, 5) And mlinesSV(l, 3) - mlinesSV(l, 5) <= 15 Then GoTo 73

      If mlinesSV(l, 3) <= mlinesSV(l, 5) And mlinesSV(l, 5) - mlinesSV(l, 3) <= 15 Then

    

73:Select Case x

Case Is >= mlinesSV(l, 3)

If x - mlinesSV(l, 3) <= 17 Then GoTo 77

Case Is <= mlinesSV(l, 3)

If mlinesSV(l, 3) - x <= 17 Then GoTo 77

Case Is >= mlinesSV(l, 5)

If x - mlinesSV(l, 5) <= 17 Then GoTo 77

Case Is <= mlinesSV(l, 5)

If mlinesSV(l, 5) - x <= 17 Then

77:StrLinsV = l

FlinEd raznostimin, whatlin, x, Y, StrLinsV, mlinesSV, nSovpad, StrLinsV

If StrLinsV <> 0 Then

nSovpad = 1

GoTo 78

End If

End If

End Select

    Else

        If mlinesSV(l, 4) >= mlinesSV(l, 6) And mlinesSV(l, 4) - mlinesSV(l, 6) <= 15 Then GoTo 74

        If mlinesSV(l, 4) <= mlinesSV(l, 6) And mlinesSV(l, 6) - mlinesSV(l, 4) <= 15 Then

74:

Select Case Y

Case Is >= mlinesSV(l, 4)

If Y - mlinesSV(l, 4) <= 17 Then GoTo 77

Case Is <= mlinesSV(l, 4)

If mlinesSV(l, 4) - Y <= 17 Then GoTo 77

Case Is >= mlinesSV(l, 6)

If Y - mlinesSV(l, 6) <= 17 Then GoTo 77

Case Is <= mlinesSV(l, 6)

If mlinesSV(l, 6) - Y <= 17 Then GoTo 77

End Select

        End If

    End If

Next l

     For l = 1 To kolvolin

If mlinesSV(l, 6) = mlinesSV(l, 4) Then mlinesSV(l, 6) = (mlinesSV(l, 6) + 2)

If mlinesSV(l, 5) = mlinesSV(l, 3) Then mlinesSV(l, 5) = (mlinesSV(l, 5) + 2)

     yyy = ((Y - mlinesSV(l, 4)) / (mlinesSV(l, 6) - mlinesSV(l, 4)))

     xxx = ((x - mlinesSV(l, 3)) / (mlinesSV(l, 5) - mlinesSV(l, 3)))

If xxx < 0 Then xxx = (xxx * (-1))

If yyy < 0 Then yyy = (yyy * (-1))

If xxx = 0 Or yyy = 0 Then GoTo 36

If yyy >= xxx And (yyy - xxx) < 0.554 Then

36: nuy = nuy + 1

 ReDim Preserve raznostimin(nuy)

raznostimin(nuy) = (yyy - xxx): GoTo 32

ElseIf yyy <= xxx And (xxx - yyy) < 0.554 Then

nuy = nuy + 1

 ReDim Preserve raznostimin(nuy)

raznostimin(nuy) = (xxx - yyy)

32: nSovpad = nSovpad + 1: StrLinsV = l

ReDim Preserve whatlin(1, nSovpad)

whatlin(1, nSovpad) = l

FlinEd raznostimin, whatlin, x, Y, StrLinsV, mlinesSV, nSovpad, StrLinsV

        End If

yyy = 0: xxx = 0

   Next l

 If nSovpad > 1 Then

flagsovp = False

lIniTiS whatlin, nSovpad, StrLinsV, raznostimin( ), flagsovp

  If flagsovp = True Then nSovpad = 1

End If

78:

FrmSSN.Frame1.Enabled = True

FrmSSN.Picture1.MousePointer = 1

    If nSovpad = 1 And StrLinsV <> 0 Then

mlinesSV(StrLinsV, 7) = 1

bJampWeb = True

 CmdWEB_Click

bJampWeb = False

     If keeAB = True Then GoTo 179

       DelAscK = MsgBox("Удалить линию ? ", vbExclamation + vbYesNo, _

" Удаление выбранной линии ")

        If DelAscK = vbYes Then

bJampWeb = True

    svjasiUZdel StrLinsV, kolvouzlov

       mlinesSV(StrLinsV, 1) = 0: mlinesSV(StrLinsV, 2) = 0: mlinesSV(StrLinsV, 3) = 0

       mlinesSV(StrLinsV, 4) = 0: mlinesSV(StrLinsV, 5) = 0: mlinesSV(StrLinsV, 6) = 0

       mlinesSV(StrLinsV, 7) = 0: mlinesSV(StrLinsV, 8) = 0: mlinesSV(StrLinsV, 9) = 0

mlinesSV(StrLinsV, 10) = 0

 korrmlinesSV mlinesSV, kolvolin, nSovpad

    needFRsave = True

    change = True

 CmdWEB_Click

bJampWeb = False

        Else

mlinesSV(StrLinsV, 7) = 0

176: bJampWeb = True

 CmdWEB_Click

bJampWeb = False

        End If

    End If

Exit Sub

179:

Load FrmNwORsZ

 FrmNwORsZ.TxtOzN(0).Text = mlinesSV(StrLinsV, 10)

 FrmNwORsZ.TxtOzN(0).Locked = True

 FrmNwORsZ.Show vbModal

If Len(FrmNwORsZ.TxtOzN(1).Text) <> 0 Then

mlinesSV(StrLinsV, 10) = Val(FrmNwORsZ.TxtOzN(1).Text)

Unload FrmNwORsZ

mlinesSV(StrLinsV, 7) = 2

   needFRsave = True

   testimonial = True

GoTo 176

ElseIf mlinesSV(StrLinsV, 10) <> 0 Then

mlinesSV(StrLinsV, 7) = 2

GoTo 176

Else

mlinesSV(StrLinsV, 7) = 0

GoTo 176

End If

brcout90:

Exit Sub

metERSS9:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcout90

End Sub

Private Sub NeWorKorrkolUZ (deliduz, kolvouzlov, x, Y, ci)

    Dim iuz As Integer, juz As Integer

    Dim UZkorR() As Integer, ff As Integer

    Dim kkk As Integer

        On Error GoTo metERSS10

If deletealluz = True And kolvouzlov > 0 Then

FrmSSN.Enabled = False

FrmSSN.MousePointer = 11

For iuz = 1 To kolvouzlov

 If MasKoLuZv(iuz, 1) <> 0 Then

Unload nnOuzN(MasKoLuZv(iuz, 1))

Unload Pct1(MasKoLuZv(iuz, 1))

 End If

  For juz = 1 To 5

    MasKoLuZv(iuz, juz) = 0

  Next juz

Next iuz

kolvouzlov = 0

Else

FrmSSN.Enabled = True

FrmSSN.MousePointer = 0

If deliduz = 0 Then

For iuz = 1 To kolvouzlov

  If MasKoLuZv(iuz, 1) = 0 Then

MasKoLuZv(iuz, 1) = ci + 1: MasKoLuZv(iuz, 2) = x

MasKoLuZv(iuz, 3) = Y: MasKoLuZv(iuz, 4) = 0

MasKoLuZv(iuz, 5) = 0

  End If

Next iuz

Else

FrmSSN.Enabled = False

FrmSSN.MousePointer = 11

If kolvouzlov = 1 Then kkk = kolvouzlov Else kkk = kolvouzlov - 1

ReDim Preserve UZkorR(kkk, 5)

     For iuz = 1 To kolvouzlov

If deliduz = MasKoLuZv(iuz, 1) Then

MasKoLuZv(iuz, 1) = 0: MasKoLuZv(iuz, 2) = 0: MasKoLuZv(iuz, 3) = 0

MasKoLuZv(iuz, 4) = 0: MasKoLuZv(iuz, 5) = 0

End If

     Next iuz

  For iuz = 1 To kolvouzlov

   If MasKoLuZv(iuz, 1) <> 0 Then

ff = ff + 1

    For juz = 1 To 5

UZkorR(ff, juz) = MasKoLuZv(iuz, juz): MasKoLuZv(iuz, juz) = 0

    Next juz

   End If

  Next iuz

For iuz = 1 To kolvouzlov - 1

For juz = 1 To 5

MasKoLuZv(iuz, juz) = UZkorR(iuz, juz)

Next juz: Next iuz

End If

End If

FrmSSN.Enabled = True

FrmSSN.MousePointer = 0

brcout100:

Exit Sub

metERSS10:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcout100

End Sub

Private Sub lIniTiS (whatlin, nSovpad, StrLinsV, raznostimin() As Double, _

sovp As Boolean)

    Dim ar As Integer, perehod As Boolean

    Dim vib As Integer, arda As Integer

    Dim prraznmin(1) As Double, wtlpr() As Integer

    ReDim Preserve wtlpr(1, nSovpad)

On Error GoTo metERSS11

   For arda = 1 To nSovpad '- 1

    For ar = 1 To nSovpad - 1

     If raznostimin(ar) = 0 And raznostimin(ar + 1) > 0 Then

raznostimin(ar) = raznostimin(ar + 1): raznostimin(ar + 1) = 0

whatlin(1, ar) = whatlin(1, ar + 1): whatlin(1, ar + 1) = 0

     ElseIf raznostimin(ar) > raznostimin(ar + 1) And raznostimin(ar + 1) <> 0 Then

 prraznmin(1) = raznostimin(ar): wtlpr(1, ar) = whatlin(1, ar)

 raznostimin(ar) = raznostimin(ar + 1): whatlin(1, ar) = whatlin(1, ar + 1)

 raznostimin(ar + 1) = prraznmin(1): whatlin(1, ar + 1) = wtlpr(1, ar)

     End If

    Next ar

   Next arda

ar = 0: arda = 0

    For ar = 1 To nSovpad

If raznostimin(ar) > 0 Then

StrLinsV = whatlin(1, ar): whatlin(1, ar) = 0

sovp = True

Exit For

End If 

    Next ar

ar = 0

brcout110:

Exit Sub

metERSS11:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcout110

End Sub

Private Sub FlinEd (rzn( ) As Double, wlinw( ) As Integer, x, Y, StrLV, mlSV, _

 SVPD As Integer, StrLinsV)

On Error GoTo metERSS12

If mlSV(StrLV, 3) < x And x > mlSV(StrLV, 5) Then GoTo 977

   If mlSV(StrLV, 3) > x And x < mlSV(StrLV, 5) Then GoTo 977

   If mlSV(StrLV, 4) < Y And Y > mlSV(StrLV, 6) Then GoTo 977

   If mlSV(StrLV, 4) > Y And Y < mlSV(StrLV, 6) Then

977:

If SVPD <> 0 Then rzn(SVPD) = 0

    StrLinsV = 0

   Else

       If mlSV(StrLV, 3) = x And x <> mlSV(StrLV, 5) Then

     Select Case x

Case Is > mlSV(StrLV, 5)

If x - mlSV(StrLV, 5) > 17 Then GoTo 977

Case Is < mlSV(StrLV, 5)

If mlSV(StrLV, 5) - x > 17 Then GoTo 977

     End Select

       End If

       If mlSV(StrLV, 3) <> x And x = mlSV(StrLV, 5) Then

Select Case x

Case Is > mlSV(StrLV, 3)

If x - mlSV(StrLV, 3) > 17 Then GoTo 977

Case Is < mlSV(StrLV, 3)

If mlSV(StrLV, 3) - x > 17 Then GoTo 977

End Select

       End If

    

       If mlSV(StrLV, 4) = Y And Y <> mlSV(StrLV, 6) Then

Select Case Y

Case Is > mlSV(StrLV, 6)

If Y - mlSV(StrLV, 6) > 17 Then GoTo 977

Case Is < mlSV(StrLV, 6)

If mlSV(StrLV, 6) - Y > 17 Then GoTo 977

End Select

       End If

       If mlSV(StrLV, 4) <> Y And Y = mlSV(StrLV, 6) Then

Select Case Y

Case Is > mlSV(StrLV, 4)

If Y - mlSV(StrLV, 4) > 17 Then GoTo 977

Case Is < mlSV(StrLV, 4)

If mlSV(StrLV, 4) - Y > 17 Then GoTo 977

End Select

       End If

    End If

brcout120:

Exit Sub

metERSS12:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo brcout120

    

End Sub

Public Sub numUZmu (LN As Integer, MKUN As Integer, a12 As Integer, na1, na2)

   Dim t As Integer

   Dim td As Integer

     

    For td = 1 To a12

     For t = 1 To MKUN

If MasKoLuZv(t, 1) = mlinesSV(LN, td) Then

  If td = 1 Then

na1 = t

Exit For

  ElseIf td = 2 Then

na2 = t

Exit For

  End If

End If

     Next t

    Next td

End Sub

Public Property Get UvmLN (LNmSV As Integer) As Single

UvmLN = mlinesSV(LNmSV, 10)

End Property

Public Property Get webchS (NWMW As Integer) As Single

Select Case NWMW

Case Is = 1

webchS = shwebx

Case Is = 2

webchS = shweby

End Select

End Property

Вторая часть

Dim flagnext As Boolean, flaghehe As Boolean

Private Sub CmdNOWer_Click ( )

Unload frmBrWk

End Sub

Private Sub CmdOKWer_Click ( )

  Dim msg As Integer

    If frmBrWk.FramNsInf.Caption = "Расчет" Then Exit Sub

    If TextMNI.Locked = True Then Exit Sub

     If Val(TextMNI.Text) = 0 Or Not IsNumeric(TextMNI) Then

        msg = MsgBox("Данный параметр НЕ может содержать буквенные или _

    нулевые значения " & vbCrLf & _

  " Значением параметра может быть только целое число !!! " _

       , vbCritical + vbOKOnly, " Ошибка пользовательского ввода !!! ")

     Exit Sub

     Else

MdlWorkSpase.maxNnoi = Val(TextMNI.Text)

         TextMNI.BackColor = RGB(0, 250, 243)

TextMNI.Locked = True: TextMNI.Locked = True

        needFRsave = True

        flagnext = True

     End If

End Sub

Private Sub CmmEd_Click ( )

   Dim edms As Integer

    If flaghehe = True Then Exit Sub

    MdlWorkSpase.flgstopuser = True

    edms = MsgBox(" Прервано пользователем !", vbInformation + vbOKOnly, _

 " Останов расчета структурной надежности")

frmBrWk.PrgBarWSind.Value = 0

frmBrWk.FramNsInf.Enabled = True

flaghehe = True

End Sub

Private Sub CmmSt_Click ( )

    Dim hehe As Integer

    If flagnext = False Then

       hehe = MsgBox(" Невозможно начать расчет Немея числа испытаний !!!", _

vbCritical + vbOKOnly, " Ошибка пользовательского ввода ")

flaghehe = True

Exit Sub

       End If

  frmBrWk.FramNsInf.Enabled = False

 MdlWorkSpase.flgstopuser = False

flaghehe = False

MdlWorkSpase.cmdrasch_workmod

End Sub

Private Sub Form_Load ( )

frmBrWk.FramNsInf.ZOrder 0

flagnext = False

frmBrWk.FramNsInf.Enabled = True

End Sub

Private Sub TbSW_Click ( )

    Dim ntemp As Integer

  ntemp = TbSW.SelectedItem.Index

  If ntemp = 2 Then

frmBrWk.FramNsInf.ZOrder 1

frmBrWk.FramWorkStart.ZOrder 0

  ElseIf ntemp = 1 Then

frmBrWk.FramNsInf.ZOrder 0

frmBrWk.FramWorkStart.ZOrder 1

  End If

End Sub

Private Sub TextMNI_KeyPress (KeyAscii As Integer)

  Dim m2sg As Integer

If frmBrWk.FramNsInf.Caption = "Расчет" Then Exit Sub

    If TextMNI.Locked = True Then

        msg = MsgBox("Вы хотите изменить число испытаний ? : " & TextMNI.Text _

, vbQuestion + vbYesNo, " Новое число испытаний ")

        If msg = vbYes Then

TextMNI.BackColor = vbGreen

TextMNI.Locked = False

Exit Sub

        End If

    End If

End Sub

Третья часть

Option Explicit

Private Sub CmdnulST_Click ( )

On Error GoTo 2311

FrmSSN.poweb = False

FrmSSN.bJampWeb = False

FrmSSN.ZAPWEB

Unload FrmPrWeb

2311:

End Sub

Private Sub CmdWno_Click ( )

Unload FrmPrWeb

End Sub

Private Sub CmdWOK_Click ( )

FrmPrWeb.Hide

End Sub

Private Sub CmdWup_Click ( )

    Dim xsh As Single

    Dim ysh As Single

    Dim msnoes As Integer

On Error GoTo Qat5

      If CheckNames2(TxtWbMm.Text) = False Or Len(TxtWbMm.Text) = 0 Then

msnoes = MsgBox("Значение масштаба НЕ может содержать пробелы !" _

      & vbCrLf & "Данный параметр может содержать только числа !", _

      vbCritical + vbOKOnly, " Ошибка пользовательского ввода !!! ")

CmdWup.Enabled = True

FramWMb.Enabled = True

Exit Sub

       End If

    If OptWW1(1).Value = False Then

'(1440 / 2.54)-при 72dpi ,(1080/2.54) - при 96dpi

xsh = (1080 / 2.54) * CSng(TxtXYwB(0))

FrmSSN.shwebx = 0

FrmSSN.shwebx = Round(xsh)

FrmSSN.shweby = 0

FrmSSN.shweby = Round(xsh)

    Else

xsh = (1080 / 2.54) * CSng(TxtXYwB(0))

ysh = (1080 / 2.54) * CSng(TxtXYwB(1))

FrmSSN.shwebx = 0

FrmSSN.shwebx = Round(xsh)

FrmSSN.shweby = 0

FrmSSN.shweby = Round(ysh)

    End If

FrmSSN.poweb = True

CmdWup.Enabled = False

FramWMb.Enabled = False

FrmSSN.bJampWeb = False 'True

FrmSSN.ZAPWEB

        If UpDnXY(1).Enabled = False And LstWmB.ListIndex > (-1) Then

FrmSSN.LblMB2.Caption = FrmPrWeb.TxtWbMm.Text & Chr$(32) & _

FrmPrWeb.LstWmB.List(LstWmB.ListIndex)

        ElseIf LstWmB.ListIndex = (-1) And UpDnXY(1).Enabled = False Then

  msnoes = MsgBox("Вы не выбрали единицы измерения масштаба ! ", _

         vbCritical + vbOKOnly, " Ошибка пользовательского ввода")

CmdWup.Enabled = True

FramWMb.Enabled = True

Exit Sub

        End If

bcoutQ5:

Exit Sub

Qat5:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo bcoutQ5

     

End Sub

Private Function CheckNames2 (name As String) As Boolean

Dim Result As Boolean

On Error GoTo Qat6

Result = True

    If (InStr(name, "-")) Then Result = False

    If (InStr(name, "+")) Then Result = False

    If (InStr(name, " ")) Then Result = False

    If (InStr(name, ".")) Then Result = False

    If (InStr(name, "]")) Then Result = False

    If (InStr(name, "[")) Then Result = False

    If (InStr(name, "}")) Then Result = False

    If (InStr(name, "{")) Then Result = False

    If (InStr(name, "!")) Then Result = False

    If (InStr(name, "@")) Then Result = False

    If (InStr(name, "$")) Then Result = False

    If (InStr(name, "%")) Then Result = False

    If (InStr(name, "^")) Then Result = False

    If (InStr(name, "&")) Then Result = False

    If (InStr(name, "\")) Then Result = False

    If (InStr(name, "/")) Then Result = False

    If (InStr(name, ":")) Then Result = False

    If (InStr(name, ";")) Then Result = False

    If (InStr(name, "*")) Then Result = False

    If (InStr(name, """")) Then Result = False

    If (InStr(name, "?")) Then Result = False

    If (InStr(name, ">")) Then Result = False

    If (InStr(name, "<")) Then Result = False

    If (InStr(name, "|")) Then Result = False

        

    CheckNames2 = Result

bcoutQ6:

Exit Function

Qat6:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo bcoutQ6

End Function

Private Sub Form_Load ( )

   Dim promw1 As Single

   Dim promw2 As Single

   Dim spwx As Single

   Dim spwy As Single

On Error GoTo Qat1

  OptWW1(0).Value = True

promw1 = FrmSSN.webchS(1)

promw2 = FrmSSN.webchS(2)

    If promw1 = promw2 And promw1 > 201 Then

TxtXYwB(0).Text = (2.54 * promw1) / 1080

spwx = (2.54 * promw1) / 1080

       If spwx > 0.5 Then

spwx = (spwx - 0.5) * 10

       Else

spwx = (0.5 - spwx) * 10

       End If

UpDnXY(0).Value = spwx

TxtXYwB(1).Text = (2.54 * promw2) / 1080

spwy = (2.54 * promw2) / 1080

       If spwy > 0.5 Then

spwy = (spwy - 0.5) * 10

       Else

spwy = (0.5 - spwy) * 10

       End If

UpDnXY(1).Value = spwy

    End If

bcoutQ1:

Exit Sub

Qat1:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo bcoutQ1

End Sub

Private Sub OptWW1_Click (Index As Integer)

On Error GoTo Qat2

CmdWup.Enabled = True

    If Index = 0 Then

FramWMb.Enabled = True

OptWW1(0).Value = True

TxtXYwB(1).Enabled = False

UpDnXY(1).Enabled = False

FrmSSN.LblMB2.Enabled = True

    ElseIf Index = 1 Then

 FramWMb.Enabled = False

OptWW1(1).Value = True

TxtXYwB(1).Enabled = True

UpDnXY(1).Enabled = True

 FrmSSN.LblMB2.Enabled = False

    End If

bcoutQ2:

Exit Sub

Qat2:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo bcoutQ2

End Sub

Private Sub TxtWbMm_Change ( )

   Dim mgW As Integer

On Error GoTo Qat3

    If Len(TxtWbMm.Text) > 0 Then

    If Asc(TxtWbMm.Text) = 48 Then Exit Sub

    If Asc(Mid(TxtWbMm.Text, 1, 1)) = 32 Then

12:     mgW = MsgBox("Данный параметр НЕ может содержать пробелов ! ", _

vbCritical + vbOKOnly, " Ошибка пользовательского ввода !!! ")

Exit Sub

    ElseIf InStr(1, TxtWbMm.Text, " ") > 0 Then

       If Asc(Mid(TxtWbMm.Text, InStr(1, TxtWbMm.Text, " "), 1)) = 32 Then GoTo 12

    End If

    End If

    If Len(TxtWbMm.Text) = 5 And Val(TxtWbMm.Text) = 0 Or _

Val(Mid(TxtWbMm.Text, 1, 1)) = 0 Or Not IsNumeric(TxtWbMm) Then

mgW = MsgBox("Данный параметр может содержать только числа больше нуля!"_

& vbCrLf & "Дробную часть числа отделять ЗАПЯТОЙ ! ", _

vbCritical + vbOKOnly, " Ошибка пользовательского ввода !!! ")

Exit Sub

    End If

bcoutQ3:

Exit Sub

Qat3:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo bcoutQ3

End Sub

Private Sub TxtWbMm_GotFocus ( )

TxtWbMm.SelStart = 0

TxtWbMm.SelLength = 5

End Sub

Private Sub UpDnXY_MouseDown (Index As Integer, Button As Integer, _

Shift As Integer, x As Single, Y As Single)

On Error GoTo Qat4

CmdWup.Enabled = True

    If OptWW1(1).Value = False Then FramWMb.Enabled = True

     If UpDnXY(Index).Value > 0 And UpDnXY(Index).Enabled = True Then

TxtXYwB(Index).Text = 0.5 + (UpDnXY(Index).Value / 10)

    ElseIf UpDnXY(Index).Value = 0 And TxtXYwB(Index).Text = 0.6 Then

TxtXYwB(Index).Text = TxtXYwB(Index).Text - 0.1

    End If

bcoutQ4:

Exit Sub

Qat4:

    MsgBox "Error № " & Err.Number & " " & " (" & Err.Description & ") occured.", vbCritical, "Error"

    GoTo bcoutQ4

End Sub

Четвертая часть

Private Sub CmdZNC_Click (Index As Integer)

TxtOzN(1).Text = " "

Unload FrmNwORsZ

End Sub

Private Sub CmdZYL_Click (Index As Integer)

   Dim prob As String, nbs As Integer

   Dim nokorrZ As Integer

    If Len(TxtOzN(1).Text) > 0 And Len(TxtOzN(1).Text) <> 1 Then

prob = TxtOzN(1).Text

        For nbs = 1 To Len(TxtOzN(1).Text)

If Asc(Mid(prob, nbs, 1)) = 32 Then GoTo 11

If nbs = 2 And 46 = Asc(Mid(prob, nbs, 1)) Then

GoTo 12

ElseIf nbs = 2 And 46 <> Asc(Mid(prob, nbs, 1)) Then

GoTo 11

ElseIf nbs = 1 And 48 <> Asc(Mid(prob, nbs, 1)) Then

GoTo 11

End If

            If 48 > Asc(Mid(prob, nbs, 1)) Or 57 < Asc(Mid(prob, nbs, 1)) Then

11:

nokorrZ = MsgBox(" Значение выбранной линии НЕ может быть целым числом!" _

   & vbCrLf & " НЕ может быть больше единицы !" & vbCrLf & _

                   " НЕ может содержать пробелов или букв !!!", vbCritical + vbOKOnly, _

" Ошибка пользовательского ввода ")

TxtOzN(1).Text = "00000"

prob = TxtOzN(1).Text

Exit Sub

12:      End If

     Next nbs

TxtOzN(1).Text = prob

TxtOzN(1).BackColor = RGB(0, 250, 243)

TxtOzN(1).Locked = True

  FrmNwORsZ.Hide

    Else

        nokorrZ = MsgBox(" Вы ввели пустую строку или целое число !!! ", _

vbCritical + vbOKOnly, " Ошибка пользовательского ввода ")

    End If

End Sub

Private Sub TxtOzN_GotFocus (Index As Integer)

TxtOzN(1).SelStart = 0

TxtOzN(1).SelLength = Len(TxtOzN(1).Text)

End Sub


3 БЕЗОПАСНОСТЬ ЖИЗНЕДЕЯТЕЛЬНОСТИ



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

Психофизиологические требования к дисплею

Под дисплейным устройством понимается устройство ввода-вывода данных для отображения на экране в форме, удобной пользователю, и для ее редактирования в интерактивном режиме. Дисплеи совместно с другими устройствами ввода-вывода являются своеобразным “окном” в ЭВМ, обеспечивая не просто отображение результатов обработки, но и диалог с человеком. Визуализация вопросов и ответов, отображение текстов, рисунков, графиков, аналогичные изображениям в печатных и рукописных материалах, возможность вносить изменения и дополнения в обозримые человеком фрагменты, хранение и повторение материала, перевод его на другие носители и ряд прочих функциональных возможностей делают дисплеи универсальным средством, как отображения, так и управления информацией.

При работе с дисплеем наибольшее количество информации человеку поступает посредством зрительного анализатора, раздражителем которого является свет, а рецептором – глаз. Перегрузка зрительного анализатора приводит к его быстрому утомлению, а иногда и расстройству функций. Поэтому проектирование дисплея осуществляют с учетом психофизиологических требований, вытекающих из особенностей и характеристик зрительного восприятия. На основании психофизиологических требований определяются светотехнические параметры дисплея, размеры экрана и символов, цветовые параметры, скорость смены информации. Предлагаемый набор параметров, прежде всего, применим для дисплеев на базе ЭЛТ, как получивших наиболее широкое распространение и как наиболее полно исследованных.

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

Комфортной нижней границей уровня яркости светящихся сигналов можно считать 30 [кд / м], а верхняя граница определяется значением слепящей яркости. Яркость символов на экране обязательно согласуют с яркостью фона и окружающим освещением. При обратном контрасте яркостный контраст рекомендуется выбирать в пределах 85-90 [%] с возможностью регулировки яркости знака, а при прямом контрасте - 75-80 [%] с возможностью регулировки яркости фона экрана. Прямой контраст предпочтительнее обратного.

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

Выбор размера экрана и символов осуществляют с учетом требуемого объема предъявляемой информации, легкости ее считывания и длительности работы с экраном. Основные ограничения на размеры связаны со стремлением обеспечить оптимальные углы обзора и оптимальную остроту зрения.

Размер полезной площади экрана выбирают в пределах 30, чтобы не превышать оптимального угла зрения 15градусов по вертикали и горизонтали от нормальной линии взора, когда знаки опознаются без поворота головы, а мышцы глаз, шеи и плеч не напряжены. Плоскость экрана располагают перпендикулярно к нормальной линии взора.

Рабочее место

Рабочее место – это оснащенное техническими средствами пространство, где осуществляется деятельность исполнителя. Организацией рабочего места называется система мероприятий по оснащению рабочего места средствами и предметами труда и размещение их в определенном порядке. Совершенствование организации рабочего места является одним из условий, способствующих повышению производительности труда. Организация рабочего места включает антропометрические и биологические характеристики человека, выбор физиологически правильного рабочего положения и рабочих зон, рациональную компоновку рабочего места, учет факторов внешней среды.

Антропометрические характеристики человека определяют габаритные и компоновочные параметры рабочего места и свободные параметры отдельных его элементов.

Положение тела и наиболее частые позы, которые принимает или вынужден принимать человек при выполнении работы, являются одним из основных факторов, определяющих производительность труда. Работу оператора организуют в положении сидя. При этом основная нагрузка падает на мышцы, поддерживающие позвоночный столб и голову, а подавляющая часть массы тела передается на бедра, препятствуя проникновению крови в нижнюю часть тела. Поэтому при длительном сидении время от времени необходимо смещать массу тела и сменять фиксированные рабочие позы. К тому же при работе сидя обычно естественный спинно-поясничный прогиб вперед изменяется на изгиб назад, что зачастую является причиной болей в пояснице. Для физиологически правильно обоснованного рабочего положения сидя рекомендуется обеспечить следующие оптимальные положения частей тела: корпус выпрямлен, сохранены естественные изгибы позвоночного столба и угол наклона таза, нет необходимости в сильных наклонах туловища, поворотах головы и крайних положениях суставов конечностей.

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

Рабочее кресло обеспечивает поддержание рабочей позы, в положении сидя, и чем дольше это положение в течение рабочего дня, тем настоятельнее требования к созданию удобных и правильных рабочих сидений. Можно дать следующие рекомендации по конструированию рабочего кресла: необходимость регулировки наиболее важных его элементов - высоты сиденья, высоты спинки сиденья и угла наклона спинки; причем процесс регулировки не должен быть сложным. Установка правильной высоты сиденья является первоочередной задачей при организации рабочего места, так как этот параметр определяет прочие пространственные параметры - высоту положения экрана, клавиатуры, поверхности для записей, и др. Диапазон регулировки высоты сиденья находится в пределах 380-500 [мм]. Регулируемая высота рабочей поверхности оптимальна в пределах 670-800 [мм], при отсутствии регулировки - 725 [мм]. Высота нижнего ряда клавиатуры от плоскости пола может быть 620-700 [мм], обычно рекомендуют 650 [мм]. Если использован стол стандартной высоты, то для удобства работы клавиатуру можно разместить в углублении стола или на отдельной плоскости. Передний ряд клавиш располагают таким образом, чтобы клавиатуру можно было без труда, обслуживать, слегка, согнутыми, пальцами, при, свободно опущенных плечах, и горизонтальном, положении рук; плечо и предплечье при этом образуют угол в 90 градусов. Высота экрана определяется высотой уровня глаз наблюдателя и требованием перпендикулярности плоскости экрана к нормальной линии взора. Если позволяют размеры и масса, то рекомендуется снабжать экраны основанием с поворотным кронштейном, допускающим регулировку экрана по высоте, по наклону вперед-назад и при горизонтальном вращении вокруг вертикальной оси.

Компоновка рабочего места, оснащенного дисплеем. Широко варьируется в зависимости от вида выполняемой работы, комплектности технических средств и носит нестандартный характер. При компоновке рабочего места, оборудованного дисплеем, в первую очередь исходят из типа выполняемых задач и длительности работы. Нельзя создать фиксированную и при этом оптимальную компоновку, которая была бы удобной для всех пользователей. Если производится работа только по вводу данных, то экран и клавиатуру удобно располагать на одной линии, а документ - слева от клавиатуры. Для задач, требующих длительных записей, внесения поправок в документ, документ и экран могут размещаться на одной линии, а клавиатура смещается вправо или экран и клавиатура остаются на одной линии, а документ переносится вправо от клавиатуры. Наиболее правильный путь - это компоновка основных элементов рабочего места по желанию пользователя.

Рабочая среда

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

Освещение рабочего места. В наибольшей степени отрицательное физиологическое воздействие на операторов дисплеев связано с дискомфортными зрительными условиями из-за неправильно спроектированного освещения: прямые и отраженные от экрана блики, вуалирующие отражения, неблагоприятное распределение яркости в поле зрения, неверная ориентация рабочего места относительно светопроемов. Оптимальной считается освещенность рабочих помещений для работы с видеотерминалами 300-500 [лк]. Рекомендуется, чтобы соотношение яркости экрана и непосредственного ближайшего окружения не превышало 3:1.

Рабочее место, оборудованное дисплеем, располагают таким образом, чтобы в поле зрения оператора не попадали окна или осветительные приборы; они не должны находиться и непосредственно за спиной оператора. Добиваются уменьшения отражений на экране от различных источников искусственного и дневного света. Когда искусственный свет смешивается с естественным, рекомендуется использовать лампы, по спектральному составу наиболее близкие к солнечному свету. Желательно выбирать светильники с рассеивателями, а все блестящие детали осветительного оборудования, которые могут попасть в поле зрения, заменять на матовые.

На функциональную деятельность человека, его самочувствие и здоровье огромное влияние оказывают метеорологические условия рабочей среды. Плохие метеоусловия нарушают терморегуляцию и тепловой баланс организма и вызывают простудные вирусные заболевания. В машинном зале температура воздуха должна быть 19-23 [С], относительная влажность воздуха 55 [%], скорость движения воздуха на уровне лица не выше 0,1 [м/с], атмосферное давление 1012,25 [кПа]. Нормальные метеоусловия обеспечиваются системами водяного отопления, вентиляции, кондиционирования воздуха и герметизацией помещения.

По мнению специалистов, работа у дисплея не связана с вредным радиобиологическим воздействием. Допустимая мощность дозы радиобиологического излучения перед экраном на расстоянии 5 [см] от его поверхности равна 0,5 [мР/ч]. Рентгеновское излучение уменьшается пропорционально квадрату расстояния до экрана. Так, на расстоянии от экрана 50 [см] оно составляет 0,005 [мР/ч].

Исследования характера и интенсивности излучений дисплея, с целью определения воздействия электромагнитных излучений на оператора при длительной работе, показали, что уровни облучения в ультрафиолетовой, инфракрасной и видимой областях спектра оказались ниже допустимых значений. Аналогичный вывод, был сделан и в отношении рентгеновского излучения. Таким образом, считается, что интенсивность излучения экрана дисплея не достигает предельно допустимой дозы радиации и, следовательно, условия труда можно отнести к безопасным. Но до тех пор, пока не будут проведены тщательные исследования по комплексному изучению воздействия излучений на организм человека, рекомендуется принимать следующие меры предосторожности:

	ограничить дневную продолжительность рабочей деятельности перед дисплеем;

	использовать отражающие и поглощающие экраны;

	не размещать дисплеи концентрированно в рабочей зоне;

	выключать дисплей, если ЭВМ не используется.

Воздействие шума. Установлено, что шум неблагоприятен для человека, особенно при длительном воздействии. У оператора это выражается в снижении работоспособности, в ускорении развития зрительного утомления, изменении цветоощущения, повышении расхода энергии и т.д. Рекомендуется, чтобы шум в помещении, где выполняют работу, требующую концентрации внимания, не превышал 55 [дБ], а при однообразной работе - 65 [дБ]. Шум от отдельных приборов не должен более чем на 5 [дБ] превышать фоновый шум. Основными мерами борьбы с шумом являются устранение или ослабление причин шума в самом его источнике в процессе проектирования, использование средств звукопоглощения, рациональная планировка производственных помещений.

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




ЗАКЛЮЧЕНИЕ



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

Программа имеет следующие достоинства:

	имеет простой и легкодоступный интерфейс;

дает наглядное, а не цифровое представление сети;

облегчает задачу расчета структурной надежности сети связи;

Использование данной программы в учебном процессе поможет студентам лучше закрепить теоретические знания в области оценки структурной надежности сетей связи. Освободит их от необходимости проведения трудоемких и объемных расчетов, что в конечном счете уменьшит затраты учебного времени необходимого для приобретения новых знаний и практических навыков.




Приложение А

(справочное)



Методические указания по работе с программой 



Для того чтобы работать с программой по расчету структурной надежности сети “ SafeNet1 ” необходимы следующие аппаратные и программные средства:

	процессор Intel Pentium 166 MHz и выше;

	операционная система Windows 95 (98, NT);

	оперативная память 32 Mb (рекомендуется);

	рабочее разрешение дисплея 800 x 600, размер шрифта 96dpi.



Основные этапы работы с программой SafeNet1



	Загрузка программы в память;

	Разработка проекта 

	 разработка нового проекта или загрузка файла проекта: 

	 формирование плана сети,

	 ввод числовых характеристик сети,

	 расчет структурной надежности сети,

	 сохранение и закрытие проекта;

	Выход из программы.

Опишем более подробно суть каждого из выше перечисленных этапов.



Загрузка программы в память



Загрузка программы SafeNet1 в память компьютера пользователя происходит после того как пользователь запустит на выполнение файл SafeNet1.exe. Для этого он должен выбрать данный файл и нажать клавишу “ Enter ”, либо дважды щелкнуть на нем или его ярлыке. 



Разработка проекта



Данный этап начинается с того, что пользователь решает, будет ли он создавать новый проект или же он загрузит файл проекта, если таковой имеется, путем выбора соответствующего подменю в меню “ Файл ”. Активизация как самого меню “ Файл ” так и подменю “ Новый ” и подменю “ Открыть ” может быть осуществлена либо щелчком мыши, либо путем нажатия соответствующих комбинаций клавиш:

		 меню “ Файл ” – “ Alt + Ф ”,

		 подменю “ Новый ” – “ Ctrl + N ”,

		 подменю “ Открыть ” – “ Ctrl + O ”.

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

Как при формировании плана сети так и при вводе числовых характеристик выбор объекта (линия – линия связи, узел – узел коммутации), с которым пользователь в данный момент будет работать, осуществляется щелчком мыши на соответствующих кнопках “ линия связи ” или “ узел связи ”. 



Формирование плана сети



При создании нового проекта на дисплее отображается рабочее окно и пользователь может сразу же приступать к формированию плана сети. Формирование плана начинается с размещения на рабочем поле узлов коммутации. Для более удобного их размещения пользователь может использовать координатную сетку, которая должна быть с начала активизирована, то есть необходимо поставить флажок в меню ” Сетка \ Активна ”. 

Для размещения узлов необходимо нажать кнопку “ узел связи ”, выбрать место на рабочем поле, поместив над ним курсор, и нажать левую кнопку мыши. 

Для удаления узла необходимо при нажатой кнопке “ узел связи ” поставить курсор над ним и нажать правую кнопку мыши.

Для соединения узлов необходимо нажать кнопку “ линия связи ”, поместить курсор сначала над одним из соединяемых узлов и нажать правую кнопку мыши (выбранный узел будет окрашен в черный цвет), а затем над другим. 

Для удаления линии связи необходимо при нажатой кнопке “ линия связи ” поставить курсор над ней и нажать правую кнопку мыши, выбранная линия будет окрашена в красный цвет.



Ввод числовых характеристик сети



Для перехода к вводу числовых характеристик сети нужно сначала нажать кнопку с изображением песочных часов так чтобы на кнопке изображение изменилось на курсорную стрелку и нажать кнопку “ вперед ”. 

Для ввода номера узла необходимо нажать кнопку “ узел связи ”, выбрать узел, нажимая “ Tab ”, и в его поле ввода (находится внутри узла) ввести его номер, затем необходимо нажать “ Enter ”. 

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

Для того чтобы ввести характеристику линии необходимо нажать кнопку “ линия связи ”, поставить курсор над линией и нажать правую кнопку мыши, выбранная линия будет окрашена в красный цвет. Внимание, перед вводом числового значения убедитесь, что выбрана нужная линия! После ввода числового значения линия будет окрашена в малиновый цвет. 



Расчет структурной надежности сети



После нажатия кнопки “ перейти к расчету ” если все узлы пронумерованы, то есть поле ввода у узлов – голубое, и все линии малинового цвета, то появится окно “ Расчет структурной надежности ”. Во вкладке “ Испытания ” необходимо ввести число испытаний и нажать кнопку “ ОК ”, после чего во вкладке “ Расчет ” можно будет нажать кнопку “ начать”. Нажатие кнопки “ ОТМЕНА ” приведет к закрытию окна. Процесс расчета будет отображаться в поле “ Выполнено ”. Нажатие кнопки “ стоп ” приведет к сбросу расчета.

После завершения расчета появится окно сообщения с результатами расчета структурной надежности сети методом статистического моделирования, его закрытие закроет и окно “ Расчет структурной надежности ”.



Сохранение и закрытие проекта



Для того чтобы сохранить проект нужно выбрать подменю ” Сохранить ” или подменю “ Сохранить как…” в меню “ Файл ”. Для активизации меню любого уровня можно нажать следующую комбинацию клавиш “Alt + подчеркнутая буква ” или же (только для подменю) комбинацию, которая располагается с правой стороны от названия подменю. 

При сохранении проекта с помощью подменю “ Сохранить как…” всегда будет появляться окно “ Сохранение ” и пользователь может назначить новый или уже существующий файл для сохранения проекта. Если же пользователь выберет подменю ” Сохранить ”, то только при первом сохранении нового проекта появится окно “ Сохранение ”.

Закрыть проект, так же как и сохранить, пользователь может в любое время, при этом если были внесены какие либо изменения, то появится окно запроса сохранения этих изменений. При положительном ответе если пользователь создавал новый проект и еще ни разу не сохранял его, то появится окно “ Сохранение ”. В этом окне пользователь может ввести имя файла или выбрать уже существующий. Если же проект уже был сохранен, то изменения будут сохранены в том же файле.



Выход из программы



Завершить работу с программой SafeNet1 можно либо выбрав соответствующее подменю “ Выход ” в меню “ Файл ”, либо нажать находящуюся в верхнем правом углу кнопку “ Закрыть ” причем, если имеются не сохраненные изменения, то пользователю нужно будет выполнить те же действия что и при закрытии проекта. После этого программа выгрузится из операционной памяти и освободит все системные ресурсы, которые она затребовала у операционной системы при своей загрузке.




БИБЛИОГРАФИЯ



		Гладкий В.С. Вероятностные вычислительные модели.– M.: Наука, 1873. – 300с.

		Мизин И.А., Богатырев В.А., Кулешов А.П. Сети коммутации пакетов / Под ред. В.С. Семенихина.– М.: Радио и связь, 1986. – 408 с., ил.

		Теория сетей связи.– М.: Радио и связь, 1981.– 192 с., ил. 

		Гладкий В.С., Малиновский С.Т., Новиков С.Н. Оценка структурной надежности методом статистического моделирования. Методические указания.– М.: 1987. – 46 с., ил.

		 Бойченко В.М., Гладкий В.С., Черный Е.И. Аналого-вероятностное моделирование систем из ненадежных элементов.– Изв. АН СССР, Техническая кибернетика, 1967, № 1.

	Толчан А.Я. О связности сети. Принципы построения сетей и систем управления. –М.: Наука, 1964.

	Бесслер Р., Дойч. Проектирование сетей связи.– М.: Радио и связь, 1988.