[ Pobierz całość w formacie PDF ]
.Projektuj¹c warstwê synchronizacyjn¹ programu, musimy mieæ przede wszystkim nauwadze jej optymalnoœæ.Nie ma wielkiego sensu próbkowanie ³¹cza w czasiekrótszym ni¿ mo¿liwoœci danego przyrz¹du.Musimy te¿ zdawaæ sobie sprawê zprzeznaczenia naszego programu.W omawianym przyk³adzie pos³u¿y³em siêurz¹dzeniem, którego g³Ã³wnym zadaniem jest bardzo dok³adna stabilizacja iodczyt temperatury.To, ¿e jest w stanie odpowiadaæ co kilkaset milisekund niestanowi dla mnie niespodzianki.W praktyce producenci konkretnych przyrz¹dów pomiarowych czêstoœæ próbkowania³¹cza, do którego urz¹dzenie jest przy³¹czane, podaj¹ z pewn¹ doœæ szerok¹tolerancj¹.Dochodzimy wiêc do tego, ¿e sam programista musi taki w miarêoptymalny czas ustaliæ.Z regu³y postêpuje siê w sposób nastêpuj¹cy:wykorzystuj¹c jakiekolwiek zaprojektowane wczeœniej zdarzenie, sprawdzamymoment, w którym przestajemy otrzymywaæ b³êdne (przek³amane) informacjepochodz¹ce od urz¹dzenia.Wcale to jednak nie znaczy, ¿e je¿eli przy ustalonymprzedziale próbkowania, np.750 ms, otrzymujê w doœæ d³ugim okresie prawid³owewskazania przyrz¹du, to wszystko jest ju¿ w porz¹dku.Mo¿e siê na przyk³adokazaæ, ¿e dla wartoœci 760 ms pomiar zacznie przebiegaæ bardziej miarowo.Dlatego nale¿y mieæ na uwadze dwie sprawy: bezb³êdny odczyt w d³ugim przedzialeczasu oraz regularn¹ jego powtarzalnoœæ co pewien (najkrótszy z mo¿liwych)przedzia³Ã³w czasowych.Z regu³y pierwsze testy œwie¿o napisanej tego typuaplikacji trwaj¹ wiele godzin.Zobaczmy, jak to wygl¹da w praktyce.Na rysunku5.21 zamieœci³em testy programu steruj¹cego miernikiem, odczytuj¹cymtemperaturê pewnego uk³adu fizycznego.Przyj¹³em najprostsze z mo¿liwychrozwi¹zañ.Kawa³ek stali kwasoodpornej maj¹cy temperaturê pocz¹tkow¹ oko³o 311K szybko podgrza³em do temperatury oko³o 326,5 K, nastêpnie och³adza³em go,rejestruj¹c wskazania przyrz¹du w funkcji czasu wzglêdnego (numeru pomiaru).Rysunek 5.21.Pomiar temperatury za pomoc¹ aplikacji wykorzystuj¹cej komponentTTimerWidoczna na rysunku krzywa A prezentuje wynik odczytu przy zastosowaniunajmniejszej z mo¿liwych czêstoœci próbkowania ³¹cza, przy której niezauwa¿y³em ju¿ ¿adnych b³êdów transmisji.Test B zosta³ wykonany przy trochêmniejszej czêstoœci odczytu przyrz¹du, daj¹c, jak widzimy, du¿o lepszerezultaty.Oba eksperymenty by³y przeprowadzane z nieco odmienn¹ szybkoœci¹och³adzania materia³u jedynie po to, by wyniki by³y rozró¿nialne na wykresie,fakt ten nie wp³ywa w ¿adnym wypadku na wynik synchronizacji programu zurz¹dzeniem.Zauwa¿my, ¿e przy polepszaj¹cym siê stopniu synchronizacji zmianatemperatury w funkcji kolejnego pomiaru widoczna jest w postaci schodków.Imregularniej bêd¹ one roz³o¿one oraz im mniejsza bêdzie ich szerokoœæ, tymlepszy jest stopieñ synchronizacji miernika i programu zbieraj¹cego dane.Je¿eli dysponowalibyœmy bardzo szybkim przyrz¹dem oraz poprawnie dzia³aj¹c¹aplikacj¹, tego typu wykres przedstawia³by liniê g³adk¹.Podobnie g³adki wykresmo¿emy otrzymaæ, przyjmuj¹c wystarczaj¹co d³ugi okres pomiêdzy dwoma odczytami.Mówimy wówczas, ¿e pomiary s¹ uœredniane w czasie.Czytaj¹c wszystko, co zosta³o napisane do tej pory o obiekcie typu TTimer,zapewne niejeden Czytelnik mo¿e lekko pow¹tpiewaæ w celowoœæ powo³ywania siê namo¿liwoœci uzyskania tak dok³adnego przedzia³u czasu próbkowania ³¹cza.Panujebowiem opinia, ¿e dok³adnoœæ i powtarzalnoœæ dzia³ania tego komponentu s¹,delikatnie mówi¹c, œredniej jakoœci.Zgadzam siê, ¿e Timer nie jest bynajmniejsztandarowym osi¹gniêciem technologii informatycznych XX wieku.Z drugiejjednak strony jest powszechnie dostêpnym i wygodnym narzêdziem.Je¿eli tylkou¿ywa siê go w sposób rozs¹dny, program mo¿e dzia³aæ poprawnie.Timer s³u¿y dogenerowania zdarzeñ w mniej lub bardziej jednakowych odstêpach czasu.Nic niestoi na przeszkodzie, by porównaæ jego dzia³anie z funkcjonowaniem zegarasystemowego, który mo¿na znaleŸæ w Panelu sterowania.Zbudowa³em naprawdêprost¹ aplikacjê, której jedynym celem jest cykliczne, wraz z dzia³aniemTimera, wyœwietlanie kolejnych liczb, tak jak pokazuje to rysunek 5.22.Rysunek 5.22.Porównanie stopnia synchronizacji dzia³aj¹cego zegara systemowegoz aplikacj¹ wykorzystuj¹c¹ komponent TTimerWykorzystany w tym przyk³adzie opis procedury obs³ugi zdarzenia TimerOnTimer()jest banalny:varintVar: int64;.intVar := 0;.procedure TForm1.TimerOnTimer(Sender: TObject);beginInc(intVar);RichEdit1.Text := IntToStr(IntVar);Beep();end;Ka¿da osoba, która zechce tak¹ aplikacjê przetestowaæ w sposób pokazany napowy¿szym rysunku, od razu zauwa¿y, ¿e w funkcjonowaniu tych dwóch zupe³nieniezale¿nych programów wystêpuje doœæ wyraŸne podobieñstwo
[ Pobierz całość w formacie PDF ]