Forum elektroda.pl

Regulamin  | Punkty  | Dodaj...  | Ostatnie  | Szukaj  | Rejestracja  | Zaloguj

Ta strona używa cookie. Dowiedz się więcej o celu ich używania i zmianie ustawień cookie w przeglądarce.
Korzystając ze strony wyrażasz zgodę na używanie cookie, zgodnie z aktualnymi ustawieniami przeglądarki.

Protokół transmisji MODBUS RTU


Napisz nowy temat  Odpowiedz do tematu      Strona Główna -> Forum elektroda.pl -> DSP i Transmisja -> Protokół transmisji MODBUS RTU
Autor
Wiadomość
Wilan
Poziom 10
Poziom 10


Dołączył: 23 Mar 2003
Posty: 55
Miasto: Wrocław

Post#1 Post autora tematu 13 Gru 2005 10:56   

Protokół transmisji MODBUS RTU


Witam serdecznie

Mam za zadanie zrobić sterownik oparty na mikrokontrolerze AVR, który będzie poprzez RS485 odbierać dane z sieci przemysłowej wykorzystującej protokół MODBUS RTU.

Proszę o informację na temat tego, jak działa protokół MODBUS RTU. Gdzie można dowiedzieć się czegoś więcej o protokole transmisji MODBUS RTU? Jakie warunki powinien spełniać odbiornik sygnału z sieci MODBUS RTU?

Za wszelkie przydatne informacje z góry dziękuję!
Powrót do góry
   
Krisgorn
Poziom 15
Poziom 15


Dołączył: 02 Lip 2003
Posty: 266
Miasto: Śląsk Cieszyński

Post#2 13 Gru 2005 13:59pomocny post - solucja   

Re: Protokół transmisji MODBUS RTU


http://modbus.org/
Powrót do góry
   
Udios
Poziom 12
Poziom 12


Dołączył: 12 Lut 2004
Posty: 96
Miasto: Kęty

Post#3 28 Gru 2005 11:58   

Re: Protokół transmisji MODBUS RTU


Witam
Robiłem kiedyś sterownik zbierający dane z maszyny i przesyłający je do kompa za pomocą MODBUSA (moja praca inż na ATH :-) ). W załączniku przesyłam różne dane z których korzystałem mam nadzieję ze się przydadzą
Pozdrawiam

Aha
zapomniałbym. Proponuje zajrzeć na stronę www.modbus.pl Jest tam fajny programik "MODBUS Tester" Jest bardzo pomocny przy testowaniu poprawności transmisji.

Załączniki:
Powrót do góry
   
lgangsta
Poziom 4
Poziom 4


Dołączył: 15 Lis 2004
Posty: 8
Miasto: Łódź

Post#4 03 Sty 2006 03:14   

Re: Protokół transmisji MODBUS RTU


http://www.elektroda.pl/rtvforum/posting.php?mode=reply&t=409812

Dodano po 2 [minuty]:

http://modbus.republika.pl
Powrót do góry
   
tf05tf05
Poziom 8
Poziom 8


Dołączył: 20 Lis 2003
Posty: 25

Post#5 09 Sty 2006 13:34   

Re: Protokół transmisji MODBUS RTU


Polecam stronę www.stefanbrock.neostrada.pl
Powrót do góry
   
symndz
Poziom 15
Poziom 15


Dołączył: 14 Gru 2004
Posty: 214

Post#6 15 Sty 2006 12:18   

Re: Protokół transmisji MODBUS RTU


Zroblem cos takiego na AVR ... odwiedz stronke www.embedded.org.pl ..

Marcin
Powrót do góry
   
Krisgorn
Poziom 15
Poziom 15


Dołączył: 02 Lip 2003
Posty: 266
Miasto: Śląsk Cieszyński

Post#7 15 Lut 2006 12:24   

Re: Protokół transmisji MODBUS RTU


symndz napisał:
Zroblem cos takiego na AVR ... odwiedz stronke www.embedded.org.pl ..

Marcin


Bardzo fajna strona. Niestety nie działa skrypt java podający e-maila.
Powrót do góry
   
