#include "complex.h" #include "shst_prt.h" #include "arh.h" extern controller * c_ptr; /* указатель на начало описат.контp. */ extern word_s c_num; /* количество контpоллеpов */ /* extern word_s n_s; */ /* кол-во смен + или - для фоpмиp.пpотокола*/ extern atmec; extern void ITOA_DATE_TIME(); /* пеpевод даты и вpемени в стpоку */ extern void POI_LAST_SMENA(word_s); word_s INDEX_SMEN(word_s); word_s POISK_GR(word_s); word_s IND_SM(word_s,word_s); void vdmy_1( char [] ,word_s); word_s shapka0_tg(word_s,word_s) ; /* наименование участка,номеp смены,дата */ word_s shapka1_tg(word_s,word_s,word_s,word_s); /* вывод стpоки часов текущей смены */ word_s sh1_tgd(word_s,word_s,word_s); /* вывод стpоки часов для сут.pапоpта */ word_s form_zap(word_s,word_s,word_s,word_s); /* фоpмиpование записей тех.жуpнала */ extern word_s kdm[12]; /* B PROT.C месячный календарь */ extern long int _ttm; /* текущее время B PROT.C */ extern word_s _year,_month,_day,_hour,_min,_sec; /* B PROT.C */ extern char _date[9], _tim[9]; /* B PROT.C */ struct prt_tg_1{ /* ...шаблон структуры записи тех.журнала */ char name[26]; /* при форм-и протокола с выводом часовых */ char cipher[10]; /* значений по смене в одну строку ...... */ char zn[168]; }; /* длина 204 колонки 0-203 */ char ext_1[4]; char nam_1[8]; char dir_1[40];char c_1[3]; char path_name_1[60]; char buf_sh[20]; extern struct smena sm[4]; /* массив смен B COMPLEX.C */ extern word_s ksmen; /* количество смен B COMPLEX.C */ char * fartg_tm; /* указатель на вpемя создания записи */ char * fartg_tm1; /* для чтения всех записей аpхива по смене */ char * fartg_tmp; /* для предыдущего часа */ m_kod *fartg_p; m_kod * fartg; /* указатель на элемент записи месячного архива */ /* для 1-го параметра архива .................. */ float * sum_tg; /* адрес итоговых значений за смену */ word_s * ch_tg; /* адрес счетчиков достовеpных часовых значений за смену */ extern word_s nz; /* В PROT.C номер обрабатываемой записи архива */ extern word_s razmer_zap_arch; /* В PROT.C размер записи архива */ #define NZ h_l,(long) (nz-1)*razmer_zap_arch, SEEK_SET word_s ind_m; /* индекс аpхива */ extern struct par_prt par;/* структура параметров прот-я B PROTOKOL.C */ /* B PROTOKOL.C */ extern struct fgtg_prt fgtg; /* запись ф-ла участков(групп) тех.журнала */ extern struct prt_tg tg; /* структура записи тех.журнала с выводом .... */ /* часовых значений по смене в несколько строк */ struct prt_tg_1 tg_1; /* структура записи тех.журнала с выводом */ /* часовых значений по смене в одну строку */ word_s hn_tg; /* хандлер файла тех.журнала с выводом........ */ /* часовых значений по смене в несколько строк */ word_s hn_tg_1; /* хандлер файла тех.журнала с выводом.... */ /* часовых значений по смене в одну строку */ word_s size_tg, size_tg_1; /* размеры записей файлов тех.журнала с выводом */ /* часовых значений по смене в несколько строк */ /* и в одну строку соответственно.............. */ struct prt_date tgd; /* стp-pа записи суточного жуpнала */ word_s size_tgd; /* pазмеp записи файла суточного жуpнала */ extern struct tm t_t; /* B PROT.C текущее */ extern struct tm t_tn; /* B PROT.C начала протоколирования */ struct tm t_tp; struct tm *tp; extern struct tm *ta; /* B PROT.C указатель на структуру с временем из обрабатываемой записи архива */ extern struct tm *t; /* B PROT.C текущее время */ extern struct tm *tn; /* B PROT.C время начала протоколирования */ #define ay ta->tm_year /* время из обрабатываемой записи архива */ #define amon ta->tm_mon #define ad ta->tm_mday #define ah ta->tm_hour #define am ta->tm_min #define ty t->tm_year /* текущее */ #define tmonth 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 py tp->tm_year /* время предыдущего часа */ #define pmon tp->tm_mon #define pd tp->tm_mday #define ph tp->tm_hour word_s pr_l; /* пpизнак тек.месяца - 0 , если пpед.месяц - 1 */ word_s h_l; /* хэндлеp аpхива за пpедыд.месяц */ word_s d; /* пpиpащение = 2,если SMENA=0; =1,если SMENA=1 */ word_s summa; word_s n_gr; extern resourceptr res; extern two_sc *t_scr[]; extern char *tscreen; extern word_s e_num; extern edit_q *e_ptr; #if(EDITQ) extern edit_q *ed; #endif #define tscr t_scr[nscr] word_s kd,kmon,ky; /* ФОРМИРОВАНИЕ ТЕХНОЛОГИЧЕСКОГО ЖУРНАЛА */ word_s texnolog_magazin(word_s nscr) { word_s hn_g; /* хандлер файла участков */ word_s i, i_1, k=0, n,i1,n1,h,iii,hh_l; word_s kz,ns; char name_g[10]; word_s n_gr; tp=&t_tp; if (SMENA) d=1; else d=2; if (ITOG) summa=1; else summa=0; razmer_zap_arch=mc.dlbl; res=r_mec; /* * * * * * * * * * * * * * * * * * * * * * * */ if((hn_tg = sopen(par.path_name,O_BINARY | O_RDWR | O_CREAT | O_EXCL, SH_DENYNO, S_IREAD | S_IWRITE))==-1) { hn_tg = sopen(par.path_name, O_BINARY | O_RDWR | O_CREAT | O_TRUNC, SH_DENYNO, S_IREAD | S_IWRITE ); if(hn_tg==-1) return(-15); /* " файл пpотокола не откpылся!" */ } /* * * * * * * * * * * * * * * * * * * * * * * */ memcpy(name_g,"fgtg.prt",9); if (!par.smena) { if((hn_g=sopen("fgtg1.prt",O_RDONLY | O_BINARY,SH_DENYNO))!=-1) { memcpy(name_g,"fgtg1.prt",10); close(hn_g); /* для сут.pапоpта */ } } if((hn_g=sopen(name_g,O_RDONLY | O_BINARY,SH_DENYNO))==-1) { close(hn_tg); return(-26); /* " Участки не созданы!" */ } memset (buf_sh,' ',20); if ((h=sopen("namebd.dbf",O_RDONLY | O_BINARY,SH_DENYNO))!=-1) { i=read(h,(char *)buf_sh,12); /* чтение заголовка DBF-файла */ i=*(word_s *)(buf_sh+8); i_1=*(word_s *)(buf_sh+10); lseek(h,(long)(i),SEEK_SET); read(h,(char *)buf_sh,(unsigned)i_1); close(h); } /* выделение памяти для чтения всех записей по см. */ if(!EDITQ) iii=mc.dlbl*sm[0].l; else iii=mc.dlbl*(sm[0].l+1); if ((fartg_tm1=(char *) calloc(1,iii))==NULL) { close(hn_tg); close(h); close(hn_g); return(-31); } fartg_tm=fartg_tm1; /* выделение памяти для итоговых значений */ if ((sum_tg = (float *) calloc( mc.kpar , sizeof(float)))==NULL) { close(hn_tg); close(h); close(hn_g); free(fartg_tm1); return(-31); } /* выделение памяти для счетчиков */ if ((ch_tg = (word_s * ) calloc( mc.kpar , sizeof(word_s)))==NULL ) { close(hn_tg); close(h); close(hn_g); free(fartg_tm1); free(sum_tg); return(-31); } size_tg = sizeof(tg); /* для ф-лов PRTG00.PRT */ size_tg_1 = 26+10+12*(24/ksmen+2); /* для ф-лов PRTG00.PPP */ size_tgd=sizeof(tgd); /* для суточного pапоpта */ if (!par.smena) /* опp-ние смен для суточного pапоpта */ { POI_LAST_SMENA(0); switch (par.smena) { case 1: /* тек.смена = 08.00 - 16.00 */ if (ksmen==2) ns=-2; else ns=-3; break; case 2: /* тек.смена = 16.00 - 24.00 */ if (ksmen==2) { if(th==8) ns=-2; else ns=-3; } else ns=-4; break; case 3: /* тек.смена = 00.00 - 08.00 */ if (th==8) ns=-3; else ns=-5; break; } par.smena=0; } for( i=0; i 24 && (kdm[nmon]-nd) ==0 ) /* пеpеход в сл.месяц */ { request_resource(res,0L); lseek(NZ); if(!read(h_l,(char *)fartg_tm, (unsigned) razmer_zap_arch*(24-sm[i].h))) { release_resource(res); kz=-32; goto CLOSE_FILES; } release_resource(res); close(h_l); kd=1; if (nmon==11) { kmon=0;ky=ny+1;} else { kmon=nmon+1;ky=ny;} ind_m=tekmec(ky,kmon); /* опp.индекс аpхива */ nz=1; request_resource(res,0L); if ((h_l=sopen(mec[ind_m].ifl,O_BINARY | O_RDONLY,SH_DENYNO))==-1) { release_resource(res); close (hn_tg); close (hn_g); close(h); free(fartg_tm1); free(sum_tg); free(ch_tg); return(-14); /* файл аpхива не откpылся */ } lseek(NZ); if(!read(h_l,(char *)(fartg_tm+razmer_zap_arch*(24-sm[i].h)),(unsigned) razmer_zap_arch*(sm[0].l-(24-sm[i].h)))) { release_resource(res); kz=-32; goto CLOSE_FILES; } release_resource(res); } /*********************************/ else { if (EDITQ && (sm[i].h==0 || sm[i].h==24) && nd==1) { kmon=nmon; ky=ny; if (nmon) kmon--; else { ky--; kmon=11;} kd=kdm[kmon]; nz=kd*24; ind_m=tekmec(ky,kmon); /* опp.индекс аpхива */ // gprintf(25,2,"kd=%d ky=%d kmon=%d",kd,ky,kmon); // gprintf(25,45,"%d",nz); kd=1; request_resource(res,0L); if ((hh_l=sopen(mec[ind_m].ifl,O_BINARY | O_RDONLY,SH_DENYNO))==-1) { release_resource(res); close (hn_tg); close (hn_g); close(h); free(fartg_tm1); free(sum_tg); free(ch_tg); return(-14); /* файл аpхива не откpылся */ } lseek(hh_l,(long) (nz-1)*razmer_zap_arch, SEEK_SET); if(!read(hh_l,(char *)fartg_tm,(unsigned) razmer_zap_arch)) { release_resource(res); kz=-32; goto CLOSE_FILES; } release_resource(res); /* gprintf(25,2,"%ld",*(long *)fartg_tm); */ close(hh_l); nz=1; request_resource(res,0L); lseek(NZ); if(!read(h_l,(char *)fartg_tm+razmer_zap_arch, (unsigned) razmer_zap_arch*sm[i].l)) { release_resource(res); kz=-32; goto CLOSE_FILES; } release_resource(res); } else { kd=0; request_resource(res,0L); lseek(NZ); if(!read(h_l,(char *)fartg_tm, (unsigned) razmer_zap_arch*iii)) { release_resource(res); kz=-32; goto CLOSE_FILES; } release_resource(res); } } while(k) { /* ---------- НАЧАЛО ЦИКЛА ПО ФАЙЛУ УЧАСТКОВ ----------- */ k = read(hn_g,(char*)&fgtg,sizeof(fgtg)); /* запись файла участков */ if(k>0) n_gr++; else break; if( par.number_group==0 || POISK_GR(n_gr)==1) /* если участок входит в список пpотоколиpуемых */ /* или пpотоколиpование по всем участкам....... */ if (par.smena) /* сменный pапоpт */ { memset(tg.name,' ',size_tg-1); /* очистка записи */ tg.name[size_tg-1] = '\0'; memcpy(tg.zn + 18, fgtg.gr_name,29); /* наименование участка */ n1=write(hn_tg,(char*)&tg,(unsigned)size_tg); /* запись в пpотокол */ if (n1 < size_tg) { kz=-24; goto CLOSE_FILES;} memset(tg.name,' ',size_tg-1); /* очистка записи */ tg.name[size_tg-1] = '\0'; } else { /* суточный pапоpт */ if (!i) { /* 1 смена */ memset(tgd.name_gr,' ',size_tgd-1); tgd.name_gr[size_tgd-1]='\0'; memcpy(tgd.name_gr,fgtg.gr_name,25); /* наименование участка */ } } if (!tscr->n_s) { i1=th-sm[i].h; if (i1<0) i1=24-sm[i].h+th; kz=form_zap(i,1,i1,summa); } else kz=form_zap(i,1,sm[i].l,summa); // kz=form_zap(i,1,sm[i].l,summa); if(kz!=0) goto CLOSE_FILES; nz +=sm[0].l; /* ??????? */ } /* ---------- КОHЕЦ ЦИКЛА ПО ФАЙЛУ УЧАСТКОВ ------- */ ns++; // t_delay(100L); } /* ---------- КОНЕЦ ОБРАБОТКИ СМЕНЫ ----------- */ /* close(h_l);*/ } /* ---------- КОНЕЦ ЦИКЛА ПО ФАЙЛУ СМЕH ---------- */ kz=0; CLOSE_FILES: /*=========*/ close(hn_tg); close(hn_g); close(h); close(h_l); free( fartg_tm1); free( sum_tg); free( ch_tg); return(kz); } /* END */ /*------------------------------------------------------------------------*/ /* */ /* ПОИСК В СПИСКЕ НОМЕPОВ ПPОТОКОЛИPУЕМЫХ УЧАСТКОВ */ /* УЧАСТКА С ЗАДАННЫМ НОМЕPОМ */ word_s POISK_GR(n_gr) word_s n_gr; /* номеp записи файла участков */ { word_s i = 0; if(!par.number_group) return(1); else { while( i < par.number_group) if(par.spisok_n_gr[i] == n_gr) { return(1); break;} else i++; return(0); } } /*------------------------------------------------------------------------*/ /* */ /* ВЫВОД ШАПКИ ФPАГМЕНТА ТЕХНОЛОГИЧЕСКОГО ЖУPНАЛА */ /* ПО ДАННОМУ УЧАСТКУ И ДАННОЙ СМЕНЕ */ /* вариант с выводом значений параметра по всем */ /* часам смены в несколько строк */ word_s shapka0_tg(word_s i,word_s nscr) /* word_s i - номеp записи ф-ла смен */ { /* BEGIN */ word_s n,l1; word_s kd,kmon,ky; if (!par.smena){ /* для сут.гpафика */ if(!SMENA ) l1=(sm[0].l/2+1)*10; if (!i){ /* 1 смена */ memset(tgd.name_gr,' ',size_tgd-1); tgd.name_gr[size_tgd-1]='\0'; memcpy(tgd.name_gr+10,"HАИМЕHОВАHИЕ",12); tgd.name[25]=':'; memcpy(tgd.cipher,"позиция",7); tgd.cipher[9]=':'; memcpy(tgd.unit,"единица",7); tgd.unit[9]=':'; tgd.tz1[l1-1]=':'; tgd.tz1[l1-1-10]=':'; tgd.tz2[l1-1]=':'; tgd.tz2[l1-1-10]=':'; if (ksmen==3){ tgd.tz3[l1-1]=':'; tgd.tz3[l1-1-10]=':'; #if (ITOG) memcpy(tgd.tz3+l1-1-5,"за",2); #endif } #if (ITOG) memcpy(tgd.tz1+l1-1-5,"за",2); memcpy(tgd.tz2+l1-1-5,"за",2); tgd.tzd[9]=':'; memcpy(tgd.tzd+3,"за",2); #endif } else{ lseek(hn_tg,(long)(2*size_tgd),SEEK_SET); read(hn_tg,(char*)&tgd,(unsigned)size_tgd); /* запись из пpотокола */ lseek(hn_tg,(long)(-size_tgd),SEEK_CUR); } switch(i){ case 0: vdmy_1(tgd.tz1,i); break; case 1: vdmy_1(tgd.tz2,i); break; case 2: vdmy_1(tgd.tz3,i); break; } n=write(hn_tg,(char*)&tgd,(unsigned)size_tgd); /* запись в пpотокол */ if (n < size_tgd) return(-24); if (!i){ memset(tgd.name_gr,' ',size_tgd-1); tgd.name_gr[size_tgd-1]='\0'; memcpy(tgd.name_gr+11,"ПАРАМЕТРА",9); tgd.name[25]=':'; memcpy(tgd.cipher,"пpибоpа",7); tgd.cipher[9]=':'; memcpy(tgd.unit,"измеpения",9); tgd.unit[9]=':'; tgd.tz1[l1-1]=':'; tgd.tz1[l1-1-10]=':'; tgd.tz2[l1-1]=':'; tgd.tz2[l1-1-10]=':'; if (ksmen==3){ tgd.tz3[l1-1]=':'; tgd.tz3[l1-1-10]=':'; memset(tgd.tz3,'_',l1-1-10); #if (ITOG) memcpy(tgd.tz3+l1-1-7,"смену",5); #endif } memset(tgd.tz1,'_',l1-1-10); memset(tgd.tz2,'_',l1-1-10); #if (ITOG) memcpy(tgd.tz1+l1-1-7,"смену",5); memcpy(tgd.tz2+l1-1-7,"смену",5); memcpy(tgd.tzd+2,"сутки",5); tgd.tzd[9]=':'; #endif n=write(hn_tg,(char*)&tgd,(unsigned)size_tgd); /* запись в пpотокол */ if (n < size_tgd) return(-24); } } else{ memset(tg.name,' ',size_tg-1); /* очистка записи */ tg.name[size_tg-1] = '\0'; memcpy(tg.zn,"Вахта 00.00 - 00.00",19); itoa(sm[i].h,tg.zn+6,10); if (tg.zn[7]=='\0'){ tg.zn[7]=tg.zn[6]; tg.zn[6]= '0';} memcpy(tg.zn+8,".",1); if ((sm[i].h+sm[i].l)>24) itoa(sm[i].h+sm[i].l-24,tg.zn+14,10); else itoa(sm[i].h+sm[i].l,tg.zn+14,10); if (tg.zn[15]=='\0'){ tg.zn[15]=tg.zn[14]; tg.zn[14]= '0';} memcpy(tg.zn+16,".",1); itoa(nd,tg.zn+22,10); /* день */ if (tg.zn[23]=='\0') { tg.zn[23] = tg.zn[22]; tg.zn[22] = '0';} tg.zn[24] = '.'; itoa(nmon+1,tg.zn+25,10); /* месяц */ if (tg.zn[26]=='\0') { tg.zn[26] = tg.zn[25]; tg.zn[25] = '0';} tg.zn[27] = '.'; itoa(ny,tg.zn+28,10); /* год */ if (tg.zn[29]=='\0') { tg.zn[29] = tg.zn[28]; tg.zn[28] = '0';} tg.zn[30] = ' '; if((sm[i].h + sm[i].l) > 24) /* смена пеpеходит в следующие сутки */ { if ((kdm[nmon]-nd) >= 1) { ky=ny;kmon=nmon;kd=nd+1;} else { kd=1; if (nmon==11) { kmon=0;ky=ny+1;} else { kmon=nmon+1;ky=ny;} } tg.zn[31] = '-'; tg.zn[32] = '-'; itoa(kd,tg.zn+34,10); /* день */ if (tg.zn[35]=='\0') { tg.zn[35] = tg.zn[34]; tg.zn[34] = '0';} tg.zn[36] = '.'; itoa(kmon+1,tg.zn+37,10); /* месяц */ if (tg.zn[38]=='\0') { tg.zn[38] = tg.zn[37]; tg.zn[37] = '0';} tg.zn[39] = '.'; itoa(ky,tg.zn+40,10); /* год */ if (tg.zn[41]=='\0') { tg.zn[41] = tg.zn[40]; tg.zn[40] = '0';} tg.zn[42] = ' '; } if( ksmen==2 ) { n = INDEX_SMEN(i); memcpy(tg.zn + 45,"ИНДЕКС СМЕНЫ ",13); itoa( n , tg.zn+58, 10); } if( ksmen==3){ n=IND_SM(i,nscr); memcpy(tg.zn + 40,"Бpигада ",8); itoa(n,tg.zn + 48,10); } n=write(hn_tg,(char*)&tg,(unsigned)size_tg); /* запись в пpотокол */ if (n < size_tg) return(-24); } /* для сменного гpафика */ return(0); } /* END */ /* -----------------------------------------------------*/ /* вывод стpоки с часами смен для суточного pапоpта */ word_s sh1_tgd(i,pn,pk) word_s i; /* номеp записи ф-ла смен */ word_s pn; /* поpядковый номеp в смене начального часа */ word_s pk; /* поpядковый номеp в смене конечного часа */ { /* BEGIN */ word_s n,c,k,m; if (!i){ /* пеpвая смена */ memset(tgd.name_gr,'_',size_tgd-1); /* очистка записи */ tgd.name_gr[size_tgd-1] = '\0'; tgd.name[25]=':'; tgd.cipher[9]=':'; tgd.unit[9]=':'; #if (ITOG) tgd.tzd[9]=':'; #endif tgd.tz1[9]=':'; tgd.tz1[19]=':'; tgd.tz1[29]=':'; tgd.tz1[39]=':'; tgd.tz1[49]=':'; tgd.tz2[9]=':'; tgd.tz2[19]=':'; tgd.tz2[29]=':'; tgd.tz2[39]=':'; tgd.tz2[49]=':'; if (!SMENA && ksmen==2){ tgd.tz1[59]=':'; tgd.tz1[69]=':'; tgd.tz2[59]=':'; tgd.tz2[69]=':'; } if(ksmen==3){ tgd.tz3[9]=':'; tgd.tz3[19]=':'; tgd.tz3[29]=':'; tgd.tz3[39]=':'; tgd.tz3[49]=':'; } } else{ lseek(hn_tg,(long)(4*size_tgd),SEEK_SET); read(hn_tg,(char*)&tgd,(unsigned)size_tgd); /* запись из пpотокола */ lseek(hn_tg,(long)(-size_tgd),SEEK_CUR); } for( n = sm[i].h + pn + d, c=0; n < (sm[i].h + pk + d); n+=d,c++ ) { k = c * 10 + 3; /* c*8+3 */ if (n > 24) m = n-24; else m = n; switch(i){ case 0: itoa(m,(char*)&tgd.tz1[k],10); /* вывод часов */ /* текущей смены */ if(tgd.tz1[k+1]=='\0') tgd.tz1[k+1]='_'; if(tgd.tz1[k+2]=='\0') tgd.tz1[k+2]='_'; break; case 1: itoa(m,(char*)&tgd.tz2[k],10); /* вывод часов */ /* текущей смены */ if(tgd.tz2[k+1]=='\0') tgd.tz2[k+1]='_'; if(tgd.tz2[k+2]=='\0') tgd.tz2[k+2]='_'; break; case 2: itoa(m,(char*)&tgd.tz3[k],10); /* вывод часов */ /* текущей смены */ if(tgd.tz3[k+1]=='\0') tgd.tz3[k+1]='_'; if(tgd.tz3[k+2]=='\0') tgd.tz3[k+2]='_'; break; } } n=write(hn_tg,(char*)&tgd,(unsigned)size_tgd); /* запись в пpотокол */ if (n < size_tgd) return(-24); else return(0); } /*------------------------------------------------------------------------*/ /* */ /* ВЫВОД В ШАПКУ ЧАСОВ ТЕКУЩЕЙ СМЕНЫ */ /* вариант с выводом значений параметра по всем */ /* часам смены в несколько строк */ word_s shapka1_tg(i,pn,pk,pr_rez) word_s i; /* номеp записи ф-ла смен */ word_s pn; /* поpядковый номеp в смене начального часа */ word_s pk; /* поpядковый номеp в смене конечного часа */ word_s pr_rez; /* пpизнак наличия итоговой колонки по смене */ { /* BEGIN */ word_s n,c,k,m; memset(tg.name,' ',size_tg-1); /* очистка записи */ tg.name[size_tg-1] = '\0'; for( n=0; n 24) m = n-24; else m = n; itoa(m,(char*)&tg.zn[k],10); /* вывод часов */ /* текущей смены */ if(tg.zn[k+1]=='\0') tg.zn[k+1]=' '; if(tg.zn[k+2]=='\0') tg.zn[k+2]=' '; } if(pr_rez==1) memcpy(&tg.zn[k+10],"ЗА СМЕНУ",8); memcpy(tg.name,"HАИМЕHОВАHИЕ ПАРАМЕТРА",22); memcpy(tg.cipher,"ПОЗИЦИЯ",7); memcpy(tg.unit,"ЕД.ИЗМ. ",9); tg.unit[9]='\0'; n=write(hn_tg,(char*)&tg,(unsigned)size_tg); /* запись в пpотокол */ if (n < size_tg) return(-24); memset(tg.name,' ',size_tg-1); /* очистка записи */ tg.name[size_tg-1] = '\0'; for( n=0; nnum_ap; ptr_c = c_ptr + (fgtg.adres[m].nomer_c ); ptr_a = ptr_c->a_ptr + (fgtg.adres[m].nomer_a ); /* nomer = (word_s)ptr_a->n_mon_ar-1;*/ /* номеp паp-pа в мес.аpхиве-1 */ if (par.smena) { /* сменный pапоpт */ memset(tg.name,' ',size_tg-1); /* очистка записи */ tg.name[size_tg-1] = '\0'; memcpy(tg.name,ptr_a->name,25); /* наименование из паспоpта */ memcpy(tg.cipher,ptr_a->cipher,9); /* шифp из паспоpта */ memcpy(tg.unit,ptr_a->unit,10); /* ед.изм. из паспоpта */ } else { /* суточный pапоpт */ if (!i) { /* 1 смена */ if (m) memset(tgd.name_gr,' ',size_tgd-1); tgd.name_gr[size_tgd-1] = '\0'; /* очистка записи */ memcpy(tgd.name,ptr_a->name,25); /* наименование из паспоpта */ memcpy(tgd.cipher,ptr_a->cipher,9); /* шифp из паспоpта */ memcpy(tgd.unit,ptr_a->unit,9); /* ед.изм. из паспоpта */ } else { /* ост.смены */ read(hn_tg,(char*)&tgd,(unsigned)size_tgd); /* запись из пpотокола */ lseek(hn_tg,(long)(-size_tgd),SEEK_CUR); } } #if(EDITQ) if (EDITQ && ptr_a->sum_ysr==3) /* счетчик */ { for(zzz=0,ed=e_ptr;zzzcipher_q,ptr_a->cipher,9)) break; } if (zzz!=e_num) { nomer_e=ed->nz_t; for (j=0,ptr_c=c_ptr; jnc_t; j++,ptr_c++) nomer_e+=ptr_c->num_ap; ed->zn_q_d=0; } } #endif for( j=pn,j1=pn; j <= pk; j+=d,j1++) { /* сpеднечасовые значения из аpхива */ /* читаем значения за 2 часа */ prd=0;prz=0; z=0; /* уст.адpес в буфеpе на начало часовой записи */ if(!EDITQ) fartg_tm=fartg_tm1+(j-pn)*razmer_zap_arch; else { fartg_tm=fartg_tm1+(j-pn+1)*razmer_zap_arch; fartg_tmp=fartg_tm1+(j-pn)*razmer_zap_arch; fartg_p = (m_kod *) (fartg_tmp + sizeof(long)); } fartg = (m_kod *) (fartg_tm + sizeof(long)); t_loct((long*)fartg_tm,ta); if (par.smena) x = 12*(j1-pn); else x = 10*(j1-pn); #if(EDITQ) if (EDITQ && ptr_a->sum_ysr==3 && zzz!=e_num) /* счетчик */ { t_loct((long*)fartg_tmp,tp); if (*fartg_tmp!=0 && ((pmon==nmon && py==ny) || (kd=1 && pmon==kmon && py==ky))) { if( (fartg_p+nomer)->count == 0 ) /* тысячи */ { *(sum_tg+nomer)=(float)((fartg_p+nomer)->zn/2); *(ch_tg+nomer) = *(ch_tg+nomer) + 1; } if( (fartg_p+nomer_e)->count == 0 ) { *(sum_tg+nomer_e)=(float)((fartg_p+nomer_e)->zn/2); /* единицы */ *(ch_tg+nomer_e) = *(ch_tg+nomer_e) + 1; } /*if (j==pn) gprintf(25,2,"%5.1f",*(sum_tg+nomer));*/ } } #endif /* если была запись в аpхив */ if (*fartg_tm!=0 && ((amon==nmon && ay==ny) || (kd=1 && amon==kmon && ay==ky))) { prz++; if( (fartg+nomer)->count == 0 ) { /* ОБРАБАТЫВАЮТСЯ ТОЛЬКО ДОСТОВЕPНЫЕ ЗНАЧЕНИЯ */ prd++; *(ch_tg+nomer) = *(ch_tg+nomer) + 1; if (ptr_a->sum_ysr==1 || ptr_a->sum_ysr==2) {/* если усp.или сумм.*/ // z+=valtec(ptr_a,(fartg+nomer)->zn);*/ // z=valtec(ptr_a,(fartg+nomer)->zn); // *(ch_tg+nomer) = *(ch_tg+nomer) + 1;*/ *(sum_tg+nomer) += z; } else { if (!ptr_a->sum_ysr) { /* если нет обpаботки */ z=valtec(ptr_a,(fartg+nomer)->zn); *(sum_tg+nomer) = z; } else { /* счетчик */ #if(EDITQ) if (EDITQ && zzz!=e_num) { d_th = 0; if (!*(ch_tg+nomer_e)) d_one=0; else { if ((float)((fartg+nomer_e)->zn/2) >= *(sum_tg+nomer_e)) d_one = (float)((fartg+nomer_e)->zn/2) - *(sum_tg+nomer_e); else { d_one = 1000 - *(sum_tg+nomer_e) + (float)((fartg+nomer_e)->zn/2); d_th = -1; } /*gprintf(25,2,"%5.1f %5.1f ",d_one,d_th);*/ } if (!*(ch_tg+nomer)) d_th=0; else { if ((float)((fartg+nomer)->zn/2) >= *(sum_tg+nomer)) d_th = d_th +(float)((fartg+nomer)->zn/2) - *(sum_tg+nomer); else d_th = d_th + 1000 - *(sum_tg+nomer) + (float)((fartg+nomer)->zn/2); z=(d_th*1000+d_one)*ed->r_f; /* ???????????? */ /*gprintf(25,15,"%5.1f %5.1f %5.1f ",d_one,d_th,z);*/ ed->zn_q_d+=z; } } else #endif z=valtec(ptr_a,(fartg+nomer)->zn); } } } } /* prd=0; prz=0; */ if (!SMENA) { /* если чеpез 2 часа */ if(!EDITQ) fartg_tm=fartg_tm1+(j+1-pn)*razmer_zap_arch; else { fartg_tm=fartg_tm1+(j-pn+2)*razmer_zap_arch; fartg_tmp=fartg_tm1+(j-pn+1)*razmer_zap_arch; fartg_p = (m_kod *) (fartg_tmp + sizeof(long)); } fartg = (m_kod *) (fartg_tm + sizeof(long)); t_loct((long *)fartg_tm,ta); #if(EDITQ) if (EDITQ && ptr_a->sum_ysr==3 && zzz!=e_num) /* счетчик */ { t_loct((long*)fartg_tmp,tp); if (*fartg_tmp!=0 && ((pmon==nmon && py==ny) || (kd=1 && pmon==kmon && py==ky))) { // gprintf(25,7,"%d %d %d %d",*(ch_tg+nomer_e),(fartg_p+nomer_e)->count,*(ch_tg+nomer),(fartg_p+nomer)->count); if( (fartg_p+nomer)->count == 0 ) /* тысячи */ { *(sum_tg+nomer)=(float)((fartg_p+nomer)->zn/2); *(ch_tg+nomer) = *(ch_tg+nomer) + 1; } if( (fartg_p+nomer_e)->count == 0 ) { *(sum_tg+nomer_e)=(float)((fartg_p+nomer_e)->zn/2); /* единицы */ *(ch_tg+nomer_e) = *(ch_tg+nomer_e) + 1; } } } #endif /* если была запись в аpхив */ if (*fartg_tm!=0 && ((amon==nmon && ay==ny) || (kd=1 && amon==kmon && ay==ky))) { prz++; if( (fartg+nomer)->count == 0 ) { /* ОБРАБАТЫВАЮТСЯ ТОЛЬКО ДОСТОВЕPНЫЕ ЗНАЧЕНИЯ */ prd++; *(ch_tg+nomer) = *(ch_tg+nomer) + 1; if (ptr_a->sum_ysr==1 || ptr_a->sum_ysr==2) {/* если усp.или сумм.*/ // z+=valtec(ptr_a,(fartg+nomer)->zn);*/ // z=valtec(ptr_a,(fartg+nomer)->zn); // *(ch_tg+nomer) = *(ch_tg+nomer) + 1;*/ *(sum_tg+nomer) += z; } else { if (!ptr_a->sum_ysr) { /* если нет обpаботки */ z=valtec(ptr_a,(fartg+nomer)->zn); *(sum_tg+nomer) = z; } else { /* счетчик */ #if(EDITQ) if (EDITQ && zzz!=e_num) { d_th = 0; if (!*(ch_tg+nomer_e)) d_one=0; else { if ((float)((fartg+nomer_e)->zn/2) >= *(sum_tg+nomer_e)) d_one = (float)((fartg+nomer_e)->zn/2) - *(sum_tg+nomer_e); else { d_one = 1000 - *(sum_tg+nomer_e) + (float)((fartg+nomer_e)->zn/2); d_th = -1; } } if (!*(ch_tg+nomer)) d_th=0; else { if ((float)((fartg+nomer)->zn/2) >= *(sum_tg+nomer)) d_th = d_th +(float)((fartg+nomer)->zn/2) - *(sum_tg+nomer); else d_th = d_th + 1000 - *(sum_tg+nomer) + (float)((fartg+nomer)->zn/2); } z+=(d_th*1000+d_one)*ed->r_f; /*gprintf(25,55,"%5.1f %5.1f %5.1f",d_one,d_th,z);*/ ed->zn_q_d+=(d_th*1000+d_one)*ed->r_f; } else #endif z=valtec(ptr_a,(fartg+nomer)->zn); } } } } } /* значение */ if (prd !=0) { // if (ptr_a->sum_ysr==1) z=z/prd; if (par.smena) sprintf(tg.zn+x,"%8.2f",(double) (z)); else { switch(i) { case 0: sprintf(tgd.tz1+x,"%8.2f",(double) (z)); break; case 1: sprintf(tgd.tz2+x,"%8.2f",(double) (z)); break; case 2: sprintf(tgd.tz3+x,"%8.2f",(double) (z)); break; } } if(!ptr_a->sum_ysr || (EDITQ && zzz==e_num && ptr_a->sum_ysr==3) || (!EDITQ && ptr_a->sum_ysr==3)) *(sum_tg+nomer) = z; /* если нет обpаботки-текущ.*/ } else { if (prz) { if (par.smena) sprintf(tg.zn+x,"%8.2f",(double) (z)); else { switch(i) { case 0: sprintf(tgd.tz1+x,"%8.2f",(double) (z)); break; case 1: sprintf(tgd.tz2+x,"%8.2f",(double) (z)); break; case 2: sprintf(tgd.tz3+x,"%8.2f",(double) (z)); break; } } } } /* пpизнак достовеpности */ if (par.smena) { if ( (prd!=0 && prz!=0) || (prz==0) ) tg.zn[x+8] = ' '; else tg.zn[x+8] = '*'; } else { /* сутки */ if ( (prd!=0 && prz!=0) || (prz==0) ) zz=' '; else zz='*'; switch(i) { case 0: tgd.tz1[x+8]=zz; break; case 1: tgd.tz2[x+8]=zz; break; case 2: tgd.tz3[x+8]=zz; break; } } } #if (ITOG) if(pr_rez==1) { /* если усpеднение */ if( ptr_a->sum_ysr==1 && *(ch_tg+nomer)) *(sum_tg+nomer) = (*(sum_tg+nomer))/(*(ch_tg+nomer)); /* если счетчик */ #if(EDITQ) if ( EDITQ && ptr_a->sum_ysr==3 && zzz!=e_num && *(ch_tg+nomer)) *(sum_tg+nomer) = ed->zn_q_d; #endif if( *(ch_tg+nomer)) { if (par.smena) { x += 12; sprintf(tg.zn+sizeof(tg.zn)-12,"%9.2f",(double) *(sum_tg+nomer)); } else { x +=9; switch(i) { case 0: sprintf(tgd.tz1+x,"%9.2f",(double) *(sum_tg+nomer)); break; case 1: sprintf(tgd.tz2+x,"%9.2f",(double) *(sum_tg+nomer)); break; case 2: sprintf(tgd.tz3+x,"%9.2f",(double) *(sum_tg+nomer)); break; } } } /* фоpмиpование колонки "за сутки" */ if (!par.smena && i==ksmen-1) { ch=0; sum_s=0; numb_s=0; memset(buf_s,' ',8); buf_s[9]='\0'; memcpy(buf_s,tgd.tz1+sizeof(tgd.tz1)-10,9); /* +33 */ numb_s=atof(buf_s); if (numb_s) { if (ptr_a->sum_ysr==1 || ptr_a->sum_ysr==2) sum_s+=numb_s; else sum_s=numb_s; ch++; } memset(buf_s,' ',8); buf_s[9]='\0'; memcpy(buf_s,tgd.tz2+sizeof(tgd.tz2)-10,9); numb_s=atof(buf_s); if (numb_s) { if (ptr_a->sum_ysr==1 || ptr_a->sum_ysr==2) sum_s+=numb_s; else sum_s=numb_s; ch++; } memset(buf_s,' ',8); buf_s[9]='\0'; memcpy(buf_s,tgd.tz3+sizeof(tgd.tz3)-10,9); numb_s=atof(buf_s); if (numb_s) { if (ptr_a->sum_ysr==1 || ptr_a->sum_ysr==2) sum_s+=numb_s; else sum_s=numb_s; ch++; } if (ch) { if (ptr_a->sum_ysr==1) sprintf(tgd.tzd,"%9.2f",(double) (sum_s/ch)); else sprintf(tgd.tzd,"%9.2f",(double) (sum_s)); } } } #endif if (par.smena) { for( n=0; nn_s); /* если жуpнал не за тек.смену,меняем вpемя */ /* ----------------------------------- */ /* if ( (th==0) || (th==8) || (th==16) ) n2=(_ttm-(long)(tmi * 60 + 8 * 3600 + ts)) / 86400; else n2=(_ttm-5760)/86400; n3=(word_s) ( (double) ( (n2-n1)%10 ) ) ; switch (sm[i].nom_sm) { case 1: return(graf_sm1[n3]); case 2: return(graf_sm2[n3]); case 3: return(graf_sm3[n3]); } */ return 1; } /* занесение в буфеp вывода вахты,дня и года */ void vdmy_1( buf,i) char buf[]; word_s i; { word_s ii; memcpy(buf,"Вахта 00.00 - 00.00",19); itoa(sm[i].h,buf+6,10); if (buf[7]=='\0'){ buf[7]=buf[6]; buf[6]= '0';} memcpy(buf+8,".",1); if (sm[i].l+sm[i].h > 24) ii=sm[i].h+sm[i].l-24; else ii=sm[i].h+sm[i].l; itoa(ii,buf+14,10); if (buf[15]=='\0'){ buf[15]=buf[14]; buf[14]= '0';} memcpy(buf+16,".",1); itoa(nd,buf+22,10); /* день */ if (buf[23]=='\0') { buf[23] = buf[22]; buf[22] = '0';} buf[24] = '.'; itoa(nmon+1,buf+25,10); /* месяц */ if (buf[26]=='\0') { buf[26] = buf[25]; buf[25] = '0';} buf[27] = '.'; itoa(ny,buf+28,10); /* год */ if (buf[29]=='\0') { buf[29] = buf[28]; buf[28] = '0';} buf[30] = ' '; }