protokol transmisji PowerLine - problemy projektowe (dlugie)

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.

Reply to
Jado
Loading thread data ...
Reply to
Exploris" SPAM***autograf.pl

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.

Reply to
Pawel Cern

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 :-)

Reply to
Jado

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)

Reply to
Jado

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

Pozdrawiam, PH.

Reply to
Paweł Hadam

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

Reply to
Pawel Cern

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 :-)

Reply to
Jado

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.