[ Pobierz całość w formacie PDF ]
.Wys³a³em z uprzednio przygotowanego standardowego plikuzapytanie o aktualn¹ krzyw¹ skalowania, jak¹ pos³uguje siê ten przyrz¹d.Wodpowiedzi miernik przys³a³ mi wszystkie niezbêdne informacje.Maj¹c dwa oknaedycji mogê, spogl¹daj¹c na otrzymane, dane wpisaæ w RichEdit1 swoje w³asneparametry nowej krzywej skaluj¹cej.Naciskaj¹c przycisk Wyœlij wpisane,skojarzony z funkcj¹ obs³ugi zdarzenia SendWrittenClick(), odpowiednioprzeprogramujê miernik.Mo¿na go oczywiœcie testowaæ ³¹cz¹c siê z innymkomputerem, odbieraj¹c pliki lub pojedyncze znaki.Na powy¿szym przyk³adzieprzedstawiono te¿ ró¿ne sposoby wywo³ywania komunikatów Win32 API, takich jak:MessageBox() czy MessageDlg() oraz zaprezentowano ideê obs³ugi wyj¹tkówpokazan¹ w funkcji obs³ugi zdarzenia SendWrittenClick().Wszystko, co powiedzieliœmy na temat sposobów wyszukiwania pocz¹tku ci¹guznaków przychodz¹cych do ³¹cza, jest niew¹tpliwie po¿yteczne, niemniej jednak wwiêkszoœci przypadków, z którymi spotykamy siê w praktyce, bardziej interesujenas mo¿liwoœæ cyklicznego odczytywania wskazañ okreœlonego przyrz¹dupomiarowego.Za³Ã³¿my, ¿e chcemy mieæ mo¿liwoœæ bie¿¹cego odczytywania napiêcia,natê¿enia pr¹du czy chocia¿by temperatury.Konstruuj¹c tego typu aplikacje,powinniœmy przewidzieæ mo¿liwoœæ wyboru przedzia³u czasu próbkowania sygna³Ã³w,pojawiaj¹cych siê na wejœciu wybranego portu szeregowego w czasie dzia³aniaprogramu.Dosyæ dobrze do tego celu nadaje siê komponent TCSpinEdit.Dziêkiodpowiedniemu wyborowi jego cechy Value bêdziemy mogli automatycznie dostosowaædo naszych potrzeb wartoœæ cechy Interval (odstêp) komponentu TTimer.Pamiêtamy, ¿e odstêp czasu, w którym dokonujemy próbkowania ³¹cza szeregowego,podajemy w milisekundach.Przyk³adowa aplikacja, za pomoc¹ której bêdzie mo¿naodczytywaæ aktualne wskazania przyrz¹du, zbudowana bêdzie ze znanych nam ju¿elementów.Dane odbierane wyœwietlaæ bêdziemy za pomoc¹ pola edycji TRichEdit.Aplikacja zaopatrzona bêdzie dodatkowo w przycisk uruchamiaj¹cy pomiar ci¹g³y iwy³¹czaj¹cy go.W funkcji obs³ugi zdarzenia MeasureONClick(), które wywo³ujemynaciœniêciem przycisku W³¹cz pomiar, mamy:void __fastcall TForm1::MeasureONClick(TObject *Sender){if (hCommDev > 0) // powtórnie sprawdza czy port jest otwarty{strcpy(Buffer_O, query);Timer1->Enabled = TRUE;}.}Rozkaz wysy³any do miernika zostanie skopiowany do obszaru pamiêci wskazywanegoprzez Buffer_O.Ponadto wywo³amy tu cyklicznie funkcjê obs³ugi zdarzeniaTimerOnTimer(), próbkuj¹cego wybrany port szeregowy:void __fastcall TForm1::TimerOnTimer(TObject *Sender){Write_Comm(hCommDev, strlen(Buffer_O));Sleep(800);Beep();FlushFileBuffers(hCommDev);Read_Comm(hCommDev, &Number_Bytes_Read, sizeof(Buffer_I));if (Number_Bytes_Read > 0)RichEdit1->Text = Buffer_I;}Jedyn¹ rol¹ tej funkcji jest wys³anie zapytania do urz¹dzenia i odebranieodpowiedzi.Czynnoœæ ta mo¿e byæ wykonywana wielokrotnie, bez jakichkolwiekograniczeñ czasowych.U¿ytkownik sam decyduje, kiedy zakoñczyæ pomiar,naciskaj¹c przycisk Wy³¹cz pomiar.Oczywiœcie, odebrane dane z regu³y nale¿yodpowiednio zapisaæ na dysku i dobrze by by³o, gdybyœmy mieli mo¿liwoœæza³o¿enia i otwarcia pliku jeszcze przed rozpoczêciem pomiarów.Myœlê jednak,¿e wszystko to, co powiedzieliœmy do tej pory na temat operacji plikowych, wzupe³noœci wystarczy nawet mniej wprawnemu Czytelnikowi, aby poradzi³ sobie zproblemem.Dane bêd¹ musia³y byæ zapisywane „on line” (czyli w trakcie), gdy¿zastosowany przeze mnie sposób wywo³ywania funkcji Write_Comm(), wysy³aj¹cejzapytanie do urz¹dzenia oraz Read_Comm()i czytaj¹cej odpowiedŸ miernikawyklucza jakiekolwiek dalsze buforowanie danych ponad to, co aktualniewyœwietlamy na ekranie.W tego typu programach nigdy nie stosuje siê jakiegoœszczególnego sposobu przechowywania danych w pamiêci.Powód jest prosty: nigdynie wiemy, ile informacji tak naprawdê otrzymamy.Pomiar równie dobrze mo¿etrwaæ piêæ sekund jak i piêæ lub piêtnaœcie godzin, zreszt¹ do tego tematujeszcze powrócimy w nastêpnych rozdzia³ach.Na rysunku 5.9 zaprezentowano formularz projektu znajduj¹cego siê naza³¹czonym kr¹¿ku CD \KODY\BUILDER\RS_07\p_RS_07.bpr, obs³uguj¹cego przyrz¹ddokonuj¹cy cyklicznego odczytu aktualnie mierzonej temperatury (w tym przypadkuw stopniach Celsjusza).Wydruk 5.8 przedstawia zastosowany przeze mniealgorytm.Rysunek 5.9.Formularz g³Ã³wny projektu p_RS_07.bprWydruk 5.8.Kod aplikacji próbkuj¹cej wybrane ³¹cze szeregowe w z góry zadanychodstêpach czasu w poszukiwaniu aktualnych wskazañ miernika cyfrowego//--- kompilowaæ z borlndmm.dll cc3250mt.dll -----------------------//----RS_07.cpp-------------#include#pragma hdrstop#include "RS_07.h"#pragma package(smart_init)#pragma link "CSPIN"#pragma resource "*
[ Pobierz całość w formacie PDF ]