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

RS485 full duplex problem z więcjej niz jednym odbiornikiem

krzyss159 25 Sie 2010 09:27 5029 8
REKLAMA
  • #1 8435588
    krzyss159
    Poziom 10  
    Witam, chce połączyć osiem układów do centralki i z niej sterować ich pracą.
    Problem polega na tym, że jeśli podłączam do centralki jeden układ to rozmawiają sobie jak chce, czyli wszystko działa jak należy. Problem zaczyna się w momencie kiedy do układu podłączam kolejny układ, wtedy układy nie odpowiadają, ewentualnie tylko odbierają dane z centralki. Oczywiście każdy układ ma swój unikalny adres i centralka rozmawia z nimi osobno, po kolei, więc nie mam mowy o kolizji. Jak widać w tytule centralka i czujniki podłączone są RS485.
    Swojego czasu znalazłem na elektrodzie schemat interfejsu RS485 full duplex, z dwoma konwerterami, postanowiłem wykorzystać to rozwiązanie aby nie martwić się o sterowanie kierunkiem transmisji i może tu popełniłem błąd, może w takim układnie nie może być więcej odbiorników niż jeden??
    Proszę o pomoc i odpowiedź czy w układzie przedstawionym poniżej sieć ma prawo działać czy ja coś skopałem w programie.



    schemat RS485

    RS485 full duplex problem z więcjej niz jednym odbiornikiem



    Schemat podłączenia:

    RS485 full duplex problem z więcjej niz jednym odbiornikiem




    Dodam jeszcze tylko, że próbowałem z terminatorami na końcach Lini i beż nich z podobnym efektem
  • REKLAMA
  • #2 8435692
    arturt134
    Poziom 27  
    Tak połączone układy MUSZĄ działać. Sprawdź:
    - czy na pewno wszystkie połączenia są wykonane według tego schematu,
    - czy żaden układ nie blokuje na stałe linii,
    - czy nie występują kolizje, czyli dwa lub więcej urządzenia próbują nadawać jednocześnie,
    - co nie działa - nadawanie, czy odbiór; następnie odłączaj po kolei układy i sprawdzaj, czy nie ma poprawy - być może jeden z nich jest uszkodzony i blokuje całą transmisję,
  • REKLAMA
  • #3 8436234
    krzyss159
    Poziom 10  
    Tak jak pisałem, jeśli jeden układ rozmawia z centralką komunikacja w obydwu kierunkach jest OK, natomiast jeśli są już np dwa układy to co najwyżej odbierają one dane z centralki, jak już mają coś nadać robi się zamieszanie. Próbowałem z różnymi układami w zestawieniu centralka + dwa układy i za każdym razem sytuacja taka sama. Przychodzi mi do głowy tylko sprawdzenie schematu i programu, może z tej strony coś nie działa:(
  • REKLAMA
  • #4 8436290
    arturt134
    Poziom 27  
    Czyli pewnie występuje sytuacja że dwa slave-y chcą nadawać jednocześnie i następuje kolizja... Sprawdź program.
  • REKLAMA
  • #5 8437052
    krzyss159
    Poziom 10  
    Sprawdziłem problem kolizji i też nie działa jak ma działać.

    Otóż sytuacja ma się dokładnie tak: Jeśli nadaje jakikolwiek znak do slave-ów to reagują na znak tak jak chce. Podam kod którym realizuje to co pisze: (dodam, że pisze w Bascomie)


    Kod centralki:


    
    
    ...
    Do 
    
    print "q";
    
    wait 1
    
    loop
    
    ...
    
    
    



    kod slave-ów :

    
    ...
    Dim A as Byte
    
    Do
    
    A = Waitkey()
    Portd.5 = 0
    waitms 100
    portd.5 = 1
    
    loop
    ...
    
    
    
    
    



    Czyli dzieje się tak -> Master nadaje znak co sekundę, slave - y czekają na jakikolwiek znak i jeśli coś dostaną włączają na chwilkę przekaźnik (pod portd.5) tak aby można było zaobserwować reakcję.
    Do mastera mam podpięte dwa slave - y według schematu jak na początku tego tematu.

    Reakcja slave - y pykają przekaźnikami równo co sekundę obydwa razem.

    Wniosek, obydwa otrzymują znak znak poprawnie, czyli komunikacja Master -> slave działa OK.


    W odwrotnej sytuacji nie jest już tak dobrze.
    Sprawdzając poprawnośc komunikacji slave -> master zastosowałem taki schemat:

    Master czeka na znak, po jego odebraniu wyświetla wynik na LCD.

    Slave przed pętlą Do ... Loop wysyła znak, czyli wysyła go raz po resecie.
    Teraz aby nie było kolizji w nadawaniu slave - ów resetuje dwa układy w sporych odstępach czasu (ok 2 s), więc nie mam mowy o kolizji.

    Kod Mastera:







    
    
    Do
    
    Cls
    Lcd "czekam"
    
    
    A = Waitkey()
    Cls
    Lcd "dostalem: " ; Chr(a)
    wait 1
    
    Loop
    



    Kod slave - a:



    
    Print "f";
    
    Waitms 20
    Do
    
    loop
    
    



    I co się teraz dzieje: resetuje układ bliżej centralki, jest ok, dostaje informacje ma LCD centralki że otrzymano poprawnie znak, resetuje układ drugi (na razie podpiołem dwa) nic się nie dzieje. Odcinam zasilanie układu który działał poprtawnie, resetuje układ, który wcześniej nie działał i jest ok, dostaje informacje, że odbrano znak.

    Więc jeśli jest jeden układ to komunikacja działa w odydwie strony, jeśli są dwa układy podrzędne komunikacja działa tylko w stronę nadawania z mastera:(

    Proszę o jakieś podpowiedzi co moge jeszcze sprawdzić, co mogę zrobić żeby to działało jak ma działać.
  • #6 8439480
    arturt134
    Poziom 27  
    No to powiedz:
    1. Czy jak odłączysz zasilanie jednego ze slave'ów to drugi działa? (niezależnie od tego który odłączasz?)
    2. Jak wygląda sterowanie przepływem (sygnały RE i DE) w slave'ach? W twoim kodzie nie ma źródła procedury "Print".
    3. Czemu służy czekanie Waitms 20, skoro i tak później jest nieskończona pętla?

    Napisz kod mastera trochę inaczej. Nie każ mu czekać po odebraniu znaku 1 sekundy (bo chyba to znaczy wait 1). Daruj sobie napis "dostalem", wywal "cls" i wyświetlaj odebrane znaki jednym ciągiem. Być może ten znak się pojawia, tylko ty go nie odbierasz.
  • #7 8439515
    kubus_puchatek
    Poziom 18  
    Zacznijmy od tego że terminator to nie wszystko. Na tych rysunkach nie ma rezystorów podciągających i obciągających :D. Ma być podciąganie do + i do - oraz 1 (słownie jeden) terminator. Jak to zrobisz to powinno działać. bez rezystorów wstępnie ustalających napięcia na liniach niestety ale kolego wszystkie śmieci z powietrza zakłócają........
  • #8 8439522
    arturt134
    Poziom 27  
    Jeżeli odbiorniki mają opcję "failsafe" (chyba wszystkie dzisiejsze mają) to będzie OK.
  • #9 8481139
    Maciekqbn
    Poziom 15  
    Moim skromnym zdaniem problem może polegać na braku sterowania nadajnikiem w slave'ach. Z podanego schematu wynika, że nadajnik ma linię DE na stałe podpięta do +, czyli nadajnik cały czas aktywny. Moim zdaniem linia ta powinna być sterowana (stan wysoki, czyli aktywacja nadajnika tylko w czasie nadawania znaku). I powinno być OK.

    Do tego rezystory "podciągająco-obciągające" np. przy masterze (sam to praktykuję i znakomicie się sprawdza przy zakłóceniach).
REKLAMA