Google


Google Adsense


Post# 15 Lut 2006 12:24   





Powrót do góry
   
symndz
Poziom 15
Poziom 15


Dołączył: 14 Gru 2004
Posty: 214

Post#8 20 Lut 2006 10:25   

Re: Protokół transmisji MODBUS RTU


dziala dziala .. moze wlacz jave .. ale ok masz tu wiec pisz na info (at) embedded.org.pl
Powrót do góry
   
j_r_k
Poziom 6
Poziom 6


Dołączył: 05 Kwi 2008
Posty: 17
Miasto: Warszawa

Post#9 05 Maj 2009 13:18   

Re: Protokół transmisji MODBUS RTU


Załączam paczkę z materiałami o protokole Modbus (ASCII i RTU). Nie ma w niej plików, które znajdują się w zamieszczonym powyżej pliku MODBUS_materiały.rar.

W paczce umieściłem pliki dostępne w internecie i mam nadzieję, że nie złamałam praw autorskich.

Załączniki:
Powrót do góry
   
djmdp
Poziom 16
Poziom 16


Dołączył: 25 Paź 2006
Posty: 277
Miasto: Wrocław

Post#10 20 Lip 2011 09:38   

Re: Protokół transmisji MODBUS RTU


Witam, odkurzę trochę temat, bo mam pewne pytanie z modbusem. Powiedzcie, czy dobrze rozumuję, czy jeśli w urządzeniu np. udostępnię 400 rejestrów 16bit, to odczyt wszystkich to będzie w ten sposób, że adres początkowy to np 1, więc master będzie prosił o dane od 1 do 125 w jednej ramce, czyli offset 1 a długość 125, w kolejnej ramce offset 125 i długość 125, a następnie kolejna ramka offset 250 i długość 125 itd..??
Powrót do góry
   
jestam
Poziom 21
Poziom 21


Dołączył: 13 Maj 2009
Posty: 1211

Post#11 25 Lip 2011 20:13   

Re: Protokół transmisji MODBUS RTU


Master decyduje o scenariuszu wymian. Może wysłać 400 zapytań o każdy rejestr osobno. Albo czytać 50 rejestrów od offsetu 100, a później 20 od offsetu 237. Slave ma odpowiedzieć.
Powrót do góry
   
djmdp
Poziom 16
Poziom 16


Dołączył: 25 Paź 2006
Posty: 277
Miasto: Wrocław

Post#12 15 Wrz 2011 12:46   

Re: Protokół transmisji MODBUS RTU


Witam, chciałbym zapytać o jedną rzecz, może ktoś spotkał się z nią przy pracy nad modbusem. Mam zrobione już całe jądro transmisji modbus, wszystko działa pięknie, prócz jednej rzeczy. kiedy slave'ów jest więcej niż jeden, wszystkie co jakiś czas mają błąd sumy kontrolnej oraz nieprawidłowej długości ramki. Tzn. nie wszystkie naraz, w różnej kolejności losowo. Może ktoś naprowadzić mnie na rozwiązanie tego problemu? Master nie ma takich błędów wcale, ale gdy inicjuje transmisję to reszta slave'ów jest w nasłuchu i odbiera całą transmisję między masterem a jednym ze slave'ów i prawdopodobnie odpowiedzi slave'a powodują błąd u innych slave'ów, których wymiana nie dotyczy, czy tak ma być? Pasywny pulling przez mastera na adresach którego nie zna żaden slave nie przynosi tego błędu, więc jestem pewien, że slavy sam się wykańczają nawzajem, szukam rozwiązania.
Powrót do góry
   
Svavo
Poziom 19
Poziom 19


Dołączył: 29 Sty 2005
Posty: 769
Miasto: Forgotten Realms

Post#13 20 Wrz 2011 23:56   

Re: Protokół transmisji MODBUS RTU


