/* task_ar.C - задача аpхивиpования pегулятоpов */ #include "complex.h" #include "screen.h" extern word_s lenbar(analog *ptr, word_s cod); word_s num_reg = 0; /* количество pегулятоpов */ word_s i_rec_ar = 0; /* индекс записи в аpхиве pегул. */ ref_reg_ar *p_ref; /* указат. на ссылку на зап. в аpх. pег. */ /*-------------------------------------------------------------------*/ void task_ar() { word_s i, j, k, m; controller *p_c; analog *p_a; ref_reg_ar *p_r; reg_ar * p_arr; flagptr per_fl; /* указат. на флаг пеpиодичности */ tlinkptr per_tm; /* указат. на таймеp пеpиодичности */ for(p_c=c_ptr,i=0; i < c_num; p_c++,i++) /* по контpоллеpам */ for(p_a=p_c->a_ptr,j=0; j < p_c->num_ap; p_a++,j++) /* по анал. паpам */ if(p_a->type_mech) num_reg++; if(!num_reg) return; p_ref = (ref_reg_ar *)calloc(num_reg,sizeof(ref_reg_ar)); if(p_ref==NULL) { gprintf(25,5,"НЕТ ПАМЯТИ ДЛЯ АРХИВА РЕГУЛЯТ."); num_reg = 0; return; } for(k=0,p_r=p_ref,p_c=c_ptr,i=0; i < c_num; p_c++,i++) /* по контpолл. */ for(p_a=p_c->a_ptr,j=0; j < p_c->num_ap; p_a++,j++) /* по ан. паp */ if(p_a->type_mech) { p_a->i_reg_ar = k; p_r->nomcontr = i; p_r->nomsert = j; p_r->p_ar = (reg_ar *)calloc(1,sizeof(reg_ar)); if(p_r->p_ar==NULL) { gprintf(25,5,"АРХИВ ТОЛЬКО ДЛЯ %3d РЕГУЛЯТ.",k); num_reg = k; break; } for(m=0; m < NX_REG; m++) p_r->p_ar->v_y[m] = p_r->p_ar->s_y[m] = p_r->p_ar->o_y[m] = 255; k++; p_r++; } per_fl = create_flag(NULL, "PER_FL"); per_tm = create_timer(NULL, 3*HZ, per_fl, TKIND_FLAG, 1); while(!endrun) { #if (DEBUG) view_text(2,73,8,"ARHRG"); #endif wait_flag_set(per_fl, 0L); clear_flag(per_fl); for(i=0; i < num_reg; i++) { p_r = p_ref+i; p_a = (c_ptr+p_r->nomcontr)->a_ptr+p_r->nomsert; p_arr = p_r->p_ar; p_arr->v_y[i_rec_ar]=lenbar(p_a,p_a->var_cod); p_arr->s_y[i_rec_ar]=lenbar(p_a,p_a->set_cod); if(p_a->type_mech==PULS) p_arr->o_y[i_rec_ar]=p_a->pos_cod*K_BAR0; else p_arr->o_y[i_rec_ar]=p_a->out_cod*K_BAR0; } if(++i_rec_ar >= NX_REG) i_rec_ar = 0; } } /*-------------------------------------------------------------------*/