Page 107 - Теория кавитации
P. 107

Каналдар бойынша деректер алу үшін арнайы функция құрастырылды:

                  function ImitValue(id:integer; ndt:tDateTime): real; // канал бойынша              мәнді  имитациялау
                     var min,max,avg,last,dt,delta,norm,a1,a2,h,speed :real; sect:string;
                            begin
                                        sect:=IntToStr(id);                                           // секцияның аты
                                if not par.SectionExists(sect) then // егер жоқ болса – кездейсоқ шама
                                           begin
                                              result := rand(-100,100);
                                              exit;
                                           end;

                               Min := par.ReadFloat(sect,'min',0);                         // параметрлерді оқу
                               Max := par.ReadFloat(sect,'max',0);
                               Avg := par.ReadFloat(sect,'avg',0);
                               Speed := par.ReadFloat(sect,'Speed',0);

                              delta := par.ReadFloat(sect,'delta',0);

                              if par.ValueExists(sect,'time') then
                                       dt :=StrToDateTime( par.ReadString(sect,'time',''))
                                                                               else dt:=0;

                                      last := par.ReadFloat(sect,'Val',0);

                              if not par.ValueExists(sect,'Val') then          //егер алдыңғы мән жоқ болса
                                        begin
                                            result := avg;                             // каналға қалыпты мәнді қайтару
                                            par.WriteFloat(sect,'Val',avg);             // параметрлерді сақтау
                                            par.WriteFloat(sect,'delta',0);
                                            par.WriteString(sect,'time',DateTimeToStr(ndt));
                                            exit;
                                       end;

                             a1:=-speed;
                             a2:=speed;                    // өсудің ең кіші және ең үлкен мәндері
                             if (last>avg) then a2:=a2/2;  // егер шама орта шамадан үлкен болса, онда жоғарғы шекараны екі есе өсір
                             if (last<avg) then a1:=a1/2;                                     //төменгімен де солай
                             a1:=rand(a1,a2);                  // шаманың мүмкін өзгеруі = кездейсоқ шама
                             a1:=rand(a1,delta); //алдыңғы дельта мен кездейсоқ қосымша шама арлығындағы кездейсоқ шама

                             h := (ndt-dt) * 24;                                                    // сағат өтті
                             a2:= last+ a1*h;                                                       // шамаға өзгерді
                             if( a2 > max) then a2:=max;
                             if a2<min then a2:=min;
                              result := a2;                                                             // жаңа шаманы қайтару
                              par.WriteFloat(sect,'Val',result);                              // параметрлерді сақтау
                             par.WriteFloat(sect,'delta',(a2-last)/h);
                             par.WriteString(sect,'time',DateTimeToStr(ndt));
                     end;

                       Арнаның – каналдың имитациясының параметрлерін жөндеу модулі арқылы әр каналға
                  шектік мәндерін, қалыпты мәндерін, өзгеру жылдамдығын бере алмыз. Және де соңғы имитация
                  мәліметтерін көруге болады. Бұл жерде имитация праметрлерін өзгертуге де болады.

                       3.5 Арналармен жұмыс жасау

                                                                 106
   102   103   104   105   106   107   108   109   110   111   112