Автоматизированное рабочее место регистрации и документирования комплекса средств автоматизации

Содержание

 TOC \o "1-5" Реферат..................................................................................................................................... \h 4

Основная часть.................................................................................................................. \h 5

Введение.................................................................................................................................. \h 5

1. Анализ концепции построения комплекса средств автоматизации...................... \h 8

1.1. Общая характеристика систем управления................................................................ \h 8

1.2. Структурная схема комплекса средств автоматизации........................................ \h 11

1.3. Описание функционирования АСУ комплекса средств автоматизации................ \h 13

1.4. Функциональное назначение АРМ РД.......................................................................... \h 14

1.5. Требования, предъявляемые к АРМ РД........................................................................ \h 15

2. Обоснование выбора технических средств АРМ РД................................................. \h 17

2.1. Возможность функционировать в рамках автоматизированной системы......... \h 17

2.2. Требования по обеспечению надежности................................................................... \h 17

2.3. Требование круглосуточной работы.......................................................................... \h 17

2.4. Работа в реальном масштабе времени...................................................................... \h 18

2.5. Обеспечение требований ко времени реакции системы........................................... \h 18

2.6. Хранение и обработка данных..................................................................................... \h 18

2.7. Возможность выдачи информации на принтер и экран монитора АРМ РД........ \h 19

3. Структура базы данных.................................................................................................... \h 20

3.1. Алгоритм обработки информации.............................................................................. \h 20

3.2. Обоснование необходимости организации базы данных.......................................... \h 34

3.2.1. Понятие базы данных............................................................................................. \h 34

3.2.2. Достоинства интеграции данных.......................................................................... \h 35

3.2.3. Проблемы интеграции данных.............................................................................. \h 37

3.2.4. Необходимость организации БД на АРМ РД...................................................... \h 38

3.3. Логическая организация базы данных......................................................................... \h 39

3.4. Выбор СУБД................................................................................................................... \h 45

4. Структура комплекса программ АРМ РД..................................................................... \h 51

4.1. Обоснование структуры комплекса программ.......................................................... \h 51

4.1.1. ПО общесистемного назначения........................................................................... \h 51

4.1.2. ПО специального назначения................................................................................ \h 53

4.1.3. Требования, предъявляемые к специальному ПО АРМ РД............................... \h 53

4.2. Программная реализация.............................................................................................. \h 54

4.3. Состав программ.......................................................................................................... \h 59

4.4. Описание программ....................................................................................................... \h 61

4.5. Оценка результатов работы программ..................................................................... \h 63

Организационно-экономическая часть....................................................... \h 66

Введение................................................................................................................................ \h 66

1. Планирование разработки с использованием сетевого графика.......................... \h 67

2. Расчет стоимости разработки......................................................................................... \h 79

2.1. Расчёт статьи “материалы, покупные изделия, полуфабрикаты”...................... \h 79

2.2. Расчёт основной заработной платы по теме........................................................... \h 80

2.3. Расчет дополнительной заработной платы............................................................. \h 81

2.4. Расчёт отчислений на социальные нужды................................................................ \h 82

2.5. Расчёт накладных расходов......................................................................................... \h 82

2.6. Расчёт договорной цены.............................................................................................. \h 83

3. Экономическая эффективность разработки............................................................... \h 84

4. Основные разделы хозяйственного договора........................................................... \h 84

Заключение......................................................................................................................... \h 86

Охрана труда и техника безопасности.......................................................... \h 87

Введение................................................................................................................................ \h 87

1. Характеристика помещения и факторы, действующие на оператора в процессе его труда         \h 88

2. Расчёт освещения рабочего места оператора............................................................ \h 89

3. Расчёт информационной нагрузки................................................................................ \h 94

Выводы.................................................................................................................................... \h 95

Гражданская оборона................................................................................................. \h 97

Введение................................................................................................................................ \h 97

1. Теоретическая часть......................................................................................................... \h 98

1.1. Оценка воздействия ударной волны на объект......................................................... \h 98

1.1.1. Характеристики ударной волны........................................................................... \h 98

1.1.2. Поражающие факторы ударной волны................................................................. \h 99

1.2. Оценка пожарной обстановки.................................................................................. \h 101

1.2.1. Влияние степени огнестойкости зданий и сооружений на развитие пожарной обстановки      \h 102

1.2.2. Влияние категорий пожароопасности производства на развитие пожарной обстановки           \h 102

1.2.3. Влияние расстояний между зданиями на распространение пожаров............. \h 103

1.2.4. Влияние погодных условий на распространение пожаров.............................. \h 103

1.2.5. Оценка воздействия теплового импульса огненного шара на пожарную обстановку    \h 103

1.2.6. Оценка воздействия вторичных поражающих факторов на пожарную обстановку        \h 105

1.2.7. Воздействие пожара на людей и элементы объекта.......................................... \h 105

1.3. Оценка устойчивости элементов объекта............................................................. \h 105

2. Расчетная часть............................................................................................................... \h 106

2.1. Исходные данные......................................................................................................... \h 106

2.2. Расчет.......................................................................................................................... \h 106

2.2.1. Оценка воздействия воздушной ударной волны на элементы объекта.......... \h 106

2.2.2. Оценка пожарной обстановки............................................................................. \h 107

3. Предложения по защите................................................................................................. \h 109

3.1. Отнесение хранилища на безопасное расстояние от здания................................. \h 109

3.2. Уменьшение массы хранимого пропана.................................................................... \h 110

3.3. Меры по предупреждению аварийной ситуации на хранилище пропана.............. \h 111

3.4. Меры по защите административного здания......................................................... \h 112

3.5. Меры по индивидуальной защите оператора.......................................................... \h 112

Эргономика....................................................................................................................... \h 113

1. Теоретическая часть....................................................................................................... \h 114

1.1. Базовый подход к конструированию рабочего места оператора......................... \h 114

1.2. Понятие рабочего места и рабочей зоны оператора............................................. \h 115

1.3. Формирование типового состава рабочей зоны..................................................... \h 115

1.3.1. Организация пространства рабочего места оператора..................................... \h 116

1.3.2. Условия, которым должна удовлетворять рабочая зона................................... \h 116

2. Реализация эргономической оценки рабочего места оператора......................... \h 117

2.1. Основные эргономические требования, предъявляемые к дисплею....................... \h 118

2.2. Основные эргономические требования, предъявляемые к клавиатуре................. \h 120

2.3. Размещение кресла оператора в рабочей зоне......................................................... \h 121

2.4. Размещение устройств документирования............................................................. \h 121

2.5. Расположение рабочего места оператора в помещении....................................... \h 122

Заключение....................................................................................................................... \h 124

Заключение....................................................................................................................... \h 127

Приложение 1.................................................................................................................... \h 128

Приложение 2.................................................................................................................... \h 131

Список литературы..................................................................................................... \h 163

Реферат

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

Текст расчетно-пояснительной записки сопровождается рисунками и таблицами. Расчетно-пояснительная записка содержит 30 рисунков, из них 7 рисунков формата А1 и 8 таблиц.

В дипломном проекте на тему: “Автоматизированное рабочее место регистрации и документирования комплекса средств автоматизации” разработаны программы обработки запросов для 3-х форм представления байтов состояния устройств, входящих в комплекс средств автоматизации.

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

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

Основная часть

Введение

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

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

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

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

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

По мере своего дальнейшего развития административные системы обработки данных перерастают в автоматизированные системы управления (АСУ) соответствующими объектами, в которых, как правило, не ограничиваются одной ЭВМ, а в составе двух и более ЭВМ объединяют в вычислительный комплекс (ВК).

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

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

·        возможность ввода информации в ЭВМ;

·        возможность вывода информации из ЭВМ на экран монитора, принтер или другие устройства вывода (в настоящее время этот перечень достаточно широк – графопостроители, и т.п.).

Так называемые интеллектуальные АРМ в свою очередь также содержат в своем составе ЭВМ, тем или иным способом подсоединенную к центральной ЭВМ (ВК) АСУ. Устройства ввода также должны обеспечивать широкий спектр вводимой информации: текстовой, координатной, факсимильной и т.д. Поэтому АРМ оснащаются при необходимости универсальной или специальной клавиатурой, устройствами ввода координатной информации (типа мыши), различного рода сканерами и т.д.

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

1. Анализ концепции построения комплекса средств автоматизации

1.1.         Общая характеристика систем управления

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

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

1)                            Сбор информации об управляемом объекте;

2)                            Обработка информации;

3)                            Выдача управляющих воздействий в той или иной форме.

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

Различают два основных типа систем управления:

1)                            Системы управления технологическими процессами в широком смысле этого слова, предназначенные для непосредственного управления производственными процессами на физическом уровне процесса;

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

Главное отличие между ними заключается в характере объекта управления. В первом случае это всевозможные установки, приборы, станки и прочее, во втором – прежде всего люди.

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

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

1)                            Автоматические;

2)                            Полуавтоматические;

3)                            Автоматизированные.

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

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

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

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

1)                            Переработанной, упорядоченной совокупности сведений об управляемом объекте. На основании их человек (или группа людей) принимает решение о характере воздействия на объект. Это свойственно системе обработки данных, но не собственно автоматизированной системе.

2)                            Совокупности рекомендаций (вариантов решения) относительно характера воздействия на управляемый объект. Окончательное решение  в данном случае принимает человек. Такая реализация наиболее типична для автоматизированных систем управления.

1.2.         Структурная схема комплекса средств автоматизации.

АСУ представляет собой комплекс средств автоматизации (КСА), выполняющий ряд функций по обработке информации.

Структурная схема КСА представлена на рис.1.

На структурной схеме обозначены следующие устройства (компоненты КСА):

·        ВК – вычислительный комплекс;

·        каналы связи, по которым поступает информация от внешних источников (в дальнейшем обозначаются – КС1, КС2, КС3);

·        АРМ1,…,АРМ6 – специализированные автоматизированные рабочие места с функциями, характерными для каждого из них, подсоединены к ВК по стыку С1;

·        Ш1,…,Ш3 – специальные устройства;

·        ПУ-1,…,ПУ-3 – пульты управления;

·        И-ПП, И-ВП – шкафы первичного и вторичного электропитания.

Автоматизированное рабочее место регистрации и документирования (АРМ РД) реализовано на базе двух персональных компьютеров (ПК1, ПК2) и подключены к ВК по стыку С2.

1.3.         Описание функционирования АСУ комплекса средств автоматизации

Представленный в дипломном проекте КСА представляет собой автоматизированную систему управления информационными процессами, предназначенную  реализовать следующие функции:

·     прием и обработку информации, круглосуточно поступающей по КС в КСА от внешних источников;

·     формирование и передачу необходимой информации для выдачи по КС на внешние устройства;

·     обработку информации, круглосуточно поступающей от устройств системы, таких как АРМ1 … АРМ6, Ш1 ... Ш3, ПУ-1 … ПУ-3, И-ПП, И-ВП;

·     формирование и передачу необходимой информации устройствам системы.

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

Основной задачей автоматизированной системы является вовсе не уменьшение количества управленческого персонала (это задача вспомогательная и решается она не всегда). Основным достоинством подобной системы является то, что благодаря ей повышается качество функционирования управляемого объекта (примерно на 15-25%).

Независимо от вида информации, которая должна быть обработана, и типа оборудования, АСУ информационными процессами выполняет следующие основные операции:

1)                            прием исходной информации;

2)                            обработку информации;

3)                            получение и анализ результатов;

4)                            выдачу управляющих воздействий.

Сбор информации в АСУ производится автоматически - в ВК передается информация от устройств системы и информация от внешних источников, поступающая по каналам связи КС1, КС2, КС3. ВК также передает информацию, предназначенную для устройств системы и внешних источников.

Процесс обработки поступающей информации выполняется в ВК автоматически по заранее установленным, последовательно и логически разработанным алгоритмам. В ВК также поступает управляющая информация со специальных автоматизированных рабочих мест АРМ1…АРМ6. После обработки в ВК специальными алгоритмами, она выдается внешним устройствам, или устройствам КСА системы.

Так как АСУ информационными процессами – это человекомашинная система, то для организации взаимодействия человек – КСА необходимо обеспечить возможность общения человека с системой. Для этого в составе КСА предусмотрены автоматизированные рабочие места АРМ1-АРМ6, а также АРМ РД.

1.4.         Функциональное назначение АРМ РД

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

Вся информация, циркулирующая в системе, в процессе управления функционированием технических средств системы и получения результатов регистрации информации после обработки в ВК специально разработанными алгоритмами в формализованном виде поступает в АРМ РД. АРМ РД, в свою очередь, реализует следующие функции:

·        прием данных, круглосуточно поступающих от ВК;

·        выдачу информации в ВК;

·        регистрацию поступившей информации в памяти ЭВМ;

·        документирование данных, размещенных в информационных массивах.

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

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

Хранение информации в памяти ЭВМ в виде информационных массивов и возможность представления выборок из этих информационных массивов на экран монитора и принтер для обеспечения успешного взаимодействия человек–система – задачи регистрации и документирования информации, которые были поставлены перед создателями АРМ РД.

1.5.         Требования, предъявляемые к АРМ РД

При выборе технических средств для реализации АРМ РД и разработке ПО, необходимо учесть требования, предъявляемые к АРМ РД:

·        возможность функционировать в рамках автоматизированной системы;

·        круглосуточная работа;

·        работа в реальном масштабе времени;

·        обеспечение требований ко времени реакции системы;

·        регистрация всей информации, циркулирующей в системе;

·        хранение данных о состоянии устройств системы;

·        возможность выдачи информации на принтер и экран монитора АРМ РД в форме, обеспечивающей эффективную работу оператора АРМ РД;

·        обеспечение высокой надежности как технических средств, так и ПО АРМ РД;

·        обеспечение взаимодействия разрабатываемого ПО с компонентами автоматизированной системы.

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

Следовательно, для АСУ информационными процессами, с целью автоматизации сбора и обработки данных, необходимо спроектировать  программное обеспечение (ПО) АРМ РД, удовлетворяющее функциональному назначению АРМ РД и выбрать технические средства, удовлетворяющие функциональным требованиям АРМ РД.

2. Обоснование выбора технических средств АРМ РД

2.1.         Возможность функционировать в рамках автоматизированной системы

Для реализации АРМ РД выбрана персональная ЭВМ IBM PC / AT, оборудованная двумя последовательными портами RS 232 (стык С2). При реализации АРМ РД возможно было имеющимися у ПК средствами (два порта RS 232) подключиться по стыку С2 к специализированному ВК, без доработок ПК. Для подключения ВК был разработан специальный адаптер. (см. рис. 2).

Рис. 2 Схема связи АРМ РД с ВК

2.2.         Требования по обеспечению надежности

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

2.3.         Требование круглосуточной работы

Требование круглосуточной работы обеспечивается качеством выполнения аппаратуры, - ЭВМ IBM PC / AT  может круглосуточно работать с небольшими доработками конструктива. Прежде всего это касается соблюдения норм теплового режима работы. Также предусмотрен дополнительный источник электропитания, автоматически включающийся в случае выхода из строя основной системы питания.

2.4.         Работа в реальном масштабе времени

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

Работа в системе реального времени обеспечивается:

·        быстродействием ПК (выбран процессор Intel 80386 с необходимой тактовой частотой, равной 33 МГц),

·        пропускной способностью тракта передачи между ПК и ВК (скорость 1200 бод),

·        наличием буфера для сообщений на входе и выходе ПК,

·        выдачей документов на печать в “фоновом” режиме, не снижая возможностей по приему и обработке информации во избежание ее потери.

2.5.         Обеспечение требований ко времени реакции системы

Эту характеристику можно улучшить использованием контроллера дисковой подсиситемы IDE, установкой прграммного КЭШа, или использованием контроллера диска с аппаратным КЭШем объемом 1Мб и выше.

2.6.         Хранение и обработка данных

Для хранения данных, поступающих на АРМ РД, ПО общесистемного назначения и ПО специального назначения необходим минимальный размер дисковой памяти 80 МБ, а также съёмные магнитные носители информации (дискеты) для организации архива данных.

2.7.         Возможность выдачи информации на принтер и экран монитора АРМ РД

Для обеспечения возможности отображения информации оба ПК должны быть укомплектованы цветными мониторами VGA и принтерами EPSON LX-100.

3. Структура базы данных

3.1.         Алгоритм обработки информации

Организация информационного обмена в системе

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

В АРМ РД для обмена информацией с ВК используется  стандартный интерфейс RS232 (по стыку С2), согласно которому информация передается в виде сообщений переменной длины (слов). Сообщение состоит из 2-х частей - служебной и информационной. ПО АРМ РД использует только информационную часть, т.к. ВК адресует сообщения только для АРМ РД. В дальнейшем будет применяться и другое, принятое для этой системы название сообщения, - кодограмма обмена, или просто кодограмма.

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

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

Функциональный контроль (ФК) – это контроль работоспособности устройств системы и обнаружение неисправностей, возникающих в процессе работы. Можно сказать, что устройства, входящие в КСА, охвачены алгоритмом функционального контроля. Это означает, что в кодограммах обмена отдельные поля, биты или группы полей отражают текущее состояние устройства с различной степенью детализации. Кодограмма формируется и передается на АРМ РД при изменении состояния устройства в ту или иную сторону – было исправно, стало неисправно, было неисправно – стало исправно, т.е. при любом изменении статуса устройства. Это изменение обнаруживается встроенными в устройство программно-техническими средствами, которые и формируют кодограмму, поступающую от устройства.

Кодограммы обмена содержат в себе информацию о состоянии системы, например:

·        несанкционированный доступ (НСД) к устройствам системы;

·        несанкционированный доступ к оперативной памяти (НСД ОП);

·        навязывание ложной информации (НЛИ);

а также о состояниях технических устройств, таких как:

·        обмен информацией между устройствами системы;

·        сбой в работе устройств, КС, нарушение связи с устройством, и т.п.;

·        информации функционального контроля (ФК);

·        информации байтов состояния (БС) устройств.

По виду кодограммы обмена ПО АРМ РД определяет, откуда пришла кодограмма.

Вид кодограмм обмена между ВК и АРМ РД представлен ниже.

Кодограммы обмена между ВК и АРМ РД.

Общий вид кодограммы регистрации №1 представлен на рис.3. Кодограмма регистрации состоит из 6-ти слов, каждое слово имеет размер в два байта.

№ слова

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

0

слово

Счетчик сбоев

(двоичный код)

Признак

 Печати

Часы

(двоичный код)

1

слово

Минуты (двоичный код)

Секунды (двоичный код)

2

слово

0-й байт кодограммы

1-й байт кодограммы

3

слово

2-й байт кодограммы

3-й байт кодограммы

4

слово

4-й байт кодограммы

5-й байт кодограммы

5

слово

6-й байт кодограммы

7-й байт кодограммы

Рис.3. Кодограмма регистрации №1.

Значение поля “Счетчик сбоев” (11-15 разряды нулевого слова) содержит следующую информацию: от неисправного устройства поступают кодограммы в ВК по стыку С1. Пока устройство неисправно, кодограммы, содержащие одну и ту же информацию, будут поступать в ВК. Поскольку информация в кодограмме не изменялась, то программы обработки информации (каждая для своего устройства) обнаружив, что точно такая же кодограмма уже есть в очереди на обслуживание, делают всего навсего увеличение счетчика этих поступивших одинаковых кодограмм. Эти счетчики расположены в поле кодограммы с именем “счетчик сбоев”. Поэтому, когда кодограмма будет взята на обслуживание из входной очереди, она может содержать в себе значение “счетчика сбоев” отличное от 1. Значение этого счетчика, кроме того, дает возможность анализировать степень загрузки ВК и качество обслуживания в “пиковых” ситуациях, при максимальной загрузке ВК.

Со 2-го по 5-е слово кодограммы регистрации №1 располагается следующая информация:

·        информация обмена по КС1, КС2, КС3;

·        информация обмена между Ш1, Ш2, Ш3 и ВК;

·        сбойная информация обмена по КС1, КС2, КС3;

·        сбойная информация между Ш1, Ш2, Ш3 и ВК;

·        информация о НЛИ.

Поле “Признак печати” (5-9 разряды 1-го слова кодограммы регистрации №1) определяет, от какого устройства пришла информация.

№№ Разрядов

Значение поля “Признак печати”

9

8

7

6

5

0

0

0

0

0

Информация от КС1

0

0

0

0

1

Информация от КС2

0

0

0

1

0

Информация от КС3

0

0

0

1

1

Информация от Ш1

0

0

1

0

0

Информация от Ш2

0

0

1

0

1

Информация от Ш3

0

0

1

1

0

Сбой от КС1

0

0

1

1

1

Сбой от КС2

0

1

0

0

0

Сбой от КС3

0

1

0

0

1

Сбой от Ш1

0

1

0

1

0

Сбой от Ш2

0

1

0

1

1

Сбой от Ш3

0

1

1

0

0

Информация в КС1

0

1

1

0

1

Информация в КС2

0

1

1

1

0

Информация в КС3

0

1

1

1

1

Информация на Ш1

1

0

0

0

0

Информация на Ш2

1

0

0

0

1

Информация на Ш3

Рис.4. Значение поля “Признак печати”

1

0

0

1

0

Информация НЛИ

Общий вид кодограммы регистрации №2 представлен на рис.5.

№ слова

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

0

слово

0

Признак печати

Часы

(двоичный код)

1

слово

Минуты (двоичный код)

Секунды (двоичный код)

2

слово

Позиционный №  внешнего устройства

3

слово

0

Позицион. № внешнего устр-ва

4

слово

Код причины отсутствия связи по 3-му каналу

Код типа печати по НСД и ФК

5

слово

Код причины отсутствия связи по 2-му каналу

Код причины отсутствия связи по 1-му каналу

Рис.5. Кодограмма регистрации №2.

С помощью этой кодограммы осуществляется регистрация:

·        информации ФК (функционального контроля);

·        информации НСД;

·        информации НСД ОП;

·        информации БС (байтов состояния) устройств.

Значение поля “Признак печати” (5-9 разряды 1-го слова)

10011- регистрация НСД,                         10101- регистрация НСД ОП,

10100- регистрация ФК,                           10110- регистрация БС

Регистрация НСД (признак печати = 10011).

В младшем байте 4-го слова кодограммы при регистрации НСД записывается код типа печати, принимающий следующие значения (рис.6):

№№ Разрядов

Текст НСД

N\P

7

6

5

4

3

2

1

0

1

