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

Реферат

 

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

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

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

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

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



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

 

Введение

 

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

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

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

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

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

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

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

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

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

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

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

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



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

 

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

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

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

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

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

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

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

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

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

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

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

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



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

 

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



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

 

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

 

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

 

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

 

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

 

Выбор СУБД

 

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

 

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

 

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

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

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

Это означает, что необходимо организовать поиск по БД таким образом, чтобы минимизировать время поиска по БД, и, следовательно, уменьшить время ответа на запрос оператора (характеристика, рассмотренная в п.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
Неисправно направление связи С1 по передаче от ВК к Ш по причине неполучения от Ш-1 кодограмм по времени. ОТСУТСТВУЕТ СИГНАЛ СЕТЬ1 Заменить блок А4 в стойке П1 Ш-1 заблокирован функциональной задачей

Рис. 24

 

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

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

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

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

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

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

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

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

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

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

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

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

по всей БД;

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

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

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

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

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

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

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

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

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

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 - представление БС в виде справки;

 

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

 

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

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

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.

 

Введение

 

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

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

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

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

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

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

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

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

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

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

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



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

 

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

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

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

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

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

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

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

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

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

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

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

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 приведен перечень событий и работ, имеющих место при разработке АРМ РД.

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

 

Таблица 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 Выбор языка программирования
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 Исправление ошибок в программах
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).

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

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

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

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

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

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

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

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

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