djmdp napisał:
Witam, chciałbym zapytać o jedną rzecz, może ktoś spotkał się z nią przy pracy nad modbusem. Mam zrobione już całe jądro transmisji modbus, wszystko działa pięknie, prócz jednej rzeczy. kiedy slave'ów jest więcej niż jeden, wszystkie co jakiś czas mają błąd sumy kontrolnej oraz nieprawidłowej długości ramki. Tzn. nie wszystkie naraz, w różnej kolejności losowo. Może ktoś naprowadzić mnie na rozwiązanie tego problemu? Master nie ma takich błędów wcale, ale gdy inicjuje transmisję to reszta slave'ów jest w nasłuchu i odbiera całą transmisję między masterem a jednym ze slave'ów i prawdopodobnie odpowiedzi slave'a powodują błąd u innych slave'ów, których wymiana nie dotyczy, czy tak ma być? Pasywny pulling przez mastera na adresach którego nie zna żaden slave nie przynosi tego błędu, więc jestem pewien, że slavy sam się wykańczają nawzajem, szukam rozwiązania.

Slave do którego rozkaz nie jest adresowany, po odbiorze rozkazu nic nie powinien robić, tylko po analizie takiej ramki wrócić do tryb odbioru i czekać na rozkaz do niego. To jest normalny układ. Może tu masz błąd? Dla pewności mógłbyś wkleić kod (lub jego część) lub opisac sam algorytm.
Powrót do góry
   
Google


Google Adsense


Post# 20 Wrz 2011 23:56   





Powrót do góry
   
jestam
Poziom 21
Poziom 21


Dołączył: 13 Maj 2009
Posty: 1211

Post#14 21 Wrz 2011 00:54   

Re: Protokół transmisji MODBUS RTU


djmdp napisał:
prawdopodobnie odpowiedzi slave'a powodują błąd u innych slave'ów, których wymiana nie dotyczy, czy tak ma być


Zgaduję że Slave to Twoja implementacja.

Prawdopodobnie dobrze to zidentyfikowałeś. Slave traktuje znaki w środku odpowiedzi innego Slave jako rozkaz Mastera. Tak być nie może. Slave musi wiedzieć, kiedy zaczyna i kończy się ramka w magistrali. W tym celu w protokole Modbus stosuje się ciszę na łączu (dokładny czas trwania ciszy w specyfikacji).
Powrót do góry
   
djmdp
Poziom 16
Poziom 16


Dołączył: 25 Paź 2006
Posty: 277
Miasto: Wrocław

Post#15 21 Wrz 2011 08:08   

Re: Protokół transmisji MODBUS RTU


Według specyfikacji to 4 znaki, ale podczas testów wyszło, że to zbyt krótko, zrobiłem przerwę w odpowiedzi slave'ów 15ms, teraz wszystko pięknie pracuje, walczę z identyfikacją błędu pt. ten sam adres linii u wielu slave'ów i interpretacja przez mastera.
Powrót do góry
   
Google


Google Adsense


Post# 21 Wrz 2011 08:08   





Powrót do góry
   
jestam
Poziom 21
Poziom 21


Dołączył: 13 Maj 2009
Posty: 1211

Post#16 21 Wrz 2011 08:39   

Re: Protokół transmisji MODBUS RTU


djmdp napisał:
Według specyfikacji to 4 znaki, ale podczas testów wyszło, że to zbyt krótko, zrobiłem przerwę w odpowiedzi slave'ów 15ms


Nie 3,5 znaku? Powyżej pewnej prędkości transmisji (38400 ? ) przerwa staje się stała i wynosi o ile pamiętam 1,75 ms.

Co będzie, gdy na jednej magistrali razem z Twoim Slave będzie pracował Slave innego wytwórcy? Mierzysz w swoim kodzie czas ciszy na łączu? Jeśli nie, to powinieneś.
Powrót do góry
   
Svavo
Poziom 19
Poziom 19


Dołączył: 29 Sty 2005
Posty: 769
Miasto: Forgotten Realms

Post#17 21 Wrz 2011 08:46   

Re: Protokół transmisji MODBUS RTU


jestam napisał:
(...) Powyżej pewnej prędkości transmisji (38400 ? ) przerwa staje się stała i wynosi o ile pamiętam 1,75 ms.

