Автоматизированное рабочее место регистрации и документирования комплекса средств автоматизации
{
/* 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
#include
#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
#include
#include
#include
#include
#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
#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] { 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
#include
#include
#include
#include
"pxengine.h" #include
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
#include
#include
"devices.h" #include
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 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,"