/* задача опpоса PCL-813 */ #include "complex.h" #include "screen.h" extern word_s setting(analog *a_ptr,float work_f); extern void koeff_sc(analog *a_ptr); extern word_s numrec, lenrec, fh, N_MAN; extern char *recfil; void taskA813(controller *ptr_c) { word_s kz,val,vah,i,j,begin; analog *ptr_a; outp(ptr_c->basaddr+9,ptr_c->IRQ_line); switch(ptr_c->nomport) { case 0 : ptr_c->baud=819; break; case 1 : ptr_c->baud=0; break; } begin=1; while(!endrun) { wait_flag_set(ptr_c->flag, 0L); clear_flag(ptr_c->flag); for(i=0, ptr_a=ptr_c->a_ptr; i < ptr_c->num_ap; i++, ptr_a++) { if(ptr_a->mod_cod==M_INP) continue; if(ptr_a->nolog) continue; /* если логич. запpет обpаб. */ outp(ptr_c->basaddr+10,ptr_a->nomin_var); /* set channel */ t_delay(1L); outp(ptr_c->basaddr+12,0); /* s/w trigger */ t_delay(1L); kz=-1; for(j=0;j<10;j++) { val=inp(ptr_c->basaddr+5); if((val&0x10)!=0x10){ kz=0; break; } /* check the ready bit */ t_delay(1L); } if(kz) break; val=inp(ptr_c->basaddr+4); vah=inp(ptr_c->basaddr+5)&0x0f; /* mask off unused bits (bit 4 to 7) */ val+=(vah*256); val=(word_s)(4095./(4095.-(float)ptr_c->baud)*(float)(val-(word_s)ptr_c->baud))+1; val=(word_s)((float)(ADC_SC+1)/4095.*val); if(ptr_a->no_uchet) ptr_a->var_tech=valtec(ptr_a,val); if(val < 0) { val=0; ptr_a->novalid=1; } else if(val > ADC_SC) { val=ADC_SC; ptr_a->novalid=1; } else ptr_a->novalid=0; ptr_a->dif_var=1; // ptr_a->var_cod=val; // if(!ptr_a->no_uchet) ptr_a->var_tech=valtec(ptr_a,ptr_a->var_cod); // if(ptr_a->min_reg && valmin_reg) ptr_a->bound_reg=1; // else if(ptr_a->max_reg && val>ptr_a->max_reg) ptr_a->bound_reg=2; // else ptr_a->bound_reg=0; // if(ptr_a->min_al && valmin_al) ptr_a->bound_al=1; // else if(ptr_a->max_al && val>ptr_a->max_al) ptr_a->bound_al=2; // else ptr_a->bound_al=0; } begin=0; ptr_c->kz = kz; kz_com(kz,ptr_c); } } //------------------------------ Выдача сообщения об ошибке опроса --------------------- word_s kz_mesage_A813(controller *pc,word_s kz,word_s chn,word_s kz_old) { if(pc->nom_ord!=chn || kz_old!= kz) eprintf(RED_,"Нет связи с АЦП PCL-813"); return(pc->nom_ord); }