W urządzeniach przemysłowych nie stosuje się większych szybkości od 19200bps dla Modbus'a RTU.
Pozdro.
Powrót do góry
   
jestam
Poziom 21
Poziom 21


Dołączył: 13 Maj 2009
Posty: 1211

Post#18 21 Wrz 2011 08:57   

Re: Protokół transmisji MODBUS RTU


Svavo napisał:
urządzeniach przemysłowych nie stosuje się większych szybkości od 19200bps dla Modbus'a RTU.


Bardzo kategoryczne stwierdzenie. Tak naprawdę to zależy: w jakich urządzeniach, w jakich warunkach, na jakich kablach i odległościach. Ja w każdym razie znam sytuacje gdy nawet 115200 pracuje stabilnie i bez problemów.

Poza tym: dyskutujemy o implementacji protokołu. Kolega djmdp nie pisze na jakim urządzeniu to pracuje. Może to lodówka :)
Powrót do góry
   
djmdp
Poziom 16
Poziom 16


Dołączył: 25 Paź 2006
Posty: 277
Miasto: Wrocław

Post#19 21 Wrz 2011 09:05   

Re: Protokół transmisji MODBUS RTU


Ja testuję na max 19200, to urządzenia w kotłowni. Pracuje bardzo dobrze na RS-485, to urządzenie które będzie obsługiwane tylko przez moje mastery, praca zamknięta, tak bym to nazwał, tzn. jest dostęp do danych w slave'ach, jeśli ktoś pozna adresy i numery rejestrów. Właśnie zastanawiałem się jak producenci takich urządzeń udostępniają mapy danych swoich urządzeń?
Powrót do góry
   
jestam
Poziom 21
Poziom 21


Dołączył: 13 Maj 2009
Posty: 1211

Post#20 21 Wrz 2011 09:44   

Re: Protokół transmisji MODBUS RTU


djmdp napisał:
to urządzenie które będzie obsługiwane tylko przez moje mastery

Nie zakładaj tego. To nigdy nie jest prawdą w perspektywie kilku lat. Szczególnie, gdy poinformujesz klienta, że urządzenie obsługuje standardowy protokół.

djmdp napisał:
jeśli ktoś pozna adresy i numery rejestrów

Żaden problem. Są narzędzia do monitorowania transmisji szeregowej.

djmdp napisał:
Właśnie zastanawiałem się jak producenci takich urządzeń udostępniają mapy danych swoich urządzeń?

Tabelka w DTR: adres rejestru - opis do czego służy, czy zapis czy odczyt itd.
Powrót do góry
   
djmdp
Poziom 16
Poziom 16


Dołączył: 25 Paź 2006
Posty: 277
Miasto: Wrocław

Post#21 21 Wrz 2011 09:50   

Re: Protokół transmisji MODBUS RTU


No to w sumie slave jako tako jest gotowy do pracy z różnymi masterami, obsługuje wyjątki, tylko ustalona musi być transmisja, nie ma auto-baudu itp. ale to raczej zadanie dla mastera. Sterowanie polega na przesyłaniu stanu urządzenia, stan pracy, awarie, odczyt temperatur, ale gdy master byłby zaawansowany, to można sterować wszystkimi parametrami urządzenia, bez problemu.
Powrót do góry
   
jestam
Poziom 21
Poziom 21


Dołączył: 13 Maj 2009
Posty: 1211

Post#22 21 Wrz 2011 10:00   

Re: Protokół transmisji MODBUS RTU


djmdp napisał:
sumie slave jako tako jest gotowy do pracy z różnymi masterami, obsługuje wyjątki


djmdp napisał:
zrobiłem przerwę w odpowiedzi slave'ów 15ms


Co będzie, gdy do tej samej magistrali ktoś podłączy Slave od innego dostawcy, który będzie wysyłał dane zgodnie ze specyfikacją po 2 ms ciszy na łączu a nie po 15 ms?
Powrót do góry
   
djmdp
Poziom 16
Poziom 16


Dołączył: 25 Paź 2006
Posty: 277
Miasto: Wrocław

Post#23 21 Wrz 2011 10:07   

