protokol transmisji PowerLine - problemy projektowe (dlugie)

Mar 31, 2006 8 Replies

Witam,



Zaczalem wreszcie finalne prace nad w/w protokolem, ale w trakcie tworzenia po przeanalizowaniu sposobu dzialania niektorych procedur, odkrylem ze niestety pewne moje zalozenia chyba nie dadza sie zrealizowac w praktyce. No i wlasnie pytanie - czy rzeczywiscie jest to nierozwiazywalne - moze ktos ma jakis pomysl? Po krotce w czym rzecz. Otoz zalozylem sobie, ze protokol transmisji przez siec 220V bedzie typu CSMA/CD. Opieralem sie tu na protokole LonTalk jesli chodzi o samo CSMA/CD. Zalozylem sobie jednak jedna rzecz dodatkowa - a mianowicie sposob obslugi powtorzen, ktore zdarzaja sie gdy nastapi jakies zaklocenie. Przesyanie danych wyglada nastepujaco: Nadawca przesyla pakiet, odbiorca po poprawnym odebraniu pakietu odsyla potwierdzenie. Jezeli nastapi jakies zaklocenie - nadawca nie dostaje potwierdzenia lub jest bledne, wiec ponawia przesylanie - az do 3 prob. Otorz moze sie zdarzyc nastepujaca sytuacja: po poprawnym przeslaniu pakietu, odbiorca wysyla potwierdzenie, ktore jednak z powodu zaklocenia nie jest poprawnie odebrane przez nadawce. Nadawca wiec ponawia wysylanie. Jest jednak jedno male ale - odbiorca, z ktorego punktu widzenia pakiet zostal poprawnie przeslany (odebrany), wykonuje rozkaz jaki byl mu przeslany. Przy ponownym przeslaniu pakietu (2 proba) tez pakiet zostaje odebrany dobrze i wowczas odbiorca wykonuje jeszcze raz ten sam rozkaz - mimo, ze nadawca tak naprawde wysylal tylko jeden pakiet, tyle ze z powodu bledu transmisji powtorzony.



Oczywiscie - mozna zalozyc , ze dwukrotne wykonanie tego samego rozkazu nie przeszkadza. Czasami sa jednak rozkazy typu "toggle", ktorych dzialanie polega na "zmien stan na przeciwny". Wowczas podwojne wykonanie rozkazu sprawi, ze jeden rozkaz wlaczy urzadzenie, a drugi je wylaczy.



Aby temu zaradzic umyslilem sobie tzw. serializacje czyli numerowanie kolejnych takich samych pakietow. I tak pakiet pierwszy ma nr 0, a kolejne o numer wyzej. Odbiornik ma zatem mozliwosc stwierdzenia, czy dany pakiet jest tym pierwotnym czy tez kolejna powtorka - zatem jesli wykonal rozkaz po pierwszym pakiecie, ale nadawca nie uslyszal odpowiedzi i wyslal drugi raz ten sam pakiet, to za tym drugim razem powinien wyslac potwierdzenie, ale rozkazu nie wykonywac.



Udalo mi sie opracowac sposob jak to zrobic, ale niestety to dziala tylko w obrebie jednego pakietu i kolejnych po nim powtorek.



Problem jest z odroznieniem powtorki od kolejnego tzw. nowego pakietu. Nie wiadomo jak stwierdzic ze nadawca skonczyl juz nadawac powtorki, a zaczal nowy pakiet - zwlaszcza, ze tych powtorek moze byc rozna ilosc - raz wcale, raz 1 raz 2... a dodatkowo pakiety moga byc roznych dlugosci od 1 do



64 bitow danych + bajt kontrolny, adresy i CRC.

No i ugrzazlem - wyglada na to , ze trzeba by zrezygnowac z serializacji i pozwolic na sytuacje gdy czasami bedzie sie kilkakrotnie wykonywal ten sam rozkaz - tylko nie dopuscic rozkazow typu toggle. Jednak to powazne ograniczenie, bo nie mozna sobie wyobrazic wowczas rozkazu typu "zwieksz glosnosc o 5" - bo po podwojnym wykonaniu glosnosc zwiekszy sie o 10. Musialby byc zastapiony rozkazem np "ustaw glosnosc na 50".



Moze ktos ma pomysl jak sobie z tym poradzic? Nie wspominam tutaj o calej masie rzeczy typu wykrywanie nosnej, bledow transmisji i roznych zwlok typu time-out, ale to juz inny temat.


Witaj ! Pozwililem sobie tu wyciac Twój post ... nie odpowiem Ci tez na Twój problem ... podzile sie ... chyba trzen\ba nazwac to wspomnieniami ... Cóz posiadana przeze mnie wiedza nie jest juz byc mopze tak aktualna jak byla wtedy kiedy ja zglebialem ... W 1997 roku napisalem prace pt. "Systemy autonomicznego sterowania instalacjami elektrycznymi", W praktyce to nie byly tylko elektryczne ale tak ja u Ciebie urzadzenia autoimatyki budynku,. Bralem udzial w konferencji - chyba pierwszej z tej serii "Inteligentny budynek". Niestety w ty czasi EIB istnial w swojej podstawowej wersji . W sowjej poracy dokonalem analizy stosowanych na swiecie rozwiazan do zauomatyzowanego zarzadzania praca instalacji, aposrednio wszystkich urzadzen jakie moga byc zainstalowane w budynkach mieszkalnych. Z racji rangi jaka wtedy ta praca posiadala, analiza byla jednoczesnie z jednej strony wnikliwa, ale z drugiej strony ograniczona - bo bez podawania konkretnych rzowiazan. Sposród wielu systemów najlepszym, ale i najdrozszym rozwiazaniem byl dla mnie LonWorks Echelona.

