Strona 1 z 2

Komunikacja 1-Wire

: 30 maja 2008 20:43
autor: yeltzyn
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ł :)

Komunikacja 1-Wire

: 01 cze 2008 16:23
autor: yeltzyn
Po dalszych próbach nad rozwikłaniem uruchamiania subvi'jow w strukturze event osiągnołem niewielki postęp. Dodałem po 1dnym terminalu wychodzącym z subvi'ow, podpiętych do indykatorów. W main.vi dodalem 2 indykatory i podpielem je do kratek terminali "connector pane" wywołania call.by.reference.mode. Po uruchomieniu main.vi i wcisnieciu odpowiedniego klawisza w indykatorach pojawiają się, wartości otrzymane z wywołania funkcji. Dlaczego jednak nie uruchamiają się (pokazują) front panele subvi'ów? W helpie do metody call by reference jest takie zdanie "If you use the Call By Reference Node to load a VI into memory and display the front panel, the rest of the block diagram does not execute until that VI finishes executing", o ile dobrze rozumię to front panel powinien się pojawić.

Czy położenie klawiszy na diagramie blokowym ma jakieś znaczenie dla struktury event? Jaka jest różnica pomiędzy umieszczeniem:
- poza while (zupelnie na zewnatrz),
- wewnatrz ramki odpowiadajacej obsludze danego przycisku,
- wewnatrz ramki + połączenie z krawędzią struktury event?

Zaktualizowany plik ze struktura event znajduje się w tej samej lokalizacji - link.

Komunikacja 1-Wire

: 02 cze 2008 13:07
autor: yeltzyn
Dodanie terminali nie mialo nic wspolnego z brakiem otwarcia front panelu przy wywolywaniu. Jak sie okazalo, nalezalo w opcjach uruchamiania zmienic profil na "wlasny" (ang. custom) a w nim zaznaczyc opcje pokazywania panelu w przypadku wywolania programu.

W programie do komunikacji z czujnikami, zostala dodana funkcja zapisu wyniku pomiarów w formacie przedstawionym w punkcie 2. Do zrobienia pozostala mi kalibracja.

Komunikacja 1-Wire

: 06 cze 2008 18:07
autor: yeltzyn
Dla zainteresowanych w postepach tworzenia aplikacji informuję, że:

pkt.1. jest i dziala, to bylo praktycznie najprostsze i powstalo najszybciej.
pkt.2. procedura wyliczania minimalnego interwalu pomiedzy kolejnymi seriami pomiarów (zalezna od ilosci czujnikow, rozdzielczosci i ilosci serii pomiarowych) napisana i gotowa do podpiecia do programu, ktory steruje pomiarami.
pkt.3. gotowe, zapis (dopisanie) wykonywane jest po kazdym pomiarze. ponadto plik z pomiarami jest za kazdym razem zamykany, wiec sa male szanse na zniweczenie kilkugodzinnych pomiarow.

Do napisania pozostal juz tylko pkt.4. (co nie powinno byc trudne) + jakies w miare przyzwoite prezentowanie pomiarow on-line.

Dzisiaj przez 6 godzin 2 ds18b20 wykonaly 27000 serii pomiarowych w termosie z lodem. W zaleznosci od analizy tych pomiarow, bedzie programowany pkt.4 (kalibracja w 1, 2 lub 3 punktach i wyliczanie odpowiedniego wielomianu).

Pragne nadmienic, ze w swoim programie "oszukalem" troche zalecany przez producenta sposob dokonywania pomiarow. Pierwotnie komunikacja z czujnikiem odbywa sie nastepująco: operacja ROM (znalezienie zadanego czujnika), polecenie konwersji temperatury, oczekiwanie na zakonczenie konwersji, odczyt temperatury z rejestrow. Ze wzgledu na to, ze program docelowo bedzie wspolpracowal z ok 50 czujnikami, to przy powyzszym protokole do wykonania 1 serii pomiarowej potrzebaby okolo 50 sekund. Moj program natomiast najpierw wysyla polecenie konwersjii do wszystkich czujnikow po kolei, potem czeka do zakonczenia konwersjii (o ile jest to potrzebne), a potem w tej samej kolejnosci odczytuje z nich temperature. Przy 20 seriach z uzyciem tylko 2 czujnikow zyskujemy ok 60 sekund (23 zamiast 83)!

