Автоматизированное рабочее место регистрации и документирования комплекса средств автоматизации
Каждому буферу (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! =' ') *c2++=*c1++;
*c2=' '; ++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_INQbs2_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 rn");
break;
case 1: // ШП-01
case 9: // ШП-09
sag= (char *) calloc (81,1);
strcpy (sag," ДАТА ВРЕМЯ ТИП_У П ВС СОСТОЯНИЕ_ШКАФА rn");
break;
case 4: // ШК-04
case 12: // ШК-12
sag= (char *) calloc (100,1);
strcpy (sag," ДАТА ВРЕМЯ ТИП_У П ВС КАНАЛЫ ЛИНИИ КНОН ФКДТ НСПД ФЗ ПИТАНИЕ Д-Ж К--Ы Б---ЫЕ К--Ы rn");
break;
case 2: // РМ-02
sag= (char *) calloc (81,1);
sag2= (char *) calloc (81,1);
strcpy (sag, " ДАТА ВРЕМЯ ТИП_У П ВС БЛОКИРОВКА ЕСТЬ СВЯЗЬ С ВК rn");
strcpy (sag2," ПЭВМ1 по ФК по ЛС1 по ЛС3 rn");
break;
case 10: // РМ-10
sag= (char *) calloc (81,1);
sag2= (char *) calloc (81,1);
strcpy (sag, " ДАТА ВРЕМЯ ТИП_У П ВС БЛОКИРОВКА ЕСТЬ_СВЯЗЬ_С_ВК rn");
strcpy (sag2," ПЭВМ2 по ФК по ЛС2 по ЛС4 rn");
break;
case 5: // РМ05Г
case 13: // РМ13П
sag= (char *) calloc (81,1);
strcpy (sag," ДАТА ВРЕМЯ ТИП_У П ВС ЛИНИИ КНОН ФКДТ НСПД ФЗ rn");
break;
case 3: // В
case 6: // КС1
case 14: // КС2
case 15: // АС
sag= (char *) calloc (81,1);
strcpy (sag," ДАТА ВРЕМЯ ТИП_У П ВС КАНАЛЫ ЛИНИИ ФКДТ НСПД ФЗ rn");
break;
case 7: // ВМ
sag= (char *) calloc (81,1);
strcpy (sag," ДАТА ВРЕМЯ ТИП_У П ВС АВАРИЯ ПИТАНИЯ НЕИСПР КАН КАНАЛЫ rn");
break;
case 16: // ВУ16
case 17: // ВУ17
case 18: // ВУ18
case 19: // ВУ19
sag= (char *) calloc (81,1);
strcpy (sag," ДАТА ВРЕМЯ ТИП_У П ВС МАГИСТРАЛЬ ПРИЕМА КНОН rn");
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,"rn");
_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_INQform2. 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_INQinterval. 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_INQrecprint ()
// форматирование и запись в файл найденной строки
#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] ==' ') string [i] =' ';
strcpy (string+length-2,"rn");
_write (handle,string,strlen (string));
PXRecBufClose (rech);
free (bytes);
free (string);
// передача управления диспетчеру
// (только для передачи cимвола на принтер!)
// после каждой найденной записи
// r. h. ah=1;
// int86 (DISP,&r,&r);
}
// bs2_inq. prj
// BS2_INQsearch. 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_INQbs3_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,"rn",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_INQform3. 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," Шкаф НЕИСПРАВЕН rn",76);
else
write (handle," Шкаф ИСПРАВЕН rn",76);
if (bytes [4] &0x02)
write (handle,"НЕИСПРАВНОСТЬ первичной сети электропитания СЕТЬ 1 rn",76);
break;
case 8: // ШЭ-08
if (bytes [5] &0x04)
write (handle," Шкаф НЕИСПРАВЕН rn",76);
else
write (handle," Шкаф ИСПРАВЕН rn",76);
if (bytes [4] &0x02)
write (handle,"НЕИСПРАВНОСТЬ первичной сети электропитания СЕТЬ 2 rn",76);
break;
case 1: // ШП-01
case 9: // ШП-09
if (bytes [5] &0x04)
write (handle," Шкаф НЕИСПРАВЕН rn",76);
else
write (handle," Шкаф ИСПРАВЕН rn",76);
break;
case 4: // ШК-04
case 12: // ШК-12
if (bytes [0] &0x01)
write (handle,"ОСНОВНОЙ - шкаф ШК-12 rn",76);
else
write (handle,"ОСНОВНОЙ - шкаф ШК-04 rn",76);
write (handle," rn",76);
write (handle," ТЕХНИЧЕСКОЕ СОСТОЯНИЕ ШКАФА rn",76);
write (handle," rn",76);
if (bytes [5] &0x01)
write (handle," Шкаф РАБОТОСПОСОБЕН rn",76);
if (bytes [5] &0x02)
write (handle," Шкаф НЕИСПРАВЕН rn",76);
if (bytes [5] &0x04)
write (handle," Шкаф ЗАБЛОКИРОВАН по НСД rn",76);
if ( (! (bytes [5] &0x01)) && (! (bytes [5] &0x02)) && (! (bytes [5] &0x04)))
write (handle," Шкаф ИСПРАВЕН rn",76);
write (handle," rn",76);
if (bytes [4] &0x01)
write (handle,"НЕИСПРАВЕН 1-й канал АД rn",76);
if (bytes [4] &0x02)
write (handle,"НЕИСПРАВЕН 2-й канал АД rn",76);
if (bytes [4] &0x04)
write (handle,"НЕИСПРАВЕН 3-й канал АД rn",76);
if (bytes [3] &0x01)
write (handle,"НЕИСПРАВЕН 1-й канал УХК rn",76);
if (bytes [3] &0x02)
write (handle,"НЕИСПРАВЕН 2-й канал УХК rn",76);
if (bytes [3] &0x04)
write (handle,"НЕИСПРАВЕН 3-й канал УХК rn",76);
if (bytes [2] &0x01)
write (handle,"НЕИСПРАВНОСТЬ логической части ШК rn",76);
if (bytes [2] &0x02)
{write (handle,"НЕИСПРАВЕН хотя бы один или несколько элементов ИГП rn",76);
write (handle,"Для уточнения считай ячейку ВБШК1. ПФЗ для ШК1 или ВБШК2. ПФЗ для ШК2 rn",76);
}
if (bytes [2] &0x04)
{write (handle,"НЕИСПРАВНО УХК - установлена единица в 8-ом разряде уточненого слова rn",76);
write (handle,"состояния УХК rn",76);
}
if (bytes [1] &0x01)
write (handle,"БОЗУ занято более 3-х секунд rn",76);
if (bytes [1] &0x02)
{write (handle,"НЕИСПРАВНО УХК (неправильное сочетание 3 и 10 разрядов уточненого слова rn",76);
write (handle,"состояния УХК) rn",76);
}
if (bytes [1] &0x04)
{write (handle,"УХК ЗАБЛОКИРОВАН по причине работы с носителем 83т015. Получен 9 или 11 rn",76);
write (handle,"разряд в ИСС УХК (см. п.4.7 1. протокола инв.30337) rn",76);
}
if ( (! (bytes [12] &0x01)) && (! (bytes [12] &0x02)))
write (handle,"ПУ-1 ИСПРАВЕН rn",76);
if (bytes [12] &0x01)
write (handle,"Нажата кнопка ОБНАРУЖЕНА НЕИСПРАВНОСТЬ на ПУ-1 rn",76);
if (bytes [12] &0x02)
write (handle,"Неисправно направление связи, соединяющее с ПУ-1 rn",76);
if ( (! (bytes [12] &0x04)) && (! (bytes [11] &0x01)))
write (handle,"ПУ-2 ИСПРАВЕН rn",76);
if (bytes [12] &0x04)
write (handle,"Нажата кнопка ОБНАРУЖЕНА НЕИСПРАВНОСТЬ на ПУ-2 rn",76);
if (bytes [11] &0x01)
write (handle,"Неисправно направление связи, соединяющее с ПУ-2 rn",76);
if ( (!