Re: Protokół transmisji MODBUS RTU


Ale moment, ta cisza to jest czas mierzony odkąd Slave odebrał dane prawda? Jeśli tak, to bez problemu mogę zastosować 2ms, ja chyba źle zrozumiałem tą ciszę. Wyobrażałem sobie, że jest to czas który zliczany jest przez każdego ze slave'ów celem ustalenia końca ramki t3.5.
Powrót do góry
   
jestam
Poziom 21
Poziom 21


Dołączył: 13 Maj 2009
Posty: 1211

Post#24 21 Wrz 2011 12:29   

Re: Protokół transmisji MODBUS RTU


Zakładam, że z http://www.modbus.org/specs.php się zapoznałeś?
Tutaj (str. 13 i dalej) jest odpowiedź na Twoje pytanie.
Powrót do góry
   
djmdp
Poziom 16
Poziom 16


Dołączył: 25 Paź 2006
Posty: 277
Miasto: Wrocław

Post#25 21 Wrz 2011 12:36   

Re: Protokół transmisji MODBUS RTU


No między innymi z tych dokumentów piszę to oprogramowanie, więc mam takie pytanie, załóżmy 3.5 znaku do rozpoznania ramki, niech 2 slavy pracują na magistrali, do jednego z nich adresowana jest ramka, oba ZACZYNAJĄ, podkreślam, odbierać ramkę, i zdarzy się sytuacja, slave do którego ramka nie jest adresowana jest np. mocno obciążony, a slave adresowany ma za zadanie tylko odbierać i odpowiadać na zapytania. W tym momencie slave adresowany odbierze ramkę pierwszy i zdąży nadać odpowiedź zanim ten zajęty zdąży skończyć przetwarzanie odbieranej ramki, albo co gorsza, zanim czas do rozpoznania ramki minie... Mam wtedy efekt przedłużonej, lub niepełnej ramki w slave który nie był adresowany, czyli również błąd CRC. Na moją głowę, to specyfikacja nie mówi wprost o takiej sytuacji, stąd to moje opóźnienie w nadawaniu ramek przez urządzenia slave. Czas na rozpoznanie zostaje nie zmieniony i wynosi 3.5 znaku. Nie rozumiem tylko jednego ze strony którą podałeś, już kilka razy na to zwracałem uwagę, co oznacza ta przerwa 4.5znaku? Czy to nie jest właśnie to moje opóźnienie?
Powrót do góry
   
jestam
Poziom 21
Poziom 21


Dołączył: 13 Maj 2009
Posty: 1211

Post#26 21 Wrz 2011 12:49   

Re: Protokół transmisji MODBUS RTU


Odmierzanie czasu 1,5 znaku (max przerwa między znakami wewnątrz ramki) i 3,5 znaku (minimalna przerwa między ramkami) musi działać niezależnie od obciążenia Slave. Czytaj: przerwania, lub sprzętowy timer, lub jedno i drugie. Slave zawsze musi wiedzieć, co się dzieje na magistrali - kiedy jest początek ramki, kiedy ramka się skończyła, kiedy była zbyt długa przerwa między znakami ramki.

Jeśli ramka jest adresowana do kogoś innego, to "mocno obciążony Slave" zdoła to łatwo sprawdzić - to porównanie 1 bajtu. Podobnie dla rozgłoszenia.

Jeśli adresatem jest mocno obciążony Slave, to ma on mnóstwo czasu na liczenie CRC, wykonanie rozkazu i odesłanie odpowiedzi gdy będzie gotowy. Nie może jej odesłać wcześniej niż po 3,5 znaku ciszy po żądaniu. Musi wysyłać znaki w miarę szybko jeden za drugim (znowu przerwania albo sprzętowy bufor UART).

Przerwa 4.5 znaku jest tam żeby zwrócić uwagę, że to może być więcej niż 3,5 znaku - np. 4,5 albo 45 albo 450 znaków :)
Powrót do góry
   
djmdp
Poziom 16
Poziom 16


Dołączył: 25 Paź 2006
Posty: 277
Miasto: Wrocław

Post#27 21 Wrz 2011 13:01   