0

0

0

0

0

0

0

1

НСД

2

0

0

0

0

0

0

1

0

НСД снято

3

0

0

0

0

0

0

1

1

НСД разрешено

4

0

0

0

0

0

1

0

0

Разрешение НСД снято

5

0

0

0

0

0

1

0

1

Разрешенное НСД

6

0

0

0

0

0

1

1

0

Разрешенное НСД снято

Рис.6. Значение поля “Код типа печати по НСД”

Во 2-ом слове и [0-7] разрядах 3-го слова передается позиционный код устройств, по которым поступило сообщение указанное “Кодом типа печати”. Наличие “1” (“0”) в соответствующем разряде указывает, что по данному устройству поступило (не поступило) сообщение. Соответствие разрядов устройствам показано ниже  (рис.7, рис.8).

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

0        -Ш1                      5        -АРМ1                           10      -                  15-

1        -Ш2                      6        -                                     11      -

2        -                            7        -АРМ2                           12      -АРМ5

3        -                            8        -АРМ3                           13      -АРМ6

Рис.7. 2-е слово

4        -Ш3                      9        -АРМ4                           14      -

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

0        -АРМ РД 1                              2        -И-ПП

Рис.8. 3-е слово

1        -АРМ РД 2                              3        -И-ВП

Регистрация результатов ФК (признак печати = 10100).

В 4-ом слове кодограммы при регистрации ФК записывается код типа печати, принимающий следующие значения (рис.9).

№№ Разрядов

Текст ФК

N\P

7

6

5

4

3

2

1

0

**1

0

0

0

0

0

0

0

1

Устройство неисправно по ФК

**2

0

0

0

0

0

0

1

0

Неисправность по ФК снята

**3

0

0

0

0

0

0

1

1

Блокировка по ФК

**4

0

0

0

0

0

1

0

0

Блокировка по ФК снята

--5

0

0

0

0

0

1

0

1

ФК КСА, неисправны Ш1, Ш2, Ш3

--6

0

0

0

0

0

1

1

0

ФК КСА, неисправны АРМ1,…АРМ6

--7

0

0

0

0

0

1

1

1

ФК КСА, неисправны АРМ-РД1, АРМ-РД2

--8

0

0

0

0

1

0

0

0

ФК КСА, неисправны ИП-П, ИВ-П

--9

0

0

0

0

1

0

0

1

ФК КСА, неисправны ПУ1,…ПУ3

--10

№ АБН

0

1

0

1

0

ФК с АБ № х нет связи

--11

№ АБН

0

1

0

1

1

ФК с АБ № х связь восстановлена

--12

0

0

0

0

1

1

0

0

ФК, нет связи по КС1, КС2, КС3

--13

0

1

0

0

1

0

1

1

ФК, связь по КС1, КС2, КС3 восстан.

--14

0

1

0

0

1

1

0

0

ФК, с ПУ1 нет связи

--15

0

1

0

1

1

0

1

1

ФК, с ПУ1 связь восстановлена

--16

0

1

0

1

1

1

0

0

ФК, с ПУ2 нет связи

--17

0

1

0

1

1

1

0

1

ФК, с ПУ2 связь восстановлена

--18

0

1

0

1

1

1

1

0

ФК, с ПУ3 нет связи

Рис. 9. Значение поля “Код типа печати по ФК”

--19

0

1

1

0

0

0

0

0

ФК, с ПУ3 связь восстановлена

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

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

Устройства, по которым поступают перечисленные в коде типа печати сообщения, указываются “1” соответствующем разряде первого или второго слова. Соответствие разряда устройству показано ниже (рис.10, 11). Разряды 15-8 второго слова всегда содержат “0”. Единица в соответствующем разряде свидетельствует о наличии, а нуль – об отсутствии сообщений ФК по заданному устройству.

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

0        -Ш1                      5        -АРМ1                 10      -ПУ3           15-КС3

1        -Ш2                      6        -КС1                    11      -

2        -ПУ1                    7        -АРМ2                 12      -АРМ5

3        -ПУ2                    8        -АРМ3                 13      -АРМ6

Рис.10. 1-е слово

4        -Ш3                      9        -АРМ4                 14      -КС2

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

0        -АРМ-РД1                              2        -ИП-П

1        -АРМ-РД2                              3        -ИВ-П

Рис.11. 2-е слово

Значение поля “Код причины отсутствия связи”

№ Разрядов

Причина отсутствия

связи с абонентом

Обозна

чение

7

6

5

4

3

2

1

0

0

0

0

0

0

0

1

0

Прием от АБН 3-х кодограмм подряд с признаком контроля К2

К2

0

0

0

0

0

1

0

0

Отсутствие информации от источника на входе ПУ1…ПУ3 более 12 сек.

ВР

0

0

0

0

0

1

1

0

Прием от АБН 3-х кодограмм подряд с ВПС-1010 (не получен)

НП

0

0

0

0

1

0

1

0

Отсутствие связи в тракте ИСТ -> КС1,КС2,КС3

(где ИСТ- ПУ1…ПУ3,АБН)

ПД

0

0

0

0

1

1

1

0

Отсутствие связи в тракте КС1,КС2,КС3 -> ИСТ

(где ИСТ- ПУ1…ПУ3,АБН)

ПМ

Рис.12. Значение поля “Код причины отсутствия связи”

Где К2 - признак контроля, ВР – время ожидания, ПД – тракт передачи, ПМ – тракт приема, НП – не получено сообщение.

Информация НСД ОП (признак печати = 10101).

№ слова

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

0

слово

№ устройства

(в двоичном коде)

Признак

Печати

Часы

(двоичный код)

1

слово

Минуты (двоичный код)

Секунды (двоичный код)

2

слово

0

0

3

слово

0

0

4

слово

Адрес памяти

5

слово

Содержимое памяти

Поля кодограммы регистрации НСД ОП: Часы, Минуты, Секунды – время обращения к памяти, Адрес памяти – адрес слова ОЗУ. В слове 5 находится непосредственно содержимое памяти.

Регистрация БС устройств (признак печати = 10110).

БС передаются в последних 4-х словах кодограммы. Соответствующие устройства занимают под БС от 1-го до 4-х слов кодограммы. Общий вид кодограммы регистрации БС устройств представлен на рис.14.

№ слова

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

0

слово

№ устройства

(в двоичном коде)

Признак

печати

Часы

(двоичный код)

1

слово

Минуты (двоичный код)

Секунды (двоичный код)

2

слово

1-й байт БС

0-й байт БС

3

слово

3-й байт БС

2-й байт БС

4

слово

5-й байт БС

4-й байт БС

5

слово

7-й байт БС

6-й байт БС

Рис.14. Кодограмма  регистрации БС.

Номера устройств при передаче БС кодируются следующим образом (рис.15):

 

№№ Разрядов

Устройства

Количество слов

в кодограмме

15

14

13

12

11

10

 

0

0

0

0

0

0

Ш1

1

 

0

0

0

0

0

1

ПУ1

1

 

0

0

0

0

1

0

АРМ1

1

 

0

0

0

0

1

1

АРМ2

1

 

0

0

0

1

0

0

АРМ3

4

 

0

0

0

1

0

1

АРМ4

3

 

0

0

0

1

1

0

КС1

4

 

0

0

0

1

1

1

Ш2

1

 

0

0

1

0

0

0

ПУ2

1

 

0

0

1

0

0

1

АРМ5

1

 

0

0

1

0

1

0

АРМ6

1

 

0

0

1

0

1

1

Ш3

1

 

0

0

1

1

0

0

КС2

4

 

0

0

1

1

0

1

-

3

 

0

0

1

1

1

0

КС3

4

 

0

0

1

1

1

1

ПУ3

1

 

0

1

0

0

0

0

АРМ-РД1

2

 

0

1

0

0

0

1

АРМ-РД2

2

 

0

1

0

0

1

0

ИП-П

2

 

Рис.15.

0

1

0

0

1

1

ИВ-П

2

 

Количество слов, отведенное под БС, указано в 3-й колонке таблицы.

В зависимости от типа устройства, слова, занятые в кодограмме под БС, кодируются различным образом. В качестве примера рассмотрим кодограммы регистрации БС для устройств, охваченных ФК. Так, кодограммы регистрации БС для ПУ1, ПУ2 и ПУ3 выглядят следующим образом (рис. 16):

№ слова

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

 

0

слово

№ устройства

(в двоичном коде)

1

0

1

1

0

Часы

(двоичный код)

 

1

слово

Минуты (двоичный код)

Секунды (двоичный код)

 

2

слово

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

3

слово

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

4

слово

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Рис.16. Кодограмма регистрации БС для ПУ1, ПУ2, ПУ3.

5

слово

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

№ устройства = 000001 для ПУ1,

№ устройства = 001000 для ПУ2,

№ устройства = 001111 для ПУ3.

Наличие “0” или “1” в разрядах [0-5] 2-го слова кодограммы свидетельствует о наличии соответствующих признаков, смысловое содержание которых следующее:

для ПУ1 [0,1] разряды 2-го слова

[0] р. “1” - ПУ1 заблокировано по ФК оператором;

[0] р. “0” - ПУ1 разблокировано по ФК оператором;

[1] р. “1” - ПУ1 неисправно;

[1] р. “0” - ПУ1 исправно.

для ПУ2 [2,3] разряды 2-го слова

[2] р. “1” - ПУ2 заблокировано по ФК оператором;

[2] р. “0” - ПУ2 разблокировано по ФК оператором;

[3] р. “1” - ПУ2 неисправно;

[3] р. “0” - ПУ2 исправно.

для ПУ3 [4,5] разряды 2-го слова

[4] р. “1” - ПУ3 заблокировано по ФК оператором;

[4] р. “0” - ПУ3 разблокировано по ФК оператором;

[5] р. “1” - ПУ3 неисправно;

[5] р. “0” - ПУ3 исправно.

Кодограмма регистрации БС для Ш1, Ш2, Ш3 выглядит следующим образом:

№ слова

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

 

0

слово

№ устройства

(в двоичном коде)

1

0

1

1

0

Часы

(двоичный код)

 

1

слово

Минуты (двоичный код)

Секунды (двоичный код)

 

2

слово

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

0

3

слово

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

4

слово

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

5

слово

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Рис.17. Кодограмма регистрации БС для Ш1, Ш2, Ш3.

№ устройства = 000000 для Ш1,

№ устройства = 000111 для Ш2,

№ устройства = 001011 для Ш3.

Наличие “0” или “1” в разрядах [0-2] 2-го слова кодограммы свидетельствует о наличии соответствующих признаков, смысловое содержание которых следующее:

для Ш1 [0] разряд 2-го слова

“1” - Ш1 неисправен;

“0” - Ш1 исправен.

для Ш2 [1] разряд 2-го слова

“1” - Ш2 неисправен;

“0” - Ш2 исправен.

для Ш3 [2] разряд 2-го слова

“1” - Ш3 неисправен;

“0” - Ш3 исправен.

3.2.         Обоснование необходимости организации базы данных

3.2.1.   Понятие базы данных

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

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

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

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

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

Современный подход требует, чтобы в программе были лишь перечислены необходимые для обработки данные и заданы требуемые форматы их представления. При этом описание баз данных становится независимым от программ пользователей и составляет самостоятельный объект хранения. Эти описания обычно называют метаданными [5].

Важнейшим компонентом автоматизированной системы сбора, накопления и эффективного использования информации является система управления базами данных (СУБД). Программы составляющие СУБД включают ядро и сервисные средства. Ядро – это набор программных модулей, необходимый и достаточный для создания и поддержания БД. Сервисные программы предоставляют пользователям ряд дополнительных возможностей и услуг по обслуживанию систем баз данных. Языковые средства служат для описания БД и используются для обработки данных пользователями.

3.2.2.   Достоинства интеграции данных.

Отметим некоторые достоинства интеграции данных.

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

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

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

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

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

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

3.2.3.   Проблемы интеграции данных

С переходом к концепции БД, данные становятся неким общим ресурсом, целостность которого необходимо защитить от разрушений при сбоях оборудования, при некорректных обновлениях, от НСД и т.п.

1.     Защита данных от разрушения при сбое оборудования. Этот вид защиты часто называют обеспечением физической целостности данных. Физическая целостность обеспечивается средствами ведения системного журнального файла и возможностью восстановления текущего состояния БД на основании копии и журнального файла. В журнальном файле регистрируются все изменения в БД с некоторого периода времени. Копия БД должна быть выполнена на момент начала ведения журнального файла.

2.     Защита от некорректных обновлений. Она предупреждает неверное использование данных (в первую очередь – обновления другими пользователями). Такая защита данных называется логической целостностью. Она обеспечивается путем разработки механизмов управления доступом пользователей к данным. Это программные “фильтры”, когда пользователь имеет возможность обрабатывать лишь некоторое подмножество данных. Во-вторых, система выдает пользователю для обработки не всю запись целиком, а лишь часть ее данных. При этом в прикладной программе описываются только эти данные. В-третьих, при описании данных некоторые СУБД позволяют задавать области допустимых значений. Тогда система автоматически проверяет новое значение на допустимость и отвергает некорректные.

3.     Защита данных от НСД. Она предполагает введение средств, препятствующих извлечению и обновлению данных некоторыми пользователями. Основное средство обеспечения этой разновидности защиты данных состоит в том, что пользователю предоставляется доступ не ко всей БД, а лишь к некоторой, определенной администратором БД, части данных. При этом обращение к любым другим данным для означенного пользователя становится невозможным.

3.2.4.   Необходимость организации БД на АРМ РД

Непосредственное функциональное назначение АРМ РД – регистрация и документирование информации, поступающей из ВК. АРМ РД в режиме реального времени выполняет следующие функции:

·        прием данных, круглосуточно поступающих от ВК;

·        выдачу информации в ВК;

·        регистрацию поступивших данных в памяти ЭВМ;

·        документирование данных, размещенных в информационных массивах.

Согласно с функциональным назначением, проектирование БД на АРМ РД должно решить следующие задачи:

·        создать “динамическую” модель предметной области системы (в которой соответствие БД текущему состоянию предметной области обеспечивается не периодически, а в режиме реального времени);

·        обеспечить эффективность функционирования, т.е. обеспечить требования ко времени реакции системы на запросы и обновления БД;

·        обеспечить централизованное хранение данных в памяти ЭВМ;

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

·        обеспечить удобство эксплуатации информационной системы;

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

Эти задачи можно осуществить при помощи создания единого хранилища – базы данных и использования средств СУБД.

3.3.         Логическая организация базы данных

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

·        информации обмена по КС;

·        информации обмена между Ш1, Ш2, Ш3, и ВК;

·        сбойной информации обмена по КС;

·        сбойной информации между Ш1, Ш2, Ш3 и ВК;

·        информации о НЛИ;

·        информации ФК;

·        информации НСД;

·        информации НСД ОП;

·        информации о БС устройств.

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

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

1.            Дата отправки кодограммы;

2.            Время отправки кодограммы;

3.            Направление (от ПУ1, информация в КС3 и т.п.);

4.            Режим работы;

5.            Источник (откуда пришла кодограмма);

6.            Вид сообщения (БС, НСД, и т.п.);

7.            Количество сбойных кодограмм;

8.            Содержание сбойных кодограмм;

9.            Тип устройства, от которого пришла кодограмма;

10.       Признак (сообщения от нескольких устройств приходят в одной кодограмме);

11.       Значение контрольной суммы при пуске ВК;

12.       Значение периодически вычисляемой контрольной суммы;

13.       Текст сообщения, содержащегося в кодограмме.

После составления перечня атрибутов, очередная задача состоит в определении набора отношений и составлении логической структуры БД. Логическая структура базы данных представлена на рис. 18 и состоит из набора отношений, представленных в  третьей  нормальной форме.

Отношение 1: “Вся информация”. Ключевыми доменами являются первые два поля: “Дата”, “Время”.

Отношение 2: “Оперативная информация”. Ключевыми доменами в данном отношении являются “Дата”, “Время”, “Направление”, “Режим работы”, “Источник”, “Вид сообщения”.

Отношение 3: “Информация Ш”  Ключевыми доменами являются “Дата”, “Время”, “Направление”, “Режим работы”.

Отношение 4: “Сбойные кодограммы”. Ключевыми доменами являются: “Дата”, “Время”, “Направление”, “Количество”, “Вид сообщения”, “Слово1”, “Слово2”, “Слово3”, “Слово4”.

Отношение 5: “Функциональный контроль”. Ключевыми доменами являются: “Дата”, “Время”, “Тип”, “Признак”, “Вид сообщения”.

Отношение 6: “Связь с ВК”. Ключевыми доменами являются “Дата”, “Время”.

Отношение 7: “Текущая контрольная сумма”. Ключевыми доменами являются:

“Дата”, “Время”.

Отношение 8: “Контрольная сумма при пуске ВК”. Ключевыми доменами являются: “Дата”, “Время”.

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

С такой же целью выделяется в отдельные отношения информация контрольного суммирования, информация контрольного суммирования при пуске ВК, информация Ш.

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

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

Информация фиксируется в восьми не связанных друг с другом таблицах, и один пользователь, например, может иметь доступ только к БД “Информация контрольного суммирования”, другой – к БД “Информация Ш”. В дипломном проекте рассматривается только та информация, которая содержится в БД ФК.

Отношение ФК содержит информацию о результатах ФК, среди которой имеется информация о БС устройств. Кроме БС, отношение ФК содержит и другую информацию, например, о несанкционированном доступе (НСД), о навязывании ложной информации (НЛИ), информацию о ФК, об обращении к памяти (НОП), и т.д. Информация ФК имеет внутренний формат представления для хранения в памяти ЭВМ и формат для предъявления оператору на экране дисплея или на принтере в виде таблиц и справок.

Вид полей БД ФК представлен на рис. 19.

Структура БД ФК включает в себя следующие элементы: “Дата”, “Время”, “Тип устройства”, “Признак” (признак группирования информации), “Вид сообщения” (БС, НСД, ФК, НЛИ, и т.д.), “Текст сообщения”. В поле “Текст сообщения" находится сообщение типа: “НСД снято”, или “Нет связи по линии 1”, или “разблокировано по ФК”, и т.п., т.е. раскрывается конкретное значение поступившего по устройству сообщения. Остальные элементы, перечисленные ранее, являются ключевыми, и служат для поиска последнего элемента “Текст сообщения”.

3.4.         Выбор СУБД

Выделение СУБД - претендентов

Проектировщику в настоящее время предоставляется достаточно большой выбор СУБД, разработанных для разных конфигураций и типов ЭВМ. Анализ основных параметров этих систем позволяет сразу же отвергнуть ряд СУБД, заведомо непригодных к использованию в разрабатываемой информационной системе, оставив для последующего рассмотрения не более 2-х – 3-х систем - претендентов.

На выбор СУБД – претендентов наибольшее влияние оказывает согласование ряда параметров среды реализации и СУБД. Наиболее значимые параметры перечислены ниже (в скобках указаны характеристики АРМ РД):

·        тип ЭВМ (IBM PC AT на базе процессора Intel 80386);

·        операционная система (MS DOS);

·        объем оперативной памяти (2Мб);

·        объем дисковой памяти (160 МБ);

·        выбранная для реализации модель данных (реляционная).

Перечислим СУБД подобного класса: D-Base, Clipper, Paradox. Перед тем как приступить к сравнительному анализу моделей баз данных, и, следовательно, к окончательному выбору СУБД, необходимо выделить набор факторов, которые влияют на окончательный выбор варианта.

Наиболее часто используемые факторы оценки моделей баз данных:

·        трудоемкость реализации приложений;

·        стоимость эксплуатации информационной системы;

·        возможность совмещения разработки БД с ранее выполненными программными реализациями;

·        прогнозируемые сроки реализации информационной системы;

·        затраты на обучение персонала.

На этом этапе необходимо несколько детализировать требования к реализуемому ПО АРМ РД.

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

Следовательно, большие требования предъявляются даже не к СУБД, а к языку программирования, на котором будут создаваться программы-приложения. Реализация программных средств окружения СУБД и приложений достаточно трудоемкий процесс.

При выборе СУБД необходимо учесть и такой фактор, как наличие опыта у разработчиков в создании прикладных программ для данной СУБД, часто он является определяющим.

В качестве программного продукта для создания ПО АРМ РД была выбрана разработка фирмы Borland – язык программирования Турбо Си++ версии 3.0  и библиотека стандартных программ на языке Турбо Си++  Paradox Engine для реализации обслуживания реляционных баз данных.

Paradox Engine является уникальным программным средством, позволяющим программистам языка Си в полном объеме использовать архитектуру системы Paradox.

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

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

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

Основные характеристики системы Paradox.

Таблицы Paradox - это стандартные файлы DOS с расширением “.DB”. Имена таблиц отвечают стандартным соглашениям об идентификации файлов, принятым в ОС MS DOS.

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

Каждая запись может включать до 255 полей, а каждое поле до 255 символов.

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

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

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

Конечно, нельзя однозначно сказать, что выбранная СУБД идеально соответствует поставленной перед разработчиками задаче. Для иллюстрации сравним Paradox Engine и СУБД Paradox с внутренним языком программирования PAL.

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

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

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

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

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

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

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

Можно сделать вывод, что на выбор СУБД повлияли следующие факторы:

1.     Наличие опыта программирования на языке Турбо Си++, у разработчиков, что позволяет снизить временные и материальные затраты на их переобучение.

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

3.     Обеспечение гибкости ПО и высокого уровня управления программами.

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

5.     Возможность при реализации ПО АРМ РД для создания оконного интерфейса использовать библиотеку СXL- библиотеку функций на языке Си, что дает возможность уделить больше времени  решению  основной задачи.

4. Структура комплекса программ АРМ РД

4.1.         Обоснование структуры комплекса программ

4.1.1.   ПО общесистемного назначения

Структура комплекса программ АРМ РД представлена на рис. 20 и является логическим продолжением реализации  функционального назначения АРМ РД.

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

Исходными данными предусмотрено, что в качестве среды функционирования выбирается операционная система MS DOS с файловой оболочкой Norton Commander.

Для работы с файлами в составе  ПО АРМ РД предусмотрены общесистемные утилиты (архиваторы, антивирусы, и т.п.). Для оформления документации, записок, отчетов предусмотрен текстовый редактор LEXICON.

Для создания специального ПО для  АРМ РД используются следующие программные продукты:

·        Язык программирования Турбо Cи++ версии 3.0;

