Автоматизированное рабочее место регистрации и документирования комплекса средств автоматизации
Анализ концепции построения комплекса средств автоматизации. Функционирование в рамках автоматизированной системы. Структура базы данных. Характеристика помещения и факторы, действующие на оператора в процессе его труда. Гражданская оборона, эргономика.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | реферат |
Язык | русский |
Дата добавления | 07.11.2009 |
Размер файла | 374,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
составляется перечень событий и работ,
устанавливается топология сети,
строится сетевой график по теме,
определяется продолжительность работ,
рассчитываются параметры сетевого графика,
определяется продолжительность критического пути,
проводится анализ и оптимизация сетевого графика.
Перечень событий приведен в таблице 2.4, перечень работ и их продолжительности - в таблице 2.5. На основании этих перечней строится сетевой график, изображенный на рис.2.1.
Таблица 2.4 Перечень событий сетевого графика.
Код события |
Событие |
|
1. |
ТЗ на систему разработано. |
|
2. |
ТЗ на систему утверждено. |
|
3. |
Спецификация закупаемых ТС разработана. |
|
4. |
Спецификация закупаемого ПО разработана. |
|
5. |
Спецификация закупаемых ТС утверждена. |
|
6. |
Спецификация закупаемого ПО утверждена. |
|
7. |
Входной контроль закупаемых ТС проведен. |
|
8. |
Входной контроль закупаемого ПО проведен. |
|
9. |
Стенд создан. |
|
10. |
Установлена и настроена сетевая ОС. |
|
11. |
Установлено антивирусное ПО. |
|
12. |
Установлены и отлажены специальные программные средства защиты информации. |
|
13. |
Разработана и выпущена инструкция по использованию антивирусного ПО. |
|
14. |
Разработана и выпущена инструкция по использованию встроенных средств защиты сетевой ОС. |
|
15. |
Определены требования к дополнительным программным средствам по защите информации. |
|
16. |
Разработана инструкция сетевому администратору по применению специальных средств защиты информации. |
|
17. |
Разработка рекомендаций по использованию средств защиты на ЛВС заказчика. |
|
18. |
Закончены работы по созданию системы защиты информации на ЛВС заказчика. |
|
19. |
Закончены работы по испытанию и сдаче заказчику системы. |
|
20. |
Оформлен протокол и акт испытаний. |
Таблица 2.5 Перечень работ сетевого графика.
i-j |
Работа |
tmin |
tmax |
to |
|
1-2 |
Утверждение ТЗ на систему. |
25 |
30 |
27 |
|
2-3 |
Разработка спецификации закупаемых ТС. |
5 |
7 |
6 |
|
2-4 |
Разработка спецификации закупаемого ПО. |
10 |
12 |
11 |
|
3-5 |
Утверждение спецификации закупаемых ТС. |
2 |
3 |
2 |
|
4-6 |
Утверждение спецификации закупаемого ПО. |
3 |
4 |
3 |
|
5-7 |
Проведение входного контроля закупаемых ТС. |
5 |
7 |
6 |
|
6-8 |
Проведение входного контроля закупаемого ПО. |
10 |
14 |
12 |
|
7-9 |
Монтаж стенда. |
10 |
15 |
12 |
|
9-10 |
Наладка стенда. |
3 |
4 |
3 |
|
8-10 |
Установка сетевой ОС. |
2 |
3 |
2 |
|
10-11 |
Установка антивирусного ПО. |
2 |
3 |
2 |
|
10-12 |
Установка специальных программных средств защиты информации. |
2 |
3 |
2 |
|
11-13 |
Разработка инструкции по использованию антивирусного ПО. |
8 |
10 |
9 |
|
10-14 |
Разработка инструкции по использованию встроенных средств защиты сетевой ОС. |
20 |
24 |
22 |
|
12-15 |
Формирование требований к дополнительным программным средствам по защите информации. |
22 |
26 |
24 |
|
i-j |
Работа |
tmin |
tmax |
to |
|
12-16 |
Разработка инструкции сетевому администратору по применению специальных средств защиты информации. |
25 |
29 |
27 |
|
13-17 |
Выпуск инструкции по использованию антивирусного ПО. |
5 |
8 |
6 |
|
14-17 |
Выпуск инструкции по использованию встроенных средств защиты сетевых ОС. |
7 |
9 |
8 |
|
15-17 |
Выпуск инструкции по применению дополнительных программных средств защиты. |
5 |
6 |
5 |
|
16-17 |
Выпуск инструкции сетевому администратору по применению специальных средств защиты. |
5 |
7 |
6 |
|
17-18 |
Проведение работ по созданию системы защиты информации на ЛВС заказчика. |
35 |
42 |
38 |
|
18-19 |
Проведение испытаний и сдача системы заказчику. |
24 |
30 |
27 |
|
19-20 |
Оформление протокола и акта испытаний. |
4 |
6 |
5 |
Выполнение больщинства работ по разработке нового изделия всегда связано с элементами неоднородности. Их продолжительность зависит от многих факторов, предвидеть которые очень трудно. Поэтому в системе сетевого планирования предложено определить две вероятностные оценки времени: оптимистическую и пессимистическую. Оптимистическая оценка - максимально необходимое время для выполнения данной работы при наиболее благоприятных условиях. Пессимистическая оценка - максимально необходимое время для выполнения работы при наиболее неблагоприятных условиях. В данной работе эти оценки берутся по опыту предыдущих разработок и все времена определяются в рабочих днях. Для расчета ожидаемой продолжительности работ используется формула:
to = (3tmin + 2tmax) / 5, (2.2)
где to - ожидаемая продолжительность работ,
tmin - оптимистическая оценка,
tmax - пессимистическая оценка.
После построения графика и сбора необходимых данных рассчитывают параметры сети: сроки свершения событий, резервы времени, продолжительность критического пути.
Любая последовательность работ в сети называется путем. Путь, имеющий наибольшую продолжительность называется критическим (Tкр). В данной работе критический путь равен 161 дня и выделен на рис.2.1 жирной линией.
Для расчета сети "в терминах событий" используются следующие понятия. Ранний срок наступления события (Tpi) - минимальный срок, необходимый для выполнения всех работ, предшествующих данному событию. Ранний срок наступления события i определяется по формуле:
Tpi = max toij. (2.3)
Поздний срок наступления события (Tni) - максимально допустимый срок наступления события i, при котором сохраняется возможность соблюдения ранних сроков наступления последующих событий. Поздний срок определяется по формуле:
Tni = Tкр - max to. (2.4)
Все события в сети, кроме лежащих на критическом пути имеют резерв времени (Ri), который определяется по формуле:
Ri = Tni - Tpi. (2.5)
При описании сети "в терминах работ" определяются ранние и поздние сроки начала и окончания работы. Ранний срок начала - Трнij = Трi, поздний срок начала - Тпнij = Tni - tij, ранний срок окончания - Троij = Трi + tij, поздний срок окончания - Тпоij = Tnj.
Работы сетевой модели могут иметь два вида резервов: полный (Rnij) и свободный (Rcij). Полный резерв показывает, на сколько может быть увеличена продолжительность данной работы или сдвинуто ее начало так, чтобы продолжительность максимального из проходящий через нее путей не превысила критического пути. Полный резерв определяется
Rnij = Tnj - Tpi - tij. (2.6)
Свободный резерв указывает максимальное время, на которое можно увеличить продолжительность данной работы или изменить ее начало, не меняя ранних сроков начала последующих работ. Определяется в виде:
Rcij = Tpj - Tpi - Tij. (2.7)
Результаты расчета параметров сетевого графика представлены в таблице 2.6
Таблица 2.6 Временные параметры работ сетевого графика.
i-j |
toij |
Tрнij |
Троij |
Тпнij |
Tпоij |
Rnij |
Rcij |
|
1-2 |
27 |
0 |
27 |
0 |
27 |
0 |
0 |
|
2-3 |
6 |
27 |
33 |
27 |
33 |
0 |
0 |
|
2-4 |
11 |
27 |
38 |
27 |
38 |
0 |
0 |
|
3-5 |
2 |
33 |
35 |
33 |
35 |
0 |
0 |
|
4-6 |
3 |
38 |
41 |
39 |
42 |
1 |
0 |
|
5-7 |
6 |
35 |
41 |
35 |
41 |
0 |
0 |
|
6-8 |
12 |
41 |
53 |
42 |
54 |
1 |
0 |
|
7-9 |
12 |
41 |
53 |
41 |
53 |
0 |
0 |
|
9-10 |
3 |
53 |
56 |
53 |
56 |
0 |
0 |
|
8-10 |
2 |
53 |
55 |
54 |
56 |
1 |
1 |
|
10-12 |
2 |
56 |
58 |
56 |
58 |
0 |
0 |
|
10-11 |
2 |
56 |
58 |
56 |
58 |
0 |
0 |
|
11-13 |
9 |
58 |
67 |
76 |
85 |
18 |
0 |
|
i-j |
toij |
Tрнij |
Троij |
Тпнij |
Tпоij |
Rnij |
Rcij |
|
10-14 |
22 |
56 |
78 |
56 |
78 |
0 |
0 |
|
12-15 |
24 |
58 |
82 |
62 |
86 |
4 |
0 |
|
12-16 |
27 |
58 |
85 |
58 |
95 |
10 |
0 |
|
13-17 |
6 |
67 |
73 |
85 |
91 |
18 |
18 |
|
14-17 |
8 |
78 |
86 |
83 |
91 |
5 |
5 |
|
15-17 |
5 |
82 |
87 |
86 |
91 |
4 |
4 |
|
16-17 |
6 |
85 |
91 |
85 |
91 |
0 |
0 |
|
17-18 |
38 |
91 |
129 |
91 |
129 |
0 |
0 |
|
18-19 |
27 |
129 |
156 |
128 |
156 |
0 |
0 |
|
19-20 |
5 |
156 |
161 |
156 |
161 |
0 |
0 |
Анализ сетевого графика включает классификацию и группировку работ по величине резервов (полных и свободных), определение коэффициентов напряженности путей, расчет вероятности наступления завершающего события в заданный срок.
Коэффициент напряженности пути Кн (L) определяется по формуле
Т (L) - Т'кр (L)
Кн (L) = - ---------- - , (2.8)
Ткр - Т'кр (L)
где Т (L) - продолжительность пути, для которого определяется коэффициент напряженности,
Т'кр (L) - продолжительность работ данного пути (L), совпадающих с работами критического пути.
Коэффициенты напряженности работ данной разработки приведены в таблице 2.7
Найдем вероятность выполнения всего комплекса работ (Рк) за директивный срок 162 дня. Эта вероятность определяется с помощью аргумента нормальной функции распределения вероятностей:
Tд - Tкр
x = - ------- - , (2.9)
tкрij
где n - число работ, лежащих на критическом пути, Тд - директивный срок, = 0,04 (tmax - tmin) - дисперсия работы i,j критического пути (значения дисперсий приведены в таблице 2.7).
Значение Рк находим по ее аргументу х, используя таблицу интегралов Фурье.
Таблица 2.7 Параметры сетевого графика.
i-j |
Кн |
tкрij |
i-j |
Кн |
tкрij |
|
1-2 |
1,0 |
1,0 |
10-12 |
1,0 |
0,04 |
|
2-3 |
1,0 |
0,16 |
10-14 |
0,2 |
0,64 |
|
2-4 |
0,08 |
0,16 |
11-13 |
0,1 |
0,16 |
|
3-5 |
1,0 |
0,04 |
12-15 |
0,23 |
0,64 |
|
4-6 |
0,1 |
0,04 |
12-16 |
1,0 |
0,64 |
|
5-7 |
1,0 |
0,16 |
13-17 |
0,16 |
0,36 |
|
6-8 |
0, 19 |
0,64 |
14-17 |
0,29 |
0,16 |
|
7-9 |
1,0 |
1,0 |
15-17 |
0,28 |
0,04 |
|
8-10 |
0,2 |
0,04 |
16-17 |
1,0 |
0,16 |
|
9-10 |
1,0 |
0,04 |
17-18 |
1,0 |
1,96 |
|
10-11 |
0,02 |
0,04 |
18-19 |
1,0 |
1,44 |
|
19-20 |
1,0 |
0,16 |
Аргумент нормальной функции распределения вероятностей равен 0,32. Используя таблицу интеграла Фурье, находим значение функции Рк = 0,63. Так как значение Рк попадает в интервал 0,35 < Рк < 0,65, то сетевой график не нуждается в оптимизации.
Рис.2.1 Сетевой график.
Приложение 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);
Подобные документы
Проект автоматизированного рабочего места для работы с клиентами и использования клиентских баз данных. Регистрация данных о состоянии объекта управления. Обеспечение взаимодействия человека с системой. Доступ к результатам регистрации информации.
курсовая работа [1,7 M], добавлен 02.10.2010Задача накопления, обработки и распространения информации. Характеристика систем управления. Схема комплекса средств автоматизации. Функционирование АСУ комплекса средств автоматизации. Требования, предъявляемые к АРМ РД. Структура базы данных.
реферат [29,1 K], добавлен 12.06.2009Суть автоматизации малого бизнеса, альтернативы выбора ее средств. Цели, функции, свойства автоматизированной системы менеджера. Технические средства в разрабатываемом программном комплексе. Основные функции операционной системы, требования к ней.
контрольная работа [219,4 K], добавлен 17.09.2013Характеристика комплекса технических средств для оснащения рабочего места и программного обеспечения ЭВМ. Разработка приложения для управления автоматизированной информационной системой с помощью сценариев JavaScript, HTML и базы данных MS Access.
дипломная работа [9,6 M], добавлен 26.11.2013Краткий обзор технических средств для промышленной автоматизации. Концепция построения информационной системы производства на базе Proficy. Анализ разработки автоматизации узлов учета нефти автоматизированного рабочего места оператора нефтебазы.
дипломная работа [5,2 M], добавлен 19.03.2015Моделирование бизнес–процессов для описания функций различных систем управления. Анализ документооборота предприятия. Проектирование базы данных для комплекса технических средств и средств автоматизации. Программная реализация информационной системы.
курсовая работа [791,4 K], добавлен 09.05.2014Принципы построения и основные компоненты хранилищ данных, общая характеристика основных требований к ним по Р. Кинболлу. Понятие и виды баз данных. Методика проектирования комплекса задач автоматизации учета по счету 02 "Амортизация основных средств".
контрольная работа [27,8 K], добавлен 12.11.2010Данные предметной области, содержащие информацию, необходимую для разработки автоматизированного рабочего места. Выбор средств разработки. Структура базы данных. Вывод данных, статистика распределения нагрузки. Разработка руководства оператора.
дипломная работа [8,4 M], добавлен 19.10.2012Анализ входной информации и процессов, уровня автоматизации на предприятии. Выявление объекта и задачи автоматизации. Разработка концепции построения информационной модели информационной системы. Разработка структуры базы данных и клиентского приложения.
дипломная работа [2,0 M], добавлен 22.11.2015База данных как основа автоматизации. Разработка, описание и реализация программного обеспечения "Точность и правильность методов и результатов измерений для центральной заводской лаборатории ОАО "Акрилат". Листинг, исходные коды программы и базы данных.
дипломная работа [1,0 M], добавлен 23.06.2012