Przeczytalem Twój post i przelecialem twoje www i zastanawiam sie dlaczego wywazasz otwarte juz dzrzwi ??? Przeciez istnieja protokoly madrzejsze od CSMA/CD w których Twoje problemy zostaly rozwiazane?! czyzbys chcial stworzyc nowy tanszy system ? Do którego elementy wykonawcze, jak i czujniki beda tanie i ... sam nie wiem ?

Wiekszosc problemów - nie tylko obecne opisane przez Ciebie - rozwiazuje np. protokól LonTalk + cala komunikacja poprzez Powerline ... oczywiscie nie tylko ...

mam zatem pytanie ... dlaczego stworzyles ZEGARUZA ? jesli mozna bez problemu kupic elementy pracujace pod LonWorks ???

Nie miej do mnie urazy ... juz nie siedze w tym temacie ... ale odezwaly sie we mnie stare instynkjty ...

Pozdrawiam Exploris.

Mozesz w paczce danych przesylac dodatkowy nr porzadkowy ramki. Odbiorca moze pamietac ostatni nr paczki i jesli nowy pakiet ma ten sam numer - potwierdzenie jest wysylane ale dane nie sa przetwarzane.

Witaj,

Ja swoje pierwsze zalozenia rowniez zaczynalem czynic w 1997 roku i od tamtej pory system powoli powstaje - metoda nakladania kolejnych warstw. Byc moze lepiej byloby zaprojektowac od razu wszystko, ale dla pojedynczego czlowieka to zbyt duza praca. Jak napisalem wyzej korzystalem wlasnie z zalozen protokolu LonTalk.

No wlasnie - najdrozszym. Moze teraz NeruonChipy mozna dostac bez problemu (aczkolwiek nie interesowalem sie tym), ale gdy zaczynalem projekt to byla czysta fantazja :-)

Chetnie zapoznam sie z jakimis materialami na temat innych protokolow transmisji. Byle sie daly zaimplementowac na np. malym 89C8051 czy PIC'u czy innym AVR.

A wracajac do tego, ze sa gotowe rozwiazania - tak. Sa nawet gotowe cale systemy HA - do kupienia od reki. Ale nie chodzilo mi tym poscie o dyskusje nad sensownoscia mojego projektu - te decyzje zapadly juz kilka lat temu i nie zamierzam sie z nich wycofywac. Projekt przy okazji doskonale rozwija moje umiejetnosci - i jest typu Open Source :-)

To jest jakis pomysl. Wymaga jednak tego, zeby wszystkie moduly w sieci sledzily odbywajaca sie transmisje i analizowaly numery wysylanych pakietow. Tak zeby numer pakietu nie powtarzal sie - mimo multimasteringu. Slabym punktem jest tu nastepujace zdarzenie: Co bedzie, gdy nasluchujace urzadzenie wskutek jakiegos zaklocenia przepusci jakis pakiet. Wowczas moze wyslac ten sam numer pakietu co byl poprzednio (wysylany przez jakies inne urzadzenie). Pamietajmy, ze dla nadsluchujacych urzadzen nie bedzie powtorzen w wyniku blednego odbioru :-) No, ale to juz jakis pomysl - moze da sie go udoskonalic.

Ja w swoich przemyslaniach probowalem zastosowac metode time-out - dla ustalenia konca pakietu, ale wskutek roznej ilosci powtorzen i zmiennej dlugosci pakietu jest to trudne do realizacji i na dodatek zmniejszaloby przepustowosc transmisji (zakladajac ze trzeba by dac najwiekszy mozliwy czas - czyli 3 powtorki + najdluzszy 64bitowy pakiet)

A może niech się powtarza, a do rozpoznania powtórek wykorzystać nr pakietu i nr nadawcy?

Pozdrawiam, PH.

Ale adres sprzetowy nadawcy bedzie inny. Moznaby pamietac nie tylko numer ostatniego pakietu ale i adres nadawcy.

Moze taka wskazówka, jesli ruch bedzie dosc intensywny, jesli wszyscy beda mieli równoprawny dostep do medium to beda czeste kolizje. Moze by wyznaczyc jeden modul "master" który na zasadzie podobnej do USB wysylalby token do kazdego klienta. Bylby problem z wprowadzaniem nowych klientów do sieci, ale moznaby to robic recznie, przez dopisanie np. adresu sprzetowego nadawcy do bazy mastera.

No i to jest rozwiazanie! :-) Wiedzialem, ze cos sie razem wspolnie wymysli - ja juz w jakas pulapke myslowa wpadlem.

Reasumujac - zmiana adresu nadawcy implikuje automatycznie, ze mamy nowy pakiet (odpada problem z nasluchem), numer pakietu pozwala odroznic nowy pakiet od powtorek - w obrebie tego samego nadawcy, a numer powtorki pozwala pozbyc sie podwojnego (lub wiecej) wykonania tego samego rozkazu.

Dobrze, ze w bajcie kontrolnym jest jeszcze kilka wolnych bitow - akurat sie przydadza :-) Wlasciwie to chyba wystarczy tylko jeden bit - ustawiany raz na zero, raz na jeden przy kazdym nowym pakiecie.

Ok - teraz to tylko zaimplementowac :-)

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required