Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

STM32 - MODBUS RTU - Jak wykryć początek i koniec ramki

prawicowiec 19 Kwi 2017 17:42 1011 17
  • #1 19 Kwi 2017 17:42
    prawicowiec
    Poziom 7  

    Witam
    Jak wykryć początek nadawania ramki MODBUS RTU poprzedzonej ciszą na linii oraz koniec ramki ?
    Mikrokontroler STM32F10x

  • #3 19 Kwi 2017 18:10
    prawicowiec
    Poziom 7  

    Komunikuje się przez układ SP3485 podłączony do linii Tx, Rx + pin sterujący kierunkiem przepływu danych. Dane odbieram wykorzystując przerwanie. Nie wiem jak wykryć np. ciszę na linii poprzedzającą początek ramki z danymi.

  • #5 19 Kwi 2017 18:53
    prawicowiec
    Poziom 7  

    Musze zaimplementować protokół w urządzeniu SLAVE (obsługa kilku najprostszych zapytań w protokole MODBUS). W sieci będzie podłączonych więcej niż jedno urządzenie SLAVE

  • #6 19 Kwi 2017 19:06
    Piotrus_999
    Poziom 39  

    prawicowiec napisał:
    Musze zaimplementować protokół w urządzeniu SLAVE (obsługa kilku najprostszych zapytań w protokole MODBUS). W sieci będzie podłączonych więcej niż jedno urządzenie SLAVE
    Ale dalej nie rozumiem po co masz wykrywać ciszę. Co ta wiedza Ci da? Ciebie dopiero interesuje sytuacja jak uart coś odbierze. Jak nie odbiera to znaczy że jest cisza. Albo o cos innego Ci chodzi.

  • #7 19 Kwi 2017 19:28
    prawicowiec
    Poziom 7  

    Chodzi o zabezpieczenie przed nadawaniem kiedy już inny SLAVE jest w trakcie wysyłania odpowiedzi no chyba, że do takiej sytuacji przy tej komunikacji nie dochodzi (RS485)

  • #8 19 Kwi 2017 19:53
    michalko12
    Specjalista - Mikrokontrolery

    Przeczytaj specyfikację MODBUS, tam wszystko jest, uniwersalnie dla każdego urządzenia.

    http://www.modbus.org/docs/Modbus_over_serial_line_V1_02.pdf

    Generalnie wygląda to tak, że po odebraniu każdego znaku czekasz 3,5 znaku na następny znak. Jeśli w tym czasie zostanie odebrany nowy znak, resetujesz timer i znowu czekasz ten okres, jeśli znak nie nadejdzie oznacza to koniec ramki. Przystępujesz do dekodowania ramki z zapytaniem i generujesz ramkę odpowiedzi. W trakcie wysyłania ramki po wysłaniu ostatniego znaku powinieneś poczekać 3,5 znaku przed przełączenie drivera w tryb odbioru. Jest to zabezpieczenie przed pojawieniem się śmieci na magistrali RS485.

  • #9 20 Kwi 2017 19:28
    prawicowiec
    Poziom 7  

    Mam kolejny problem. Wg tej dokumentacji trzeba ustawić bit parzystości na EVEN i jeden bit stopu lub ustawić 2 bity stopu. Wysyłam dane i przychodzą głupoty chociaż po obu stronach mam dobrze ustawione parametry transmisji.
    Dla przykładu wysyłając dwa bajty 0x30 i 0x32 (w ASCII są to odpowiednio cyfry 0 i 2 otrzymałem w odpowiedzi 0x30 (dobrze) 0xB2 (źle). Wstawia mi bit na najstarszej pozycji

  • #10 20 Kwi 2017 19:57
    Rariusz
    Poziom 23  

    Witam,

    Poczytaj dokładnie dokumentację do protokołu MODBUS RTU.
    Jeżeli chce pracować jako master to musisz pamiętać o odpowiednim
    formacie ramki. Nie możesz o tak wysłać dwa bajty.
    Tu jest opisane jak ramka ma wyglądać:
    https://pl.wikipedia.org/wiki/Modbus

    Zacznij od przeczytania dokładnie dokumentacji a wszystko stanie się
    proste.

    Pozdrawiam,

  • #11 20 Kwi 2017 20:00
    prawicowiec
    Poziom 7  

    Tak ja wiem jak ma wyglądać ramka. Te dwa bajty to dla testu. Interesuje mnie tylko SLAVE. Wysyłam przykładowe zapytania z np. RealTerm, który pełni rolę MASTER podczas testów

  • #13 20 Kwi 2017 21:07
    Rariusz
    Poziom 23  

    Witam,

    prawicowiec napisał:
    Tak ja wiem jak ma wyglądać ramka. Te dwa bajty to dla testu.

    Ok. Ale proponuję złożyć cała ramkę z sumą kontrolną i to wysyłać bez jakiś
    testów.

    Pozdrawiam,

  • #15 20 Kwi 2017 21:25
    Freddie Chopin
    Specjalista - Mikrokontrolery
  • #16 20 Kwi 2017 22:01
    prawicowiec
    Poziom 7  

    To jak muszę ustawić port w STM32 dla poprawnej transmisji 8E1 ?

  • #17 20 Kwi 2017 22:08
    Rariusz
    Poziom 23  

    Witam,

    Ustaw port do obsługi RTU. A konfigurację znajdziesz w necie. Jest wiele przykładów nawet z wykorzystaniem SPL więc nie powinno być problemu.

    Pozdrawiam,

  • #18 20 Kwi 2017 23:39
    Piotrus_999
    Poziom 39  

    prawicowiec napisał:
    To jak muszę ustawić port w STM32 dla poprawnej transmisji 8E1 ?
    Strona 826 RM-a. Jak chcesz pisać modbus to opis u(s)arta powinnienes opanować

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME