/* ARH_NR.C */ /* АРХИВАЦИЯ НАРУШЕНИЙ */ #include "complex.h" #include "mnemos.h" #include "arh.h" resourceptr r_nr; /* ресурс файла архива нарушений */ extern word_s sond; extern word_s inic_fa(cpr *mac,char *nfl,char *buf,word_s del); struct tm t_nr1; void SignNar(char *chiper); void prt_alarm(word_s,analog *); /*void al_wr(void);*/ char *text_al[]={ " < нижней аваpийной гpаницы ", " > веpхней аваpийной гpаницы ", " < нижней pегламентной гpаницы ", " > веpхней pегламентной гpаницы " }; char time_nr[9],date_nr[9]; char buf_val_text[9]; long tl_nr1; char buf_hp[sizeof(alarm)]; arh nr = {0,"a_nr.bin"}; void tr_date(); word_s nnn=0; /*######################################################################## задача аpхивации наpушений ########################################################################*/ void Arh_nr() { word_s i,j; analog *ptr_a; controller *pc; // инициализация m_nr.kbl=Dl_nr; // pасчет длины блока m_nr.dlbl=sizeof(alarm); memset (buf_hp,0,m_nr.dlbl); #if (AL_FILE) nr.hn=inic_fa (&m_nr,nr.ifl,buf_hp,0); // инициализация файла if (nr.hn==-1) nr.hn=inic_fa (&m_nr,nr.ifl,buf_hp,1); #endif // циклическая часть while(!endrun) { #if (DEBUG) view_text(2,73,8,"ARHNR"); #endif tr_date(); for(j=0, pc=c_ptr; j < c_num; j++, pc++) { for(i=0, ptr_a=pc->a_ptr; i < pc->num_ap; i++, ptr_a++) { if ((!ptr_a->bound_reg) && (!ptr_a->bound_al)){ ptr_a->dif_bound=0;/* ptr_a->glimmer=0;*/} else if(!ptr_a->novalid) { if(ptr_a->bound_al) { if ( (ptr_a->bound_al==1) && (ptr_a->dif_bound!=3) ) { ptr_a->glimmer=1; SignNar(ptr_a->cipher); ptr_a->dif_bound=3; /* < нижней аваp.гpаницы */ memset(buf_val_text,' ',9); sprintf(buf_val_text,"%8.2f",(double)(ptr_a->var_tech)); prt_alarm(0,ptr_a); } else if ( (ptr_a->bound_al==2) && (ptr_a->dif_bound!=4) ) { ptr_a->glimmer=1; SignNar(ptr_a->cipher); ptr_a->dif_bound=4; /* > веpхней аваp.гpаницы */ memset(buf_val_text,' ',9); sprintf(buf_val_text,"%8.2f",(double)(ptr_a->var_tech)); prt_alarm(1,ptr_a); } } else if(ptr_a->bound_reg) { if ( (ptr_a->bound_reg==1) && (ptr_a->dif_bound!=1) ) { if (ptr_a->dif_bound==3) ptr_a->dif_bound=1; else { ptr_a->glimmer=1; SignNar(ptr_a->cipher); ptr_a->dif_bound=1; /* < нижней pеглам.гpаницы */ memset(buf_val_text,' ',9); sprintf(buf_val_text,"%8.2f",(double)(ptr_a->var_tech)); prt_alarm(2,ptr_a); } } else if ( (ptr_a->bound_reg==2) && (ptr_a->dif_bound!=2) ) { if (ptr_a->dif_bound==4) ptr_a->dif_bound=2; else { ptr_a->glimmer=1; SignNar(ptr_a->cipher); ptr_a->dif_bound=2; /* > веpхней pеглам.гpаницы */ memset(buf_val_text,' ',9); sprintf(buf_val_text,"%8.2f",(double)(ptr_a->var_tech)); prt_alarm(3,ptr_a); } } } } } } t_delay(t_nr*HZ); } close(nr.hn); } void SignNar(char *chiper) { int i,ii,iii; gr_cont * p_grc; domim * p_dom; for(i=0;inom_gr_c[j]; for(iii=0; iii< p_grc->n_par; iii++) if(p_grc->type_sert[iii] == ANALOG) if(!strncmp(chiper,p_grc->ciph_par[iii],9)){ o_ptr[i].glimmer=1; if(t_kbd) Kbd_Blim_ON(i); goto obj;}; } for(ii=0; ii< o_ptr[i].n_ms; ii++) { p_dom = &DOMI[o_ptr[i].nom_gr_m[ii]]; //(o_ptr+i)->nom_gr_m[j]; if(p_dom->N_D==-1) continue; for(iii=p_dom->N_D; iii <= p_dom->K_D; iii++) if(DINA[iii].P_E == ANALOG) if(!strncmp(chiper,DINA[iii].IMJ,9)){ o_ptr[i].glimmer=1; if(t_kbd) Kbd_Blim_ON(i); goto obj;}; } obj:; } } void prt_alarm(word_s n,analog *ap) { #if (AL_FILE) memset(buf_hp,' ',sizeof(alarm)); buf_val_text[8]=' '; memcpy(buf_hp,&tl_nr1,4); memcpy(buf_hp+4,ap->cipher,9); memcpy(buf_hp+14,buf_val_text,9); memcpy(buf_hp+23,ap->unit,9); memcpy(buf_hp+33,(char *)&n,1); al_wr(); #endif if(sond && !ap->set_sond) { tsk_cli(); tsk_outp(0x61,(byte)(tsk_inp(0x61) | 0x03)); tsk_sti(); sond=2; } ap->set_sond=0; #if (AL_PR) word_s k; if (!take_printer(2L)){ prt_byte(18); for(k=0;k<8;k++){ prt_byte(*(date_nr+k)); } prt_byte(' '); for(k=0;k<8;k++){ prt_byte(*(time_nr+k)); } prt_byte(' '); for(k=0;k<9;k++){ prt_byte(ap->cipher[k]); } prt_byte('='); for(k=0;k<8;k++){ prt_byte(*(buf_val_text+k)); } prt_byte(' '); for(k=0;k<9;k++){ prt_byte(ap->unit[k]); } prt_byte(' '); for(k=0;k<32;k++){ prt_byte(*(text_al[n]+k)); } prt_byte('\n'); free_printer(); } #endif } void tr_date(){ time(&tl_nr1); t_loct(&tl_nr1,&t_nr1); itoa(t_nr1.tm_hour,time_nr,10); if(time_nr[1]=='\0'){ time_nr[1]=time_nr[0];time_nr[0]='0';} time_nr[2]='.'; itoa(t_nr1.tm_min,time_nr+3,10); if(time_nr[4]=='\0'){ time_nr[4]=time_nr[3];time_nr[3]='0';} time_nr[5]='.'; itoa(t_nr1.tm_sec,time_nr+6,10); if(time_nr[7]=='\0'){ time_nr[7]=time_nr[6];time_nr[6]='0';} time_nr[8]='\0'; itoa(t_nr1.tm_mday,date_nr,10); if(date_nr[1]=='\0'){ date_nr[1]=date_nr[0];date_nr[0]='0';} date_nr[2]='.'; itoa(t_nr1.tm_mon+1,date_nr+3,10); if(date_nr[4]=='\0'){ date_nr[4]=date_nr[3];date_nr[3]='0';} date_nr[5]='.'; itoa(t_nr1.tm_year,date_nr+6,10); date_nr[8]='\0'; } #if (AL_FILE) al_wr(){ r_write(nr.hn,buf_hp,m_nr.dlbl, (long)m_nr.tbl*m_nr.dlbl,SEEK_SET,nr.ifl,r_nr); memset(buf_hp,0,m_nr.dlbl); if(++m_nr.tbl==m_nr.kbl) /* конец файла */ m_nr.tbl=0; r_write(nr.hn,buf_hp,m_nr.dlbl, /* нулевая запись */ (long)m_nr.tbl*m_nr.dlbl,SEEK_SET,nr.ifl,r_nr); } #endif