Re: Protokół transmisji MODBUS RTU


Mam zaimplementowany t3.5 oraz uart na przerwaniach i wszystko działa, tyle, że raz na jakiś czas zdarzała się ta sytuacja krytyczna o której napisałem, Slave odebrał dane szybciej i nadał ramkę niż inny slave zdążył odebrać tę samą od mastera. Stąd było zamieszanie, na dodatek wykryłem to również na oscyloskopie. Niestety timera t1.5 nie mam zaimplementowanego, ale to może się skończyć tylko tym, że jak dane urządzenie nada znak o dłuższym czasie niż t1.5, lub dłuższym niż t3.5 to i tak będzie błąd CRC lub zbyt krótkiej ramki. Ale tak nawet na logikę to oczywiście, że może zdarzyć się opisana sytuacja, tym bardziej, że wszystkie urządzenia slave pracują na tym samym t3.5. Więc dlaczego dla bezpieczeństwa i pewności transmisji w specyfikacji nie ma minimalnego zdefiniowanego czasu na odpowiedź slave... Slave owszem sprawdza czy ramka jest do niego itd, ale pod warunkiem, że nie ma błędu crc i ramka jest odpowiedniej długości. Dążę w swoich rozważaniach do tego, że cisza t3.5 równa czasowi rozpoznania ramki w wielu urządzeniach jest bardzo krytyczna. bezpieczniej jest zrobić dłuższą przerwę, ale zachować czas rozpoznania ramki t3.5. Na moją niekorzyść działa jeszcze brak priorytetów przerwań, oraz zadanie bardziej krytyczne czasowo w przerwaniu jakim jest zero sieci oraz wyzwalanie triaków.
Powrót do góry
   
jestam
Poziom 21
Poziom 21


Dołączył: 13 Maj 2009
Posty: 1211

Post#28 21 Wrz 2011 13:33   

Re: Protokół transmisji MODBUS RTU


djmdp napisał:
Slave odebrał dane szybciej i nadał ramkę niż inny slave zdążył odebrać tę samą od mastera


Masz na myśli "odebrać i przeanalizować"? Wszystkie stacje odbierają znaki dokładnie w tym samym momencie (pomijając czas propagacji w kablu).

Twój Slave, niezależnie jak bardzo zajęty innymi zadaniami, musi nadążać za magistralą. 1,82 ms (3,5 znaku dla 19200) po zakończeniu żądania Mastera, _inny_ Slave ma prawo odpowiedzieć. To jest minimalny czas na odpowiedź Slave.

Kontrola sytuacji na magistrali to jest maszyna stanów na kilku bitach. To się robi wprost w procedurach obsługi przerwań od timera liczącego czas i od UART.

djmdp napisał:
Slave owszem sprawdza czy ramka jest do niego itd, ale pod warunkiem, że nie ma błędu crc i ramka jest odpowiedniej długości

Odwrotnie. Najpierw sprawdź adresata, dopiero gdy adresat się zgadza, sprawdzaj czy ramka ma dobrą długość i licz CRC.

djmdp napisał:
jak dane urządzenie nada znak o dłuższym czasie niż t1.5

Czas nadawania znaku określa UART i jest on stały. Chodzi o to, aby kolejne znaki nadawać z odpowiednio małą przerwą. Ale to akurat rzadko jest problemem.

djmdp napisał:
bezpieczniej jest zrobić dłuższą przerwę, ale zachować czas rozpoznania ramki t3.5.

Jeśli chcesz odpowiadać później - wolno Ci. Standard to dopuszcza. Ale musisz poprawnie obsłużyć magistralę, na której wszystkie inne stacje Slave, a także Master zachowują tylko 3,5 znaku przerwy. Taki najgorszy przypadek.
Powrót do góry
   
djmdp
Poziom 16
Poziom 16


Dołączył: 25 Paź 2006
Posty: 277
Miasto: Wrocław

Post#29 21 Wrz 2011 13:46   

Re: Protokół transmisji MODBUS RTU