·        PX Engine - библиотеки функций на языке Borland Cи++, для создания БД в формате Paradox;

·        CXL - библиотеки функций на языке Borland C++ для создания оконного интерфейса пользователя.

4.1.2.   ПО специального назначения

ПО специального назначения представляет собой программные средства, используемые на этапе эксплуатации  АРМ РД (см. рис. 20). Его условно можно разделить на три группы:

1.     Операционная система MS DOS

2.     Библиотеки используемых функций (LIB) включают библиотеки используемых функций языка Borland С++, PX Engine - библиотеки функций языка С++ для создания БД в формате Paradox, CXL – библиотеки функций языка С++ для создания оконного интерфейса.

3.     Исполяемые модули программ, обеспечивающие следующие функции:

·        управляющая программа (MAIN);

·        функции создания прототипов БД и первичных ключей к ним (INITENG);

·        функции записи информации и внесения изменений в БД (ZAPBD);

·        функции формирования и исполнения запросов (INQUIRY), включает программы обработки запросов для 3-х форм представления БС (BS-INQ);

·        функции службы администрирования БД (CR_ARMBD – создание базы данных администратора, CREAT_FA – создание файла администратора, BDADM – работа с БД администратора – создание списка пользователей, регистрация и удаление пользователей);

·        функции архивирования и работы с архивом (ARCH).

4.1.3.   Требования, предъявляемые к специальному ПО АРМ РД

1. Требования по обеспечению надежности.

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

2. Требования по обеспечению удобства эксплуатации.

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

3. Требования к операционной и программной совместимости.

Программное обеспечение средств регистрации и документирования АРМ должно обеспечивать:

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

4.2.         Программная реализация

Постановка задачи

Задачей данного дипломного проекта является разработка программ формирования и обработки запросов для трех форм представления БС и выдача их на экран монитора и принтер.

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

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

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

Вид представления информации после преобразования БС на экран монитора и принтер

Исходя из соображений практического смысла были выбраны 3 формы представления БС: компактная-символическая, табличная, справочная (первая, вторая и третья формы представления БС соответственно).

Первая форма представления БС.

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

1-5 поля - ключевые. Поле 6 - БС технических устройств в позиционном коде. Для каждого устройства определено фиксированное количество этих байтов (максимальное значение 4 группы или 4слова).

Пример кодирования одного слова для устройства i (рис.22) -  значение 035007 надо интерпретировать как:

Рис. 22

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

Вторая форма представления БС.

Пример представления формы 2 приведен на рис.23. Как видно из рис.23, форма 2 является отражением формы 1 для одного устройства и требует меньших усилий при расшифровке данных, т. к. здесь “шапки” колонок таблицы содержат более или менее понятные сокращения и обозначения для специалистов, обслуживающих аппаратуру, т.е. обозначения даются терминах, понятных для сферы деятельности оператора.

Третья форма представления БС.

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

Ш-1

Рис. 24

Неисправно направление связи С1 по передаче от ВК к Ш по причине неполучения от Ш-1 кодограмм по времени.

ОТСУТСТВУЕТ   СИГНАЛ   СЕТЬ1

Заменить блок А4 в стойке П1

Ш-1 заблокирован функциональной задачей

Определение реализуемых функций программ обработки запросов для 3-х форм представления БС

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

Для первой формы представления БС:

1.  Нахождение заданных оператором записей БС в БД по любому сочетанию устройств, используя различные варианты поиска по БД, а именно:

·     по всей БД (дата и время не используются);

·     в едином интервале по дате и времени;

·     в указанном интервале времени по каждому дню интервала дат;

·     за один день в указанном интервале времени.

2. Расшифровка БС заданных оператором устройств, учитывая интервал поиска.

3. Выдача расшифрованных БС на монитор или принтер в первой форме представления. Как видно из описанного выше, первая форма представления БС выдается , на экран монитора в виде, представленном на рис. 21.

Для второй формы представления БС:

1.       Нахождение необходимой записи БС в БД по конкретному устройству, заданному оператором, используя различные варианты поиска:

·     по всей БД ;

·     в едином интервале по дате и времени;

·     в интервале времени по каждому дню интервала дат;

·     за один день в указанном интервале времени.

Можно отметить, что варианты поиска по БД для первой и второй форм представления БС совпадают.

2.     Расшифровка БС заданного оператором устройства, учитывая интервал поиска.

3.     Выдача расшифрованных БС на экран монитора или принтер в форме представленной на рис. 23, причем вид экрана будет различным в зависимости от устройства, задаваемого оператором, т.к. устройства системы не идентичны и обладают конкретными свойственными лишь им характеристиками.

Для третьей формы представления БС:

1.   Нахождение последней по времени или одной записи  по конкретному устройству, заданному оператором,

2.   Расшифровка БС заданного оператором устройства,

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

4.3.         Состав программ

Структура программ представлена на рис. 25.

BS1_inq.exe - программа обработки запросов для первой формы представления БС;

Initsearch – модуль, определяющий  выбор функции поиска;

Interval – определение граничных номеров записей в заданном интервале поиска;

Search1 – инициализация функции поиска (все записи в заданном интервале);

Search2 – инициализация функции поиска (не более 1-го искомого значения по каждому полю);

Search3 – инициализация функции поиска (более 1-го искомого значения хотя бы по 1-му полю);

Recprint.c – форматирование и запись найденной строки в файл.

Bs2_inq.c – программа обработки запросов для второй формы представления БС;

Interval.c – определение граничных номеров интервала поиска;

Search.c – поиск;

Recprint.c – форматирование и запись найденной строки в файл.

Form2.c – программа представления БС в текстовом виде;

Bs3_inq.c – программа обработки запросов для третьей формы представления БС;

Form3.c – представление БС в виде справки;

4.4.         Описание программ

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

Программа обработки запроса для первой формы представления БС вызывается из программы формирования запроса со следующими аргументами: 1) “BS1_inq.exe”; 2) имя базы данных; 3) вариант выборки по дате и времени:

“0” – дата и время не используются, “1” – единый интервал по дате и времени, “2” - много интервалов – поиск производится в указанном интервале времени для каждого значения даты из числа входящих в интервал даты, “3” – единый интервал в течение одного дня (используется только первое значение даты); 4) интервал поиска по дате, например, “01/01/98-20/01/98”; 5) интервал поиска по времени, например, “06:00:00-09:00:00” и далее значения остальных полей БД.

Результат обработки запроса записывается в файл “inquiry.res” После окончания обработки должна быть вызвана программа “inq_out.exe” для отображения результатов на экран и принтер.

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

Функции поиска search1 (все записи в указанном интервале) и search2 (не более одного искомого значения по каждому полю) Поиск производится по максимальному номеру записи. Например, сначала просматривается поле, содержащее тип устройства и выбираются записи с номерами 5, 10, 36, 48. Затем производится поиск по виду сообщения. Если искомый вид сообщения находится лишь в 15-м поле, то все поля с 1-го по 36-е пропускаются и поиск начинается с 36-го поля. С помощью такого алгоритма производится минимизация времени поиска по БД. Как только искомые поля совпадают, то номер найденной записи фиксируется и управление передается программе recprint, которая форматирует найденную строку и записывает ее в файл.

Функция поиска search3 (более одного искомого значения хотя бы по одному полю) открывает массив буферов для поиска, его размерность равна количеству полей в таблице. Размерность каждого из массивов rec[i] равна количеству искомых значений по i-му полю таблицы. В каждый буфер заносится одно искомое значение по какому-либо полю таблицы. Каждому буферу rec[i] [j] соответствует элемент массива массивов z[i] [j] , в котром хранится текущий номер найденной записи по данному буферу (т.е. записи, в соответствующем поле которой находится значение, равное значению, занесенному в буфер). Еще в одном массиве хранятся текущие номера найденных строк по каждому полю, где max – текущий номер записи при поиске, т.е. записи с номерами, меньше max уже просмотрены. Для каждого буфера находится запись со значением, равным занесенному в этот буфер и с номером, большим либо равным max. Найденные номера заносятся в соответствующие z[i] [j]. Затем для каждого поля определяется значение текущего номера найденных строк по каждому полю. Если хотя бы по одному полю произошел выход за пределы интервала поиска, значит, поиск закончен. Если же значения текущих номеров найденных строк совпадают по всем полям, значит, искомая запись найдена. Найденная строка форматируется и записывается в файл.

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

Программы обработки запросов для третьей формы представления БС находят последнюю по времени запись в БД и выдают преобразованные БС в файл.

Алгоритмы программ приведены в Приложении 1.

Тексты программ приведены в Приложении 2.

4.5.         Оценка результатов работы программ

Результатом данного дипломного проекта является разработка программ формирования и обработки запросов для 3-х форм представления БС. Программы разработаны для технических средств АРМ РД и функционируют в составе специального ПО АРМ РД.

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

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

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

Еще одно требование, которое было оговорено в п. 4.2.1. – это минимизация времени поиска по БД. Здесь нужно конкретизировать, что минимизация времени ответа на запрос осуществляется на нескольких уровнях:

“технологическом” - средства архивирования БД;

“логическом” – информация хранится в нескольких базах данных (см. п. 3.3.- одна из причин формирования подобных отношений – это минимизация времени поиска);

“программном” – выделение границ и интервалов поиска.

Кроме того, выбор формы представления, для которой формируется запрос и заданный интервал, будут влиять на время поиска записей. Если, например, оператор выбрал 1-ю форму представления и сформировал запрос по нескольким устройствам, причем задал вариант поиска по всей БД, то время ответа будет больше, чем если бы оператор сформировал запрос для 3-й формы представления БС, которая обеспечивает поиск лишь одной записи в БД. Если для 3-й формы представления БС время ответа будет составлять 2-3 сек.. то для сложных запросов может приближаться к десяткам секунд. Поэтому нельзя привести одно конкретное значение времени ответа на запрос оператора.

Приведем следующие рекомендации оператору АРМ РД: чем сложнее запрос и чем больше количество устройств, по которым сформирован запрос –тем дольше поиск. Если необходимо быстро получить информацию, то рекомендуется выбрать 3-ю или 2-ю форму представления, которые предназначены для получения информации по одному устройству. Если же количество записей в БД увеличилось настолько, что поиск занимает ощутимое время, то рекомендуется пользоваться средствами архивации.

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

Организационно-экономическая часть

Введение

Темой организационно-экономической части дипломного проекта является технико-экономическое обоснование (ТЭО) по теме: “Бизнес-план разработки”.

В дипломном проекте производится разработка программ обработки запросов к базе данных автоматизированного рабочего места регистрации и документирования (АРМ РД).

В ТЭО необходимо рассмотреть следующие вопросы:

·        Планирование разработки с построением сетевого графика;

·        Расчет стоимости разработки;

·        Экономическую эффективность разработки;

·        Состав и назначение основных разделов хозяйственного договора.

В первой части ТЭО необходимо рассчитать срок разработки и построить сетевой график работ по созданию программного обеспечения АРМ РД. В данном случае под разработкой подразумеваются не только программы обработки запросов к базе данных, а программное обеспечение АРМ РД в целом.

Во второй части ТЭО необходимо рассчитать стоимость разработки программного обеспечения АРМ РД с момента получения первого варианта технического задания и заканчивая оформлением документации и сдачей разработки. При этом учитывается, что разработка производится на средства, выделяемые из Госбюджета (финансирование по целевым программам).

В третьей части ТЭО необходимо обосновать экономическую эффективность разработки.

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

1. Планирование разработки с использованием сетевого графика

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

Планирование научно-исследовательских работ с применением сетевого метода ведётся в следующем порядке:

1)  составляется перечень событий и работ;

2)  устанавливается топология сети;

3)  строится сетевой график по теме;

4)  определяется продолжительность работ (tож);

5)  рассчитываются параметры сетевого графика;

6)  определяется продолжительность критического пути;

7)  проводится анализ и оптимизация сетевого графика, если это необходимо.

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

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

·     tmin - минимальную;

·     tmax - максимальную;

·     tнв - наиболее вероятную или только первые две.

Эти величины являются исходными для расчёта ожидаемого времени tож по формулам (1) и (2).

                                                                             (1)

                                                                                 (2)

После построения графика и выбора необходимых исходных данных рассчитывают параметры сети: сроки совершения событий, резервы времени, продолжительность кри­ти­ческого пути. Расчёт параметров сети наиболее удобно выполнять табличным мето­дом, если число событий не превышает 100 - 150. Этому условию соответствует проводи­мая разработка.

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

Ранний срок наступления события (Tpi) - минимальный срок, необходимый для выполнения всех работ, предшествующих данному событию, равен продолжительности наибольшего из путей, ведущих от исходного события 1 к данному (формула (3)).

                                                                                            (3)

Критический путь сети (Ткр) - максимальный путь от исходного события 1 до завершающего события С.

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

                                                                                    (4)

Все события в сети, за исключением событий, принадлежащих критическому пути, имеют резерв времени (Ri), приведённый в выражении (5).

                                                                                                (5)

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

При описании сети “в терминах работ” определяют ранние и поздние сроки начала   и окончания работ (формулы (6) - (9)).

ранний срок начала:

                                                                                                    (6)

поздний срок начала:

                                                                                             (7)

ранний срок окончания:

                                                                                             (8)

поздний срок окончания:

                                                                                                    (9)

Работы сетевой модели могут иметь два вида резервов времени: полный (Rпi,j) и свободный (Rci,j). Полный резерв показывает, на сколько может быть увеличена продол­жи­тельность данной работы или сдвинуто её начало так, чтобы продолжительность макси­мального из проходящих через неё путей не превысила критического пути. Полный резерв, если он не использован до конца при выполнении данной работы, частично может быть перераспределён и между другими работами, лежащими на данном пути. Полный резерв рассчитывается по формуле (10).

                                                                                      (10)

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

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

Свободный резерв рассчитывается по формуле (11).

                                                                                       (11)

В соответствии с вышеизложенной методикой приведём планирование разработки.

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

1.                             Подготовительный этап.

2.                             Выбор методов и средств решения.

3.                             Разработка алгоритмов программ.

4.                             Отладка программ и анализ результатов.

5.                             Оформление документации и подготовка к сдаче разарботки.

В таблице 1 приведен перечень событий и работ, имеющих место при разработке АРМ РД.

Перечень событий и наименование работ

Табл. 1

этапа

№ соб.

Событие

Код

работы

Наименование работы

I

0

Первый вариант ТЗ получен

0-1

0-3

Согласование и уточнение первого варианта ТЗ

Составление перечня материалов по тематике

1

Промежуточный вариант ТЗ согласован

1-2

Составление окончательного варианта ТЗ

2

Окончательный вариант ТЗ утвержден

2-5

Проведение анализа существующих методов решения и получение сравнительных хар-к

3

Перечень материалов по тематике составлен

3-4

Изучение материалов по тематике

II

4

Материалы по тематике задачи изучены

4-8

Выбор окончательного метода решения

5

Анализ существующих методов решения проведен, сравнительные хар-ки получены

5-6

Предварительный выбор метода решения

6

Метод решения предварительно выбран

6-7

Уточнение и согласование выбранного метода решения

7

Выбранный метод решения согласован

7-8

Утверждение окончательного метода решения

III

8

Окончательный метод решения утвержден

8-9

8-10

8-11

Изучение лит-ры по ЯП

Составление эскизного варианта алгоритма

Анализ входной и выходной информации

9

Литература по ЯП изучена

9-14

Выбор языка программирования

Продолжение табл. 1

этапа

№ соб.

Событие

Код

работы

Наименование работы

III

10

Эскизный вариант алг. Составлен

10-12

Уточнение алгоритма решения

11

Анализ входной и выходной информации проведен

11-12

Уточнение алгоритма решения

12

Алгоритм решения проработан

12-13

Разработка блок-схемы алгоритма

13

Блок-схема алгоритма составлена

13-14

Выбор языка программирования

14

Язык прграммирования выбран

14-15

14-16

Определение структуры программы

Работа над модулями программы

15

Структура программы разработана

15-17

Работа над текстами программ

16

Модульная структура разработана

16-17

Работа над текстами программ

IV

17

Тексты программ составлены

17-18

17-19

Логический анализ программы и ее корректирование

Компиляция программ

18

Логический анализ программ, их корректирование завершены

18-20

Исправление ошибок в программах

Продолжение табл. 1

этапа

№ соб.

Событие

Код

работы

Наименование работы

IV

19

Компиляция программ завершена

19-21

Редактирование программ в единый модуль

20

Исправление ошибок завершено

20-21

Редактирование программ в единый модуль

21

Редактирование программ в единый загрузочный модуль завершено

21-22

21-23

Выполнение программ

Анализ рез-тов выполнения

22

Выполнение программ завершено

22-24

Проверка функ-ия прог-мм в различных условиях работы

V

23

Анализ результатов выполнения программ завершен

23-24

23-25

Проверка функ-ия прог-мм в различных условиях работы

Выпуск документации

24

Проверка функ-ия прог-мм в различных условиях работы завершена

24-26

Подготовка отчета о работе

25

Выпуск документации завершен

25-26

Подготовка отчета о работе

26

Отчет о работе подготовлен

На основании перечня событий и работ построен сетевой график работ (рис.1).

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

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

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

1.     Расчет ожидаемого времени выполнения работы  производится по формуле (2) с использованием минимальной  вероятностных оценок продолжительности работ.

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

3.     Раннее окончание каждой работы  определяется по формуле (8) и фактически равно сумме величин раннего начала и продолжительности данной работы.

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

5.     Заполнение графы позднего срока окончания работ

6.     Данные графы позднего срока начала работ  находятся как разность позднего окончания этих работ и их продолжительности.

7.     Полный  и свободный  резервы времени определяются по формулам (10) и (11) соответственно.

Параметры сетевого графика представлены в таблице 2.

Параметры сетевого графика

Табл. 2

Код

Соб.

0-1

25

30

27

0

27

0

27

0

0

0-3

10

15

12

0

12

32

44

32

0

1-2

15

25

19

27

46

27

46

0

0

2-5

30

40

34

46

80

46

80

0

0

3-4

40

50

44

12

56

44

88

32

0

4-8

50

60

54

56

110

88

142

32

32

5-6

20

35

26

80

106

80

106

0

0

6-7

15

25

19

106

125

106

125

0

0

7-8

15

20

17

125

142

125

142

0

0

8-9

55

60

57

142

199

142

199

0

0

8-10

50

60

54

142

196

146

200

4

0

8-11

35

45

39

142

181

163

202

21

0

9-14

45

55

49

199

248

199

248

0

0

10-12

15

25

19

196

215

200

219

4

0

11-12

15

20

17

181

198

202

219

21

17

12-13

15

20

17

215

232

219

236

4

0

13-14

10

15

12

232

244

236

248

4

4

14-15

50

60

54

248

302

248

302

0

0

14-16

25

40

31

248

279

311

342

63

0

15-17

140

160

148

302

450

302

450

0

0

16-17

100

120

108

279

387

342

450

63

63

17-18

40

80

56

450

506

450

506

0

0

17-19

20

25

22

450

472

498

520

48

0

18-20

25

40

31

506

537

506

537

0

0

Продолжение табл. 2

Код

Соб.

19-21

30

40

34

472

506

520

554

48

48

20-21

15

20

17

537

554

537

554

0

0

21-22

10

15

12

554

566

554

573

7

0

21-23

15

20

17

554

571

554

571

0

0

22-24

20

30

24

566

597

566

597

0

0

23-24

10

15

12

571

583

585

597

14

14

23-25

30

40

34

571

605

571

605

0

0

24-26

25

30

27

597

617

597

624

0

0

25-26

15

25

19

605

624

605

624

0

0

2. Расчет стоимости разработки

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

2.1.         Расчёт статьи “материалы, покупные изделия, полуфабрикаты”

На эту статью относится стоимость материалов, покупных изделий, полуфабрикатов и других материальных ценностей, расходуемых непосредственно в процессе выполнения НИР по теме. Цена материальных ресурсов определяется по соответствующим ценникам. В стоимость материальных затрат включаются транспортные расходы (10 % от прейскурантной цены).

Табл. 3

Расчёт статьи “материалы, покупные изделия, полуфабрикаты” приводится в таблице 3.

Наимено­вание

товара

Ед. Измерения

Кол-во

Цена за единицу  (руб.)

Суммар. затраты  (руб.)

Дискеты

Пачка

2

90

180

Чертежная бумага

Листы

20

5

100

Бумага для принтера

Пачка

3

80

240

Итого: 520

С учётом транспортных расходов:

520 + 0.1 *520 =572 ( руб.)

2.2.         Расчёт основной заработной платы по теме

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

Среднее количество рабочих дней в месяце равно 20-ти. Следовательно, дневная заработная плата определяется делением размера оклада на количество рабочих дней в месяце.

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

Например, на первом этапе разработки потребуется количество дней, равное сумме продолжительностей работ, коды которых: 0-1, 0-3, 1-2, 2-5, 3-4. Трудоемкость каждого этапа определяется для группы специалистов, отвечающих за этот этап разработки.

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

Расчет основной заработной платы по теме приведен в таблице 4.

Расчет основной заработной платы по теме

Табл. 4

Наимено­вание этапов работ

Исполни­тель

Оклад

( руб.)

Дневная зар. Плата  (руб.)

Трудоем­­кость

(в человеко-днях)

Затраты по

зар. плате

( руб.)

1. Подгото­ви­тельный этап

Ведущий инженер

Инженер

1200

1000

60

50

252

252

15120

12600

2. Разработ­ка алгорит­мов и программ

Ведущий инженер

Инженер

Инженер

1200

1000

1000

60

50

50

864

864

864

51840

43200

43200

3.Oформ­ление докум-ии и подготовка к сдаче

Инженер

1000

50

46

2300

ИТОГО:

168260

2.3.         Расчет дополнительной заработной платы

На эту статью относятся выплаты, предусмотренные законодательством о труде за неотработанное по уважительным причинам время: оплата очередных и дополнительных отпусков и т.п. (принимается в размере 20% от суммы основной заработной платы):

168260*0.2=33652  руб.

2.4.         Расчёт отчислений на социальные нужды

Затраты по этой статье определяются в процентном отношении от суммы основной и  дополнительной заработной платы (40.5%):

(168260+33652)* 0.405=81774 руб.

2.5.         Расчёт накладных расходов

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

Накладные расходы принимаются в размере 250% от суммы основной заработной платы.

168260*2.5=420650  руб.

2.6.         Расчёт договорной цены

