Step 7 MOD-BUS-RTU Master Handling mit mehren Slaves

Maagic7

Level-2
Beiträge
432
Reaktionspunkte
222
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab ne 300er (VIPA) an der habe ich mehre ModBus Slaves.
Das funktioniert auch soweit.

Wer weis wie man korrekt mehrere Slaves liest.

ich hab mehrere Möglichkeiten:

1) ich ruf den FB_MODBUS_MASTER 1x auf
- dabei multiplexe ich die SlaveDaten (BusAdresse, RegisterAdressen, Zielspeicher)

Dafür habe ich mich entschieden

2) Ich ruf den FB_MODBUS_RTU_MASTER mehrmals auf mit jeweils eigenem Instanz-DB für jeden Slave
- damit muss man die SlaveDaten nicht Multiplexen

Das hab ich aus purer neugier mit 2 Slaves geteset und es funktioniert!


Da das im Handbuch leider nicht verzeichnet ist wie man eine ganze Armada von Slaves anspricht, würde mich mal interessieren wir ihr das gelöst habt.
Bzw. welche Infos dazu schon gibt.
Das hat bestimmt auch schon jemand mit der Siemens Version von ModBus gemacht. Würde mich auch interessieren wie das da funktionert!

Nachdem nun beides irgendwie funktionert bin ich etwas ratols
Mein SPS-Programmier-Hirn sieht Methode 1) als die korrekte an.
Wenn ich mit dem PC-Programmierer Hirn darüber nachdenk wärs wohl eher Methode 2)
 
Meinst Du Modbus RTU über RS485 oder RS232? Oder Modbus TCP?

Bei Modbus TCP kann man mehrere Modbus-Server (~Slaves) gleichzeitig ansprechen. Dann bräuchte man mehrere Instanzen des Modbus-Client(Master)-Bausteins.
Bei Modbus RTU über z.B. RS485 MUSS man warten bis der Slave geantwortet hat bevor man den nächsten anspricht, weil der Slave nicht von sich aus auf den Bus senden darf, sondern nur wenn der Busmaster ihn auffordert, und dann hat er ein kleines Zeitfenster innerhalb dessen er antworten muß, danach darf er nicht mehr senden. Deshalb muß man hier die Slaves reihum nacheinander ansprechen und es reicht eine Instanz des Modbus-Master-Bausteins für alle Slaves.

Harald
 
Zuletzt bearbeitet:
Bei Modbus RTU über z.B. RS485 MUSS man warten bis der Slave geantwortet hat bevor man den nächsten anspricht, weil der Slave nicht von sich aus auf den Bus senden darf, sondern nur wenn der Busmaster ihn auffordert, und dann hat er ein kleines Zeitfenster innerhalb dessen er antworten muß, danach darf er nicht mehr senden. Deshalb muß man hier die Slaves reihum nacheinander ansprechen und es reicht eine Instanz des Modbus-Master-Bausteins für alle Slaves.

Ok., dann hat mein Versuch mit mehreren Instanzen von FB_MODBUS_MASTER wohl nur funktioniert, weil ich im 5sec Abstand gelesen hab, damit ich im Status eine Chance hab was zu sehen.
Das würde auch meine Erwartung treffen, dass das irgenwann ohne einen Schiedrichter auf eine Kollision hinausläuft.
 
Es geht um ModBus RTU über RS 485 Schnittstelle
Da darf immer nur 1 Kommunikationsauftrag gleichzeitig aktiv sein. Also entweder die Auftragsparameter an der selben MB-Baustein-Instanz multiplexen, oder mehrere (z.B. vorbereitete) MB-Baustein-Aufrufe so steuern, daß immer nur einer aktiv ist.

Ich mache das nach der ersten Variante, ich bearbeite alle Slaves mit der selben MB-Instanz und mutiplexe die Auftragsparameter für jeden Auftrag.

Harald
 
Zurück
Oben