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