Калькуляция стоимости разработки приведена в таблице 5.

Полная себестоимость разработки определяется суммированием пп.1 - 5 таблицы 5.

Оптовая цена определяется следующим образом:

Цопт = себестоимость + прибыль.

Прибыль составляет 30% от себестоимости:

Прибыль = 704732*0.3=211420  руб.

Цопт = 704732 + 211420=916152  руб.

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

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

Табл. 5

Следовательно, договорная цена разработки составит 916152  руб.

№п/п

Наименование статьи расхода

Затраты (в  руб.)

1.

Материалы, покупные изделия, полуфабрикаты

396

2.

Основная заработная плата

168260

3.

Дополнительная заработная плата

33652

4.

Отчисления на социальные нужды

81774

5.

Накладные расходы

420650

6.

Полная себестоимость

704732

7.

Прибыль

211420

8.

Оптовая цена

916152

9.

НДС

-------

10.

Договорная цена

916152

3. Экономическая эффективность разработки

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

·        получение и регистрацию данных о состоянии объекта управления;

·        позволяет человеку производить анализ полученных данных и на основании их оперативно реагировать на изменения, возникающие в системе;

·        повышает эффективность работы оператора за счет наглядного представления данных на экране монитора и тем самым сокращает работу оператора с бумагами (инструкциями).

4. Основные разделы хозяйственного договора

Последним разделом технико-экономического обоснования по теме: “Бизнес-план разработки” является формирование основных разделов хозяйственного договора.

Хозяйственный договор – это двустороннее соглашение, заключаемое юридическими лицами (исполнителем и заказчиком) для достижения какой-либо цели.

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

Основные разделы хозяйственного договора:

1.                             Предмет договора.

В этом пункте оговаривается предмет договора и сроки проведения работ.

2.                             Стоимость работ , порядок и условия платежей и расчетов.

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

3.                             Подготовка работ.

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

4.                             Порядок и сроки сдачи и приемки работ.

Определяет временные рамки действия данного договора, а также порядок и сроки сдачи работ.

5.                             Особые условия.

В этом пункте оговаривается, как производятся изменения и дополнения к настоящему договору и их согласование сторонами.

6.                             Юридические адреса и реквизиты сторон.

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

Условия хозяйственного договора (пп. 1-5) предварительно оговари­вают­ся обеими сторонами и в случае, если все условия хозяйственного договора удовлетворяют требованиям исполнителя и заказчика, то руководящие лица обеих сторон подписывают договор и скрепляют его печатями.

Заключение

В данном разделе дипломного проекта было представлено технико-экономическое обоснование (ТЭО) по теме: “Бизнес-план разработки”.

В ТЭО были рассмотрены следующие вопросы:

·        Планирование разработки с построением сетевого графика;

·        Расчет стоимости разработки;

·        Экономическая эффективность разработки;

·        Состав и назначение основных разделов хозяйственного договора.

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

Время разработки комплекса программ АРМ РД составит 624 дня (приблизительно 2.6 года).

Во второй части ТЭО рассчитана стоимость разработки программного обеспечения АРМ РД с момента получения первого варианта технического задания и заканчивая оформлением документации и сдачей разработки.

Величина затрат на научно-исследовательские работы определена на основе метода калькуляций. Расчет произведен в ценах 1998г.                  Стоимость разработки составит 916 152  руб.

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

Охрана труда и техника безопасности

Введение

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

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

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

1. Характеристика помещения и факторы, действующие на оператора в процессе его труда

Помещение, в котором находится рабочее место оператора, имеет следующие характеристики:

·        длина помещения:      6.5 м;

·        ширина помещения:  3.7 м;

·        высота помещения:    3.5 м;

·        число окон:                4;

·        число рабочих мест:  2;

·        освещение: естественное (через боковые окна) и общее искусствен­ное;

·        вид выполняемых работ: непрерывная работа с прикладной програм­мой в диалоговом режиме.

Напряжение зрения:

·        освещённость РМ, лк        300;

·        размеры объекта, мм        0.3 – 0.5;

·        разряд зрительной работы   III – IV.

На рабочем месте оператор подвергается воздействию следующих неблагоприят­ных факторов:

·        недостаточное освещение;

·        шум от работающих машин;

·        электромагнитное излучение;

·        выделение избытков теплоты.

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

Развитию утомляемости на производстве способствуют следующие факторы:

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

·        характер протекания труда. Трудовой процесс организован таким образом, что оператор вынужден с первых минут рабочего дня решать наиболее сложные и трудоёмкие задачи, в то время как в первые минуты работы функциональная подвижность нервных клеток мозга низка. Важное значение имеет чередование труда и отдыха, смена одних форм работы другими.

2. Расчёт освещения рабочего места оператора

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

Для освещения помещения, в котором работает оператор, используется смешанное освещение, т.е. сочетание естественного и искусственного освещения.

Естественное освещение – осуществляется через окна в наружных стенах здания.

Искусственное освещение – используется при недостаточном естественном осве­ще­нии и осуществляется с помощью двух систем: общего и местного освещения. Общим называют освещение, светильники которого освещают всю площадь помещения. Мест­ным называют освещение, предназначенное для определённого рабочего места.

Для помещения, где находится рабочее место оператора, используется система общего освещения.

Нормами для данных работ установлена необходимая освещённость рабочего места ЕН=300 лк (для работ высокой точности, когда наименьший размер объекта различения равен 0.3 – 0.5 мм).

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

Общий световой поток определяется по формуле:

где ЕН – необходимая освещённость рабочего места по норме (ЕН=300 лк);

S – площадь помещения, м2;

z1 – коэффициент запаса, который учитывает износ и загрязнение светильников (z1=1.5, табл. VII-5, [15]);

z2 – коэффициент, учитывающий неравномерность освещения (z2=1.1, стр. 139 [15]);

h - коэффициент использования светового потока выбирается из таблиц в зави­симости от типа светильника, размеров помещения, коэффициентов отражения стен и потолка помещения.

Определим площадь помещения, если его длина составляет Lд=6.5 м, а ширина Lш=3.7 м:

 3.7=24 м2

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

·        коэффициент отражения побелённого потолка Rп=70%;

·        коэффициент отражения от стен, окрашенных в светлую краску Rст=50%;

где hП – высота помещения = 3.5 м. Тогда по табл. 7 [16] находим (для люминесцентных ламп i=0.7) h=0.38.

Определяем общий световой поток:

Наиболее приемлемыми для помещения ВЦ являются люминесцентные лампы ЛБ (белого света) или ЛТБ (тёпло-белого света), мощностью 20, 40 или 80 Вт.

Световой поток одной лампы ЛТБ40 составляет F1=3100 лм, следовательно, для получения светового потока Fобщ=31263.2 лм необходимо N ламп, число которых можно определить по формуле

Подставим значения, полученные выше:

Таким образом, необходимо установить 10 ламп ЛТБ40.

Электрическая мощность всей осветительной системы вычисляется по формуле:

где P1 – мощность одной лампы = 40 Вт, N – число ламп = 10.

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

Расчёт местного светового потока не производится, т.к. в данном случае рекомен­дуется система общего освещения во избежание отражённой блёсткости от поверхности стола и экрана монитора.

Коэффициент пульсации освещённости:

где Emax, Emin и Eср показатели освещённости для газоразрядных ламп при питании их переменным током – соответстсвенно максимальная, минимальная и средняя.

Возьмём по аналогии [16], табл. 4 люминесцентную лампу ЛХБ приблизительно той же мощности. Включением смежных ламп в разные фазы (группы) трёхфазной элек­три­ческой сети возможно добиться уменьшения коэффициента пульсации КП с 35 до 3 – т.е. почти в 12 раз (рис. 1). На рис. 1 указаны три выключателя (по одному на каждую фазу – группу ламп) – это необходимо для обеспечения возможности независимого управ­ления группами ламп.

Рис. 1 Размещение групп ламп в комнате

Равномерность распределения яркости в поле зрения. Характеризуется отношением  (данное отношение считается оптимальным) или

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

3. Расчёт информационной нагрузки

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

Рассчитаем информационную нагрузку оператора. Воспользуемся табл. 4 [18].

Количество операций, совершаемых оператором за 3 часа (табл.1):

Табл. 1

Члены алгоритма

Символ

Количество членов

Частота повторения pi

Афферентные:

1

Наблюдение результатов

F

10

1

Всего:

10

Эфферентные:

1

Выбор наилучшего вари­ан­та из нескольких

C

3

0,04

Исправление ошибок

D

1

0,01

Анализ полученных резу­ль­татов

M

40

0,54

Выполнение механических действий

K

30

0,41

Всего:

74

Итого:

84

Рассчитаем энтропию информации:

Суммарная энтропия:

 бит/с.

Поток информационной нагрузки равен

N – суммарное число всех членов алгоритма;

t – длительность выполнения всей работы, мин.

Вывод: [19], табл. 13.2.

Выводы

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

Расчёты показали, что оператор получает информационную нагрузку, равную

Кроме того, необходимо в течение 8-ми часового рабочего дня предусмотреть один часовой перерыв на обед, 5-ти минутные перерывы каждые полчаса и 15-ти минутные перерывы каждые 1.5 – 2 часа. Работу необходимо организовать таким образом, чтобы наиболее сложные задачи решались с 11:00 до 16:00 – в период наибольшей активности человека, а не в начале дня, когда оператор ещё не достиг максимальной активности, и не в конце дня, когда уже развивается утомление.

Так как работа оператора не связана с решением крупных логических задач и достаточно однообразна, то рекомендуется по-возможности чередовать виды деятель­ности. Пример чередования видов работ и её интенсивности приведён в графике труда и отдыха (табл.2).

Табл. 2

Время

Вид работы и её интенсивность

9:00

Начало работы

9:00 – 9:30

Вход в систему, решение общих организационных задач

9:30 – 9:35

5-ти минутный перерыв

9:35 – 10:10

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

10:10 – 10:15

5-ти минутный перерыв

10:15 – 10:45

Решение несложных задач, изучение литературы

10:45 – 11:00

15-ти минутный перерыв

11:00 – 11:55

Решение логических, наиболее трудоёмких задач

11:55 – 12:00

5-ти минутный перерыв

12:00 – 13:00

Решение наиболее сложных и трудоёмких задач, требующих максимального умственного напряжения

13:00 – 14:00

Перерыв на обед

14:00 – 14:40

Наблюдение полученных результатов, исправление ошибок

14:40 – 14:45

5-ти минутный перерыв

14:45 – 15:10

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

15:10 – 15:30

20-ти минутный перерыв

15:30 – 16:10

Анализ результатов, исправление ошибок

16:10 – 16:15

5-ти минутный перерыв

16:15 – 17:10

Выполнение механических действий, оформление отчётов, подведение результатов

17:10 – 17:15

5-ти минутный перерыв

17:15 – 18:00

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

18:00

Конец работы

Гражданская оборона

Введение

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

·        нефтеперерабатывающий завод;

·        газоперекачивающая станция;

·        ТЭЦ;

·        разного рода химические заводы;

·        предприятия по работе с радиоактивными материалами.

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

·        утечка СДЯВ;

·        утечка радиоактивных веществ;

·        опасность взрыва и пожара легко воспламеняющихся веществ.

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

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

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

1. Теоретическая часть

Источником взрыва является хранилище сжиженного пропана. При нарушении емкости со сжиженным пропаном, хранящимся под высоким давлением, происходит его вскипание с быстрым испарением, выброс в атмосферу и образование облака газопаровоздушной смеси. Когда объемная концентрация пропана превышает 7-9%, может произойти взрыв.

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

1.1.         Оценка воздействия ударной волны на объект

1.1.1.   Характеристики ударной волны

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

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

Зону очага взрыва ГПВС можно представить в виде 3-х концентрических окружностей с центром в точке взрыва, которые имеют радиусы  и

·       

·       

·       

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

В пределах  действует

  изменяется от 1650 до 300кПа.

В третьей зоне  определя­ется в зависимости от величины

при

при

1.1.2.   Поражающие факторы ударной волны

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

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

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

·        Среднее разрушение: разрушение крыш, внутренних перегородок, окон, обрушение отдельных участков чердачных перекрытий. Для восстановления здания необходим капитальный ремонт.

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

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

Степень разрушения зданий зависит от устойчивости конструкции зданий к воздействию избыточного давления во фронте ударной волны.

1.2.         Оценка пожарной обстановки

В зависимости от мощности взрыва и вызванных им разрушений в административном здании может развиться пожарная обстановка. Вероятность возникновения и распространения пожаров зависит от:

·        степени огнестойкости зданий и сооружений;

·        категории пожароопасности производства;

·        расстояния между зданиями и сооружениями;

·        погодных условий.

1.2.1.   Влияние степени огнестойкости зданий и сооружений на развитие пожарной обстановки

Степень огнестойкости зданий и сооружений зависит от сопротивляемости материалов зданий к огню. По огнестойкости здания и сооружения делятся на пять категорий. I - основные элементы выполнены из несгораемых материалов, а несущие конструкции обладают повышенной сопротивляемостью к воздействию огня; II - основные элементы выполнены из несгораемых материалов; III - с каменными стенами и деревянными оштукатуренными перегородками и перекрытиями; IV - оштукатуренные деревянные здания; V – деревянные неоштукатуренные строения. Ориентировочное время развития пожара до полного охвата здания огнем: для зданий и сооружений I и II степени – не более 2ч, зданий и сооружений III степени – не более 1.5ч, для зданий и сооружений IV и V степеней – не более 1ч.

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

1.2.2.   Влияние категорий пожароопасности производства на развитие пожарной обстановки

По пожарной опасности объекты в соответствии с характером технологического процесса подразделяют на пять категорий: А, Б, В, Г, Д. Объекты категорий А - Г связаны с нефтеперерабатывающим, химическим, столярным, текстильным и подобного рода производством. Объекты категории Д связаны с хранением и переработкой негорючих материалов. Наиболее пожароопасны первые две категории.

1.2.3.   Влияние расстояний между зданиями на распространение пожаров

Распространение пожаров определяется плотностью застройки территории. Для зданий I и II степеней огнестойкости плотность застройки должна быть более 30%, для зданий III степени – более 20%, для зданий IV и V степеней – более 10%.

1.2.4.   Влияние погодных условий на распространение пожаров

Скорость ветра также влияет на скорость распространения пожара. При указанных в п.2.2.3. сочетаниях скорость распространения огня при скорости ветра 3-5 м/с будет составлять: при застройке II и III степени огнестойкости 60-120 м/ч, IV и V степени – 120-300 м/ч.

1.2.5.   Оценка воздействия теплового импульса огненного шара на пожарную обстановку

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

Поток излучения  кВт/м2 от огненного шара, падающий на элемент объекта, определяется по формуле:  и проводимость  определяются по формулам:

                                 

где

Импульс теплового потока излучения определяется по формуле:

2.

Воспламенение различного рода материалов зависит от величины теплового импульса, а предельная величина импульса теплового потока для кожи человека составляет 42 кДж/м2.

Предельно безопасный радиус (радиус эвакуации) для человека составляет

1.2.6.   Оценка воздействия вторичных поражающих факторов на пожарную обстановку

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

1.2.7.   Воздействие пожара на людей и элементы объекта

Во время пожара элементы объекта и люди подвергаются тепловому излучению. Возможность возникновения очагов воспламенения и горения устанавливается по данным возгораемости материалов. Ожоги, полученные человеком во время пожара, подразделяются на четыре степени по тяжести поражения организма и вызываются тепловыми импульсами определенной величины. Так, ожоги первой степени могут быть вызваны тепловым импульсом 80-160кДж, второй степени – 160-400кДж, третьей – 400-600кДж, четвертой – 600кДж и выше. Степень полученных ожогов определяется и характером одежды человека и степенью ее возгораемости.

1.3.         Оценка устойчивости элементов объекта

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

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

2. Расчетная часть

2.1.         Исходные данные

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

2.2.         Расчет

2.2.1.   Оценка воздействия воздушной ударной волны на элементы объекта

 м,

т.к.

 для этой зоны. Определим величину

Выводы:

·        здание попадает в зону сильных и полных разрушений. При избыточном давлении

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

·        Так как плотность застройки невелика (меньше 50%), то экранирующее действие близлежащих зданий незначительно и давление ударной волны на здания не уменьшается.

2.2.2.   Оценка пожарной обстановки

Радиус огненного шара:  м, время его существования  от огненного шара: 2,

 кВт/м2.

Импульс теплового потока излучения равен: 2.

Выводы:

·        так как расчетная величина импульса теплового потока равна 470кДж/м2, а предельная величина импульса теплового потока для кожи человека составляет 42кДж/м2 [Л2], то человек получит ожоги третьей степени. Одежда на человеке должна быть плотная и преимущественно из натуральных материалов, т.к. синтетические ткани вспыхивают гораздо быстрее. Предельно безопасный радиус (радиус эвакуации) для человека составляет  м, так что можно сделать вывод, что здание находится в недопустимой близости от хранилища сжиженных углеводородов. Техника, размещенная в здании, также получит повреждения, оплавятся пластмассовые части. Кроме того, возможно возникновение пожаров из-за вторичных поражающих факторов: пробоев и нарушения электропроводки. Так как при этом здание имеет I - II степень огнестойкости и по категориям пожароопасности производство относится к категории Д, то возможны не сплошные пожары, а тление и горение в завалах, с учетом того, что здание получит сильные и полные разрушения.

·        Так как среднее расстояние между зданиями 40-50м, а при I и II степенях огнестойкости зданий для возникновения сплошных пожаров расстояние между зданиями должно быть не больше 10-15м, то вероятность возникновения сплошных пожаров мала. Скорость ветра также будет мало влиять на распространение пожара, т.к. она невелика, а сплошных пожаров, как было сказано выше, не возникнет.

3. Предложения по защите

3.1.         Отнесение хранилища на безопасное расстояние от здания

Найдем расстояние удаления, при котором здание получит слабые разрушения. Примем  кПа.

После преобразований, полагая

 

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

Защита оператора:

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

Найдем минимальное расстояние удаления, при котором здание не получит разрушений. Примем

После преобразований, полагая

 

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

3.2.         Уменьшение массы хранимого пропана

В качестве еще одной меры предосторожности можно уменьшить массу хранимого пропана.

Посчитаем массу пропана, при которой импульс теплового потока излучения 2, минимален. Примем  кДж/м2, как пороговое значение чувствительности кожи человека, при котором он не получает ожогов.

             кВт/м2,            

следовательно,             

Составим систему уравнений:

Подставим во второе уравнение значения  и  через

 т, следовательно общая масса газа

При этом

Защита оператора:

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

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

Примем   

 м, подставляем  в

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

3.3.         Меры по предупреждению аварийной ситуации на хранилище пропана

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

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

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

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

·        Наличие систем вентиляции.

·        Система автоматических клапанов на газопроводах, которые автоматически перекрываются при резком возрастании расхода газа (резкое возрастание расхода газа как правило свидетельствует о прорыве газапровода).

3.4.         Меры по защите административного здания

·        Строительство зданий и сооружений соответствующей огнестойкости и устойчивости к поражающим факторам ударной волны.

·        Конструирование и проектирование здания с учетом требований противопожарной безопасности.

3.5.         Меры по индивидуальной защите оператора

·        Наличие средств индивидуальной защиты у персонала на производстве.

·        Обучение персонала оказанию первой медицинской помощи.

·        Наличие плана эвакуации.

·        Наличие средств пожаротушения.

Эргономика

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

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

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

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

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

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

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

1. Теоретическая часть

1.1.         Базовый подход к конструированию рабочего места оператора

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

·        позволяет упростить процесс конструирования и макетирования;

·        обеспечивает возможность непрерывного совершенствования аппаратуры без коренных изменений конструкции;

·        сокращает объем конструкторской документации на этапе производства;

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

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

1.2.         Понятие рабочего места и рабочей зоны оператора

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

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

1.3.         Формирование типового состава рабочей зоны

В общем случае в типовой состав рабочей зоны включают:

·        средства отображения информации индивидуального пользования (блоки отображения дисплеев, экраны персональных ЭВМ, и т.п.);

·        средства управления и ввода информации (пульты дисплеев, клавиатура и устройства позиционирования курсора);

·        устройства печати, документирования и хранения информации;

·        вспомогательное оборудование (средства оргтехники, хранилища для носителей информации, устройства местного освещения и т.д.)

·        стол и кресло оператора.

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

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

·        учет требований к скорости и точности приема информации оператором;

·        учет особенностей конструктивного выполнения технических средств и аппаратуры.

1.3.1.   Организация пространства рабочего места оператора

Рабочее место оператора складывается из [Л2]:

1)    пространства, занимаемого оборудованием;

2)    пространства необходимого для технического обслуживания и ремонта;

3)    зоны проходов, обеспечивающей нормальное функционирование оборудования;

4)    сенсомоторного пространства (части пространства рабочего места, в которой осуществляется двигательная и сенсорная работа человека).

1.3.2.   Условия, которым должна удовлетворять рабочая зона

Пространственные и размерные соотношения между элементами рабочего места должны быть достаточными для:

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

·        расположения средств управления в пределах максимальной и минимальной границ моторного пространства;

·        оптимального обзора визуальной информации,

·        смены рабочей позы и рабочего положения;

·        свободного доступа к оборудованию при ремонте и наладке;

·        рационального размещения основных и вспомогательных средств труда;

·        ведения записей, работы с документами и приборами.

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

2. Реализация эргономической оценки рабочего места оператора

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

·        особенности конструктивного выполнения и расположения технических средств и аппаратуры;

·        длительность работы с данной аппаратурой;

·        точность и эффективность приема информации.

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

2.1.         Основные эргономические требования, предъявляемые к дисплею

Экран монитора должен размещаться на столе или на подставке так, чтобы расстояние наблюдения информации на его экране не превышало 700мм, оптимальное расстояние – 450-500мм.

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

Зрительный комфорт в основном определяется следующими факторами:

·        размерами знаков;

·        расстояние между знаками по горизонтали: 0,25 высоты знака;

·        расстояние между строками: 0,5-1,0 высоты знака;

·        количеством знаков в строке: 4-80;

·        максимально допустимым количеством строк для цветного изображения: не более 25.

Схема размещения алфавитно-цифрового дисплея (АЦД) приведена на рисунке 1.

 

Рис. 1

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

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

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

Для оператора ввода данных документ (бланк) рекомендуется располагать на расстоянии 450-500 мм от глаз оператора, преимущественно слева, при этом угол между экраном АЦД и документом в горизонтальной плоскости не должен превышать 30-40 градусов.

