WAGO 750-841 MODBUS Adressierung eines kompletten Moduls

Hallo,

ich habe einen 750-841 mit einer 750-501 (2 Ausgänge).

750-501 (Modbus Adresse 512 und 513)

Die Kommunikation mit IP-Symcon funktioniert bereits, wenn ich jeweils ein Modbus Gerät mit der Adresse 512 und 513 anlegen.

Nun kommt meine Frage:
Ich würde gerne das komplette Ausgangsmodul (in diesem Fall 2 Kanäle) mit einem Befehl (ModBus_WriteCoil(48639 /[ModBus Device]/, TRUE):wink: ansteuern.

Gibt es hierfür eine Lösung?

Viele Grüße

Möglichkeit 1: Du baust in Symcon ein script, welches doch beide Modbus Adressen setzt.
Dann hast du die SPS als reinen Hardwarekoppler.

Möglichkeit 2: Du nutzt die Modbusadressen ‚Merker‘ des Programms und schreibst in der SPS ein Programm, welches den einen Merker mit zwei Ausgängen verbindet.

Das ist schon klar, jedoch wollte ich wissen, ob man vielleicht die Wago-Module auch bitweise ansprechen kann,

Jetzt habe ich verstanden, was du vor hast. Das ist auch möglich. Jedoch etwas anders, als du dir das vmtl bisher vorstellst.
Modbus kennt auch Wörter [16bit] - ggf. in Symcon also auch 16bit INT ohne Vorzeichen genannt.

Wenn ich das richtig in Erinnerung habe, überlagern sich die BEZEICHNUNGEN, sodass Wort 512 die Coils 512 bis 527 enthält. An jeder Bit Position hast du also einen Ausgangskanal. Die Zählung schließt dabei ALLE Ausgänge 1 bis 16 (ggf. verteilt über mehrere Karten) mit ein. Coil 528 liegt auf Word 513.0

Jetzt kannst du dir folgendes Bitmuster vorstellen:
|Word
|
|512.0
|512.1
|512.2
|512.3
|512.4
|512.5
|512.6
|512.7
|512.8
|512.9
|512.10
|512.11
|512.12
|512.13
|512.14
|512.15
|
|Coil
|512
|513
|514
|515
||||||||||||527
|
|Integer Berechnung
|2^15
32.768
|2^14
16.384
||||||||||||2^2
4
|2^1
2
|2^0
1
|

Da das ganze gerade aus meiner Erinnerung kommt, könnte es auch sein, dass die Integer Zuordnung genau gespiegelt ist. Sodass du für 512 = 2^0 = 1 und 513 = 2^1=2 und somit in Summe 3 hast.

Wenn du jetzt Modbus Coil 512 und 513 setzen möchtest, sendest du auf Word 512 = 49.152

Das Problem, was du jetzt hast: Coil 514 bis 527 sind jetzt wieder aus. Wenn du das verhindern möchtest, musst du deren Wert natürlich auch noch entsprechend ihres aktuellen Stands dazurechnen.

Bei Änderungen würde ich eher Coils schreiben. Wobei das komplette Verschieben von Wörtern allerdings Sinn ergibt, ist das Auslesen der Anlage. Ich bin dabei ein Modul zu entwickeln, welches auf einen Schlag ca. 15 Wörter -> ca 240 Bit abfragt. Das reicht also aus, um in einem typischen Wohngebäude alle relevanten Werte aufeinmal abzufragen.
IP-Symcon blockiert sich irgendwann selbst bei den Abfragen, wenn man jedes Coil einzeln abfragen will.

Hallo Tobias,

genau das will ich, jedoch ist es mir ehrlich gesagt etwas zu hoch.

Ich habe mir bereits über CoDeSyS ein Programm erstellt, bei dem über einen Merker z.B. alle Ausgänge eingeschaltet werden.
Nachteil ist jedoch, dass ich nachdem ein Programm in der Wago hochgeladen wurde, keine Ausgänge mehr manuel über Coil
mit IPS geschaltet werden können.

Wie kann ich denn ein Word mit 16 Bit über IPS zum Wago Controller schicken, um dabei z.B. 2 Ausgänge mit einem Befehl
zu schalten?

Leider habe ich erst den Wago Controller in Betrieb genommen und kenne mich nicht wirklich damit gut aus.

Ich hatte nun noch eine Idee. Ich schreibe über CoDeSyS ein Programm, welches einen Merker mit 16 Bits abfragt und nach dem
Bitmuster schaltet.

Mein Favorit wäre allerdings, dass ich den Wago Controller ohne CoDeSyS Programm betreibe und auch somit voll Zugriff auf jeden
Ausgang über ein einzelnes Bit habe.

Würde mich freuen, wenn Du mir ein Beispiel für die Ansteuerung über IPS mit einem „leeren“ Wago Controller schicken könntest.

Vielen Dank für Deine Nachricht.

Bye Bernd

Das geht doch mit dem oben geschriebenen. Du lässt den Controller leer und schreibst den entsprechenden Word Merker.

Hallo, hab da eine Frage
Wie schnell hintereinander kann man eigentlich ein word abfragen? Ca 1Sekunde oda?
Lg

Gesendet von meinem SM-M205FN mit Tapatalk

Ich habe mir ein Symcon Modul geschrieben, welches ca. alle 100ms 8 Wörter (also 124 bit) abfragt. Das funktioniert sehr gut und zuverlässig. Symcon müsste das nativ auch hinbekommen. Sobald es aber deutlich mehr Anfragen werden, läuft der interne FIFO voll. Daher ist es effizienter, 8 Wörter statt 124 Coils abzufragen.

Danke für die Rückmeldung

Hast du sonst auch noch etwas was du poolst? Wenn du die 8Wörter alle 100ms abfragst kannst du dann zwischendurch auch noch abfragen machen? Und schalten?
8Wörter ist eh schon ne Menge.

Gesendet von meinem SM-M205FN mit Tapatalk

Hallo,
die SPS überträgt maximal 4 Wörter (also 4x 16bit = 64) in einer Anfrage.

das Modbus Paket für 4 Wörter hat 16 Bytes. Wenn wir das jetzt über TCP (Ethernet) übertragen sind das 30 Bytes (mit Header, etc.).

Jetzt haben wir eine maximal 10Mbit/s Verbindung (Netzwerkinterface der SPS). Das hieße also, das wir 10 Mbit/s -> 1.250.000 bytes/s auf dem Interface übertragen können. Oder anders ausgedrückt, dieses Datenpaket passt ca. 42 tausend mal auf das Interface.

Jetzt muss noch die Anfrage dazu idr. 8 bytes + Header. Also 22 bytes. Diese 30+22 bytes benötigen also ca. 41 µs. Kommt nochmal ca. 0,5µs Propagation Delay (je Hop, sagen wir für Hin+Rück bei einem Switch 4x) sowie die Switch Zeit ca. 2x 15µs. So kommen wir auf eine typische Paketlaufzeit inkl. Antwort von ca. 73µs. Wenn die SPS jetzt zum Antworten tatsächlich 1ms bräuchte (was sie vmtl nicht braucht) wären wir bei 1073µs. Du siehst, dass die Paketgröße über Netzwerk keinen entscheidenden Einfluss hat.

Die Wago 881 hat 15 gleichzeitige Modbus Zugänge. Daher kann man über weitere Interfaces noch deutlich paralellisieren. Wenn wir jetzt „wie blöde“ Anfragen an die SPS senden, könnte sie die 2. Anfrage schon gleichzeitig zur 1. Anfrage beantworten.

Dummerweise setzt Symcon die Anfragen hintereinander. Und das kleinst mögliche Paket mit Modbus ist 1 Word (denn weniger Daten kann die SPS nicht antworten, selbst wenn wir nur ein Coil Abfragen). Also wären das statt 52 Bytes noch 8 (Anfrage Modbus) + 14 (Anfrage Header) + 14 (Antwort Header) + 8 (Antwort Modbus Header) + 2 (Antwort Modbus Daten) = 45 bytes (36µs) zzgl. Netzwerkzeit + SPS dann 1068µs. Und das für nur 1 bit.

Wenn ich jetzt also die 124 bit brauche, sind das mit meiner Lösung 2 Anfragen, ohne aufeinander Warten. Also im besten fall ca. 1000µs + 2x 73µs = 1146µs. Also könnte ich theoretisch ca 870 Anfragen/Sekunde stellen.

Wenn ich das mit Coils und Symcon mache, habe ich im allerbesten Fall die Möglichkeit ca. 870 Coils/Sekunde bzw. bei 124 Stück diese 7 mal/Sekunde bzw. alle 142ms abzufragen.
Bei dieser Lösung muss ich allerdings noch Platz für Schreibanfragen, etc. über lassen. Zudem braucht Symcon Verarbeitungszeit. Ich habe in einem Produktivsystem mit Symcon und einzel Coils es nicht geschafft, unter 1600ms bei 100 Coils zu kommen.

Nachtrag: Die SPS benötigt für eine Antwort per Modbus bis zu 15ms. In einem ggf. verfügbaren Fast Modus nurnoch 1ms.
Das wären also in der normalen Methode (Coil Weise) 15068µs. ≈ 66,36 Anfragen je Sekunde. Also ca. 2 Sekunden Rundlaufzeit. -> Das deckt sich auch eher mit der o.g. Angabe, 100 Coils in 1600ms.

Bei 4 Wort je Anfrage: 15073µ ≈ 66,34 Anfragen je Sekunde. 2 Anfragen/124Bit -> 33 Anfragen -> Zykluszeit 30ms möglich. Bzw. man benötigt nurnoch 1,9% der Zeit.

Hi tobiasr,

kannst Du dein Modul mal zur Verfügung stellen? Würd mich auch interessieren.

Vielen Dank im Voraus und Grüße,
dfhome