/* SIGNAL.C - задача сигнализации */ #include "complex.h" #include "screen.h" #include "mnemos.h" #include "graf.h" void light(byte); void print_date(void); void color_b(byte); #pragma aux color_b = "mov bh,ah "\ "mov ah,10h"\ "mov al,1 "\ "int 10h "\ parm [ah] ; extern word_s sond; extern byte bl_bord; char buff_t_c[9]; byte curr_color_t[16]; //byte indication[16]; //word_s mns_d[16][5]; //word_s mns_d[16][5]; pg_view *p_al; /*-------------------------------------------------------------------*/ void signaliz(void) { word_s pr_ind, scre, val; word_s i, ii, iii, j, k, x, y; byte color_t, col_l; object * p_o; gr_cont * p_grc; analog * p_a; digit * p_d; char hour = '3'; domim * p_dom; dinami * p_din; controller *ptr_c; char bordblim; request_resource(ekran,0L); for(scre=0;scre 1 && bl_bord) if(bordblim==7) color_b(bordblim=8); else color_b(bordblim=7); for(ii=0,ptr_c=c_ptr;iia_ptr;iiinum_ap;iii++,p_a++) // if(p_a->type_mech!=M_INP) { val=(float)ADC_SC*(p_a->var_tech-p_a->min_sc)/(p_a->max_sc-p_a->min_sc)+0.5; if(val<0){val=0;p_a->novalid=1;} else if(val>ADC_SC){p_a->novalid=1;val=ADC_SC;} else p_a->novalid=0; p_a->var_cod=val; if(p_a->hard_err) p_a->novalid=1; if(p_a->min_reg&&valmin_reg)p_a->bound_reg=1; else if(p_a->max_reg&&val>p_a->max_reg)p_a->bound_reg=2; else { k=ADC_SC*p_a->d_gr*.01; if(p_a->bound_reg==1&&(val-k)>p_a->min_reg)p_a->bound_reg=0; if(p_a->bound_reg==2&&(val+k)max_reg)p_a->bound_reg=0; } if(p_a->min_al&&valmin_al)p_a->bound_al=1; else if(p_a->max_al&&val>p_a->max_al)p_a->bound_al=2; else { k=ADC_SC*p_a->d_gr*.01; if(p_a->bound_al==1&&(val-k)>p_a->min_al)p_a->bound_al=0; if(p_a->bound_al==2&&(val+k)max_al)p_a->bound_al=0; } // if(p_a->min_reg&&valmin_reg)p_a->bound_reg=1; // else // if(p_a->max_reg&&val>p_a->max_reg)p_a->bound_reg=2; // else p_a->bound_reg=0; // if(p_a->min_al&&valmin_al)p_a->bound_al=1; // else // if(p_a->max_al&&val>p_a->max_al)p_a->bound_al=2; // else p_a->bound_al=0; } for(iii=0,p_d=ptr_c->d_ptr;iiinum_dp;iii++,p_d++) { if(p_d->hard_err) p_d->novalid=1; else p_d->novalid=0; } } //===================================== for(i=0, p_o=o_ptr; i < o_num; i++, p_o++) { // printf("Объект сигн %s \n",p_o->cipher); color_t = GREEN_; if(p_o->type_par!=EMPTY) //ciph_ds[0] != ' ') { p_d = (c_ptr+p_o->nomcontr)->d_ptr+p_o->nomsert; if((p_d->type_par==1||p_d->type_par==0) && p_d->nom_var !=-1 && p_d->val_par==1) color_t = RED_; } if(color_t != RED_) { for(j=0; j < p_o->n_gr_c; j++) { if(color_t == RED_) break; p_grc = gr_c_p+ *(p_o->nom_gr_c+j); //p_o->nom_gr_c[j]; for(k=0; k < p_grc->n_par; k++) { if(p_grc->type_sert[k] == ANALOG) { p_a = (c_ptr+p_grc->nomcontr[k])->a_ptr+p_grc->nomsert[k]; if(!p_a->novalid) { if(p_a->bound_al) { color_t = RED_; break; } if(p_a->bound_reg) color_t = YELLOW_; } } else { p_d = (c_ptr+p_grc->nomcontr[k])->d_ptr+p_grc->nomsert[k]; if(p_d->nom_var != -1) #if(PUMP_NORMAL) if(p_d->type_par==3) continue; /* если насос */ #endif if(p_d->type_par==0) if(p_d->type_com == 1 || p_d->type_com == 2) if( (p_d->signal == 1 && p_d->val_par == 0) || (p_d->signal == 2 && p_d->val_par == 1) ) { color_t = RED_; break; } //if(p_d->type_par==1 && p_d->val_par==1 || p_d->type_par !=5 &&p_d->type_par !=1 && p_d->val_par==0) //{ color_t = RED_; break; } } } } if(color_t != RED_) for(j=0; j < p_o->n_ms; j++) { if(color_t == RED_) break; p_dom = DOMI+ *((o_ptr+i)->nom_gr_m+j); //(o_ptr+i)->nom_gr_m[j]; if(p_dom->N_D==-1) continue; for(k=p_dom->N_D; k <= p_dom->K_D; k++) { p_din = DINA+k; if(p_din->P_E == ANALOG) { p_a = (c_ptr+p_din->N_KO)->a_ptr+p_din->NOM_PAR; if(!p_a->novalid) { if(p_a->bound_al) { color_t = RED_; break; } if(color_t==GREEN_) if(p_a->bound_reg) color_t = YELLOW_; } } else { p_d = (c_ptr+p_din->N_KO)->d_ptr+p_din->NOM_PAR; //err // printf("Шифр %s: %X \n",p_d->cipher,p_d); if(p_d->nom_var != -1) #if(PUMP_NORMAL) if(p_d->type_par==3) continue; /* если насос */ #endif if(p_d->type_par==0) if(p_d->type_com == 1 || p_d->type_com == 2) if( (p_d->signal == 1 && p_d->val_par == 0) || (p_d->signal == 2 && p_d->val_par == 1) ) { color_t = RED_; break; } //if(p_d->type_par==1 && p_d->val_par==1 || p_d->type_par !=5 && p_d->type_par !=1 && p_d->val_par==0) //{ color_t = RED_; break; } } } } } // if(t_kbd) // { // if(color_t != curr_color_t[i]) /*|| key_bl)*/ // { // switch(color_t) // { // case YELLOW_: if (curr_color_t[i]==RED_) break; // case RED_ : col_l=i | 128; indication[i]=1; break; // case GREEN_ : col_l=i; indication[i]=0; pr_ind=1; break; // } // light(col_l); // } // } if(color_t != curr_color_t[i]) { if(color_t == GREEN_) {/*p_o->glimmer=0; if(t_kbd) Kbd_Light_OFF(i);*/} else {p_o->glimmer=1; if(t_kbd) Kbd_Blim_ON(i);}; curr_color_t[i] = color_t; x = i%N_obj*72; y = i/N_obj*(L_obj+1); request_resource(ekran,0L); for(scre=0; screcipher); } set_screen(screen); release_resource(ekran); } //Мигание объектов сигнализации for(scre=0; screglimmer1) fgtext(color_t,i%N_obj*72+1,i/N_obj*(L_obj+1)+2,p_o->cipher); else if(p_o->glimmer) fgtext(GRAY_,i%N_obj*72+1,i/N_obj*(L_obj+1)+2,p_o->cipher); } if(p_o->glimmer1) p_o->glimmer1 =0; else if(p_o->glimmer) p_o->glimmer1 =1; set_screen(screen); release_resource(ekran); } /* key_bl=0;*/ // if(t_kbd) // { // if (pr_ind==1) // { /* если выдавался сигнал гашения */ // for (i=0;i<16;i++) // { // if (indication[i]==1) // { /*для "мерцающих" обьектов повт.выдачу */ // col_l=i | 128; light(col_l); t_delay(1L); // } /* мерцания */ // pr_ind=0; // } // } // } _strtime(buff_t_c); request_resource(ekran,0L); for(scre=0;scretypcontr != VIRT && ptr_c->typcontr != CIF50) kz_com(ptr_c->kz,ptr_c); #endif } if(buff_t_c[0] != hour) { hour = buff_t_c[0]; print_date(); } set_screen(screen); release_resource(ekran); t_delay(1*HZ); } } /*-------------------------------------------------------------------*/ void print_date(void) { word_s i,scre; _strdate(buff_t_c); buff_t_c[2] = buff_t_c[5] = '-'; i = *(word_s *)buff_t_c; *(word_s *)buff_t_c = *(word_s *)(buff_t_c + 3); *(word_s *)(buff_t_c + 3) = i; for(scre=0;scre