Клавиатуру, манипулятор “мышь” следует располагать в оптимальной зоне – части пространства рабочего места, ограниченного дугами, описываемыми предплечьями при движении в локтевых суставах с опорой в точке локтя и с относительно неподвижным плечом. Эта зона составляет не более 300 - 400мм от точки опоры локтя оператора [23].

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

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

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

Рекомендуемая ширина спинки 300 мм. Угол наклона спинки следует выбирать в зависимости от назначения кресла. Для оператора, работающего за пультом с ЗПТ, оптимальным является наклон 5-10 градусов. При длительной работе за пультом (более 6 часов), если во время работы необходим отдых, целесообразно иметь возможность изменить по желанию оператора угол наклона спинки стула, но не более чем на 45 градусов.

2.4.         Размещение устройств документирования

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

2.5.         Расположение рабочего места оператора в помещении

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

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

Рис. 2

1 - окно, 2 - полупрозрачный экран

Экран АЦД, документы, клавиатура пульта должны быть расположены так, чтобы перепад яркостей их поверхностей, зависящий от их расположения относительно источников света, не превышал 1:10 при рекомендуемом значении 1:3. При яркости изображения на экране 50-100 кд/м (номинальное значение) освещенность документа должна составлять 300-500  лк. Должны быть исключены слепящие яркости, блики и отображения от стекла экрана.

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

Также размещение светильников позволяет производить их последовательное включение в зависимости от величины естественной освещенности и исключает раздражение глаз чередующимися полосами света и тени, возникающее при поперечном расположении светильников. [17].

Для обеспечения оптимальных условий работы операторов дисплейных устройств необходима определенная цветовая отделка помещений. Так, при использовании экранов красновато-желтого цвета с яркостью свечения до 15кд/м2 стену, противоположную экранам, окрашивают в насыщенный темно-коричневый цвет с коэффициентом отражения  =0.2, а остальные стены - в красно-коричневый цвет с   =0.35. При восприятии информации на экране зеленого цвета целесообразно окрашивать стену, на которую направлен взгляд оператора, в оливково-зеленый цвет с   =0.4. Окраске поверхностей следует придавать матовую фактуру [17].

Заключение

Итак, при эргономической оценке рабочего места оператора в качестве основных эргономических требований были выбраны следующие:

1)    особенности конструктивного выполнения и расположения технических средств и аппаратуры;

2)    длительность работы с данной аппаратурой;

3)    точность и эффективность приема информации.

Табл. 1

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

Элементы рабочего места оператора

Технические характеристики, предъявляемые к элементу рабочего места оператора

На какое требование влияет данная характеристика

Экран монитора

Оптимальное расстояние наблюдения информации на экране монитора – 450-500мм.

2

Расстояние между знаками по горизонтали: 0,25 высоты знака;

расстояние между строками: 0,5-1,0 высоты знака;

количество знаков в строке: 4-80;

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

2, 3

Угол наблюдения экрана не должен превышать 60 градусов. При наличии трех и более дисплеев в рабочей зоне допускается увеличение этого угла, но он не должен превышать 90 градусов.

2

Продолжение табл. 1

Элементы рабочего места оператора

Технические характеристики, предъявляемые к элементу рабочего места оператора

На какое требование влияет данная характеристика

Клавиатура

Клавиатура должна быть размещена на столе или подставке так, чтобы высота клавиатуры пульта по отношению к полу составляла 650-720мм. При размещении пульта на стандартном столе высотой 750мм необходимо использовать кресло с регулируемой высотой сиденья и подставку под ноги.

Клавиатуру, манипулятор “мышь” следует располагать в оптимальной зоне –не более 300 - 400мм от точки опоры локтя оператора.

1, 2

Бланк данных

Для оператора ввода данных документ (бланк) рекомендуется располагать на расстоянии 450-500 мм от глаз оператора, преимущественно слева, при этом угол между экраном АЦД и документом в горизонтальной плоскости не должен превышать 30-40 градусов.

2,  3

Кресло оператора

Конструкция кресла оператора должна позволять сидеть, поддерживая тяжесть верхней части туловища не напряжением мышц спины, а путем опоры на спинку. Форма сиденья - квадратная со сторонами 400 мм, и с выемкой, по форме бедра. Наклон сиденья назад - 5-6 градусов, высота сиденья кресла от пола 400-450 мм. Если сиденье расположено выше, необходимо иметь подставку для ног. Спинка кресла должна иметь вогнутую форму, ширина спинки - 300 мм. Угол наклона спинки 5-10 градусов. При работе более 6ч на время отдыха угол наклона спинки можно изменить, но не более чем на 45 градусов.

1, 2

Устройства документи-

Рования

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

1, 3

Продолжение табл. 1

Элементы рабочего места оператора

Технические характеристики, предъявляемые к элементу рабочего места оператора

На какое требование влияет данная характеристика

Окружаю-щее помещение

Экран АЦД, документы, клавиатура пульта должны быть расположены так, чтобы перепад яркостей их поверхностей, зависящий от их расположения относительно источников света, не превышал 1:10 при рекомендуемом значении 1:3. При яркости изображения на экране 50-100 кд/м (номинальное значение) освещенность документа должна составлять 300-500  лк. Должны быть исключены слепящие яркости, блики и отображения от стекла экрана.

При использовании экранов красновато-желтого цвета с яркостью свечения до 15кд/м2 стену, противоположную экранам, окрашивают в насыщенный темно-коричневый цвет с коэффициентом отражения  =0.2, а остальные стены - в красно-коричневый цвет с   =0.35. При восприятии информации на экране зеленого цвета стену, на которую направлен взгляд оператора, окрашивают в оливково-зеленый цвет с 

1,  2,  3

Заключение

Результатом данного дипломного проекта является разработка программ формирования и обработки запросов. Программы разработаны для технических средств АРМ РД и функционируют совместно с остальным ПО АРМ РД.

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

Объем памяти, занимаемый  программой равен: V = 64 Кбайта.

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

Договорная цена разработки составляет: Цд = 916 152 руб. в ценах 1998г.

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

Значение информационной нагрузки оператора АРМ РД составляет 0.6 бит/с.

В разделе “Гражданская оборона” были приведены требования по инженерной защите оператора и оборудования ПЭВМ от воздействия высоких температур при взрывах в ЧС мирного времени.

В разделе “Эргономика” была произведена оценка рабочего места оператора и разработано оптимальное  рабочее место оператора.

Приложение 1

Схемы алгоритмов программ

Приложение 2

Тексты программ

// inquiry.prj

//INQUIRY\inquiry.c

// main(),initsearch(),mem_args()

// программа обработки запросов

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <fcntl.h>

#include <sys/stat.h>

#include <io.h>

#include <dos.h>

#include <alloc.h>

#include "pxengine.h"

TABLEHANDLE tblh;   // дескриптор таблицы

RECORDNUMBER low,high; // границы интервала поиска

int nflds;     // кол-во полей в таблице

int nformat; // формат результата

int handle;   // дескриптор файла

void interval(long date1,long date2,char *time1, char *time2);  // определение границ интервала поиска

void search3(char *argv[],int *x);  // поиск с перечислениями

void search2(char *argv[],int *x,int n);  // поиск без перечислений

void search1(void);  // поиск только по дате и времени

void initsearch(char *argv[],int *x,int p,int n);  // выбор варианта поиска

void recprint(int nformat);  // расшифровка записи БД в строку и запись этой строки в файл

char sag[7][81]={

"   ДАТА     ВРЕМЯ               ТЕКСТ СООБЩЕНИЯ                                \r\n",

"   ДАТА     ВРЕМЯ   НАПР-Е А  N   РР ИСТ ВС  ТЕКСТ СООБЩЕНИЯ                   \r\n",

"   ДАТА     ВРЕМЯ   НАПР-Е  N   РР  ТЕКСТ СООБЩЕНИЯ                            \r\n",

"   ДАТА     ВРЕМЯ   НАПР-Е К-ВО  ВС 1СЛ 2СЛ 3СЛ 4СЛ  ТЕКСТ СООБЩЕНИЯ           \r\n",

"   ДАТА     ВРЕМЯ   ТИП-У П ВС  ТЕКСТ СООБЩЕНИЯ                                \r\n",

"   ДАТА     ВРЕМЯ   КСУМ0  КСУМ1  КСУМ2  КСУМ3                                 \r\n",

"   ДАТА     ВРЕМЯ   КСУП1  КСУС1  КСУП2  КСУС2  КСУП3  КСУС3                   \r\n"

};        //  шапки таблиц

char *inqstr; // строки запроса

/* строка аргументов функции main:

   argv[1] - имя файла БД; или "!", означающий, что строка аргументов передается через память;

   argv[2] - вариант поиска; 0 - поиск по всей БД, 1 - поиск в едином интервале по дате и времени, 2 - поиск в  интервале времени по каждому дню интервала дат, 3 - поиск за один день в интервале времени;

   argv[3] - дата;

   argv[4] - время;

   argv[5] и далее - искомые значения полей БД  ( argv[5] - третьего поля, argv[6] - четвертого поля и т.д. ); "-" обоз-

    начает любое значение данного поля; в случае нескольких искомых значений по одному полю (перечисление) они разделяются запятыми; пробелы в значениях заменены на '_'.          */

void main(int argc,char *argv[])

{

int *x;  // x[i] - количество искомых значений по i-му полю

int n=0; // количество полей, для которых заданы значения для поиска

int p=0; // количество полей c перечислениями

  // значения x,n,p определяются без учета полей даты и времени

char *name[]={"all_inf","opi","shk","sbkdg","fk","ksum","ksum0"};

 // имена баз данных

long date1,date2; // граничные значения интервала дат

int a,i,j,k;

char *c;

char **mem_args(void);

RECORDHANDLE rech;

RECORDNUMBER num;

// Получение аргументов в случае их передачи через память

if(argv[1][0]=='!')

 {

 argv=mem_args();

 for(argc=0;argv[argc]!=NULL;++argc);

 }

// определение формата записи для базы данных, к которой

// произведен запрос

for(i=0;i<=6;++i)

 if(!strcmp(name[i],argv[1]) || !strcmp(name[i],argv[1]+5))

  { nformat=i;break;}

// открытие файла результатов запроса (inquiry.res) и

// запись в него строк запроса и шапки таблицы

for(i=argc-1;argv[i][0]=='-';--i) argc--;

handle=open("inquiry.res",

   O_CREAT | O_TRUNC | O_WRONLY,S_IREAD | S_IWRITE );

for(i=1,j=0;i<argc;)

{

inqstr=(char *)calloc(82,1);

memset(inqstr+1,' ',79);

inqstr[79]='\r';

inqstr[80]='\n';

inqstr[81]='\0';

for(c=inqstr;i<argc;++i)

   {

   if(strlen(inqstr)+strlen(argv[i])>78+j)

    {

    if(strlen(argv[i])>50 && (strlen(inqstr)<70 || strlen(argv[i])>78))

     {

     for(k=j+77-strlen(inqstr);argv[i][k]!=',';--k);

     strcat(c," ");

     strncat(c,argv[i]+j,k+1-j);

     j=k+1;

     }

    break;

    }

   strcat(c," ");

   strcat(c,argv[i]+j);

   j=0;

   }

inqstr[strlen(inqstr)]=' ';

_write(handle,inqstr,81);

free(inqstr);

}

_write(handle,sag[nformat],81);

// инициализация работы с БД

j=coreleft()/1024-50;

if(j>256) j=256;

if(a=PXSetDefaults(j,1,30,MAXLOCKHANDLES,3,SortOrderAscii)) printf("\n%s",PXErrMsg(a));

if(a=PXInit()) printf("\n%s",PXErrMsg(a));

if(a=PXTblOpen(argv[1],&tblh,0,0)) printf("\n%s",PXErrMsg(a));

PXRecNFlds(tblh,&nflds);

x=(int *)calloc(argc+1,sizeof(int));

// разбор аргументов запроса

for(i=5;i<argc;++i)

{

if(argv[i][0]=='-') continue;

++n;

for(c=argv[i],j=1;*c!='\0';++c)

 {

 if(*c==',') ++j;

 if(*c=='_') *c=' ';

 }

x[i-2]=j;

if(j>1)++p;

}

// главный блок

switch(argv[2][0])

 {

 case '0': low=1;PXTblNRecs(tblh,&high);

           initsearch(argv,x,p,n);

           break;

 case '1':

PXDateEncode(atoi(argv[3]),atoi(argv[3]+3),atoi(argv[3]+6),&date1);

PXDateEncode(atoi(argv[3]+11),atoi(argv[3]+14),atoi(argv[3]+17),&date2);

          interval(date1,date2,argv[4],argv[4]+9);

          initsearch(argv,x,p,n);

          break;

 case '2':

PXDateEncode(atoi(argv[3]),atoi(argv[3]+3),atoi(argv[3]+6),&date1);

PXDateEncode(atoi(argv[3]+11),atoi(argv[3]+14),atoi(argv[3]+17),&date2);

          interval(date1,date2,argv[4],argv[4]+9);

          if(low==1 && !high) break;

          if(low==1)

            {

            PXRecBufOpen(tblh,&rech);

            PXRecGet(tblh,rech);

            PXGetDate(rech,1,&date1);

            PXRecBufClose(rech);

            }

          PXTblNRecs(tblh,&num);

          if(high==num)

            {

            PXRecBufOpen(tblh,&rech);

            PXRecLast(tblh);

            PXRecGet(tblh,rech);

            PXGetDate(rech,1,&date2);

            PXRecBufClose(rech);

            }

          for(;date1<=date2;++date1)

           {

           interval(date1,date1,argv[4],argv[4]+9);

           if(low>high) continue;

           initsearch(argv,x,p,n);

           }

          break;

 case '3':

PXDateEncode(atoi(argv[3]),atoi(argv[3]+3),atoi(argv[3]+6),&date1);

          interval(date1,date1,argv[4],argv[4]+9);

          initsearch(argv,x,p,n);

 }

free(x);

if(a=PXTblClose(tblh)) printf("\n%s",PXErrMsg(a));

PXExit();

close(handle);

}

// initsearch

// выбор функции поиска

void initsearch(char *argv[],int *x,int p,int n)

{

if(low>high) return;

if(p) search3(argv+5,x);

else if(n) search2(argv,x,n);

     else search1();

}

// Функция mem_args возвращает адрес строки параметров в случае ее передачи через память

#include "conn_mem.h"

char **mem_args()

{

char ***dat;

dat=(char ***)conn_mem();

return dat[ARGS_OFF/4];

}

// bs2_inq.prj

//INQUIRY\interval.c

// interval()

// определение граничных номеров интервала поиска

#include <stdio.h>

#include <stdlib.h>

#include "pxengine.h"

#include "def.h"

void interval (long date1,long date2,char *time1,char *time2)

{

RECORDHANDLE rech;

itoa(atoi(time2+6)+1,time2+6,10);

PXRecBufOpen(tblh,&rech);

PXPutDate(rech,1,date2);

PXPutAlpha(rech,2,time2);

if(PXRecInsert(tblh,rech))printf("error");

PXRecNum(tblh,&high);

--high;

PXRecDelete(tblh);

PXPutDate(rech,1,date1);

PXPutAlpha(rech,2,time1);

if(PXRecInsert(tblh,rech))printf("error");

if(PXRecNum(tblh,&low))printf("error");

PXRecDelete(tblh);

PXRecBufClose(rech);

}

// inquiry.prj

//INQUIRY\recprint.c

// recprint()

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

#include <stdio.h>

#include <mem.h>

#include <io.h>

#include <dos.h>

#include "pxengine.h"

#include "def.h"

#include "disp.h"

void recprint()

{

long date;

int month,day,year;

int format[7][7]= { {21,0,0,0,0,0,0},{21,28,30,35,38,42,46},

{21,29,34,37,0,0,0},{ 21,29,35,38,43,48,53 },

{ 21,27,29,33,0,0,0 },{ 21,28,35,42,49,0,0 },

{ 21,28,35,42,49,56,63 } };

static char string[82]; // результирующая строка

RECORDHANDLE rech;

union REGS r;

int a,i;

memset(string,' ',82);

PXRecBufOpen(tblh,&rech);

  PXRecGet(tblh,rech);

  PXGetDate(rech,1,&date);

  PXDateDecode(date,&month,&day,&year);

  sprintf(string,"%.02d\\%.02d\\%.04d ",month,day,year);

  PXGetAlpha(rech,2,10,string+11);

  for(i=3;i<=nflds;++i)

    PXGetAlpha(rech,i,sizeof(string)-format[nformat][i-2],

                 string+format[nformat][i-3]-1);

 for(i=0;i<=80;++i) if(string[i]=='\0') string[i]=' ';

 string[79]='\r';

 string[80]='\n';

 _write(handle,string,81);

PXRecBufClose(rech);

// передача управления диспетчеру

// (только для передачи cимвола на принтер!)

// после каждой найденной записи

r.h.ah=1;

int86(DISP,&r,&r);

}

// inquiry.prj

//INQUIRY\search12.c

// search1(),search2(),(search3() см в файле search3.c)

// search1 - все записи в заданном интервале

// search2 - задано не более одного искомого значения по каждому полю

// search3 - более одного искомого значения xотя бы по одному полю

/* исходные данные:

 int *x; ,где x[i] - количество искомых значений по i-му полю ( только для search2 )

 char *argv[] - см. комментарии в inquiry.c (только для search2)

 RECORDNUMBER low,high; - границы интервала поиска */

#include <stdlib.h>

#include "pxengine.h"

#include "def.h"

void search2(char *argv[],int *x,int n)

{

int a,i,j=0,*y;

int yes;

char *c,*c2;

char arg[10];

RECORDHANDLE *rec;

RECORDNUMBER *s,max=low;

s=(long *)calloc(n,sizeof(RECORDNUMBER));

rec=(unsigned int *)calloc(n,sizeof(RECORDHANDLE));

y=(int *)calloc(n,sizeof(int));

for(i=3;j<n;++i)

 {

 if(!x[i]) continue;

 PXRecBufOpen(tblh,rec+j);

 PXPutAlpha(rec[j],i,argv[i+2]);

 y[j++]=i;

 }

while(1)

{

for(i=0;i<n;++i)

 {

 if(max==1)

  {

  if (!(a=PXSrchFld(tblh,rec[i],y[i],SEARCHFIRST)))

   PXRecNum(tblh,&s[i]);

  }

 else

  if(s[i]<max)

   {

   PXRecGoto(tblh,max-1);

   if(!(a=PXSrchFld(tblh,rec[i],y[i],SEARCHNEXT)))

    PXRecNum(tblh,&s[i]);

   }

 if(a||s[i]>high)

   {

   free(s);free(rec);free(y);

   return;

   }

 }

for(i=1,yes=1,max=s[0];i<n;++i)

 {

 if(s[i]!=max) yes=0;

 if(s[i]>max) max=s[i];

 }

if(yes) { ++max;recprint(); }

}

}

void search1(void)

{

RECORDNUMBER i;

for(i=low;i<=high;++i)

 {

 recprint();

 PXRecNext(tblh);

 }

}

// inquiry.prj

//INQUIRY\search3.c

// search3()

// поиск

/* исходные данные:

 int *x; ,где x[i] - количество искомых значений по i-му полю

 char *args[] - искомые значения полей БД  ( args[0] - третьего поля, argv[1] - четвертого поля и т.д. );

 RECORDNUMBER low,high; - границы интервала поиска */

// search1 - все записи в заданном интервале

// search2 - не более одного искомого значения по каждому полю

// search3 - более одного искомого значения xотя бы по одному полю

#include <stdlib.h>

#include <stdio.h>

#include "pxengine.h"

#include "def.h"

void search3(char *args[],int *x)

{

/*

 rec - массив массивов буферов для поиска,его размерность равна количеству полей в таблице. Размерность каждого из массивов rec[i] равна количеству искомых значений по i-му полю таблицы (то есть == х[i]). В каждый буфер заносится одно искомое значение ( например, в rec[3][0] - заносится первое искомое значение по 3-му полю таблицы).

Каждому буферу ( rec[i][j] )соответствует элемент массива массивов z ( z[i][j] ), в котором хранится текущий номер

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

 В массиве s хранятся текущие номера найденных строк по каждому полю ( s[i] минимум из всех z[i][j] по этому i).

 max - текущий номер записи при поиске ( то есть записи с номерами меньше max уже просмотрены ).

*/

RECORDHANDLE **rec;

int i,j,k;

int yes;

char *c1,*c2;

char arg[10];

RECORDNUMBER *s,**z,max=low;

int a;

// выделение памяти под массивы rec,z,s

// и открытие буферов

s=(long *)calloc(nflds,sizeof(RECORDNUMBER));

rec=(unsigned int **)calloc(nflds,sizeof(RECORDHANDLE *));

z=(long **)calloc(nflds,sizeof(RECORDNUMBER *));

for(i=3;i<=nflds;++i)

 if(x[i])

  {

  rec[i]=(unsigned int *)calloc(x[i],sizeof(RECORDHANDLE));

  z[i]=(long *)calloc(x[i],sizeof(RECORDNUMBER));

  for(j=0;j<x[i];++j) PXRecBufOpen(tblh,rec[i]+j);

  }

// заносим в буфера значения из args

// ( значения для одного поля разделены в args запятыми )

for(i=3;i<=nflds;++i)

 {

 if(!x[i]) continue;

 if(x[i]==1)

   PXPutAlpha(rec[i][0],i,args[i-3]);

 else

  {

  c1=args[i-3];

  for(k=0;k<x[i];++k)

   {

   c2=arg;

   while(*c1!=',' && *c1!='\0') *c2++=*c1++;

   *c2='\0'; ++c1;

   PXPutAlpha(rec[i][k],i,arg);

   }

  }

 }

// цикл поиска

while(1) {

for(i=3;i<=nflds;++i)

 {

 // 1) Для каждого буфера находим запись с значением равным занесенному в этот буфер и с номером >= max.

 //    Найденные номера заносим в соотвествующие z[i][k]

 //    Если искомых записей по данному буферу нет, заносим в z[i][k] номер, превышающий верхнюю

 //    границу интервала поиска

 if(!x[i]) continue;

 for(k=0;k<x[i];++k)

  {

  if(max==1)

   {

   if(PXSrchFld(tblh,rec[i][k],i,SEARCHFIRST))z[i][k]=high+1;

   else PXRecNum(tblh,&z[i][k]);

   }

  else

   if (z[i][k]<max)

    {

    PXRecGoto(tblh,max-1);

    if(PXSrchFld(tblh,rec[i][k],i,SEARCHNEXT)) z[i][k]=high+1;

    else PXRecNum(tblh,&z[i][k]);

    }

  }

 // 2) Для каждого поля определяем значение s[i]

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

 s[i]=z[i][0];

 for(k=1;k<x[i];++k) if(s[i]>z[i][k]) s[i]=z[i][k];

 if(s[i]>high)

  {

  for(i=3;i<=nflds;++i)

   if(x[i])

    {

    for(j=0;j<x[i];++j) PXRecBufClose(rec[i][j]);

    free(rec[i]);   free(z[i]);

    }

  free(s); free(rec); free(z);

  return;

  }

 }

// 3), 4)

//  Проверяем совпадение значений s[i].

// Если значения s[i] совпадают для всех полей по которым производится поиск, значит найдена искомая

// ( т.е. удовлетворяющая заданным условиям ) запись, в этом случае вызываем функцию recprint

//  Определяем значение max для следующей итерации, это значение равно максимуму из s[i].

for(i=3;!x[i];++i);

max=s[i];

for(++i,yes=1;i<nflds;++i)

 {

 if(!x[i]) continue;

 if(s[i]!=max) yes=0;

 if(s[i]>max) max=s[i];

 }

if(yes) { PXRecGoto(tblh,max);++max;recprint(); }

}

}

