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:
-
MB_MASTER odpytuje Slave 1
-
Czekasz, aż BUSY = FALSE
-
Odczyt jest gotowy (DONE = TRUE lub ERROR = TRUE)
-
Przechodzisz do kolejnego urządzenia
-
Uruchamiasz MB_MASTER z parametrami Slave 2
-
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.
