Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

RS485 jak sprawdzic czy magistrala jest wolna

01 Maj 2007 11:05 2594 11
  • Poziom 12  
    Witam!

    Jestem na etapie tworzenia mini sieci sterującej mającej zastosowanie np. w budynkach intelgientnych, na potrzeby pracy dyplomowej. Z zalożenia ma to być 5 urządzeń (2 sensory - przyciski, i 3 aktory - wyjścia binarne sterujące np oświetleniem). Wszystkie te moduły zbudowane będą na atmega 8 - całość połączona za pomocą RS 485. Ma to być sieć o inteligencji rozproszonej , czyli bez wykorzystania urządzenia nadrzednego. Problem w tym, że może się zdarzyć ze aktory mogą zostać uaktywnione w tym samym czasie a co za tym idzie dojdzie do kolizji.

    Mam pytanie jak najprościej zbadać stan magistrali rs485 aby mikrokntroler wiedzial, ze teraz nic nie może wysłac bo w tej chwili nadaje/odbiera inny.



    Pozdrawiam
  • Poziom 26  
    Musisz mieć cały czas włączony odbiornik i nasłuchiwać stanu linii.
    Próbę nadawania podejmujesz tylko gdy jest "cisza" (można to rozwiązać sprzętowo nawet ładują kondensator).
    Urządzenie nadawcze odczytuje zwrotnie samego siebie i sprawdza czy to co odczytał zgadza się z tym co wysłał.
    Dobrze jest na początku wysłać tzw. preambułe (bajt o wartości AAh 10101010).
    W przypadku różnicy (prawdopodobnie wystąpiło jednoczesne nadawanie)
    zawieszasz wysyłanie na czas trwania jednej ramki danych +losowy czas dodatkowy. Resztę przypadków błędów transmisji musi załatwić przemyślany protokół transmisji.
  • Poziom 32  
    RS 485 ma wiele ograniczen i chyba nie ma gotowej obslugi tej magistrali , zastosuj CAN jak doradza Ci kolega , lub ethernet , kiedys probowalem ale to strasznie trudne podpiac wiele urzadzen do tego typu magistrali , mozesz probowac sieci token-ring , kilka ok 10 dzialalo ale to strasznie pozera moce mikrokontrolerow , CAN oraz ethernet maja obsluge hardware i w zasadzie nie myslisz o transmisji -jesli chodzi o ethernet polecam enc28j60 - dodatko bedzie mozliwosc obslugi z dowolnego miejsca na swiecie przez internet.
  • Poziom 26  
    Panowie nie przesadzajcie - obsługa RS-a trudniejsza od CAN lub ethernet?
    RS 485 właśnie po to powstał by na magistrali można było powiesić kilka urządzeń.
    A może postawić pięć PC-tów z sieciówkami? :)
  • Poziom 32  
    w dzisiejszych czasach o wiele trudniejsza , procki robia to za Ciebie :) raczej zapomnij o sieci na rs 485 , tez bylem zdziwiony i nie mam co zrobic z kostkami do rs 485
  • Poziom 19  
    submariner napisał:
    w dzisiejszych czasach o wiele trudniejsza , procki robia to za Ciebie :)


    Co może być łatwiejsze niż użycie wbudowanego portu szeregowego? Co może być tańsze niż magistrala RS485?
    Na pewno nie Ethernet i nie CAN.
    Poza tym Ethernet to nie magistrala i w tym przypadku potrzebny jest jeszcze switch/hub, co dodatkowo podwyższa koszty.
    RS485 jest najtańszym i najprostszym rozwiązaniem.

    submariner napisał:
    raczej zapomnij o sieci na rs 485


    Rzuć okiem na założenia - 5 urządzeń! Nie ma żadnego problemu, by stworzyć tak małą sieć opartą o RS485.
    A jedyna rzecz, nad którą trzeba się w tym wypadku chwilę zastanowić jest tematem tego wątku.

    To, że komuś coś się nie udało nie znaczy automatycznie, że się nie da tego zrobić i należy "zapomnieć" o tym.
    W różnych laboratoriach i zakładach przemysłowych działają poprawnie sieci oparte na RS485 i o liczbie urządzeń większej niż 5.
    Cud?
  • Poziom 32  
    No ok przepraszam za taka wypowiedz i zycze powodzenia oraz samozaparcia.
    Moje doswiadczenia i umiejetnosci nie byly wystarczajace do stworzenia sprawnej magistrali skonczylo sie ma gwiezdzie bo za duzo bylo juz zrobione aby zmieniac projekt , problem byl glownie z kolizjami - prjorytetami co aktualnie ma przesylac na magistrale dlatego stworzylem token gdzie kazdy procek sprawdzal/modyfikowal w nim swoj kawalek ale niestety caly token byl sprawdzany przez kazdy procesor w moim przypadku ciezko bylo wycisnac skanowanie calego ringu wiecej niz kilka razy na sek.
  • Poziom 42  
    RS485 jak już wspominali to jedna z najprostszych i najtańszych metod do szybkiego i taniego połączenia wielu urządzeń na jednej magistrali. Sam na szybko opracowałem sobie prosty protokół do pracy typu Master i układy Slave. Nie trzeba odrazu budować tokenringa (chociaż można i co ważne można to tak zrobić żeby wcale nie było jakiegoś pożerania czasu procesora - wszystko zależy jak się pisze programy). Zresztą RS485 jest dlatego taki dobry bo wszystko zależy poprostu od pomysłu autora i potrzeb. W moim przypadku akurat Masterem jest jeden układ z prockiem a kilka pozostałych w tym PC są układami typu Slave. Oczywiście łatwo przerabiać to na różne dowolne inne konfiguracje ... trzeba tylko chceć a nie odrazu radzić komuś ethernet - to już troszkę szaleństwo ;)

    a kolega starob podał właśnie, dobry - jeden z wielu sposobów w jaki można sobie radzić z wykrywaniem kolizji
  • Poziom 26  
    W mojej sieci pracuje kilkadziesiąt urządzeń na magistrali.
    Układ transmisji wygląda tak:
    1. Odbiornik włączony na stałe.
    2. Do odbiornika dołączony jest przerzutnik monostabilny na 74123 (z regeneracją czasu trwania impulsu), z minimalnym czasem trwania imp. wyj. dobranym na czas transmisji jednego bajtu.
    Ponieważ na transmisji mogą się zdarzyć same jedynki.
    Wyjście z przerzutnika daje sygnał o zajętości magistrali, a sterownik wie czy to on zajmuje.
    Ponieważ i tak musisz włączać nadajnik jakimś sygnałem, możesz go użyć do blokowania przeżutnika aby nie wykrywał samego siebie.
    3. Wykrywanie kolizji zrobiłem porównując bit po bicie przez porównanie sygnałów TxD & RxD. Różnica sygnałów daje informacje o kolizji.
    Tu jest jednak trochę zabawy, ponieważ TxD po przejściu przez nadajnik i odbiornik jest trochę opóźniony i TxD względem RxD jest przesunięty.
    Bezpośrednie porównanie będzie dawać permamętną kolizje.
    Jeśli nie zależy na czasie magistrali można z takiego sprawdzania zrezygnować i sprawdzać tylko czy bajt nadany = bajt odebrany.
    4. Transmisja rozpoczyna się (pod warunkiem wolnej magistrali)preambułą, która włącz we wszystkich urz. przerzutniki (zajmuje magistrale).
    5.W przypadku jednoczesnego rozpoczęcia transmisji zostanie wykryta kolizja na jednym z bitów preambuły.
    6. Nie można wykluczyć, że dwa sterowniki wystartują idealnie w tym samym czasie dlatego preambuła przeleci bez kolizji.
    Dlatego następnym wysyłanym bajtem w ramce danych jest unikatowy adres sterownika. Wtedy przy wystąpieniu kolizji na magistrali różnicy nie wykryje tylko jeden. To on wygra rywalizacje, a pozostałe się wyłączą.
    7.Rywalizacje wygrywa zawsze szybszy i o niższym adresie własnym.
    Po każdej transmisji, przed ponowną próbą dostępu do magistrali trzeba odczekać pewien czas (zmienny, generowany losowo).Zabezpiecz to przed "zagadaniem magistrali przez tylko jeden. Wszystkie mają jednakowe szanse dostępu.
    Tyle o dostępie do magistrali....:)
    Teraz trzeba zabezpieczyć się przed błędami od zakłóceń, ale to już inna para kaloszy...:)
    Z zabezpieczeniami nie należy przesadzać i pójść na kompromis.
    Prawda, że proste?
  • Poziom 18  
    Sądze, że rs485 nadaje się jak najbardziej. Może warto rzucić okiem na protokół peer to peer -> yakko . Nie spradzwałem tego w praktyce ale jest godny zainteresowania.
  • Poziom 12  
    ok dzieki Panowie za cenne wskazowki. W weekend bede montował tą sieć. Napewno jeszcze bede miał jakies pytania.

    Pozdrawiam i wielkie dzieki!!