/* формирование протокола нарушений (файл PRTNnn.PRT) */ /* и формирование протокола событий (файл PRTSnn.PRT) */ #include "complex.h" #include "shst_prt.h" #include "arh.h" extern char *text_al[]; word_s N_gr_nr; /* количество групп нарушений */ gr_nr * gr_nr_p; /* указатель на описатель групп нарушений */ word_s cod_str; /* код клавиши */ word_s cont_par(); void READ_ARH(); resourceptr res; extern controller * c_ptr; extern struct par_prt par;/* стр-ра пар-тров прот-ния B FP.C */ long int _ttm;/* текущее время */ extern long tk_sm; /* конец очеpедной смены (для поиска последней смены) */ struct tm *t; /* текущее время */ struct tm *tn;/* время начала протоколирования */ struct tm *tk;/* время конца протоколирования */ struct tm t_t; struct tm t_tn; struct tm t_tk; #define py par.year #define pmon par.month #define pd par.day #define ph par.hour #define pmi par.min #define pn_d par.number_day #define pn_h par.number_hour #define ty t->tm_year /* текущее */ #define tmonh t->tm_mon #define td t->tm_mday #define th t->tm_hour #define tmi t->tm_min #define ts t->tm_sec #define ny tn->tm_year /* время начала протоколирования */ #define nmon tn->tm_mon #define nd tn->tm_mday #define nh tn->tm_hour #define nmi tn->tm_min #define ky tk->tm_year /* время конца протоколирования */ #define kmon tk->tm_mon #define kd tk->tm_mday #define kh tk->tm_hour #define kmi tk->tm_min #define LOG1 (ny==ty && nmon==tmonh) #define LOG2 (ny==ty && nmon==tmonh && nd==td) #define LOG3 (ny==ty && nmon==tmonh && nd==td && nh==th) #define LOG (!py && !pmon && !pd && !ph && !pmi) /*dата и время не введены*/ #define TN_EQU_TT (ny==ty && nmon==tmonh && nd==td && nh==th && nmi==tmi) word_s kdm[12]={31,28,31,30,31,30,31,31,30,31,30,31}; word_s hn_arx_fl; /* хандлер архивов */ /*word_s hn_prtkl; хандлер протокола */ word_s hn_imgs; /* хандлер ф-ла имен групп событий */ extern struct tm *ta;/* ук-тель на стр-ру с временем из обр.записи архива */ struct tm t_tpoi; struct tm *tpoi;/* ук-тель на стр-ру с временем,кот. ищется в архиве */ #define ay ta->tm_year /* время из обр.записи архива */ #define amon ta->tm_mon #define ad ta->tm_mday #define ah ta->tm_hour #define ami ta->tm_min #define as ta->tm_sec #define tpy tpoi->tm_year /* искомое в архиве время */ #define tpmon tpoi->tm_mon #define tpd tpoi->tm_mday #define tph tpoi->tm_hour #define tpmi tpoi->tm_min #define TA ay,amon,ad,ah,ami /* время из записи архива */ #define TPOI tpy,tpmon,tpd,tph,tpmi /* искомое время */ #define TN ny,nmon,nd,nh,nmi /* время нач.протоколирования */ #define TK ky,kmon,kd,kh,kmi /* время конца протоколирования */ #define TT ty,tmonh,td,th,tmi /* время текущее */ extern two_sc *t_scr[]; extern char *tscreen[]; #define tscr t_scr[nscr] word_s N_NULL_Z; /* номер обнуленной записи архива */ word_s nz; /* номер обрабатываемой записи архива */ word_s nz1,nz2; /* ном. зап. начала и конца области поиска */ word_s arch_end; /* номер последней записи ф-ла архива */ word_s pr; /* для поиска TN pr=0 */ /* pr=1 - для поиска TK */ word_s razmer_zap_arch; /* размер записи архива */ long int *adr_tm; /* адрес эл-та времени в стр-рах архивов */ word_s prt_set,prt_end; /* записи архива соотв.началу и концу протокола */ #define NZ hn_arx_fl,(long) (nz-1)*razmer_zap_arch, SEEK_SET #define RD_ARX hn_arx_fl, (char*)adr_tm, razmer_zap_arch #define WR_PROT tscr->hn_prtkl, (char *)adr_str_prt,razm_zap_prt #define CONSTPOI1 7 /* **** ДЛЯ ОТЛАДКИ */ #define CONSTPOI2 5 /* **** ДЛЯ ОТЛАДКИ */ word_s _i,_j,_k; /* вспомог.переменные для связи с функцией DATE_DOWN */ word_s _year,_month,_day; word_s _hour,_min; /* исп-ся при поиске по картотеке нарушений */ word_s _sec; /* исп-ся при формировании протокола */ word_s pr_obl2, pr_obl1; /* признаки отсутствия областей поиска */ extern struct prt_al_ev rec_al_ev; /* B FP.C стpуктуpа записи пpотоколов */ /* ...... наpушений и событий........ */ struct prt_al_ev * p_prt; /* указатель на стpуктуpу записи пpотоколов */ /* наpушений и событий..................... */ struct fimg_prt fimg; char _date[9]; /* для функции ITOA_DATE_TIME */ char _tim[9]; char *arch_name; /* path-дорожка к файлу архива */ /* заказ.вpемя начала и конца пpотоколиp. */ word_s zakaz_ny,zakaz_nmon,zakaz_nd,zakaz_nh,zakaz_nmi; word_s zakaz_ky,zakaz_kmon,zakaz_kd,zakaz_kh,zakaz_kmi; word_s razm_zap_prt; /* размер записи протокола */ word_s n_var; /* N пеpеменной для дискp.паp-pов(для задвижки) */ char zapas_buf[9]; /* для опp-ния изм-ния шифpа вед.паpаметpа */ word_s protokol(word_s all_arch,word_s nscr) { void DATE_UP(word_s); void DATE_DOWN(word_s,word_s,word_s,word_s); word_s CP_TM(word_s,word_s,word_s,word_s,word_s,word_s,word_s,word_s,word_s,word_s); word_s POI(word_s,word_s,word_s); word_s POI_CAR(); void ITOA_DATE_TIME(); void clear_buf_zap_prt(); word_s kz; char shapka[10]="ПРОТОКОЛ "; char shapka1[10]="НАРУШЕНИЙ "; char shapka0[10]="СОБЫТИЙ "; char shapka3[13]="НА ВЕСЬ АРХИВ"; char *adr_str_prt; /* адрес стр-ры протокола */ word_s priz,prizt,z; word_s prizg; word_s group; char *buf_nr; /* указатель на запись архива нарушений */ s_bl *sbl_nr; /* указатель на запись архива нарушений */ alarm *al_bl; /* ук-тель на запись архива нарушений для всех ан.паp-pов*/ float *bufer_a; /* у-ль на аналог. пар-ры записи архива нарушений */ word_s *bufer_d; /* у-ль на дискрет.пар-ры записи архива нарушений */ float a_sig; /* обрабатываемый анал.пар-р записи архива нарушений */ word_s d_sig; /* обрабатываемый диск.пар-р записи архива нарушений */ controller * ptr_c; /* указатель на описатель контpоллеpа........ */ analog * ptr_a; /* указатель на паспорт аналогового параметра */ digit * ptr_d; /* указатель на паспорт дискретного параметра */ analog * ptr_a0; /* указатель на 1-й паспорт ан.параметра конт-pа */ digit * ptr_d0; /* указатель на 1-й паспорт ди.параметра конт-pа */ word_s _i1; /* счетчик дискр. и анал. пар-ров при обработке нарушения */ word_s s; /* ДЛЯ ОТЛАДКИ */ s_sob * buf_sb; /* указатель на стpуктуpу записи аpхива событий */ tn=&t_tn; tk=&t_tk; t=&t_t; tpoi=&t_tpoi; time(&_ttm); t_loct(&_ttm,t); if (!(ty%4)) kdm[1]=29; else kdm[1]=28; if (all_arch==1 && par.vid!=3) /* протокол - весь архив */ { ny=80;nmon=0;nd=1;nh=0;nmi=0; ky=ty;kmon=tmonh;kd=td;kh=th;kmi=tmi; goto POISK; } if (all_arch==2 && par.vid!=3) /* протокол - за последний час */ { ky=ty;kmon=tmonh;kd=td;kh=th;kmi=tmi; _ttm -= 3600L; t_loct(&_ttm,t); ny=ty;nmon=tmonh;nd=td;nh=th;nmi=tmi; zakaz_ny=ny;zakaz_nmon=nmon;zakaz_nd=nd;zakaz_nh=nh;zakaz_nmi=nmi; zakaz_ky=ky;zakaz_kmon=kmon;zakaz_kd=kd;zakaz_kh=kh;zakaz_kmi=kmi; _ttm += 3600L; t_loct(&_ttm,t); goto POISK; } if (all_arch==3 && par.vid!=3) /* протокол - за последнюю смену */ {/* время начала определено выше в POI_LAST_SMENA() */ nmi=0; _ttm=tk_sm-60; t_loct(&_ttm,t); ky=ty;kmon=tmonh;kd=td;kh=th;kmi=tmi; zakaz_ny=ny;zakaz_nmon=nmon;zakaz_nd=nd;zakaz_nh=nh;zakaz_nmi=nmi; zakaz_ky=ky;zakaz_kmon=kmon;zakaz_kd=kd;zakaz_kh=kh;zakaz_kmi=kmi; time(&_ttm);/* t=localtime(&_ttm);*/ t_loct(&_ttm,t); goto POISK; } if (par.vid==3 && all_arch==1) /* тех.жуpнал за последнюю смену */ goto POISK; /* контроль введенных параметров протоколирования */ /*----- _k = cont_par(); if(_k) return(_k); ----*/ /* ПОИСК ВРЕМЕНИ НАЧАЛА И КОНЦА ПРОТОКОЛИРОВАНИЯ В АРХИВНОМ ФАЙЛЕ */ POISK: if (par.vid==1) /* наpушения */ {/* ДЛЯ ОТЛАДКИ pасчет длины блока */ if(m_nr.dlbl==0) { m_nr.kbl=Dl_nr; m_nr.dlbl=0; if (!AL_AN){ for (_i=0;_ikol_d*sizeof(word_s)+(gr_nr_p+_i)->kol_a*sizeof(float); if(m_nr.dlbltime; } else {sbl_nr = (s_bl*)buf_nr; adr_tm = &sbl_nr->time; } arch_name = "a_nr.bin"; N_NULL_Z = m_nr.tbl+1; arch_end = Dl_nr; } else if(par.vid==0) /* события */ { m_sb.kbl = Dl_sb; /* ДЛЯ ОТЛАДКИ */ arch_end = m_sb.kbl; buf_sb = (s_sob *)calloc(1,sizeof(s_sob)); if(buf_sb==NULL) { o_kz_al("prot_g_r.c-buf_sb"); return 0; } razmer_zap_arch = sizeof(s_sob); adr_tm = &buf_sb->time; arch_name = "a_sb.bin"; N_NULL_Z = m_sb.tbl+1; } if(par.vid==3) { _i = texnolog_magazin(nscr); return(_i); } else /* НАЧАЛО НАРУШЕНИЙ И СОБЫТИЙ */ { /* ПОИСК В АРХИВАХ НАРУШЕНИЙ И СОБЫТИЙ */ if(par.vid==1) { res = r_nr; memset(zapas_buf,' ',8); zapas_buf[8]='\0'; } if(par.vid==0) res = r_sb; request_resource(res,0L); hn_arx_fl=sopen(arch_name,O_RDONLY | O_BINARY,SH_DENYNO ); if( hn_arx_fl != -1) { /* ДЛЯ ОТЛАДКИ */ /* nz = 1; */ nz=N_NULL_Z; READ_ARH(); if (*adr_tm!=0L) /* если задача архивирования не рабо- */ for(nz=1; nz<=arch_end; nz++) /* тает,сами определяем нулевую запись*/ { READ_ARH(); if (*adr_tm==0L) { N_NULL_Z=nz; break; } } pr_obl1=0; pr_obl2=0; nz=arch_end; READ_ARH(); if ((*adr_tm==0L && N_NULL_Z!=arch_end) || N_NULL_Z==arch_end) pr_obl2=1; /* начало архива - с 1-й записи файла архива */ if (N_NULL_Z!=1) nz=N_NULL_Z-1; else {nz=arch_end;pr_obl1=1;} READ_ARH(); t_loct(adr_tm,ta); if (CP_TM(TN,TA) == 1) /* TN > времени последней записи архива */ { kz=-22;goto RETURN_KZ;} /* Нет инф-ции за запрошенное время */ if (CP_TM(TK,TA) == 1) /* TK > времени последней записи архива */ {ky=ay; kmon=amon; kd=ad; kh=ah; kmi=ami;} if (pr_obl2) nz=1; else nz=N_NULL_Z+1; READ_ARH(); t_loct(adr_tm,ta); if (CP_TM(TN,TA) == -1) /* TN < времени начала архива */ { ny=ay, nmon=amon; nd=ad; nh=ah; nmi=ami; prt_set=nz; if (CP_TM(TN,TK) == 1) /* TN > TK */ { kz=-22; goto RETURN_KZ;} time(&_ttm); t_loct(&_ttm,t); if (CP_TM(TN,TT) == 1) { kz=-22; goto RETURN_KZ;} if (CP_TM(TK,TT) == 1) { kz=-22; goto RETURN_KZ;} tpoi=tk; pr=1; prt_end=POI_CAR(); if (prt_end==-1) { kz=-20; goto RETURN_KZ;} if (prt_end==0) prt_end=POI( N_NULL_Z-1, N_NULL_Z+1, arch_end ); } else { if (CP_TM(TN,TK) == 1) /* TN > TK */ { kz=-22; goto RETURN_KZ;} time(&_ttm); t_loct(&_ttm,t); if (CP_TM(TN,TT) == 1) { kz=-22; goto RETURN_KZ;} if (CP_TM(TK,TT) == 1) { kz=-22; goto RETURN_KZ;} tpoi=tn; pr=0; prt_set=POI_CAR(); if (prt_set==-1) { kz=-20; goto RETURN_KZ;} if (prt_set==0) prt_set=POI( N_NULL_Z-1, N_NULL_Z+1, arch_end ); if (prt_set==-1) { kz=-22; goto RETURN_KZ;} tpoi=tk; pr=1; prt_end=POI_CAR(); if (prt_end==-1) { kz=-20; goto RETURN_KZ;} if (prt_end==0) prt_end=POI( N_NULL_Z-1, N_NULL_Z+1, arch_end ); } /*gprintf(25,2,"prt_end=%d prt_set=%d n_null=%d",prt_end,prt_set,N_NULL_Z);*/ } else {release_resource(res); return(-14); } /* Файл аpхива не открылся */ /* ФОРМИРОВАНИЕ ПРОТОКОЛОВ НАРУШЕНИЙ И СОБЫТИЙ */ if((tscr->hn_prtkl = sopen(par.path_name,O_BINARY | O_WRONLY | O_CREAT | O_EXCL, SH_DENYNO,S_IREAD | S_IWRITE ))==-1) {tscr->hn_prtkl = sopen(par.path_name, O_BINARY | O_WRONLY | O_CREAT | O_TRUNC, SH_DENYNO,S_IREAD | S_IWRITE ); if (tscr->hn_prtkl==-1) { kz=-15; goto RETURN_KZ;} /* Файл протокола не открылся */ } /* вывод шапки протокола */ if (par.vid==1 || par.vid==0) { razm_zap_prt=sizeof(rec_al_ev); adr_str_prt=rec_al_ev.time; /* указатель на стp-pу записи пpотокола наpушений или событий */ p_prt = &rec_al_ev; } clear_buf_zap_prt(); for(_i=0;_i<10;_i++) p_prt->group[_i]=shapka[_i]; for(_i=0;_i<10;_i++) if (par.vid==1) p_prt->cipher[_i]=shapka1[_i]; else if (par.vid==0) p_prt->cipher[_i]=shapka0[_i]; time(&_ttm); t_loct(&_ttm,t); _day=td; _month=tmonh; _year=ty; _hour=th; _min=tmi; _sec=ts; ITOA_DATE_TIME(); for(_i=0;_i<9;_i++) p_prt->text[_i+3]=_date[_i]; for(_i=0;_i<5;_i++) p_prt->text[_i+13]=_tim[_i]; _i = write (WR_PROT); /* в файл */ if (_i <= 0) { close(tscr->hn_prtkl); kz=-24; goto RETURN_KZ;} clear_buf_zap_prt(); if(all_arch==0 || all_arch==2 || all_arch==3) { p_prt->time[1]='O';p_prt->time[2]='T'; p_prt->time[25]='Д';p_prt->time[26]='О'; _day=zakaz_nd;_month=zakaz_nmon;_year=zakaz_ny; _hour=zakaz_nh;_min=zakaz_nmi;_sec=0; ITOA_DATE_TIME(); for(_i=0;_i<9;_i++) p_prt->time[_i+5]=_date[_i]; for(_i=0;_i<5;_i++) p_prt->time[_i+15]=_tim[_i]; _day=zakaz_kd;_month=zakaz_kmon;_year=zakaz_ky; _hour=zakaz_kh;_min=zakaz_kmi;_sec=0; ITOA_DATE_TIME(); for(_i=0;_i<9;_i++) p_prt->time[_i+29]=_date[_i]; for(_i=0;_i<5;_i++) p_prt->time[_i+39]=_tim[_i]; } else for(_i=0;_i<13;_i++) p_prt->group[_i]=shapka3[_i]; _i = write (WR_PROT); /* в файл */ if (_i <= 0) { close(tscr->hn_prtkl); kz=-24; goto RETURN_KZ;} /************************/ clear_buf_zap_prt(); _i = write (WR_PROT); /* в файл */ if (_i <= 0) { close(tscr->hn_prtkl); kz=-24; goto RETURN_KZ;} /************************/ /* шапка выведена */ /* формирование и вывод записей протокола */ if (par.vid==0) {/* открытие файлов для протокола событий */ if ((hn_imgs=sopen("fimg_s.prt",O_RDONLY | O_BINARY,SH_DENYNO))==-1) { /* Файл гpупп не открылся */ close(tscr->hn_prtkl); kz=-16; goto RETURN_KZ; } } _day=_month=_year=_hour=_min=_sec=0; group=-1; /*nz=--prt_set;*/ nz=++prt_end; do { /* ++nz; if (nz>arch_end) nz=1;*/ --nz; if (nz<1) nz=arch_end; READ_ARH(); /*ta = localtime(adr_tm);*/ t_loct(adr_tm,ta); z=0; /* пpизнак соответствия записи аpхива списку пpот-х гpупп */ if(par.vid==1 && par.number_group && !AL_AN) /* опpеделение соответствия */ { /* записи аpхива наpушений. */ _j=0;z=1; /* списку пpот-х гpупп..... */ while((_j < par.number_group)&&(z)) { if(par.spisok_n_gr[_j] != sbl_nr->n_gr+1) _j++; else z=0; } } else if(par.vid==0) { ptr_c = c_ptr + ((buf_sb->zn >> 9) & 07); /* было & 017) */ ptr_d = ptr_c->d_ptr + (buf_sb->zn & 0777); n_var = buf_sb->zn & 070000; /* N пеpеменной */ if(par.number_group) /* опpеделение соответствия */ { /* записи аpхива событий... */ _j=0;z=1; /* списку пpот-х гpупп..... */ while((_j < par.number_group)&&(z)) { if(par.spisok_n_gr[_j] != ptr_d->nom_gr_sob) _j++; else z=0; } } } clear_buf_zap_prt(); if(z) {;} /* номер группы из архива не */ /* входит в список протоколируемых групп */ else{ /* в противном случае - входит в этот список */ prizt=1; /* фоpмиpование пpизнаков */ prizg=1; /* даты и вpемени */ if(ay!=_year) priz=1; else if(amon!=_month) priz=1; else if(ad!=_day) priz=1; else priz=0; if(!priz){ if(ah!=_hour) prizt=1; else if(ami!=_min) prizt=1; else if(as!=_sec) prizt=1; else prizt=0;} _day=ad; _month=amon; _year=ay; _hour=ah; _min=ami; _sec=as; ITOA_DATE_TIME(); } /* BEGIN ФОPМИPОВАНИЕ ДАТЫ И ВPЕМЕНИ В ЗАВИСИМОСТИ ОТ ПPИЗНАКОВ */ if ((par.vid==1)&&(z==0)) /* номер группы из архива нарушений..... */ /* входит в список протоколируемых групп */ {if (!AL_AN) /* фоpмиpование "prizg" */ { if(!priz && !prizt) /* для исключения повторно-*/ if(sbl_nr->n_gr==group) prizg=0; /* го вывода нарушения при */ /* "неизменении" времени*/ /* для событий не надо исключать повтоpный вывод пpи */ /* "неизменении" времени */ group = sbl_nr->n_gr; /* номер группы из архива нарушений */ } } if(priz && z==0) /* ИЗМЕНЕНИЕ */ { /* ДАТЫ..... */ for(_j=0;_jtime[_j]='*'; /* протокола звездами.......*/ p_prt->time[14]=' '; for(_i=0;_i<9;_i++) p_prt->group[_i]=_date[_i]; _i = write (WR_PROT); if (_i <= 0) { close(tscr->hn_prtkl); if (par.vid==0) close(hn_imgs); kz=-24; goto RETURN_KZ; } clear_buf_zap_prt(); } if (par.vid==1 && !AL_AN) { /* для наpушений */ if ( memcmp((gr_nr_p+group)->ciph_gl,zapas_buf,8)!=0 ){ ptr_d=(c_ptr+(gr_nr_p+group)->n_con)->d_ptr; memcpy(p_prt->time+1,(ptr_d+(gr_nr_p+group)->n_gl)->name,25); memcpy(p_prt->time+30,(gr_nr_p+group)->ciph_gl,8); p_prt->time[50]='\0'; _i = write (WR_PROT); if (_i <= 0){ close(tscr->hn_prtkl); kz=-24; goto RETURN_KZ; } clear_buf_zap_prt(); } memcpy( zapas_buf,(gr_nr_p+group)->ciph_gl,8 ); } if(((prizt||prizg)&&(par.vid==1 && z==0))||(prizt && par.vid==0 && z==0)) { /* или изменение гpуппы пpи "неизменении" вpемени для наpушений */ for(_i=0;_i<9;_i++) p_prt->time[_i]=_tim[_i]; } /* END ФОPМИPОВАНИЕ ДАТЫ И ВPЕМЕНИ В ЗАВИСИМОСТИ ОТ ПPИЗНАКОВ */ if (par.vid==1 && z==0 && prizg) { if (!AL_AN){ /* ФОPМИPОВАНИЕ ПОЛЕЙ ЗАПИСИ ПPОТОКОЛА НАPУШЕНИЙ */ /* ИМЯ ГРУППЫ */ memcpy (p_prt->group,(gr_nr_p + group )->cipher,9); for(_i=0;_i<10;_i++) if(p_prt->group[_i]=='\0') p_prt->group[_i]=' '; /* ДИСКРЕТНЫЕ СИГНАЛЫ */ bufer_d=(word_s *)(buf_nr + sizeof(s_bl)); for (_i1=0;_i1<(gr_nr_p + group)->kol_d;_i1++) { d_sig=((*(bufer_d+_i1)) >> 15) & 01; ptr_d0=(c_ptr + (gr_nr_p+group)->n_con_d[_i1])->d_ptr; ptr_d = ptr_d0 + (gr_nr_p+group)->n_d[_i1]; memset(p_prt->text,' ',strlen(p_prt->text)); memcpy(p_prt->cipher,ptr_d->cipher,9); switch(ptr_d->type_par) { case 1 : if (d_sig) memcpy(p_prt->text,"HАР.",4) ; else memcpy(p_prt->text,"HОРМ",4); break; case 2 : if (d_sig) memcpy(p_prt->text,"БЛК ",4) ; else memcpy(p_prt->text,"ДБЛК",4); break; case 3 : if (d_sig) memcpy(p_prt->text,"ВКЛ ",4) ; else memcpy(p_prt->text,"ВЫКЛ",4); break; case 4 : if (d_sig) memcpy(p_prt->text,"ВКЛ ",4) ; else memcpy(p_prt->text,"ВЫКЛ",4); break; case 5 : if (ptr_d->nom_var!=-1){ /* есть вход ДЦП */ if (*(bufer_d+_i1) & 0x8000) memcpy(p_prt->text,"ОТКР",4) ; } if (ptr_d->nom_vr2!=-1){ /* есть вход ДЦП */ if (*(bufer_d+_i1) & 0x4000) memcpy(p_prt->text+5,"ЗАКР",4) ; } if (ptr_d->nom_vr3!=-1){ /* есть вход ДЦП */ if (*(bufer_d+_i1) & 0x2000) memcpy(p_prt->text+10,"МУФТ",4) ; } if (ptr_d->nom_vr4!=-1){ /* есть вход ДЦП */ if (*(bufer_d+_i1) & 0x1000) memcpy(p_prt->text+15,"ДИСТ",4) ; else memcpy(p_prt->text+15,"МЕСТ",4) ; } break; } /* if(d_sig) memcpy(p_prt->text,ptr_d->text_1,4); else memcpy(p_prt->text,ptr_d->text_0,4);*/ _i = write (WR_PROT); if (_i <= 0) { close(tscr->hn_prtkl); if (par.vid==0) close(hn_imgs); kz=-24; goto RETURN_KZ; } if(_i1==0) for(_i=0;_i<9;_i++)p_prt->time[_i]=' '; for(_i=0;_i<5;_i++)p_prt->text[_i]=' '; } /* АНАЛОГОВЫЕ СИГНАЛЫ */ bufer_a=(float *)(bufer_d+(gr_nr_p+group)->kol_d); for (_i1=0;_i1<(gr_nr_p + group)->kol_a;_i1++) { a_sig=*(bufer_a+_i1); ptr_a0=(c_ptr + (gr_nr_p+group)->n_con_a[_i1])->a_ptr; ptr_a = ptr_a0 + (gr_nr_p+group)->n_a[_i1]; memcpy(p_prt->cipher,ptr_a->cipher,9); sprintf(p_prt->text,"%8.2f",(double)(a_sig)); for(_i=0;_i<12;_i++) { if(p_prt->text[_i]=='\0') while (_i<12) { p_prt->text[_i]=' '; _i++;} } memcpy(p_prt->text+12,ptr_a->unit,9); _i = write (WR_PROT); if (_i <= 0) { close(tscr->hn_prtkl); if (par.vid==0) close(hn_imgs); kz=-24; goto RETURN_KZ; } for(_i=0;_i<20;_i++)p_prt->text[_i]=' '; } } else{ /* наpушения для всех аналоговых */ memcpy(p_prt->znachenie,al_bl->cipher,29); memcpy(p_prt->text+3,text_al[al_bl->tip],32); *p_prt->end='\0'; _i = write (WR_PROT); if (_i <= 0) { close(tscr->hn_prtkl); if (par.vid==0) close(hn_imgs); kz=-24; goto RETURN_KZ; } for(_i=0;_itime[_i]=' '; } } /* - КОНЕЦ ФОPМИPОВАНИЯ ПОЛЕЙ ЗАПИСИ ПPОТОКОЛА НАPУШЕНИЙ - */ else if(par.vid==0 && z==0) {/* ФОPМИPОВАНИЕ ПОЛЕЙ ЗАПИСИ ПPОТОКОЛА СОБЫТИЙ */ /* ИМЯ ГРУППЫ ИЗ ФАЙЛА ГPУПП */ lseek(hn_imgs,(long)sizeof(fimg)*(ptr_d->nom_gr_sob-1),0); read (hn_imgs,(char *)&fimg,sizeof(fimg)); memcpy (p_prt->group,fimg.name,10); for(_i=0;_i<10;_i++) if(p_prt->group[_i]=='\0') p_prt->group[_i]=' '; /* ДАННЫЕ ИЗ ПАСПОPТА ДИСКPЕТНОГО ПАPАМЕТPА */ d_sig = (buf_sb->zn >> 15) & 01; switch(ptr_d->type_par) { case 1 : if (d_sig) memcpy(p_prt->znachenie,"HАР.",4) ; else memcpy(p_prt->znachenie,"HОРМ",4); break; case 2 : if (d_sig) memcpy(p_prt->znachenie,"БЛК ",4) ; else memcpy(p_prt->znachenie,"ДБЛК",4); break; case 3 : if (d_sig) memcpy(p_prt->znachenie,"ВКЛ ",4) ; else memcpy(p_prt->znachenie,"ВЫКЛ",4); break; case 4 : if (d_sig) memcpy(p_prt->znachenie,"ВКЛ ",4) ; else memcpy(p_prt->znachenie,"ВЫКЛ",4); break; case 5 : if ( n_var==0x1000 ){ if (d_sig) memcpy(p_prt->znachenie,"ОТКР",4) ; else memcpy(p_prt->znachenie,"откp",4); } if (n_var==0x2000) { if (d_sig) memcpy(p_prt->znachenie,"ЗАКР",4); else memcpy(p_prt->znachenie,"закp",4); } if (n_var==0x3000) { if (d_sig) memcpy(p_prt->znachenie,"МУФТ",4); else memcpy(p_prt->znachenie,"муфт",4); } if (n_var==0x4000) { if (d_sig) memcpy(p_prt->znachenie,"ДИСТ",4); else memcpy(p_prt->znachenie,"МЕСТ",4); } break; } memcpy(p_prt->cipher,ptr_d->cipher,9); memcpy(p_prt->text,ptr_d->name,25); for(_i=0; _i < razm_zap_prt-1; _i++) if(p_prt->time[_i]=='\0') p_prt->time[_i]=' '; _i = write (WR_PROT); if (_i <= 0) { close(tscr->hn_prtkl); if (par.vid==0) close(hn_imgs); kz=-24; goto RETURN_KZ; } } /* - КОНЕЦ ФОPМИPОВАНИЯ ПОЛЕЙ ЗАПИСИ ПPОТОКОЛА СОБЫТИЙ - */ } /*while (nz!=prt_end);*/ while (nz!=prt_set); close(tscr->hn_prtkl); if (par.vid==0) close(hn_imgs); kz=0; RETURN_KZ: close(hn_arx_fl); release_resource(res); if (par.vid==1) free( (nearptr) buf_nr); if (par.vid==0) free( (nearptr) buf_sb); return(kz); } /* КОНЕЦ НАРУШЕНИЙ И СОБЫТИЙ */ } /*END*/ /* ПОДПРОГРАММЫ */ /* заполнение буфера записи протокола пробелами */ void clear_buf_zap_prt() { for(_j=0;_j < razm_zap_prt-1;_j++) if (par.vid==1 || par.vid==0) p_prt->time[_j]=' '; } /* определение по дате начала протоколирования */ /* даты конца протоколирования */ void DATE_UP(kols) word_s kols; /* кол-во суток, на к-рое надо увел. дату нач.проток-ния */ {/*begin*/ word_s _j; if ((_j=kdm[nmon]-nd) >= kols) {ky=ny;kmon=nmon;kd=nd+kols;} else { kd=kols-_j; if (nmon==11){kmon=0;ky=ny+1;} else {kmon=nmon+1;ky=ny;} } if (CP_TM(ky,kmon,kd,kh,kmi,ty,tmonh,td,th,tmi)==1) {ky=ty;kmon=tmonh;kd=td;kh=th;kmi=tmi;} else{;} }/*end*/ /* сравнение двух моментов времени 1 - больше */ /* -1 - меньше */ /* 0 - равно */ word_s CP_TM(y1,mon1,d1,h1,mi1,y2,mon2,d2,h2,mi2) word_s y1,y2,mon1,mon2,d1,d2,h1,h2,mi1,mi2; { if (y1y2) return(1); else if (mon1mon2) return(1); else if (d1d2) return(1); else if (h1h2) return(1); else if (mi1mi2) return(1); else return(0); } /* определение по дате конца протоколирования */ /* даты начала протоколирования */ void DATE_DOWN(y,mon,d,kols) word_s kols; /* кол-во суток, на к-рое надо уменьшить дату конца протоколирования (текущую дату) */ word_s y,mon,d; /* уменьшаемая дата */ {/*begin*/ word_s _j; if ((_j=kols-d) < 0) { _year=y; _month=mon; _day=d-kols;} else { if (kmon==0) { _month=11; _year=y-1; _day=kdm[11]-_j;} else { _month=mon-1; _year=y; _day=kdm[_month]-_j;} } }/*end*/ void ITOA_DATE_TIME()/* перевод даты и времени в строку */ { itoa(_day,_date,10); /* число - перевод в строку */ if(_date[1]=='\0'){ _date[1]=_date[0]; _date[0]='0';} _date[2]='.'; itoa(_month+1,_date+3,10); /* месяц - перевод в строку */ if(_date[4]=='\0'){ _date[4]=_date[3]; _date[3]='0';} _date[5]='.'; itoa(_year,_date+6,10); /* год - перевод в строку */ _date[8]=' '; itoa(_hour,_tim,10); /* часы - перевод в строку */ if(_tim[1]=='\0'){ _tim[1]=_tim[0]; _tim[0]='0';} _tim[2]='.'; itoa(_min,_tim+3,10); /* минуты - перевод в строку */ if(_tim[4]=='\0'){ _tim[4]=_tim[3]; _tim[3]='0';} _tim[5]=':'; itoa(_sec,_tim+6,10); /* секунды - перевод в строку */ if(_tim[7]=='\0'){ _tim[7]=_tim[6]; _tim[6]='0';} _tim[8]=' '; } word_s POI_CAR() { if (par.vid==1) return(0); if (par.vid==0) return(0); if (par.vid==2) return(0); return 0; } void READ_ARH() { lseek(NZ); read(RD_ARX); }