Komunikacja 1-Wire
: 30 maja 2008 20:43
Witam,
Jako temat pracy dyplomowej wybrałem sobie komunikacje 1wire. Część praktyczna pracy obejmuje napisanie aplikacji w środowisku LabVIEW 8.0 realizującej pomiar temperatury z czujników temperatury DS18B20. Moduł komunikacji oparłem na tym programie źródłowym. Do komunikacji z układami 1-wire wykorzystuję magistralę USB (kontroler oparty na układzie DS9490). Założenia aplikacji:
1. Wyszukiwanie czujników oraz zapisywanie ich indentyfikatorów (unikalny dla kazdego czujnika) do pliku. Zapis ma na celu późniejsze wczytywanie do modułu pomiarowego (pominiecie sprawdzania, w przypadku kiedy pracuje się na stałym zestawie czujników).
2. Wykonywanie odczytów z poszczególnych czujników z zadaną ilością pomiarów (np. 10 pomiarów) lub zadanym okresie (pomiar przez 1h itp.). Liczba-okres pomiarów powinny być ze sobą powiązane, bo czas jednego pomiaru jest okreslony i np. nie da sie zrobic 1000 pomiarow w 1 minute. W zwiazku z tym, znając maksymalny czas jednego pomiaru, liczba-okres powinny odpowiednio na siebie wplywac.
3. Zapis pomiarów do pliku w postaci:
X ID_1 ID_2 ID_*
Data_pomiaru_1 temp_1.1 temp_1.2 temp_1.*
Data_pomiaru_2 temp_2.1 temp_2.2 temp_2.*
Data_pomiaru_* temp_*.1 temp_*.2 temp_*.*
4. Kalibracja czujników:
Żaden z czujników DS nie jest idealny i przy założeniu, że dokonujemy pomiarów z np. 20 czujników, część z nich będzie pokazywało temp. niższą/wyższa niż temperatura wzorcowa. W tym celu należy zkalibrować czujniki, aby pokazywały tą samą temperature. Przykład: umieszczamy czujniki w wodzie z lodem i zadajemy temperaturę wzorcową (kalibrującą) 0 stopni C. Odpowiednie czujniki powinny od tego momentu "poprawić" wskazywaną przez siebie temperaturę.
4.a. Zapis temperatury wzorcowej do pliku.
4.b. Zapis pomiarów zkalibrowanych do pliku.
5. Korekta pomiarów w oparciu o współczynniki wyznaczone na podstawie pomiarów kalibracyjnych.
Program opiera się o wywoływanie kilku SubVI. W tym momencię staram się napisać program "main", który będzię uruchamiał odpowiednie subvi'je. Z tego co rozumię, program taki powinien posiadać strukturę EVENT i reagować odpowiednio na wciśnięcie danego klawisza (np. "szukaj czujników" uruchamia subvi'ja który odpowiada za tę operacje). Bawiłem się przykładami, dostępnymi wraz z LabVIEW i przy próbie napisania jakiegoś banalnego przykładu nie udało się. Probowałem zarówno call by refefernce i property node (fp.open). Swoje wypociny zamieszczam tutaj. W tym miejscu umieściłem program do komunikacji 1-wire.
Prosiłbym o wskazówki, co jest źle w przykładzie obsługi klawiszy/wywoływaniu subvi'jów w strukturze event.
W kwestii samego programu. Zapis identyfikatorów może być zrobiony przez zwykły write to spreadsheet (tak właśnie jest w tym momencie). Czy ktoś z Was mogłby zaproponować, jakiej metody użyć do zapisywania odczytów temperatury w podanym w pkt. 3 formacie. Czy mam wykorzystać konwersje do stringa (data, identyfikator i odczyt będą różnych typów) a potem odpowiednie sklejanie concatenatem i w koncu write to text file? W celu zabezpieczenia, chciałbym aby zapis do pliku był po każdym odczycie. Chciałbym aby przy rozpoczęciu pomiarów program zapytał o ścieżkę zapisu, ale jak zrobić aby potem przy dopisywaniu program już o nią nie pytał (bo o ile sprawdziłem [write to spreadsheet], jak się cyklicznie zapisuje z ustawieniem append.TRUE to pyta o ścieżke, o ile nie jest ona ustawiona na stałe). Byćmoże da się stworzyć jakiś plik konfiguracyjny całej aplikacji? Mógłby on pamiętać: położenie pliku z identyfikatorami, ścieżke do zapisu pomiarów, zadaną liczbe/okres pomiarów itp. Czy pkt. 2 jest wogule do zrobienia, przychodzi mi do glowy tylko ogarniecie jakich case'ów bądĹş operacje logiczne?
Liczę na cenne rady i mam nadzieję, że rozmiar tematu nie przytłoczył
Jako temat pracy dyplomowej wybrałem sobie komunikacje 1wire. Część praktyczna pracy obejmuje napisanie aplikacji w środowisku LabVIEW 8.0 realizującej pomiar temperatury z czujników temperatury DS18B20. Moduł komunikacji oparłem na tym programie źródłowym. Do komunikacji z układami 1-wire wykorzystuję magistralę USB (kontroler oparty na układzie DS9490). Założenia aplikacji:
1. Wyszukiwanie czujników oraz zapisywanie ich indentyfikatorów (unikalny dla kazdego czujnika) do pliku. Zapis ma na celu późniejsze wczytywanie do modułu pomiarowego (pominiecie sprawdzania, w przypadku kiedy pracuje się na stałym zestawie czujników).
2. Wykonywanie odczytów z poszczególnych czujników z zadaną ilością pomiarów (np. 10 pomiarów) lub zadanym okresie (pomiar przez 1h itp.). Liczba-okres pomiarów powinny być ze sobą powiązane, bo czas jednego pomiaru jest okreslony i np. nie da sie zrobic 1000 pomiarow w 1 minute. W zwiazku z tym, znając maksymalny czas jednego pomiaru, liczba-okres powinny odpowiednio na siebie wplywac.
3. Zapis pomiarów do pliku w postaci:
X ID_1 ID_2 ID_*
Data_pomiaru_1 temp_1.1 temp_1.2 temp_1.*
Data_pomiaru_2 temp_2.1 temp_2.2 temp_2.*
Data_pomiaru_* temp_*.1 temp_*.2 temp_*.*
4. Kalibracja czujników:
Żaden z czujników DS nie jest idealny i przy założeniu, że dokonujemy pomiarów z np. 20 czujników, część z nich będzie pokazywało temp. niższą/wyższa niż temperatura wzorcowa. W tym celu należy zkalibrować czujniki, aby pokazywały tą samą temperature. Przykład: umieszczamy czujniki w wodzie z lodem i zadajemy temperaturę wzorcową (kalibrującą) 0 stopni C. Odpowiednie czujniki powinny od tego momentu "poprawić" wskazywaną przez siebie temperaturę.
4.a. Zapis temperatury wzorcowej do pliku.
4.b. Zapis pomiarów zkalibrowanych do pliku.
5. Korekta pomiarów w oparciu o współczynniki wyznaczone na podstawie pomiarów kalibracyjnych.
Program opiera się o wywoływanie kilku SubVI. W tym momencię staram się napisać program "main", który będzię uruchamiał odpowiednie subvi'je. Z tego co rozumię, program taki powinien posiadać strukturę EVENT i reagować odpowiednio na wciśnięcie danego klawisza (np. "szukaj czujników" uruchamia subvi'ja który odpowiada za tę operacje). Bawiłem się przykładami, dostępnymi wraz z LabVIEW i przy próbie napisania jakiegoś banalnego przykładu nie udało się. Probowałem zarówno call by refefernce i property node (fp.open). Swoje wypociny zamieszczam tutaj. W tym miejscu umieściłem program do komunikacji 1-wire.
Prosiłbym o wskazówki, co jest źle w przykładzie obsługi klawiszy/wywoływaniu subvi'jów w strukturze event.
W kwestii samego programu. Zapis identyfikatorów może być zrobiony przez zwykły write to spreadsheet (tak właśnie jest w tym momencie). Czy ktoś z Was mogłby zaproponować, jakiej metody użyć do zapisywania odczytów temperatury w podanym w pkt. 3 formacie. Czy mam wykorzystać konwersje do stringa (data, identyfikator i odczyt będą różnych typów) a potem odpowiednie sklejanie concatenatem i w koncu write to text file? W celu zabezpieczenia, chciałbym aby zapis do pliku był po każdym odczycie. Chciałbym aby przy rozpoczęciu pomiarów program zapytał o ścieżkę zapisu, ale jak zrobić aby potem przy dopisywaniu program już o nią nie pytał (bo o ile sprawdziłem [write to spreadsheet], jak się cyklicznie zapisuje z ustawieniem append.TRUE to pyta o ścieżke, o ile nie jest ona ustawiona na stałe). Byćmoże da się stworzyć jakiś plik konfiguracyjny całej aplikacji? Mógłby on pamiętać: położenie pliku z identyfikatorami, ścieżke do zapisu pomiarów, zadaną liczbe/okres pomiarów itp. Czy pkt. 2 jest wogule do zrobienia, przychodzi mi do glowy tylko ogarniecie jakich case'ów bądĹş operacje logiczne?
Liczę na cenne rady i mam nadzieję, że rozmiar tematu nie przytłoczył