Полный  и свободный  резервы времени определяются по формулам (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
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.1 Расчёт статьи “материалы, покупные изделия, полуфабрикаты"

 

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

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

 

Наименование товара Ед. Измерения Кол-во Цена за единицу (руб) Суммар. затраты (руб)
Дискеты Пачка 2 90 180
Чертежная бумага Листы 20 5 100
Бумага для принтера Пачка 3 80 240

Итого: 520

 

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

 

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


Расчёт накладных расходов

 

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

Накладные расходы принимаются в размере 250% от суммы основной заработной платы.

 

168260*2.5=420650 руб.

 

Расчёт договорной цены

 

Калькуляция стоимости разработки приведена в таблице 5.

Полная себестоимость разработки определяется суммированием пп.1 - 5 таблицы 5.

Оптовая цена определяется следующим образом:

 

Цопт = себестоимость + прибыль.

 

Прибыль составляет 30% от себестоимости:

 

Прибыль = 704732*0.3=211420 руб.

Цопт = 704732 + 211420=916152 руб.

 

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

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

Следовательно, договорная цена разработки составит 916152 руб.

 

Таблица 5.

№п/п Наименование статьи расхода Затраты (в руб)
1. Материалы, покупные изделия, полуфабрикаты 396
2. Основная заработная плата 168260
3. Дополнительная заработная плата 33652
4. Отчисления на социальные нужды 81774
5. Накладные расходы 420650
6. Полная себестоимость 704732
7. Прибыль 211420
8. Оптовая цена 916152
9. НДС -------
10. Договорная цена 916152

 



Заключение

 

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

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

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

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

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

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

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

Время разработки комплекса программ АРМ РД составит 624 дня (приблизительно 2.6 года).

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

Величина затрат на научно-исследовательские работы определена на основе метода калькуляций. Расчет произведен в ценах 1998г. Стоимость разработки составит 916 152 руб.

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



Введение

 

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

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

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



Выводы

 

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

Расчёты показали, что оператор получает информационную нагрузку, равную

 

.

 

Кроме того, необходимо в течение 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 Конец работы

 




Гражданская оборона

 

Введение

 

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

нефтеперерабатывающий завод;

газоперекачивающая станция;

ТЭЦ;

разного рода химические заводы;

предприятия по работе с радиоактивными материалами.

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

утечка СДЯВ;

утечка радиоактивных веществ;

опасность взрыва и пожара легко воспламеняющихся веществ.

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

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

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



Теоретическая часть

 

Источником взрыва является хранилище сжиженного пропана. При нарушении емкости со сжиженным пропаном, хранящимся под высоким давлением, происходит его вскипание с быстрым испарением, выброс в атмосферу и образование облака газопаровоздушной смеси. Когда объемная концентрация пропана превышает 7-9%, может произойти взрыв.

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

 

Оценка пожарной обстановки

 

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

степени огнестойкости зданий и сооружений;

категории пожароопасности производства;

расстояния между зданиями и сооружениями;

погодных условий.

 

Расчетная часть

 

Исходные данные

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

 

Расчет

 

Оценка пожарной обстановки

Радиус огненного шара:

 

 м,

 

время его существования


сек.

 

Поток излучения  от огненного шара:

 

, =270кВт/м2, ,

,

 кВт/м2.

 

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

 

, кДж/м2.

 

Выводы: так как расчетная величина импульса теплового потока равна 470кДж/м2, а предельная величина импульса теплового потока для кожи человека составляет 42кДж/м2 [Л2], то человек получит ожоги третьей степени. Одежда на человеке должна быть плотная и преимущественно из натуральных материалов, т.к синтетические ткани вспыхивают гораздо быстрее. Предельно безопасный радиус (радиус эвакуации) для человека составляет  м, так что можно сделать вывод, что здание находится в недопустимой близости от хранилища сжиженных углеводородов. Техника, размещенная в здании, также получит повреждения, оплавятся пластмассовые части. Кроме того, возможно возникновение пожаров из-за вторичных поражающих факторов: пробоев и нарушения электропроводки. Так как при этом здание имеет I - II степень огнестойкости и по категориям пожароопасности производство относится к категории Д, то возможны не сплошные пожары, а тление и горение в завалах, с учетом того, что здание получит сильные и полные разрушения.

Так как среднее расстояние между зданиями 40-50м, а при I и II степенях огнестойкости зданий для возникновения сплошных пожаров расстояние между зданиями должно быть не больше 10-15м, то вероятность возникновения сплошных пожаров мала. Скорость ветра также будет мало влиять на распространение пожара, т.к она невелика, а сплошных пожаров, как было сказано выше, не возникнет.




Предложения по защите

 

Эргономика

 

Введение

 

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

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

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

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

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

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

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



Теоретическая часть

 

Заключение

 

Итак, при эргономической оценке рабочего места оператора в качестве основных эргономических требований были выбраны следующие:

особенности конструктивного выполнения и расположения технических средств и аппаратуры;

длительность работы с данной аппаратурой;

точность и эффективность приема информации.

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

 

Таблица 1.

Элементы рабочего места оператора Технические характеристики, предъявляемые к элементу рабочего места оператора На какое требование влияет данная характеристика
Экран монитора Оптимальное расстояние наблюдения информации на экране монитора - 450-500мм. 2
  Расстояние между знаками по горизонтали: 0,25 высоты знака; расстояние между строками: 0,5-1,0 высоты знака; количество знаков в строке: 4-80; максимально допустимое количество строк для цветного изображения: не более 25.   2, 3
  Угол наблюдения экрана не должен превышать 60 градусов. При наличии трех и более дисплеев в рабочей зоне допускается увеличение этого угла, но он не должен превышать 90 градусов. 2
  Клавиатура Клавиатура должна быть размещена на столе или подставке так, чтобы высота клавиатуры пульта по отношению к полу составляла 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: 10 при рекомендуемом значении 1: 3. При яркости изображения на экране 50-100 кд/м (номинальное значение) освещенность документа должна составлять 300-500 лк. Должны быть исключены слепящие яркости, блики и отображения от стекла экрана. При использовании экранов красновато-желтого цвета с яркостью свечения до 15кд/м2 стену, противоположную экранам, окрашивают в насыщенный темно-коричневый цвет с коэффициентом отражения  =0.2, а остальные стены - в красно-коричневый цвет с  =0.35. При восприятии информации на экране зеленого цвета стену, на которую направлен взгляд оператора, окрашивают в оливково-зеленый цвет с =0.4. Окраске поверхностей следует придавать матовую фактуру. 1, 2, 3

 



Заключение

 

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

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

Объем памяти, занимаемый программой равен: V = 64 Кбайта.

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

Договорная цена разработки составляет: Цд = 916 152 руб. в ценах 1998г.

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

Значение информационной нагрузки оператора АРМ РД составляет 0.6 бит/с.

В разделе “Гражданская оборона" были приведены требования по инженерной защите оператора и оборудования ПЭВМ от воздействия высоких температур при взрывах в ЧС мирного времени.

В разделе “Эргономика" была произведена оценка рабочего места оператора и разработано оптимальное рабочее место оператора.



Приложение 1

 

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

 // 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г.

 

Реферат

 

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

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

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

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

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



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

 

Введение

 

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

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

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

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

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

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

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

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

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

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

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

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



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

 


Дата: 2019-05-29, просмотров: 292.