// bs2_inq.prj

// BS2_INQ\bs2_inq.c

// main()

// программа обработки запросов для второй формы байтов состояний

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <fcntl.h>

#include <sys/stat.h>

#include <io.h>

#include <alloc.h>

#include "pxengine.h"

#include "devices.h"

TABLEHANDLE tblh;   // дескриптор таблицы

RECORDNUMBER low,high; // границы интервала поиска

int nflds;     // кол-во полей в таблице

int handle;   // дескриптор файла

void interval(long date1,long date2,char *time1, char *time2);  // определение границ интервала поиска

void search(char *type);  // поиск

void recprint(void);  // расшифровка записи БД в строку и запись этой строки в файл

char *sag;     //  шапкa таблицы

char *sag2;     //  шапкa таблицы-вторая строка

char *inqstr;  // строка запроса

int length;   // длина строки в таблице

/* строка аргументов функции main:

   argv[1] - не используется

   argv[2] - вариант поиска; 0 - поиск по всей БД, 1 - поиск в едином интервале по дате и времени, 2 - поиск в интервале

   времени по каждому дню интервала дат, 3 - поиск за один день в интервале времени;

   argv[3] - дата;

   argv[4] - время;

   argv[5] - тип устройства  */

   void main(int argc,char *argv[])

{

long date1,date2; // граничные значения интервала дат

int a,i;

char *c;

RECORDHANDLE rech;

RECORDNUMBER num;

// открытие файла результатов запроса (inquiry.res) и запись в него строки запроса и шапки таблицы

handle=open("inquiry.res",

   O_CREAT | O_TRUNC | O_WRONLY,S_IREAD | S_IWRITE );

for(i=0;strcmp(devices[i].type,argv[5]) && i<20;++i);

switch(i)

{

case 0:  //ШЭ-00

case 8:  //ШЭ-08

sag=(char *)calloc(81,1);

strcpy(sag,"   ДАТА     ВРЕМЯ   ТИП_У П ВС СОСТОЯНИЕ_ШКАФА СЕТЬ1 СЕТЬ2                      \r\n");

break;

case 1: //ШП-01

case 9: //ШП-09

sag=(char *)calloc(81,1);

strcpy(sag,"   ДАТА     ВРЕМЯ   ТИП_У П ВС СОСТОЯНИЕ_ШКАФА                                  \r\n");

break;

case 4: //ШК-04

case 12: //ШК-12

sag=(char *)calloc(100,1);

strcpy(sag,"   ДАТА     ВРЕМЯ   ТИП_У П ВС КАНАЛЫ ЛИНИИ  КНОН ФКДТ НСПД ФЗ ПИТАНИЕ Д-Ж К--Ы  Б---ЫЕ К--Ы \r\n");

break;

case 2:  //РМ-02

sag=(char *)calloc(81,1);

sag2=(char *)calloc(81,1);

strcpy(sag, "   ДАТА     ВРЕМЯ   ТИП_У П ВС БЛОКИРОВКА    ЕСТЬ СВЯЗЬ С ВК                   \r\n");

strcpy(sag2,"                               ПЭВМ1 по ФК    по ЛС1 по ЛС3                    \r\n");

break;

case 10: //РМ-10

sag=(char *)calloc(81,1);

sag2=(char *)calloc(81,1);

strcpy(sag, "   ДАТА     ВРЕМЯ   ТИП_У П ВС БЛОКИРОВКА    ЕСТЬ_СВЯЗЬ_С_ВК                   \r\n");

strcpy(sag2,"                               ПЭВМ2 по ФК    по ЛС2 по ЛС4                    \r\n");

break;

case 5:  //РМ05Г

case 13: //РМ13П

sag=(char *)calloc(81,1);

strcpy(sag,"   ДАТА     ВРЕМЯ   ТИП_У П ВС ЛИНИИ  КНОН ФКДТ НСПД ФЗ                         \r\n");

break;

case 3: //В

case 6: //КС1

case 14: //КС2

case 15: //АС

sag=(char *)calloc(81,1);

strcpy(sag,"   ДАТА     ВРЕМЯ   ТИП_У П ВС КАНАЛЫ ЛИНИИ  ФКДТ НСПД ФЗ                       \r\n");

break;

case 7: //ВМ

sag=(char *)calloc(81,1);

strcpy(sag,"   ДАТА     ВРЕМЯ   ТИП_У П ВС АВАРИЯ ПИТАНИЯ НЕИСПР КАН КАНАЛЫ                 \r\n");

break;

case 16: //ВУ16

case 17: //ВУ17

case 18: //ВУ18

case 19: //ВУ19

sag=(char *)calloc(81,1);

strcpy(sag,"   ДАТА     ВРЕМЯ   ТИП_У П ВС МАГИСТРАЛЬ ПРИЕМА КНОН                           \r\n");

break;

}

length=strlen(sag);

inqstr=(char *)calloc(length+1,1);

memset(inqstr+1,' ',length);

for(c=inqstr,i=1;i<argc;++i)

  {

  strcat(c," ");

  strcat(c,argv[i]);

  }

inqstr[strlen(inqstr)]=' ';

strcpy(inqstr+length-2,"\r\n");

_write(handle,inqstr,length);

_write(handle,sag,length);

_write(handle,sag2,length);

// инициализация работы с БД

i=coreleft()/1024-50;

if(i>256) i=256;

if(a=PXSetDefaults(i,1,30,MAXLOCKHANDLES,3,SortOrderAscii)) printf("\n%s",PXErrMsg(a));

if(a=PXInit()) printf("\n%s",PXErrMsg(a));

if(a=PXTblOpen("fk",&tblh,0,0)) printf("\n%s",PXErrMsg(a));

PXRecNFlds(tblh,&nflds);

// главный блок

 if  (argv[2][0]=='0')

           {

           low=1;PXTblNRecs(tblh,&high);

           search(argv[5]);

           }

    else

    if (argv[2][0]=='1')

    {

     PXDateEncode(atoi(argv[3]),atoi(argv[3]+3),atoi(argv[3]+6),&date1);

     PXDateEncode(atoi(argv[3]+11),atoi(argv[3]+14),atoi(argv[3]+17),&date2);

          interval(date1,date2,argv[4],argv[4]+9);

          search(argv[5]);

    }

      else

      if (argv[2][0]=='2')

      {

       PXDateEncode(atoi(argv[3]),atoi(argv[3]+3),atoi(argv[3]+6),&date1);

       PXDateEncode(atoi(argv[3]+11),atoi(argv[3]+14),atoi(argv[3]+17),&date2);

          interval(date1,date2,argv[4],argv[4]+9);

          if(low==1 && !high)

          if(low==1)

            {

            PXRecBufOpen(tblh,&rech);

            PXRecGet(tblh,rech);

            PXGetDate(rech,1,&date1);

            PXRecBufClose(rech);

            }

          PXTblNRecs(tblh,&num);

          if(high==num)

            {

            PXRecBufOpen(tblh,&rech);

            PXRecLast(tblh);

            PXRecGet(tblh,rech);

            PXGetDate(rech,1,&date2);

            PXRecBufClose(rech);

            }

          for(;date1<=date2;++date1)

           {

           interval(date1,date1,argv[4],argv[4]+9);

           if(low>high) continue;

           search(argv[5]);

           }

      }

         else

         if (argv[2][0]=='3')

         {

          PXDateEncode(atoi(argv[3]),atoi(argv[3]+3),atoi(argv[3]+6),&date1);

          interval(date1,date1,argv[4],argv[4]+9);

          search(argv[5]);

          }

 

if(a=PXTblClose(tblh)) printf("\n%s",PXErrMsg(a));

PXExit();

close(handle);

}

// bs2_inq.prj

// BS2_INQ\form2.c

// form2()

// расшифровка байтов состояния

#include <string.h>

#include "devices.h"

void form2(char *Type,char *bytes,char *text)

{

 /* Type;   тип устройства

    bytes;  нерасшифрованные байты состояния

    text;   буфер для расшифрованных БС      */

int i;

for(i=0;strcmp(devices [i].type,Type) && i<20;++i);

switch(i)

{

case 0:      // ШЭ-00

        if(bytes[5]&0x04) strcpy(text,"НЕИСПРАВЕН");

        else  strcpy(text,"ИСПРАВЕН");

        if(bytes[4]&0x02) strcpy(text+16,"CETЬ1");

        break;

case 8:      // ШЭ-08

        if(bytes[5]&0x04) strcpy(text,"НЕИСПРАВЕН");

        else  strcpy(text,"ИСПРАВЕН");

        if(bytes[4]&0x04) strcpy(text+22,"СЕТЬ2");

        break;

case 1:      // ШП-01

case 9:      // ШП-09

        if(bytes[5]&0x04) strcpy(text,"НЕИСПРАВЕН");

        else strcpy(text,"ИСПРАВЕН");

        break;

case 4:      // ШК-04

case 12:     // ШК-12

        if(bytes[4]&0x04) strcpy(text,"К1");

        if(bytes[4]&0x02) strcpy(text+2,"К2");

        if(bytes[4]&0x01) strcpy(text+4,"К3");

        if(bytes[5]&0x04) strcpy(text+7,"Л1");

        if(bytes[5]&0x02) strcpy(text+9,"Л2");

        if(bytes[5]&0x01) strcpy(text+11,"Л3");

        if(bytes[3]&0x01) strcpy(text+14,"КНОН");

        if(bytes[3]&0x02) strcpy(text+19,"ФКДТ");

        if(bytes[3]&0x04) strcpy(text+24,"НСПД");

        if(bytes[2]&0x01) strcpy(text+29,"ФЗ");

        if(bytes[12]&0x04) strcpy(text+32,"П1");

        if(bytes[12]&0x02) strcpy(text+34,"П2");

        if(bytes[12]&0x01) strcpy(text+36,"П3");

        if(bytes[11]&0x04) strcpy(text+40,"ДК1");

        if(bytes[11]&0x02) strcpy(text+43,"ДК2");

        if(bytes[11]&0x01) strcpy(text+46,"ДК3");

        if(bytes[10]&0x04) strcpy(text+51,"БК1");

        if(bytes[10]&0x02) strcpy(text+54,"БК2");

        if(bytes[10]&0x01) strcpy(text+57,"БК3");

        break;

case 3:      // В

case 6:      // КС1

case 14:     // КС2

        if(bytes[4]&0x04) strcpy(text,"К1");

        if(bytes[4]&0x02) strcpy(text+2,"К2");

        if(bytes[4]&0x01) strcpy(text+4,"К3");

        if(bytes[5]&0x04) strcpy(text+7,"Л1");

        if(bytes[5]&0x02) strcpy(text+9,"Л2");

        if(bytes[5]&0x01) strcpy(text+11,"Л3");

        if(bytes[3]&0x02) strcpy(text+14,"ФКДТ");

        if(bytes[3]&0x04) strcpy(text+19,"НСПД");

        if(bytes[2]&0x01) strcpy(text+24,"ФЗ");

        break;

case 2:      // РМ-02

        if(bytes[5]&0x01) strcpy(text+3,"ЕСТЬ");

        else              strcpy(text+3,"НЕТ");

        if(bytes[3]&0x04) strcpy(text+17,"НЕТ");

        else              strcpy(text+17,"ЕСТЬ");

        if(bytes[2]&0x02) strcpy(text+24,"НЕТ");

        else              strcpy(text+24,"ЕСТЬ");

        break;

case 10:     // РМ-10

        if(bytes[5]&0x01) strcpy(text+3,"ЕСТЬ");

        else              strcpy(text+3,"НЕТ");

        if(bytes[2]&0x01) strcpy(text+17,"НЕТ");

        else              strcpy(text+17,"ЕСТЬ");

        if(bytes[2]&0x04) strcpy(text+24,"НЕТ");

        else              strcpy(text+24,"ЕСТЬ");

        break;

case 5:      // РМ05Г

case 13:     // РМ13П

        if(bytes[5]&0x04) strcpy(text,"Л1");

        if(bytes[5]&0x02) strcpy(text+2,"Л2");

        if(bytes[5]&0x01) strcpy(text+4,"Л3");

        if(bytes[3]&0x01) strcpy(text+7,"КНОН");

        if(bytes[3]&0x02) strcpy(text+12,"ФКДТ");

        if(bytes[3]&0x04) strcpy(text+17,"НСПД");

        if(bytes[2]&0x01) strcpy(text+22,"ФЗ");

        break;

case 7:      // ВМ

        if(bytes[5]&0x02) strcpy(text,"АВАРИЯ ПИТАНИЯ");

        if(bytes[5]&0x04) strcpy(text+15,"НЕИСПР КАН");

        if(bytes[4]&0x04) strcpy(text+26,"К1");

        if(bytes[4]&0x01) strcpy(text+28,"К2");

        if(bytes[4]&0x02) strcpy(text+30,"К3");

        break;

case 16:     // ВУ16

case 17:     // ВУ17

case 18:     // ВУ18

case 19:     // ВУ19

        if(bytes[5]&0x04) strcpy(text,"НЕИСПР МАГ ПРИЕМА");

        if(bytes[3]&0x01) strcpy(text+18,"КНОН");

        break;

case 15:     // АС

     //Подкорректировать после согласования байта состояния

        if(bytes[4]&0x04) strcpy(text,"К1");

        if(bytes[4]&0x02) strcpy(text+2,"К2");

        if(bytes[4]&0x01) strcpy(text+4,"К3");

        if(bytes[5]&0x04) strcpy(text+7,"Л1");

        if(bytes[5]&0x02) strcpy(text+9,"Л2");

        if(bytes[5]&0x01) strcpy(text+11,"Л3");

        if(bytes[3]&0x02) strcpy(text+14,"ФКДТ");

        if(bytes[3]&0x04) strcpy(text+19,"НСПД");

        if(bytes[2]&0x01) strcpy(text+24,"ФЗ");

        break;

}

}

// bs2_inq.prj

//BS2_INQ\interval.c

// interval()

// определение граничных номеров интервала поиска

#include <stdio.h>

#include <stdlib.h>

#include "pxengine.h"

#include "def.h"

void interval (long date1,long date2,char *time1,char *time2)

{

RECORDHANDLE rech;

itoa(atoi(time2+6)+1,time2+6,10);

PXRecBufOpen(tblh,&rech);

PXPutDate(rech,1,date2);

PXPutAlpha(rech,2,time2);

if(PXRecInsert(tblh,rech))printf("error");

PXRecNum(tblh,&high);

--high;

PXRecDelete(tblh);

PXPutDate(rech,1,date1);

PXPutAlpha(rech,2,time1);

if(PXRecInsert(tblh,rech))printf("error");

if(PXRecNum(tblh,&low))printf("error");

PXRecDelete(tblh);

PXRecBufClose(rech);

}

// bs2_inq.prj

// recprint.c

// BS2_INQ\recprint()

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

#include <stdio.h>

#include <io.h>

#include <string.h>

#include <stdlib.h>

#include <dos.h>

#include "pxengine.h"

#include "def.h"

#include "disp.h"

void form2(char *,char *,char *);

// расшифровка байтов состояния

void recprint()

{

long date; // дата в формате БД

int month,day,year; // расшифрованная дата

char *string; // результирующая строка

char *bytes; //  нерасшифрованные байты состояния

RECORDHANDLE rech; // дескриптор записи

int a,i;

union REGS r;

string=(char *)calloc(length+1,1);

bytes=(char *)calloc(45,1);

PXRecBufOpen(tblh,&rech);

PXRecGet(tblh,rech);

PXGetDate(rech,1,&date);

PXDateDecode(date,&month,&day,&year);

sprintf(string,"%.02d\\%.02d\\%.04d ",month,day,year);

PXGetAlpha(rech,2,9,string+11); //t

PXGetAlpha(rech,3,6,string+20); //тип_у

PXGetAlpha(rech,4,2,string+26); //п

PXGetAlpha(rech,5,4,string+28); //вс

PXGetAlpha(rech,6,45,bytes);    //бс

form2(string+20,bytes+16,string+31);

for(i=0;i<=length;++i) if(string[i]=='\0') string[i]=' ';

strcpy(string+length-2,"\r\n");

_write(handle,string,strlen(string));

PXRecBufClose(rech);

free(bytes);

free(string);

// передача управления диспетчеру

// (только для передачи cимвола на принтер!)

// после каждой найденной записи

                                                      //r.h.ah=1;

                                                      // int86(DISP,&r,&r);

}

// bs2_inq.prj

//BS2_INQ\search.c

// search()

// поиск

#include <stdlib.h>

#include "pxengine.h"

#include "def.h"

void search(char *type)

{

int a,i,y[2];

RECORDHANDLE rec[2];

RECORDNUMBER s[2],max=low;

PXRecBufOpen(tblh,&rec[0]);

PXRecBufOpen(tblh,&rec[1]);

PXPutAlpha(rec[0],3,type);

PXPutAlpha(rec[1],5,"БС ");

 y[0]=3;y[1]=5;s[1]=s[0]=0;

while(1)

{

for(i=0;i<=1;++i)

 {

 if(max==1)

  {

  if (!(a=PXSrchFld(tblh,rec[i],y[i],SEARCHFIRST)))

   PXRecNum(tblh,&s[i]);

  }

 else

  if(s[i]<max)

   {

   PXRecGoto(tblh,max-1);

   if(!(a=PXSrchFld(tblh,rec[i],y[i],SEARCHNEXT)))

    PXRecNum(tblh,&s[i]);

   }

 if(a||s[i]>high)

  {

  PXRecBufClose(rec[0]);

  PXRecBufClose(rec[1]);

  return;

  }

 }

if(s[1]==s[0]) { ++max; recprint(); }

else if(s[1]>s[0]) max=s[1];

     else max=s[0];

}

}

// bs3_inq.prj

// BS3_INQ\bs3_inq.c

// main()

// программа обработки запросов для третьей формы байтов состояния

// вызывается из:

// 1) main.prj, mloop2.c, bszapros()

// 2) makeinq.prj, makeinq.c, makeinq()

#include <stdio.h>

#include <fcntl.h>

#include <sys/stat.h>

#include <io.h>

#include "pxengine.h"

#include <string.h>

void form3(char *,char *,int);

// расшифровка байтов состояния для третьей формы представления и их запись в файл результатов

/* аргументы функции main :

 argv[1] - тип устройства */

void main(int argc,char *argv[])

{

int a;

int i;

int handle;  // дескриптор файла результатов поиска

static char bytes[45]; // буфер для нерасшифрованных байтов состояния

RECORDHANDLE rec;   // дескриптор записи

TABLEHANDLE tblh;   // дескриптор таблицы

// открытие файла результатов изапись в него типа устройства

handle=open("inquiry.res",

   O_CREAT | O_TRUNC | O_WRONLY,S_IREAD | S_IWRITE );

write(handle,argv[1],strlen(argv[1]));

//if(strlen(argv[1])==1) write(handle,"  ",2);

//if(strlen(argv[1])==2) write(handle," ",1);

write(handle,"\r\n",2);

// поиск и обработка результатов поиска

/* находится последняя по времени запись байтов

 состояния для данного устройства */

if(a=PXInit()) printf("\n%s",PXErrMsg(a));

if(a=PXTblOpen("fk",&tblh,0,0)) printf("\n%s",PXErrMsg(a));

PXRecBufOpen(tblh,&rec);

PXPutAlpha(rec,5,"БС");

PXPutAlpha(rec,3,argv[1]);

if((a=PXSrchFld(tblh,rec,3,SEARCHFIRST))!=PXSUCCESS)

{  if(a==PXERR_RECNOTFOUND)

   PXRecBufClose(rec);

   if(a=PXTblClose(tblh)) printf("\n%s",PXErrMsg(a));

   PXExit();

   close(handle);

    return;

}

else while(!(a=PXSrchFld(tblh,rec,3,SEARCHNEXT)));

PXRecGet(tblh,rec);

PXGetAlpha(rec,6,45,bytes);

form3(argv[1],bytes+16,handle);

PXRecBufClose(rec);

if(a=PXTblClose(tblh)) printf("\n%s",PXErrMsg(a));

PXExit();

close(handle);

}

// bs3_inq.prj

// BS3_INQ\form3.c

// form3()

// расшифровка байтов состояния

#include <io.h>

#include <string.h>

#include "devices.h"

#include <dos.h>

void form3(char *Type,char *bytes,int handle)