Inaczej, zostawmy narazie problemy interpretacji. Załóżmy, że mamy tylko sprzęt, 2 uarty sterowane timerem sprzętowym. Master wysyła jedną ramkę, owszem wszystkie odbiorniki zaczną odbierać dane w tej samej chwili (Bufor jest pusty, to założenie magistrali - jeden master), wszystkie naraz wyzwalają timer t3.5 sprzętowy. W tym momencie nie mają nic do rzeczy pozostałe przerwania, pod warunkiem, że są krótsze niż t3.5, a na pewno są;), najbardziej krytyczny jest moment odebrania ostatniego znaku ramki, jeżeli jakieś przerwanie zajmie miejsce przerwania t3.5 na chwilę przed ukończeniem czasu t3.5 (doprowadzi to do przeciągania czasu t3.5, ponieważ przerwanie czeka na wykonanie), to w tym momencie stan fizyczny magistrali modbus nadal będzie jako "Odbieranie ramki". Tymczasem w sterowniku slave załóżmy adresowanym, mamy zakończenie czasu t3.5, bardzo szybka obróbka danych i wysłanie na magistralę odpowiedzi, w tym momencie sterownik który nasłuchiwał jest nadal nie przełączony w tryb "idle" i zanim skończy się przerwanie które zajmowało czas t3.5 odbiornik tego urządzenia kasuje timer i odbiera dane które są kolejną ramką. Może trochę to zagmatwane, ale to był mój przypadek;) Proszę kolegę o uwagi. Dodam jeszcze, że w problemie tym uczestniczą TYLKO sterowniki do których ramka nie jest adresowana, no ale to wynika z problemu. Ja bazowałem na bibliotece freemodbus, ale w sumie zostało tylko jądro tego rozwiązania, czyli mechanizm wysyłania i odbierania ramek.
Powrót do góry
   
Google


Google Adsense


Post# 21 Wrz 2011 13:46   





Powrót do góry
   
jestam
Poziom 21
Poziom 21


Dołączył: 13 Maj 2009
Posty: 1211

Post#30 21 Wrz 2011 14:18   

Re: Protokół transmisji MODBUS RTU


djmdp napisał:
jeżeli jakieś przerwanie zajmie miejsce przerwania t3.5 na chwilę przed ukończeniem czasu t3.5


Wcześniej upłynął czas t1.5, więc Slave już wie, że albo ramka się skończyła, albo wystąpił błąd. Przyjmij (ze względu na różnice zegarów) że jeśli następny znak przyjdzie po czasie >= 3 znaki od końca poprzedniego, to jest to nowa ramka.

Jeśli wysyłasz odpowiedź, wyślij ją po czasie >= 4 znaki.

Będziesz zgodny ze specyfikacją.

Jako szybkie rozwiązanie: podnieś priorytet przerwania t3.5 powyżej tego "przeszkadzającego". To przerwanie powinno być bardzo krótkie (nie robisz na nim analizy ramki, prawda? :) )
Powrót do góry
   
Napisz nowy temat  Odpowiedz do tematu      Strona Główna -> Forum elektroda.pl -> DSP i Transmisja -> Protokół transmisji MODBUS RTU
Strona 1 z 2 Idź do strony 12  Następny
Podobne tematy
Ramka MODBUS RTU w BC++ (1)
MODBUS RTU- kod asm do 51 (1)
H8/3048 modbus rtu odbiór ramki (10)
c# - modbus RTU odebranie ramki + przepisanie (1)
Modbus RTU 8 Even/odd parity i AVR (4)
Modbus RTU - Konwersja pomiędzy 8N1 i 8N2 (6)
Modbus RTU - jeden przewód, różne parametry? (1)
Bascom i modbus rtu. Biblioteka, obliczanie sumy kontrolnej. (6)
RS485 - Sieć RS584, Modbus RTU i losowe timeouty (9)
RFM12B - Detekcja zakończenia transmisji (ramka typu RTU) (4)


Administrator || Moderatorzy || Regulamin forum || Regulamin ogólny || Informacja o cookies || Reklama || Kontakt

Page generation time: 0.105 seconds

elektroda.pl temat RSS