P.S. W linkach podanych wyzej, znajduje sie _nieaktualna_ wersja programu. Planuje jej udostepnienie po zakonczeniu pisania.

Re: Komunikacja 1-Wire

: 14 cze 2008 14:14
autor: yeltzyn
Od 2 dni mecze sie z wizualizacja pomiarow na wyskresach. Na zalaczonym obrazku sa 2 wykresy:
pierwszy TEMParray Chart - pokazuje wyniki na biezaco (w trakcie wykonywania programu) ale dane z poszczegolnych kolumn sa wyswietlane w jednym kolorze. Natomiast na FORchart sa juz 2 kolory. Czy wynika to z tego, ze w 1szym przypadku jest to tabela 1dno wymiarowa? Czy jest mozliwosc w jakis sposob rozroznic na wykresie dane z poszczegolnych czujnikow, docelowo bedzie ich ok 50, wiec nie chcialbym miec na wykresie generowanego "szumu bialego" lecz w miare przejzysty podlag temperatur? Temperature powinno sie pokazywac w funkcji czasu a zaden z tych wykresow tego nie robi, problem stanowi protokol 1wire. Nie da sie bowiem w jednej chwili czytac ze wszystkich czujnikow, wiec poszczegolne pomiary sa wobec siebie przesuniete (co na jednym wykresie wygladaloby strasznie nieczytelnie).

Komunikacja 1-Wire

: 15 cze 2008 11:08
autor: Mikrobi
Podstawowa uwaga/sugestia: postaraj się uporządkować diagram.
Zamiast sekwencji stosowej - uporzadkowanie i subVIje.

Kolory wykresów są przypisywane przez kontrolkę chart, i można je określać samodzielnie - z poziomu panelu (prawy klawisz myszy i odpowiednie opcje menu PKM), albo z poziomu kodu przez węzły własności (Property Node).

Re: Komunikacja 1-Wire

: 15 cze 2008 15:29
autor: yeltzyn
Mikrobi pisze:Kolory wykresów są przypisywane przez kontrolkę chart, i można je określać samodzielnie - z poziomu panelu (prawy klawisz myszy i odpowiednie opcje menu PKM), albo z poziomu kodu przez węzły własności (Property Node).
Kolorki to rzecz wtorna, ja mialem problem z przekazywaniem danych do wykresu. Na rysunku 2 widac roznice miedzy tablicami 1dno i 2 wymiarowymi. Dlatego wykorzystalem FeedbackNode (rys. 1) i teraz mam to o co mi chodzilo. Czeka mnie jeszcze zabawa z konfiguracja wykresu (property node) ale nie powinno byc z tym problemu.
------ Edit: array to cluster zalatwil sprawe :)

Re: Komunikacja 1-Wire

: 17 cze 2008 17:43
autor: yeltzyn
Problem wykresu pozostaje nadal aktualny. Zaproponowano mi aby wykres temperatury rysowac w innym vi'ju. Do tego celu wykorzystalem metode Invoke Node [Control Value:Set [Flattened] Method]. Przekazuje zatem do innego vi'ja tablice (1-D array of SGL). Zakladam, ze program generujacy dane nazywam SERWEREM a program kreslacy wykres KLIENTEM. Po otwarciu panelu frontowego klienta i uruchomieniu serwera, widac ze wartosci w kontrolkach sie zmieniaja. W programie klienta podlaczylem do kontrolek indykatory. Po uruchomieniu klienta, nastepuje (jednokrotne) wpisanie wartosci z kontrolek do indykatorow. Dlaczego, pomimo zmiany wartosci w kontrolkach, dane w indykatorach sie nie zmieniaja?

Re: Komunikacja 1-Wire

: 17 cze 2008 19:35
autor: jogurt_owocowy
Dlaczego, pomimo zmiany wartosci w kontrolkach, dane w indykatorach sie nie zmieniaja?
Jeśli chcesz koniecznie poznać przyczynę, to zamieść viaja, ale...
Do wyświetlenia danych w osobnym okienku lepszy będzie sposób opisany TUTAJ.
Pozdrawiam

Re: Komunikacja 1-Wire

: 17 cze 2008 21:39
autor: yeltzyn
jogurt_owocowy pisze:Jeśli chcesz koniecznie poznać przyczynę, to zamieść viaja
W archiwum zamieszczam pliki, w programie rysujacym wrzucilem eventa i rysowanie dodalem do klatki timeout. Uzyskalem "odswiezanie" danych na wykresie. Nie jest to jednak dobre rozwiazanie, bo dane z pomiarow docelowo beda przychodzic w roznych odstepach czasowych.

Re: Komunikacja 1-Wire

: 18 cze 2008 07:46
autor: jogurt_owocowy
Nie jest to jednak dobre rozwiazanie, bo dane z pomiarow docelowo beda przychodzic w roznych odstepach czasowych.
Dlatego skorzystaj z rozwiązania z podanego powyżej linku.

Re: Komunikacja 1-Wire

: 09 lip 2008 12:18
autor: yeltzyn
Program jest juz praktycznie na ukonczeniu. Jedynie co pozostalo, to kosmetyka programu "głównego" odpowiedzialnego za uruchamianie odpowiednich procedur. Na załączonym rysunku opisałem "zagwózdkę" z która nie mogę sobie poradzić. Mam nadzieję, że rysunek mówi wszystko. Proszę o pomoc w rozwiązaniu ostatniego (mam nadzieję) problemu w mojej aplikacji.

P.S. Przepraszam, za proporcje obrazu.

Komunikacja 1-Wire

: 09 lip 2008 18:12
autor: yeltzyn
Uwaga na szybko odnosnie obrazka powyzej. Czy dalo by sie zrobic (a moze ktos moglby zaproponowac za pomoca czego) cos takiego, aby zanim program rozpocznie wykonywanie subVI'ja Aquire temperature FLAT wyliczona zostalaby wartosc minimalna zmiennej Time interval. Po czym uzytkownik moglby zmienic jej wartos (w zaleznosci od potrzeby) na wieksza, po czym (np. za pomoca przycisku akceptuj) rozpoczac wlasciwe pomiary.
Moze dodac jeszcze jeden przycisk typu boolean i wpomnianego wyzej subVI'ja umiescic w strukturze CASE, gdzie przekazanie true (czyt. potwierdzenie parametrow) wywola wlasciwe wykonywanie pomiarow?
Czy w strukturze event dopuszczalne jest takie rozwiazanie, czy powinno sie to zrobic w inny sposob (za pomocą kolejnej klatki struktury event)?

Re: Komunikacja 1-Wire

: 09 cze 2009 08:53
autor: yeltzyn
Witam,

Informuję, że prace nad programem zostały zakończone we wrześniu 2008. Postanowiłem umieścić na forum swoją pracę magisterską zawierającą opis programu oraz instrukcję użytkownika w załączniku do pracy. Załączam także sam program wraz z przykładowymi danymi pomiarowymi.

Mam nadzieję, że mój wysiłek może się jeszcze komuś przydać. W razie pytań proszę o kontakt na dane z profilu.

Re: Komunikacja 1-Wire

: 10 cze 2009 10:47
autor: jogurt_owocowy
Chyba zapomniałeś o załączniku :]