{

 /* Type -  тип устройства

    bytes - нерасшифрованные байты состояния

    handle - дескриптор файла результатов */

int i;

/*

struct date d;

struct time t;

getdate(&d);

gettime(&t);

z.bd1.date[0]=d.da_mon;

z.bd1.date[1]=d.da_day;

z.bd1.date[2]=d.da_year;

PXRecBufOpen(tblh,&rech);

PXRecGet(tblh,rech);

PXGetDate(rech,1,&date);

PXDateDecode(date,&month,&day,&year);

sprintf(string,"%.02d\\%.02d\\%.04d ",month,day,year);

*/

for(i=0;strcmp(devices[i].type,Type) && i<CHDEV;++i);

switch(i)

{

case 0:      // ШЭ-00

        if(bytes[5]&0x04)

        write(handle,"                          Шкаф  НЕИСПРАВЕН                                \r\n",76);

        else

        write(handle,"                          Шкаф  ИСПРАВЕН                                  \r\n",76);

        if(bytes[4]&0x02)

        write(handle,"НЕИСПРАВНОСТЬ первичной сети электропитания СЕТЬ 1                        \r\n",76);

        break;

case 8:      // ШЭ-08

        if(bytes[5]&0x04)

        write(handle,"                          Шкаф  НЕИСПРАВЕН                                \r\n",76);

        else

        write(handle,"                          Шкаф  ИСПРАВЕН                                  \r\n",76);

        if(bytes[4]&0x02)

        write(handle,"НЕИСПРАВНОСТЬ первичной сети электропитания СЕТЬ 2                        \r\n",76);

        break;

case 1:      // ШП-01

case 9:      // ШП-09

        if(bytes[5]&0x04)

        write(handle,"                          Шкаф  НЕИСПРАВЕН                                \r\n",76);

        else

        write(handle,"                          Шкаф  ИСПРАВЕН                                  \r\n",76);

        break;

case 4:      // ШК-04

case 12:     // ШК-12

        if(bytes[0]&0x01)

        write(handle,"ОСНОВНОЙ - шкаф ШК-12                                                     \r\n",76);

        else

        write(handle,"ОСНОВНОЙ - шкаф ШК-04                                                     \r\n",76);

        write(handle,"                                                                          \r\n",76);

        write(handle,"                          ТЕХНИЧЕСКОЕ СОСТОЯНИЕ ШКАФА                     \r\n",76);

        write(handle,"                                                                          \r\n",76);

        if(bytes[5]&0x01)

        write(handle,"                          Шкаф РАБОТОСПОСОБЕН                             \r\n",76);

        if(bytes[5]&0x02)

        write(handle,"                          Шкаф НЕИСПРАВЕН                                 \r\n",76);

        if(bytes[5]&0x04)

        write(handle,"                          Шкаф ЗАБЛОКИРОВАН по НСД                        \r\n",76);

        if((!(bytes[5]&0x01))&&(!(bytes[5]&0x02))&&(!(bytes[5]&0x04)))

        write(handle,"                          Шкаф ИСПРАВЕН                                   \r\n",76);

        write(handle,"                                                                          \r\n",76);

        if(bytes[4]&0x01)

        write(handle,"НЕИСПРАВЕН 1-й канал АД                                                   \r\n",76);

        if(bytes[4]&0x02)

        write(handle,"НЕИСПРАВЕН 2-й канал АД                                                   \r\n",76);

        if(bytes[4]&0x04)

        write(handle,"НЕИСПРАВЕН 3-й канал АД                                                   \r\n",76);

        if(bytes[3]&0x01)

        write(handle,"НЕИСПРАВЕН 1-й канал УХК                                                  \r\n",76);

        if(bytes[3]&0x02)

        write(handle,"НЕИСПРАВЕН 2-й канал УХК                                                  \r\n",76);

        if(bytes[3]&0x04)

        write(handle,"НЕИСПРАВЕН 3-й канал УХК                                                  \r\n",76);

        if(bytes[2]&0x01)

        write(handle,"НЕИСПРАВНОСТЬ логической части ШК                                         \r\n",76);

        if(bytes[2]&0x02)

       {write(handle,"НЕИСПРАВЕН хотя бы один или несколько элементов ИГП                       \r\n",76);

        write(handle,"Для уточнения считай ячейку ВБШК1.ПФЗ для ШК1 или ВБШК2.ПФЗ для ШК2       \r\n",76);

       }

        if(bytes[2]&0x04)

       {write(handle,"НЕИСПРАВНО УХК - установлена единица в 8-ом разряде уточненого слова      \r\n",76);

        write(handle,"состояния УХК                                                             \r\n",76);

       }

        if(bytes[1]&0x01)

        write(handle,"БОЗУ занято более 3-х секунд                                              \r\n",76);

        if(bytes[1]&0x02)

       {write(handle,"НЕИСПРАВНО УХК (неправильное сочетание 3 и 10 разрядов уточненого слова   \r\n",76);

        write(handle,"состояния УХК)                                                            \r\n",76);

       }

        if(bytes[1]&0x04)

       {write(handle,"УХК ЗАБЛОКИРОВАН по причине работы с носителем 83т015. Получен 9 или 11   \r\n",76);

        write(handle,"разряд в ИСС УХК (см. п.4.7.1. протокола инв.30337)                       \r\n",76);

       }

        if((!(bytes[12]&0x01))&&(!(bytes[12]&0x02)))

        write(handle,"ПУ-1 ИСПРАВЕН                                                             \r\n",76);

        if(bytes[12]&0x01)

        write(handle,"Нажата кнопка ОБНАРУЖЕНА НЕИСПРАВНОСТЬ на ПУ-1                            \r\n",76);

        if(bytes[12]&0x02)

        write(handle,"Неисправно направление связи, соединяющее с ПУ-1                          \r\n",76);

        if((!(bytes[12]&0x04))&&(!(bytes[11]&0x01)))

        write(handle,"ПУ-2 ИСПРАВЕН                                                             \r\n",76);

        if(bytes[12]&0x04)

        write(handle,"Нажата кнопка ОБНАРУЖЕНА НЕИСПРАВНОСТЬ на ПУ-2                            \r\n",76);

        if(bytes[11]&0x01)

        write(handle,"Неисправно направление связи, соединяющее с ПУ-2                          \r\n",76);

        if((!(bytes[11]&0x04))&&(!(bytes[11]&0x02)))

        write(handle,"ПУ-3 ИСПРАВЕН                                                             \r\n",76);

        if(bytes[11]&0x02)

        write(handle,"Нажата кнопка ОБНАРУЖЕНА НЕИСПРАВНОСТЬ на ПУ-3                            \r\n",76);

        if(bytes[11]&0x04)

        write(handle,"Неисправно направление связи, соединяющее с ПУ-3                          \r\n",76);

        if((!(bytes[10]&0x01))&&(!(bytes[10]&0x02)))

        write(handle,"ПУ-4 ИСПРАВЕН                                                             \r\n",76);

        if(bytes[10]&0x01)

        write(handle,"Нажата кнопка ОБНАРУЖЕНА НЕИСПРАВНОСТЬ на ПУ-4                            \r\n",76);

        if(bytes[10]&0x02)

        write(handle,"Неисправно направление связи, соединяющее с ПУ-4                          \r\n",76);

        if(bytes[10]&0x04)

        write(handle,"Неисправен 1-й канал схемных узлов БУ-695                                 \r\n",76);

        if(bytes[9]&0x01)

        write(handle,"Неисправен 2-й канал схемных узлов БУ-695                                 \r\n",76);

        if(bytes[9]&0x02)

        write(handle,"Неисправен 3-й канал схемных узлов БУ-695                                 \r\n",76);

        if(bytes[9]&0x04)

        write(handle,"Неисправен 1-й канал ПРЦ                                                  \r\n",76);

        if(bytes[8]&0x01)

        write(handle,"Неисправен 2-й канал ПРЦ                                                  \r\n",76);

        if(bytes[8]&0x02)

        write(handle,"Неисправен 3-й канал ПРЦ                                                  \r\n",76);

        if(bytes[8]&0x04)

       {write(handle,"Неисправно направление связи С1 по передаче от ВМ к ШК и/или по приему    \r\n",76);

        write(handle,"от ШК к ВМ и/или по причине не получения от ШК кодограмм по времени.      \r\n",76);

        write(handle,"Формирует ФК-читай слово памяти ВБШК1(2).ПФЗ                              \r\n",76);

        if(bytes[7]&0x01)

        write(handle,"ШК забракован функциональной задачей - читай слово памяти ВБШК1(2).ПФЗ    \r\n",76);

        write(handle,"                                                                          \r\n",76);

        write(handle,"                       ИНФОРМАЦИОННОЕ СОСТОЯНИЕ ШКАФА                     \r\n",76);

        write(handle,"                                                                          \r\n",76);

        if(bytes[26]&0x02)

        write(handle,"                Шкаф НЕИСПРАВЕН ПО ИНФОРМАЦИОННОМУ СОСТОЯНИЮ              \r\n",76);

        else

        write(handle,"                Шкаф ИСПРАВЕН ПО ИНФОРМАЦИОННОМУ СОСТОЯНИЮ                \r\n",76);

        write(handle,"                                                                          \r\n",76);

        write(handle,"                       Состояние БХХХХХ ШХХХХХ и КХХХХ                    \r\n",76);

        write(handle,"                                                                          \r\n",76);

        write(handle," БХХХХХ ШХХХХХ 1-го массива СХХ                                           \r\n",76);

        if((!(bytes[15]&0x01))&&(!(bytes[15]&0x02)))

        write(handle,"          НЕ ЗАПИСАНЫ                                                     \r\n",76);

           if((bytes[15]&0x01)&&(bytes[15]&0x02))

        write(handle,"          УНИЧТОЖЕНЫ                                                      \r\n",76);

        if((bytes[15]&0x01)&&(!(bytes[15]&0x02)))

        write(handle,"          СОХРАНЕНЫ                                                       \r\n",76);

        if((bytes[15]&0x02)&&(!(bytes[15]&0x01)))

        write(handle,"          РАЗРУШЕНЫ                                                       \r\n",76);

        write(handle," БХХХХХ ШХХХХХ 2-го массива СХХ                                           \r\n",76);

        if((!(bytes[17]&0x04))&&(!(bytes[16]&0x01)))

        write(handle,"          НЕ ЗАПИСАНЫ                                                     \r\n",76);

           if((bytes[17]&0x04)&&(bytes[16]&0x01))

        write(handle,"          УНИЧТОЖЕНЫ                                                      \r\n",76);

        if((bytes[17]&0x04)&&(!(bytes[16]&0x01)))

        write(handle,"          СОХРАНЕНЫ                                                       \r\n",76);

        if((bytes[16]&0x01)&&(!(bytes[17]&0x04)))

        write(handle,"          РАЗРУШЕНЫ                                                       \r\n",76);

        write(handle," БХХХХХ КХХХХ ОХХ                                                         \r\n",76);

        if((!(bytes[18]&0x04))&&(!(bytes[18]&0x02)))

        write(handle,"          НЕ ЗАПИСАНЫ                                                     \r\n",76);

           if((bytes[18]&0x04)&&(bytes[18]&0x02))

        write(handle,"          УНИЧТОЖЕНЫ                                                      \r\n",76);

        if((bytes[18]&0x02)&&(!(bytes[18]&0x04)))

        write(handle,"          СОХРАНЕНЫ                                                       \r\n",76);

        if((bytes[18]&0x04)&&(!(bytes[18]&0x02)))

        write(handle,"          РАЗРУШЕНЫ                                                       \r\n",76);

        write(handle," БХХХХХ КХХХХ УХХ                                                         \r\n",76);

        if((!(bytes[19]&0x02))&&(!(bytes[19]&0x01)))

        write(handle,"          НЕ ЗАПИСАНЫ                                                     \r\n",76);

           if((bytes[19]&0x02)&&(bytes[19]&0x01))

        write(handle,"          УНИЧТОЖЕНЫ                                                      \r\n",76);

        if((bytes[19]&0x01)&&(!(bytes[19]&0x02)))

        write(handle,"          СОХРАНЕНЫ                                                       \r\n",76);

        if((bytes[19]&0x02)&&(!(bytes[19]&0x01)))

        write(handle,"          РАЗРУШЕНЫ                                                       \r\n",76);

        write(handle," БХХХХХ КХХХХ УХ                                                          \r\n",76);

        if((!(bytes[22]&0x02))&&(!(bytes[22]&0x01)))

        write(handle,"          НЕ ЗАПИСАНЫ                                                     \r\n",76);

           if((bytes[22]&0x02)&&(bytes[22]&0x01))

        write(handle,"          УНИЧТОЖЕНЫ                                                      \r\n",76);

        if((bytes[22]&0x01)&&(!(bytes[22]&0x02)))

        write(handle,"          СОХРАНЕНЫ                                                       \r\n",76);

        if((bytes[22]&0x02)&&(!(bytes[22]&0x01)))

        write(handle,"          РАЗРУШЕНЫ                                                       \r\n",76);

        write(handle," БХХХХХ КХХХХ РХХ                                                         \r\n",76);

        if((!(bytes[23]&0x01))&&(!(bytes[24]&0x04)))

        write(handle,"          НЕ ЗАПИСАНЫ                                                     \r\n",76);

           if((bytes[23]&0x01)&&(bytes[24]&0x04))

        write(handle,"          УНИЧТОЖЕНЫ                                                      \r\n",76);

        if((bytes[24]&0x04)&&(!(bytes[23]&0x01)))

        write(handle,"          СОХРАНЕНЫ                                                       \r\n",76);

        if((bytes[23]&0x01)&&(!(bytes[24]&0x04)))

        write(handle,"          РАЗРУШЕНЫ                                                       \r\n",76);

        write(handle,"                                                                          \r\n",76);

        write(handle,"                       Состояние УХХХХХ ШХХХХХ и КХХХХ                    \r\n",76);

        write(handle,"                                                                          \r\n",76);

        write(handle," УХХХХХ ШХХХХХ 1-го массива СХХ                                           \r\n",76);

        if((!(bytes[14]&0x01))&&(!(bytes[15]&0x04)))

        write(handle,"          НЕ ЗАПИСАНЫ                                                     \r\n",76);

           if((bytes[14]&0x01)&&(bytes[15]&0x04))

        write(handle,"          УНИЧТОЖЕНЫ                                                      \r\n",76);

        if((bytes[15]&0x04)&&(!(bytes[14]&0x01)))

        write(handle,"          СОХРАНЕНЫ                                                       \r\n",76);

        if((bytes[14]&0x01)&&(!(bytes[15]&0x04)))

        write(handle,"          РАЗРУШЕНЫ                                                       \r\n",76);

        write(handle," УХХХХХ ШХХХХХ 2-го массива СХХ                                           \r\n",76);

        if((!(bytes[16]&0x04))&&(!(bytes[16]&0x02)))

        write(handle,"          НЕ ЗАПИСАНЫ                                                     \r\n",76);

           if((bytes[16]&0x04)&&(bytes[16]&0x02))

        write(handle,"          УНИЧТОЖЕНЫ                                                      \r\n",76);

        if((bytes[16]&0x02)&&(!(bytes[16]&0x04)))

        write(handle,"          СОХРАНЕНЫ                                                       \r\n",76);

        if((bytes[16]&0x04)&&(!(bytes[16]&0x02)))

        write(handle,"          РАЗРУШЕНЫ                                                       \r\n",76);

        write(handle," УХХХХХ КХХХХ ОХХ                                                         \r\n",76);

        if((!(bytes[17]&0x02))&&(!(bytes[17]&0x01)))

        write(handle,"          НЕ ЗАПИСАНЫ                                                     \r\n",76);

           if((bytes[17]&0x02)&&(bytes[17]&0x01))

        write(handle,"          УНИЧТОЖЕНЫ                                                      \r\n",76);

        if((bytes[17]&0x01)&&(!(bytes[17]&0x02)))

        write(handle,"          СОХРАНЕНЫ                                                       \r\n",76);

        if((bytes[17]&0x02)&&(!(bytes[17]&0x01)))

        write(handle,"          РАЗРУШЕНЫ                                                       \r\n",76);

        write(handle," УХХХХХ КХХХХ УХХ                                                         \r\n",76);

        if((!(bytes[19]&0x04))&&(!(bytes[18]&0x01)))

        write(handle,"          НЕ ЗАПИСАНЫ                                                     \r\n",76);

           if((bytes[19]&0x04)&&(bytes[18]&0x01))

        write(handle,"          УНИЧТОЖЕНЫ                                                      \r\n",76);

        if((bytes[19]&0x04)&&(!(bytes[18]&0x01)))

        write(handle,"          СОХРАНЕНЫ                                                       \r\n",76);

        if((bytes[18]&0x01)&&(!(bytes[19]&0x04)))

        write(handle,"          РАЗРУШЕНЫ                                                       \r\n",76);

        write(handle," УХХХХХ КХХХХ УХ                                                          \r\n",76);

        if((!(bytes[21]&0x01))&&(!(bytes[22]&0x04)))

        write(handle,"          НЕ ЗАПИСАНЫ                                                     \r\n",76);

           if((bytes[21]&0x01)&&(bytes[22]&0x04))

        write(handle,"          УНИЧТОЖЕНЫ                                                      \r\n",76);

        if((bytes[22]&0x04)&&(!(bytes[21]&0x01)))

        write(handle,"          СОХРАНЕНЫ                                                       \r\n",76);

        if((bytes[21]&0x01)&&(!(bytes[22]&0x04)))

        write(handle,"          РАЗРУШЕНЫ                                                       \r\n",76);

        write(handle," УХХХХХ КХХХХ РХХ                                                         \r\n",76);

        if((!(bytes[23]&0x02))&&(!(bytes[23]&0x04)))

        write(handle,"          НЕ ЗАПИСАНЫ                                                     \r\n",76);

           if((bytes[23]&0x02)&&(bytes[23]&0x04))

        write(handle,"          УНИЧТОЖЕНЫ                                                      \r\n",76);

        if((bytes[23]&0x02)&&(!(bytes[23]&0x04)))

        write(handle,"          СОХРАНЕНЫ                                                       \r\n",76);

        if((bytes[23]&0x04)&&(!(bytes[23]&0x02)))

        write(handle,"          РАЗРУШЕНЫ                                                       \r\n",76);

        write(handle,"                                                                          \r\n",76);

        write(handle,"                        НАВЯЗЫВАНИЕ ЛОЖНОЙ ИНФОРМАЦИИ                     \r\n",76);

        write(handle,"                                                                          \r\n",76);

        if(bytes[24]&0x02)

        write(handle,"Есть НЛИ по массиву N1  шххххх СХХ                                        \r\n",76);

        if(bytes[24]&0x01)

        write(handle,"Есть НЛИ по массиву N2  шххххх СХХ                                        \r\n",76);

        if(bytes[25]&0x04)

        write(handle,"Есть НЛИ по массиву кхххх УХХ                                             \r\n",76);

        if(bytes[25]&0x01)

        write(handle,"Есть НЛИ по массиву кхххх УХ                                              \r\n",76);

        if(bytes[26]&0x04)

        write(handle,"Есть НЛИ по массиву кхххх РХХ                                             \r\n",76);

        if((!(bytes[24]&0x02))&&(!(bytes[24]&0x01))&&(!(bytes[25]&0x04))

        &&(!(bytes[25]&0x02))&&(!(bytes[25]&0x01))&&(!(bytes[26]&0x04)))

        write(handle,"НЛИ ОТСУТСТВУЕТ по всем массивам                                          \r\n",76);

        break;

case 3:      // В

case 6:      // КС1

case 14:     // КС2

        if(bytes[5]&0x04)

        write(handle,"                          КС НЕИСПРАВЕН                                   \r\n",76);

        else

        write(handle,"                          КС ИСПРАВЕН                                     \r\n",76);

        write(handle,"                                                                          \r\n",76);

        if(bytes[19]&0x01)

        write(handle,"Прием от АК1 трех кодограмм подряд с признаком К2                         \r\n",76);

        if(bytes[19]&0x02)

        write(handle,"Прием от АК1 трех кодограмм подряд с ВПС=1010                             \r\n",76);

        if(bytes[19]&0x04)

        write(handle,"Отсутствие информации от АК1 на входе ПУ более 12 сек                     \r\n",76);

        if(bytes[18]&0x01)

        write(handle,"Прием от АК1 трех кодограмм подряд с признаком получения УС               \r\n",76);

        if(bytes[18]&0x02)

        write(handle,"Отсутствие связи в тракте от ЦКС1 до АК1                                  \r\n",76);

        if(bytes[18]&0x04)

        write(handle,"Отсутствие связи в тракте от ЦКС1 до ЦКС2 для АК1                         \r\n",76);

        if(bytes[17]&0x01)

        write(handle,"Отсутствие связи в тракте от АК1 до ЦКС1                                  \r\n",76);

        write(handle,"                                                                          \r\n",76);

        if(bytes[23]&0x01)

        write(handle,"Прием от АК3 трех кодограмм подряд с признаком К2                         \r\n",76);

        if(bytes[23]&0x02)

        write(handle,"Прием от АК3 трех кодограмм подряд с ВПС=1010                             \r\n",76);

        if(bytes[23]&0x04)

        write(handle,"Отсутствие информации от АК3 на входе ПУ более 12 сек                     \r\n",76);

        if(bytes[22]&0x01)

        write(handle,"Прием от АК3 трех кодограмм подряд с признаком получения УС               \r\n",76);

        if(bytes[22]&0x02)

        write(handle,"Отсутствие связи в тракте от ЦКС1 до АК3                                  \r\n",76);

        if(bytes[22]&0x04)

        write(handle,"Отсутствие связи в тракте от ЦКС1 до ЦКС2 для АК3                         \r\n",76);

        if(bytes[21]&0x01)

        write(handle,"Отсутствие связи в тракте от АК3 до ЦКС1                                  \r\n",76);

        write(handle,"                                                                          \r\n",76);

        if(bytes[26]&0x01)

        write(handle,"Прием от АК6 трех кодограмм подряд с признаком К2                         \r\n",76);

        if(bytes[26]&0x02)

        write(handle,"Прием от АК6 трех кодограмм подряд с ВПС=1010                             \r\n",76);

        if(bytes[26]&0x04)

        write(handle,"Отсутствие информации от АК6 на входе ПУ более 12 сек                     \r\n",76);

        if(bytes[25]&0x01)

        write(handle,"Прием от АК6 трех кодограмм подряд с признаком получения УС               \r\n",76);

        if(bytes[25]&0x02)

        write(handle,"Отсутствие связи в тракте от ЦКС1 до АК6                                  \r\n",76);

        if(bytes[25]&0x04)

        write(handle,"Отсутствие связи в тракте от ЦКС1 до ЦКС2 для АК6                         \r\n",76);

        if(bytes[24]&0x01)

        write(handle,"Отсутствие связи в тракте от АК6 до ЦКС1                                  \r\n",76);

        write(handle,"                                                                          \r\n",76);

        if(bytes[16]&0x01)

        write(handle,"Прием от  ВПУ  трех  кодограмм подряд с признаком К2                      \r\n",76);

        if(bytes[16]&0x02)

        write(handle,"Прием от ВПУ трех кодограмм подряд с ВПС=1010                             \r\n",76);

        if(bytes[16]&0x04)

        write(handle,"Отсутствие информации от ВПУ на входе ПУ более 12 сек                     \r\n",76);

        if(bytes[15]&0x01)

        write(handle,"Прием от АК6 трех кодограмм подряд с признаком получения УС               \r\n",76);

        if(bytes[15]&0x02)

        write(handle,"Отсутствие связи в тракте от ЦКС1 до ВПУ                                  \r\n",76);

        if(bytes[15]&0x04)

        write(handle,"Отсутствие связи в тракте от ЦКС1 до ЦКС2 для ВПУ                         \r\n",76);

        if(bytes[14]&0x01)

        write(handle,"Отсутствие связи в тракте от ВПУ до ЦКС1                                  \r\n",76);

        write(handle,"                                                                          \r\n",76);

        if(bytes[17]&0x04)

        write(handle,"Отсутствие связи в тракте от ЦКС1 до ПУ                                   \r\n",76);

        write(handle,"                                                                          \r\n",76);

        if(bytes[10]&0x02)

        write(handle,"Отсутствие приема кодограмм в заданный интервал времени                   \r\n",76);

        write(handle,"                                                                          \r\n",76);

        if((bytes[12]&0x07)&&(!(bytes[11]&0x07)))

        write(handle,"Прием кодограмм с признаком отсутствия связи от ПУ до М486                \r\n",76);

        if((bytes[11]&0x07)&&(!(bytes[12]&0x07)))

       {

        write(handle,"Прием кодограмм с признаком искажения информации от ЦКС до М486  и/или    \r\n",76);

        write(handle,"прием кодограмм с признаком отсутствия импульса БИ                        \r\n",76);

       }

        if((bytes[11]&0x07)&&(bytes[12]&0x07))

       {

        write(handle,"Прием кодограмм с признаком отсутствия связи от ПУ до М486 и/или          \r\n",76);

        write(handle,"прием кодограмм с признаком искажения информации от ЦКС до М486  и/или    \r\n",76);

        write(handle,"прием кодограмм с признаком отсутствия импульса БИ                        \r\n",76);

       }

        break;

case 2:      // РМ-02

        write(handle,"                                                                          \r\n",76);

        if(bytes[5]&0x01)

        write(handle,"АРМ ЗАБЛОКИРОВАНО по ФК оператором                                        \r\n",76);

        write(handle,"                                                                          \r\n",76);

        if(bytes[5]&0x04)

        write(handle,"НЕТ СВЯЗИ МЕЖДУ ПЭВМ1 и ВК                                                \r\n",76);

        if(bytes[4]&0x02)

        write(handle,"Нет связи с ВК по одной из линий связи ЛС1 или ЛС3                        \r\n",76);

        if(bytes[3]&0x04)

        write(handle,"Нет связи с ВК по линии связи ЛС1                                         \r\n",76);

        if(bytes[2]&0x02)

        write(handle,"Нет связи с ВК по линии связи ЛС3                                         \r\n",76);

        break;

case 10:     // РМ-10

        write(handle,"                                                                          \r\n",76);

        if(bytes[5]&0x01)

        write(handle,"АРМ ЗАБЛОКИРОВАНО по ФК оператором                                        \r\n",76);

        write(handle,"                                                                          \r\n",76);

        if(bytes[5]&0x04)

        write(handle,"НЕТ СВЯЗИ МЕЖДУ ПЭВМ2 и ВК                                                \r\n",76);

        if(bytes[4]&0x02)

        write(handle,"Нет связи с ВК по одной из линий связи ЛС2 или ЛС4                        \r\n",76);

        if(bytes[2]&0x01)

        write(handle,"Нет связи с ВК по линии связи ЛС2                                         \r\n",76);

        if(bytes[2]&0x04)

        write(handle,"Нет связи с ВК по линии связи ЛС4                                         \r\n",76);

        break;

case 5:      // РМ05Г

case 13:     // РМ13П

        if(bytes[19]&0x01)

        write(handle,"ОСНОВНОЙ АРМ - РМ-13П                                                     \r\n",76);

        else

        write(handle,"ОСНОВНОЙ АРМ - РМ-05Г                                                     \r\n",76);

        write(handle,"                                                                          \r\n",76);

        if(bytes[5]&0x04)

        write(handle,"                          АРМ НЕИСПРАВЕН                                  \r\n",76);

        else

        write(handle,"                          АРМ ИСПРАВЕН                                    \r\n",76);

        write(handle,"                                                                          \r\n",76);

        if(bytes[16]&0x02)

        write(handle,"Основное АРМ ИСПРАВНО                                                     \r\n",76);

        if(bytes[16]&0x01)

        write(handle,"Основное АРМ НЕИСПРАВНО                                                   \r\n",76);

        if(bytes[16]&0x04)

        write(handle,"Основное АРМ ЗАБЛОКИРОВАНО                                                \r\n",76);

        if(bytes[15]&0x01)

        write(handle,"Основное АРМ РАЗБЛОКИРОВАНО                                               \r\n",76);

        if(bytes[19]&0x04)

        write(handle,"Резервное АРМ ИСПРАВНО                                                    \r\n",76);

        if(bytes[19]&0x02)

        write(handle,"Резервное АРМ НЕИСПРАВНО                                                  \r\n",76);

        if(bytes[18]&0x01)

        write(handle,"Резервное АРМ ЗАБЛОКИРОВАНО                                               \r\n",76);

        if(bytes[18]&0x02)

        write(handle,"Резервное АРМ РАЗБЛОКИРОВАНО                                              \r\n",76);

        if(bytes[5]&0x01)

        write(handle,"АРМ ЗАБЛОКИРОВАНО по ФК оператором                                        \r\n",76);

        write(handle,"                                                                          \r\n",76);

        if(bytes[4]&0x02)

        write(handle,"Неисправна одна из трех линий магистрали обмена                           \r\n",76);

        else

        write(handle,"Все три линии магистрали обмена исправны                                  \r\n",76);

        if(bytes[12]&0x04)

        write(handle,"Неисправна 1-я линия магистрали приема                                    \r\n",76);

        if(bytes[12]&0x02)

        write(handle,"Неисправна 2-я линия магистрали приема                                    \r\n",76);

        if(bytes[12]&0x01)

        write(handle,"Неисправна 3-я линия магистрали приема                                    \r\n",76);

        if(bytes[10]&0x02)

        write(handle,"Отсутствует прием информации в ВМ от данного АРМ-1                        \r\n",76);

        break;

case 7:      // ВМ

        if(bytes[5]&0x02)

        write(handle,"Авария электропитания в одном или нескольких каналах ШП-614               \r\n",76);

        if(bytes[4]&0x04)

        write(handle,"Неисправность 1 канала ШП-614                                             \r\n",76);

        if(bytes[3]&0x01)

        write(handle,"Неисправность 2 канала ШП-614                                             \r\n",76);

        if(bytes[3]&0x02)

        write(handle,"Неисправность 3 канала ШП-614                                             \r\n",76);

        if(bytes[3]&0x04)

        write(handle,"Произошел ПРОГРАММНЫЙ СБОЙ                                                \r\n",76);

        if(bytes[2]&0x01)

        write(handle,"Авария питания 1 канала                                                   \r\n",76);

        if(bytes[2]&0x02)

        write(handle,"Авария питания 1 канала                                                   \r\n",76);

        if(bytes[2]&0x04)

        write(handle,"Авария питания 1 канала                                                   \r\n",76);

        if(bytes[0]&0x01)

        write(handle,"Нарушена целостность программного изделия-кассеты КП-610 -                \r\n",76);

        write(handle,"подсчитанная контрольная сумма не совпадает с эталоном                    \r\n",76);

        break;

case 16:     // ВУ16

case 17:     // ВУ17

case 18:     // ВУ18

case 19:     // ВУ19

        if(bytes[5]&0x01)

        write(handle,"ПУ заблокировано оператором по ФК                                         \r\n",76);

        if(bytes[5]&0x04)

        write(handle,"Нажата КНОПКА ОБНАРУЖЕНИЯ НЕИСПРАВНОСТИ                                   \r\n",76);

        break;

case 15:     // АС

     //Подкорректировать после согласования

     //байта состояния

        if(bytes[5]&0x04)

        write(handle,"АРМ-РД НЕИСПРАВЕН - не работают обе ПЭВМ                                  \r\n",76);

        if(bytes[4]&0x01)

        write(handle,"АРМ-РД РАБОТОСПОСОБЕН - работает одна из двух ПЭВМ                        \r\n",76);

        if(bytes[4]&0x02)

        write(handle,"Нет связи хотя бы по одной из линий связи ЛС1,ЛС2,ЛС3,ЛС4                 \r\n",76);

        if(bytes[4]&0x04)

        write(handle,"Неисправен КСП-0                                                          \r\n",76);

        if(bytes[3]&0x01)

        write(handle,"Неисправен КСП-1                                                          \r\n",76);

        if(bytes[3]&0x02)

        write(handle,"Неисправен КСП-2                                                          \r\n",76);

        if(bytes[3]&0x04)

        write(handle,"Нет связи по линии связи ЛС1                                              \r\n",76);

        if(bytes[2]&0x01)

        write(handle,"Нет связи по линии связи ЛС2                                              \r\n",76);

        if(bytes[2]&0x02)

        write(handle,"Нет связи по линии связи ЛС3                                              \r\n",76);

        if(bytes[2]&0x04)

        write(handle,"Нет связи по линии связи ЛС4                                              \r\n",76);

        break;

}

}

// bs2_out.prj

// bs2_out.c

// main()

// выдача результатов запроса по 2-й форме байтов состояния на экран

// ( из файла ) или форматирование и постановка в очередь для выдачи

// на принтер

#include <dos.h>

#include "cxlkey.h"

#include "disp.h"

extern void resScr(void);

// выдача результатов запроса из файла на экран

extern void resPrn(void);

// выдача результатов запроса из файла на принтер

void main(int argc,char *argv[])

{

void z(void);

setkbloop(z);

if(argv[1][0]=='э') resScr();

else resPrn();

}

void z(void)

{

union REGS r;

r.h.ah=0;

int86(DISP,&r,&r);

}

#include <dos.h>

#include "cxlkey.h"

#include "disp.h"

extern void resScr(void);

// выдача результатов запроса из файла на экран

extern void resPrn(void);

// выдача результатов запроса из файла на принтер

void main(int argc,char *argv[])

{

void z(void);

setkbloop(z);

if(argv[1][0]=='э') resScr();

else resPrn();

}

void z(void)

{

union REGS r;

r.h.ah=0;

int86(DISP,&r,&r);

}

// inq_out.prj

// INQ_OUT.C

// main()

// выдача результатов запроса на экран ( из файла )

// или форматирование и постановка в очередь для выдачи на принтер

#include <string.h>

#include <process.h>

#include "cxlkey.h"

#include "cxldef.h"

extern void resScr(void);

// выдача результатов запроса из файла на экран

extern void resPrn(void);

// выдача результатов запроса из файла на принтер

void main(int argc,char *argv[])

{

void z(void);

setkbloop(z);

if(argv[1][0]=='э') resScr();

else resPrn();

}

#include <dos.h>

#include "disp.h"

void z(void)

{

union REGS r;

r.h.ah=0;

int86(DISP,&r,&r);

}

// inq_out.prj

// res_scr.C

// res_scr()

// выдача результатов запроса на экран ( из файла )

#include <stdio.h>

#include <string.h>

#include "cxlwin.h"

#include "cxlkey.h"

#include "cxlvid.h"

#define LEN      81

#define TXTATTR  _CYAN

#define UP       0x4800

#define DOWN     0x5000

#define PGUP     0x4900

#define PGDOWN   0x5100

#define ESC      0x011b

void resScr(void)

 {

 FILE *f;  // дескриптор файла результатов

 int down; // номер текущей строки в файле

 int ch;   // код клавиши

 int i;

 char string[LEN];

 int mwup; // количество строк над основным окном

// вывод на экран строки запроса и шапки таблицы

f=fopen("inquiry.res","r++");

fgets(string,LEN,f);

for(mwup=0;strncmp(string+3,"ДАТА",4);++mwup)

 {

 wopen(mwup,0,mwup,79,5,BLUE|_LGREY,BLUE|_LGREY);

 wprintf("%.79s",string);

 fgets(string,LEN,f);

 }

wopen(mwup,0,mwup,79,5,YELLOW|_BLUE,YELLOW|_BLUE);

wprintf(" %.78s",string);

// основное окно

wopen(++mwup,0,25,79,5,LCYAN|_BLUE,TXTATTR);

//wshadow(LGREY);

// вывод результатов запроса из файла на экран

for(down=mwup;down<25 && fgets(string,LEN,f)!=NULL;++down)

 wprints(down-mwup,1,TXTATTR,string);

hidecur();

// цикл просмотра результатов

 while((ch=getxch())!=ESC)

 switch(ch)

 {

 case UP:    if(down<=25) break;

             down--;

             fseek(f,(long)(down-25+mwup)*LEN,0);

             fgets(string,LEN,f);

             wscroll(1,D_DOWN);

             wprints(0,1,TXTATTR,string);

             break;

 case DOWN:  if(fseek(f,(long)down*LEN,0)) break;

             if(fgets(string,LEN,f)==NULL) break;

             wscroll(1,D_UP);

             wprints(24-mwup,1,TXTATTR,string);

             down++;

             break;

 case PGUP:  for(i=0;i<=24-mwup;++i)

              {

              if(down<=25) break;

              down--;

              fseek(f,(long)(down-25+mwup)*LEN,0);

              fgets(string,LEN,f);

              wscroll(1,D_DOWN);

              wprints(0,1,TXTATTR,string);

              }

             break;

 case PGDOWN:  for(i=0;i<=24-mwup;++i)

                {

                if(fseek(f,(long)down*LEN,0)) break;

                if(fgets(string,LEN,f)==NULL) break;

                wscroll(1,D_UP);

                wprints(24-mwup,1,TXTATTR,string);

                down++;

                }

               break;

 }

fclose(f);

wcloseall();

}

// bs2_out.prj

// res_scr_.c

// res_scr()

// выдача результатов запроса по 2-й форме байтов состояния на экран

// ( из файла )

#include <stdio.h>

#include <string.h>

#include "cxlwin.h"

#include "cxlkey.h"

#include "cxlvid.h"

#define LEN      100

#define TXTATTR  _CYAN

#define UP       0x4800

#define DOWN     0x5000

#define PGUP     0x4900

#define PGDOWN   0x5100

#define RIGHT    0x4d00

#define LEFT     0x4b00

#define HOME     0x4700

#define END      0x4F00

#define ESC      0x011b

 FILE *f;  // дескриптор файла результатов

 int down; // номер текущей строки в файле

 char string[LEN];

 int length; // длина строк в файле

 int w1; // дескриптор окна

 void screen_move(int right);

void resScr(void)

{

int right=0; // горизонтальное смещение

int ch;  // код клавиши

int i;

// вывод на экран строки запроса и шапки таблицы

f=fopen("inquiry.res","r++");

wopen(0,0,0,79,5,BLUE|_LGREY,BLUE|_LGREY);

fgets(string,LEN,f);

wprints(0,1,BLUE|_LGREY,string);

w1=wopen(1,0,1,79,5,YELLOW|_BLUE,YELLOW|_BLUE);

fgets(string,LEN,f);

wprints(0,1,YELLOW|_BLUE,string);

length=strlen(string)+1;

// основное окно

wopen(2,0,25,79,5,LCYAN|_BLUE,TXTATTR);

hidecur();

//wshadow(LGREY);

// вывод результатов запроса из файла на экран

for(down=2;down<25 && fgets(string,LEN,f)!=NULL;++down)

 {

 string[right+80]='\0';

 wprints(down-2,1,TXTATTR,string);

 }

// цикл просмотра результатов

 while((ch=getxch())!=ESC)

 switch(ch)

 {

 case UP:    if(down<=25) break;

             down--;

             fseek(f,(long)(down-23)*length,0);

             fgets(string,LEN,f);

             string[right+79]='\0';

             wscroll(1,D_DOWN);

             wprints(0,1,TXTATTR,string+right);

             break;

 case DOWN:  if(fseek(f,(long)down*length,0)) break;

             if(fgets(string,LEN,f)==NULL) break;

             wscroll(1,D_UP);

             string[right+80]='\0';

             wprintc(22,0,TXTATTR,' ');

             down++;

             break;

 case PGUP:  for(i=0;i<=22;++i)

              {

              if(down<=25) break;

              down--;

              fseek(f,(long)(down-23)*length,0);

              fgets(string,LEN,f);

              wscroll(1,D_DOWN);

              string[right+80]='\0';

              wprints(0,1,TXTATTR,string+right);

              wprintc(1,0,TXTATTR,' ');

              }

             break;

 case PGDOWN: for(i=0;i<=22;++i)

               {

               if(fseek(f,(long)down*length,0)) break;

               if(fgets(string,LEN,f)==NULL) break;

               wscroll(1,D_UP);

               string[right+80]='\0';

               wprints(22,1,TXTATTR,string+right);

               down++;

               }

              break;

 case LEFT:  if(right) screen_move(--right);break;

 case RIGHT: if(right+82<length) screen_move(++right);break;

 case END:   if(right+82<length) screen_move(right=length-82);break;

 case HOME:  if(right) screen_move(right=0);break;

 }

fclose(f);

wcloseall();

}

// горизонтальная прокрутка

void screen_move(int right)

{

int i;

fseek(f,length,0);

fgets(string,LEN,f);

string[right+80]='\0';

wwprints(w1,0,1,YELLOW|_BLUE,string+right);

if(down-22>2) fseek(f,(long)(down-22)*length,0);

for(i=0;i<=22 && fgets(string,length,f)!=NULL;++i)

 {

 string[right+80]='\0';

 wprints(i,1,TXTATTR,string+right);

 }

}

#include <stdio.h>

#include <string.h>

#include "cxlwin.h"

#include "cxlkey.h"

#include "cxlvid.h"

#define LEN      80

#define ESC      0x011b

 FILE *f;        // дескриптор файла результатов

 char string[LEN]; // буфер для чтения из файла

void resScr(void)

{

int i;

int maxlen; //  максимальная длина строки в файле результатов запроса

int startpos; // столбец окна с которого печатается текст

// открытие файла результатов запроса и

// определение размера самой длинной строки в этом файле

f=fopen("inquiry.res","r++");

for(maxlen=0,i=0;fgets(string,LEN,f)!=NULL;++i)

  if(strlen(string)>maxlen) maxlen=strlen(string);

fseek(f,0,0);

// черный фон

wopen(0,0,24,79,5,0,0);

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

wopen((20-i)/2,5,(20-i)/2+i+2,75,1,YELLOW|_BLUE,_CYAN);

hidecur();

// чтение типа устройства и его использование в качестве титула окна

fgets(string+1,LEN,f);

string[0]=' ';

for(i=2;i<=6;++i)

 if(string[i]=='\r' || string[i]=='\n') string[i]=' ';

wtitle(string,TCENTER,_LGREY);

// вывод результатов запроса из файла в окно

startpos=(70-maxlen)/2;

for(i=2;fgets(string,LEN,f)!=NULL;++i)

 {

 wgotoxy(i,startpos);

 wprintf("%s",string);

 }

// окно находится на экране пока не будет нажато ESC

while(getxch()!=ESC);

fclose(f);

wcloseall();

}

Список литературы

1.            Глушков В. М. “Основы безбумажной информатики”, М. Наука, 1987 г.;

2.            “Человек и вычислительная техника” под ред. Глушкова В. М., М. Наука, 1971 г.;

3.            “Организационные вопросы автоматизации управления” (перевод с английского) Глушкова В. М., М. Экономика, 1972 г.;

4.            Мартин Дж. “Организация баз данных в вычислительных системах”, М. Мир, 1980 г.;

5.            Бойко В. В., Савинков В. М. “Проектирование баз данных информационных систем”, М. Финансы и статистика, 1989 г.;

6.            Шураков В. В. “Надежность программного обеспечения систем обработки данных”, М. Финансы и статистика, 1987 г.;

7.            Уинер Р. “Язык Турбо СИ”, М. Мир, 1991 г.;

8.            Paradox Engine. Документация: описание, список функций для создания и работы с БД.;

9.            “Турбо СИ. Описание редактора, стандартные и графические функции”, изд. Иститута проблем информатики, М. 1989 г.;

10.       Хьюз Дж., Мичтом Дж. “Структурный подход к программированию”. Изд. Мир, М., 1980 г.;

11.       “Выполнение организационно-экономической части дипломных проектов”. Учебное пособие, изд. МИРЭА, 1994 г.;

12.       “Выполнение организационно-экономической части дипломных проектов”. Учебное пособие, изд. МИРЭА, 1987 г.;

13.       “Сетевые графики в планировании”. Разумов И. М., Белова Л. Д., и др., М. Высшая школа, 1981 г.;

14.       “Основы финансового менеджмента. Как управлять капиталом?” Балабанов И. Т., М. “Финансы и статистика”, 1994 г.;

15.       Мотузко Ф. Я. “Охрана труда”, М. Высшая школа, 1969 г.;

16.       Самгин Э. Б. “Освещение рабочих мест”, изд. МИРЭА, 1989 г.;

17.       Сибаров Ю. Б. “Охрана труда в вычислительных центрах” и др., М. Машиностроение, 1990 г.;

18.       Методические указания по дипломному проектированию раздела “Охрана труда и окру­жающей среды” под ред. Мотузко Ф. Я., МИРЭА, 1980 г.;

19.       “Основы инженерной психологии” под ред. Ломова Б. Ф., М. Высшая школа, 1986 г.;

20.       Демиденко и др. “Защита объектов народного хозяйства от оружия массового поражения” Справочник, Киев "Высшая школа" 1989 г.;

21.       Методические указания по безопасности жизнедеятельности. “Особенности ведения аварийно-спасательных работ на промышленном объекте в ЧС мирного времени”, изд. МИРЭА.;

22.       Атаманюк В. Г., Ширшев Л. Г. и др. “Гражданская оборона. Учебник для ВТУЗов”, М. Высшая школа. 1987г.;

23.       “Введение в практическую эргономику. Учебное пособие.” под ред. Зинченко В. П., Моргунова Е. Б., изд. МИРЭА, 1990г.