logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[bascom]zabezpieczenie transmisji RS wysyłanej bezprzewodowo 433Mhz

tomson5 07 Paź 2013 12:42 2229 11
  • #1 12817917
    tomson5
    Poziom 16  
    Witam

    Potrzebuje stworzyć połączenie bezprzewodowe 433Mhz między dwoma uc.

    Chodzi mi o zabezpieczenie transmisji przed zakłóceniami.

    Pomyślałem że w transmisji będą występowały dwa stałe bajty po odczytaniu których odebrane zostaną dane i na końcu coś w stylu sumy kontrolnej
    A=10 
    B=20.  Jeżeli odbieżemy dwa pierwsze bajty o tych wartościach to przystępujemy do odbioru danych

    Dane1
    Dane2. Bajty z danymi

    CR. Bajt suma kontrolna

    Po stronie nadajnika obliczamy CR
    CR=A+B+DANE1+DANE2


    Wysyłamy  A, B, Dane1, Dane2, CR,


    Po stronie odbiornika sprawdzamy czy
    A=10 i B=20 i CR=odebraneCR

    odebraneCR=A+B+DANE1+DANE2 

    Jeżeli te warunki zostają spełnione to odbieramy nasze dane.

    Co myślicie o taki zabezpieczeniu?
  • Pomocny post
    #2 12817968
    Steryd3
    Poziom 33  
    Poczytaj sobie jak tego typu zabezpieczenia realizowane są w protokole MODBUS. Właściwie możesz go zaimplementować lub stworzyć coś bardzo do niego podobnego. Masz do wyboru wersje znakową protokołu MODBUS czyli ASCII z sumą kontrolną zwaną LRC lub wersje RTU zapewniającą większe upakowanie danych kosztem trudniejszego w realizacji protokołu, "wyposażoną" w sumę kontrolną CRC. Tak na marginesie -suma kontrolna CRC jest najpopularniejszą i najczęściej stosowaną sumą w zabezpieczeniu wszelkiego rodzaju transmisji i nie tylko.
  • #3 12818045
    tomson5
    Poziom 16  
    Ładnie pięknie ale podane przez ciebie rozwiązanie tyczy się komunikacji dwustronnej. Gdzie urządzenie slave ma możliwość odpowiedzi. U mnie będzie komunikacja jednokierunkowa. Czy to coś zmienia?
  • #4 12818076
    Steryd3
    Poziom 33  
    Po prostu odpowiedzi nie będzie i tyle.
    Większość zabezpieczeń transmisji polega na obliczeniu sumy kontrolnej z wysyłanej wiadomości i posłaniu jej dołączonej w sposób jawny. Odbiornik otrzymując wiadomość liczy z niej sumę kontrolną i porównuje ją z tą otrzymaną jawnie -jeżeli wszystko się zgadza można z dużym prawdopodobieństwem domniemywać, iż transmisja przebiegła prawidłowo a otrzymane z niej dane mogą podlegać dalszemu wykorzystaniu.
    W twoim przypadku wydaje mi się, że MOBDUS ASCII był by ok- masz znak początki tj. ":" i sumę kontrolną LRC a koniec ramki kończy się sekwencją znaków CR LF
  • #5 12818486
    tomson5
    Poziom 16  
    To co sobie obmyśliłem jest podobne do podanej przez ciebie komunikacji modus

    Modus
    Adres urządzenia/Kod funkcji/Dane/Suma kontrolnaCR

    U mnie:
    A/B/Dane1/Dane2/CR

    Nie wiem tylko jak obliczać CR. Czy jest na to jakiś algorytm?
  • Pomocny post
    #6 12818779
    Steryd3
    Poziom 33  
    Jest to podobne -owszem. Oczywiście, że jest algorytm do obliczania CRC jak i LRC. Trzeba skorzystać z google i z pewnością coś się znajdzie. Na tym forum jak i na Wikipedii na pewno coś znajdziesz jak obliczyć CRC. Mogę tylko powiedzieć, że całość opiera się na przesuwaniu i używaniu funkcji XOR. Są też gotowe funkcje do znalezienia w necie które przyspieszają obliczania korzystając z tablic. Mogę też nadmienić, iż sumy CRC mają swoje odmiany -używane w różnych typach komunikacji bywają nieco inaczej liczone i dają inny wynik z tych samych danych.
  • Pomocny post
    #7 12818994
    tmf
    VIP Zasłużony dla elektroda
    Przede wszystkim zastanów się co będzie, jeśli wykryjesz przekłamanie danych? Piszesz, że masz transmisję jednokierunkową, czyli nadajnik nic nie wie o tym, że odbiornik nie odebrał poprawnych danych. Jeśli to nie problem i dane po prostu możesz gubić, to samo CRC jest wystarczające. Można łatwo je wyliczyć (w C są nawet gotowe funkcje, pewnie BASCOM też ma), można też użyć AVR, który CRC potrafi liczyć sprzętowo, albo moduł radiowy, który ma taką możliwość. Jeśli jednak dane nie możesz po prostu gubić to samo CRC nie wystarczy. Musisz wymyśleć jakąś sporą redundancję, żeby z uszkodzonego pakietu dało się dane odzyskać. Albo wprowadzić komunikację dwukierunkową z potwierdzeniem odbioru danych.
  • #8 12819694
    tomson5
    Poziom 16  
    W moim przypadku gubienie nie jest krytyczne. Zależy mi bardziej na tym aby dane odebrane były poprawne i nie wskakiwały mi błędy do zmiennych.
    Połączenie 433Mhz będzie prymitywne i na tym poziomie nie ma szans na kontrolę. Poszukam zgodnie z sugestiami info o realizacji CRC.
    Dzięki za pomoc

    Edit: znalazłem w pomocy bascom coś takiego. Może ktoś mi objaśnić o co w tym kodzie chodzi?

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #9 12821175
    Steryd3
    Poziom 33  
    Ogólnie od BASCOMa trzymam się z daleka(piszę w C) ale wygląda na to, iż ten program to przykład generacji sumy CRC 8 bitowej z trzech elementów tablicy "ar" począwszy od elementu o indeksie 1. Oczywiście uprzednio tę tablicę zadeklarowano i wypełniono trzy komórki danymi. Myślę, iż tego typu sposób liczenia mógł by być wykorzystany do Twoich celów.
  • #10 12824483
    tomson5
    Poziom 16  
    Niby to rozumiem ale nie wiem jak dane z moich zmiennych mają trafić do tej tablicy?. Mogę je oczywiście wklepać ale zmienne dane1 i dane2 będą się zmieniały.

    Edit:
    Ar(1)=A
    Ar(2)=B
    Ar(3)=dane1
    Ar(4)=dane2

    Dobrze kombinuje?

    Edit2:

    Sprawdziłem jest tak jak myślę. Mogę wrzucać swoje zmienne do tablicy a później skorzystać z CRC
  • Pomocny post
    #11 12989155
    wt47a
    Poziom 11  
    Jeżeli wciąż cię ten temat interesuje proponowałby poszukać jakiegoś rozwiązania w okolicach Kodów korekcyjnych. Są to rozwiązania od dawna stosowane w telekomunikacji. np. kod splotowy.

    Kody korekcyjne oferują nie tylko wykrycie, ale również możliwość korekcji błędów przy zmianach na bitach z jednoczesnym ograniczeniem rozmiaru przesyłanej wiadomości. Oczywiście wiadomość poddania działaniu kodu korekcyjnemu jest większa, jednak rozmiar tej nadmiarowości możesz dobrać - im więcej dodasz tym większe prawdopodobieństwo, że uda Ci się wykryć i naprawić wiadomość.
    Dalej sobie poradzisz idąc za śladem wiki, używając google oraz inteligencji.

    Odnośnie algorytmu zaproponowanego przez Ciebie i używania sum kontrolnych - jest to jakiś sposób. Wydaje mi się jednak, że mało skuteczny. Pod uwagę trzeba brać prawdopodobieństwo wystąpienia przekłamania pojedynczego bitu.
    Jeżeli więc jedne bit w wiadomości A zostanie zmieniony, to co najmniej takim samym prawdopodobieństwem może zostać zmieniony w wiadomości A'. Jest to możliwe, ponieważ zakłócenia w transmisji często są chwilowe (np włączenie silnika w niedalekiej odległości) i w trakcie transmisji wiadomości A i A' te zakłócenia mogą wciąż się utrzymywać.
    Warto więc pomyśleć o skorzystaniu z gotowej biblioteki do obliczania kodów korekcyjnych, bo te rozwiązania są stosowane już od wielu lat w telekomunikacji.
  • #12 12991394
    tomson5
    Poziom 16  
    Przeniosłem się na transmisję bluetooth.Żadnych problemów a zasięg mi wystarcza.
    Wrócę do tematu w wolnym czasie tak z ciekawości i dla pogłębienia wiedzy.
    Dziękuję za informacje.
REKLAMA