Jak rozwiązać problem z odczytem danych Modbus RTU w S7-1200, gdy działa tylko pierwszy blok Modbus Master

3 minutes, 57 seconds Read

Komunikacja Modbus RTU w sterownikach Simatic S7-1200 jest stosunkowo prosta w konfiguracji, ale w praktyce często sprawia trudności, szczególnie gdy do jednej magistrali RS-485 podłączonych jest wiele urządzeń. Jednym z typowych objawów problemu jest sytuacja, w której działa wyłącznie pierwszy skonfigurowany blok MB_MASTER, a pozostałe nie nawiązują komunikacji mimo poprawnych parametrów transmisji.

Ten poradnik przedstawia najczęstsze przyczyny oraz sposoby rozwiązania problemu, krok po kroku.


1. Zrozumienie działania bloku MB_MASTER

W S7-1200 komunikacja Modbus RTU Master oparta jest o blok funkcyjny MB_MASTER, którego istotną cechą jest to, że:

→ sterownik posiada tylko jeden port komunikacyjny pracujący fizycznie jako Master Modbus RTU

→ dlatego nie można wykonywać wielu zapytań jednocześnie

Każde wywołanie bloku MB_MASTER jest żądaniem wysłanym przez ten sam port RS-485. Jeśli kilka bloków zostanie wywołanych w tym samym cyklu programu, sterownik spróbuje wysłać wiele zapytań naraz, co kończy się tym, że działa jedynie „pierwszy w kolejce”.

To najważniejsza rzecz przy projektowaniu komunikacji z wieloma slave’ami.


2. Dlaczego działa tylko pierwszy blok?

Najczęściej powody są dwa:


Problem 1: Bloki MB_MASTER są wykonywane równocześnie

Jeśli każdy z 10 slave’ów ma swój osobny blok MB_MASTER, a wszystkie FB wykonują się w OB1 w tym samym czasie, port RS-485 zostanie „zasypany” zapytaniami. Sterownik przetworzy pierwszy blok, ale kolejne nie wystartują, bo:

  • port jest zajęty,

  • poprzednie żądanie nie zostało jeszcze zakończone,

  • kolejne bloki otrzymują status błędu lub w ogóle nie mają szansy wykonać transmisji.


Problem 2: Brakuje prawidłowej sekwencji wywołań (brak sterowania BUSY)

Blok MB_MASTER posiada sygnał BUSY, który informuje, że trwa komunikacja.
Dopóki BUSY = TRUE, nie wolno wywoływać kolejnego zapytania ani kolejnego bloku MB_MASTER.

Jeśli każdy z 10 bloków wywołuje się stale, wszystkie poza pierwszym będą ignorowane.


3. Prawidłowa architektura odczytu z wielu urządzeń slave

Najlepszą i rekomendowaną metodą jest wykorzystanie jednego bloku MB_MASTER, który cyklicznie wykonuje zapytania do kolejnych slave’ów.

Dlaczego jeden blok?

  • jeden port = jeden master = jedno zapytanie w danym momencie

  • sterownik musi odpytywać urządzenia sekwencyjnie

  • konstrukcja bloku MB_MASTER przewiduje taką właśnie pracę


4. Jak to wdrożyć: struktura programu

Krok 1: Utwórz jeden FB z MB_MASTER

W ramach FB umieść:

  • instancję bloku MB_MASTER,

  • zmienną stanową, która określa numer aktualnie odpytawanego slave’a (np. licznik 1–10),

  • zestaw parametrów (adresy rejestrów, długości, adresy slave) dla każdego urządzenia.


Krok 2: Sterowanie sekwencyjne

Sekwencja powinna wyglądać tak:

  1. MB_MASTER odpytuje Slave 1

  2. Czekasz, aż BUSY = FALSE

  3. Odczyt jest gotowy (DONE = TRUE lub ERROR = TRUE)

  4. Przechodzisz do kolejnego urządzenia

  5. Uruchamiasz MB_MASTER z parametrami Slave 2

  6. itd.

Po osiągnięciu urządzenia nr 10 sekwencja wraca do nr 1.


Krok 3: Czas między zapytaniami

Sterownik Modbus RTU wymaga:

  • niewielkiej przerwy między kolejnymi ramkami,

  • zwłaszcza gdy prędkość sieci jest niska (9600 lub 19200).

Jeśli bypassujesz BUSY i „zalewasz” port kolejnymi zapytaniami, odczyt będzie szarpany, a błędy – częste.


5. Alternatywne rozwiązanie – wiele bloków, ale sterowanych sekwencyjnie

Możliwe jest również użycie większej liczby bloków MB_MASTER (np. 10), ale:

  • nie mogą być uruchamiane równocześnie,

  • każdy blok musi startować dopiero, gdy poprzedni zakończy pracę.

Taka architektura jest jednak bardziej złożona i trudniejsza do utrzymania niż jedna instancja MB_MASTER.


6. Upewnij się, że ustawienia slave’ów się nie pokrywają

Typowy błąd na magistrali:

  • dwa slave’y mają ten sam adres (np. dwa razy adres 1),

  • powoduje to, że odpowiedź wysyła tylko jedno urządzenie lub wiadomości kolidują ze sobą.

Należy koniecznie upewnić się, że:

  • każdy czujnik ma unikalny adres slave,

  • prędkość, parzystość i bity stopu są identyczne na wszystkich urządzeniach.


7. Podsumowanie: dlaczego działa tylko pierwszy blok i jak to naprawić

Dlaczego działa tylko pierwszy?

  • wszystkie bloki działają równocześnie,

  • port RS-485 może obsłużyć tylko jedno zapytanie w danym momencie,

  • kolejne bloki nie mogą wykonać transmisji, bo BUSY jest stale zajęte.

Jak to naprawić?

  • używać jednego bloku MB_MASTER odpytującego kolejno 10 urządzeń,

  • lub sterować wieloma blokami sekwencyjnie, nigdy równolegle,

  • upewnić się, że każde urządzenie ma unikalny adres,

  • zachować kontrolę nad sygnałem BUSY.


8. Najważniejsza zasada komunikacji Modbus RTU w S7-1200

Modbus RTU master wykonuje tylko jedno zapytanie w danym czasie.

Dlatego każdy kolejny odczyt musi być wywoływany sekwencyjnie, nie równocześnie.

Jeśli ta zasada zostanie przestrzegana, sterownik będzie w stanie bez problemu odczytywać dane z 10, 20, a nawet kilkudziesięciu urządzeń Modbus RTU.

Similar Posts