+ Antworten
Seite 1 von 3 1 2 3 LetzteLetzte
Ergebnis 1 bis 10 von 22
  1. #1
    Registriert seit
    Oct 2010
    Beiträge
    8

    Standard Modbus Bits auslesen.

    Hallo allerseits.

    Mein erster Thread und ich muss zugeben, dass ich schon fast verzweifle...

    Ich setze einen Wago-Controller 750-841 mit darauf laufendem Programm ein.

    Die Kommunikation läuft.

    Über digitale Eingänge bekomme ich ca. 55 Fehlermeldungen in den Wago-Controller.

    Diese laufen über die Eingangsworte %IW4 bis %IW7 rein.

    Nun habe ich schon wirklich vieles versucht, um die einzelnen Bits in diesen Wörtern auszulesen und mit individuellen Fehlermeldungen zu belegen:

    a) erfolglos: Das ganze Wort %IW4 auf %MW0 auslesen und aus dem String "0000 0000 0000 0100" die Bits mit Wert 1 auslesen und als Alarm anzeigen.

    b) erfolglos: Eingangsbit %IX4.0 nach Konversion von "Bool_to_Word" auf %MW0 schreiben und dann Bit oder testweise auch mal Wort 12288 auslesen.

    c) erfolglos: Eingangsbit %IX4.0 auf %MX0.0 schreiben und dann Bit 12288 auslesen.

    d)erfolglos: Eingangsbit %IX4.0 auf %MX0.0 schreiben und dann Bit 12289 auslesen.

    e) erfolglos: Eingangsbit %IX4.0 auf %MX0.1 schreiben und dann Bit 12288 auslesen.

    f) erfolglos: Eingangsbit %IX4.0 auf %MX0.1 schreiben und dann Bit 12289 auslesen.

    So, das waren noch LANGE nicht alle Wege, die ich jetzt beschritten habe, aber es klappt NICHTS.

    Langsam bin ich gefrustet.

    Daher noch mal meine Frage: wie mache ich es möglichst elegant, die einzelnen Bits auszulesen und bei Aktivierung eine Meldung auftauchen zu lassen.
    Ich wollte es eigentlich gerne in ganzen Wörtern übergeben um nicht so viel Speicher zu verschwenden, aber mittleerweile wäre ein ganzes Wort für ein BIT auch akzeptabel.

    Hauptsache, es läuft irgendwie mal.

    Gruss

    Zaphod

  2. #2
    Registriert seit
    Sep 2005
    Ort
    Stade
    Beiträge
    6,578

    Hallo Zaphod und willkommen im Forum.

    Bin mir nicht sicher ob ich dein Problem richtig verstanden hab. Hilft dir dieser Schnipsel weiter?

    PHP-Code:
      if (getBitState(62))
        echo 
    "gesetzt";
      else
        echo 
    "nicht gesetzt";


      function 
    getBitState($Value$BitNo)
      {
        return ((
    $Value pow(2$BitNo)) != 0);
      } 

    Gruß,

    Toni


  3. #3
    Registriert seit
    Jul 2008
    Beiträge
    311

    Hallo Zaphod,

    also wenn %IW4 auf %MW0 geschrieben wird, dann liegt der Wert definitiv auf der Modbus-Adresse 12288 (16Bit Word/SmallInt).

    Hast Du evtl. %MW0 oder %MD0 noch an anderer Stelle in Verwendung?

    Falls nicht, dann gibt möglicherweise doch Probleme mit der Kommunikation. Welche Einstellungen hast Du denn unter IPS? Ist der Port 502 für den Wago Client Socket geöffnet und beim Splitter Modbus TCP ausgewählt?

    Schöne Grüße
    Roland

    PS: Screenshots helfen auch weiter...
    IPS 4.x | Wago 881 | 1-Wire | XBee | 22" Touchscreens | iPad | IRTrans | Harmony One

  4. #4
    Registriert seit
    Oct 2010
    Beiträge
    8

    Guten Morgen die Herren,

    vielen Dank erst mal für die Antworten.

    @Tonic1024: Wenn ich das richtig sehe, wertet Dein Schnipsel aus, ob ein Bit gesetzt ist, oder nicht.
    Wenn ich das machen kann und das Bit auch im Wort (oder Dword) einzeln als gesetzt oder nicht gesetzt herausfinden kann, wäre mir schon geholfen.
    Da ich das bisher nicht kann, hätte ich für jedes einzelne gesetzte Bit ein ganzes Word "verschwendet".

    Ich muss zugeben, dass ich noch ein etwas planloser IP-Symcon Anfänger bin. Wo würde man dieses Script wie einbinden?

    @MTEC: %MW0 wird nur an einer einzigen Stelle beschrieben. Im Programmiersystem für den Wago-Controller sehe ich auch die korrekte Zuordnung und Belegung der Bits.
    Die Kommunikation ist auch OK. Das hat sich schon gezeigt, als ich versehentlich auf ein falsches-Wago-Gerät verwiesen habe.


    Ich weiss einfach nicht, warum ein Word, in dem nur ein BIT true sein kann, nicht sauber angezeigt wird.
    Dies ist auch nicht mehr nötig, wenn ich eine Funktion hätte, mit der ich jede Bit-Stelle eines Words auch Zustand überprüfen kann um so gezielt weitere Script-Aktionen auszulösen.

    Gibt es was, wo man die per Modbus eingelesenen Rohdaten direkt live einsehen kann?


    Gruss

    Zaphod
    Geändert von Zaphod (25.10.10 um 09:32 Uhr)

  5. #5
    Registriert seit
    Mar 2010
    Beiträge
    77

    Standard weitere Unterlagen

    Hallo zaphod,

    anbei Unterlagen vom Wago Workshop in Nidda, evtl. helfen die ein wenig weiter.
    Angehängte Dateien Angehängte Dateien
    Gruß
    Joachim

  6. #6
    Registriert seit
    Sep 2007
    Beiträge
    253

    Hallo,

    ich habe so etwas ähnliches mit einigen Statusvariablen meiner Heizung gemacht.

    Ich speichere die Statusinformationen in der Merkeradresse MW200 (12488)
    Die einzelnen Bits kann man wie du schon festgestellt hast mit MX200.Bit schreiben bzw.lesen.

    Man kann die Merkeradressen in IPS nur Wordweise auslesen bzw. schreiben. (Ist jedenfalls bei mir so).
    Für ein Byte oder ein Bit würde immer mindestens ein Word verbraucht werden.

    Ich lesen also die 12488 als Integervariable (ohne Vorzeichen) aus --> siehe Screenshot

    Diese frage ich wiederum Bitweise ab um die unterschiedlichen Statusinformationen zu erhalten.

    Funktioniert bei mir ohne Probleme.

    Als Anhang noch ein paar Screenshots um die Sache noch etwas mehr zu verwirren.

    Ciao
    René
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	SPS_Globale Adressen.png 
Hits:	1770 
Größe:	104.4 KB 
ID:	9720   Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Modbus Variable in IPS.png 
Hits:	1464 
Größe:	25.6 KB 
ID:	9721   Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Modbus Status Variable.png 
Hits:	1248 
Größe:	32.5 KB 
ID:	9722   Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Funktionen zur Bitzerlegung.png 
Hits:	1390 
Größe:	46.4 KB 
ID:	9723  
    IPS 5.0;3x WAGO 841/881; FS20; FHT; Homematic; HMS; 1-Wire; EnOcean; DMX;KNX; 3xHMI KINCO; Viessmann Regelung <--> WAGO; Thermokon Thanos; SMA SI 4.4M SB5000TL-21; Notstromdiesel 5 kW

  7. #7
    Registriert seit
    Jul 2008
    Beiträge
    311

    Zitat Zitat von Zaphod Beitrag anzeigen
    Ich weiss einfach nicht, warum ein Word, in dem nur ein BIT true sein kann, nicht sauber angezeigt wird.
    Hallo Zaphod,

    der Bit- bzw. Word-Zugriff von IPS auf den Wago-Controller geht definitiv problemlos, aber ohne nähere Informationen wird Dir keiner wirklich sinnvoll weiterhelfen können.
    Mach doch mal ein paar Screenshots von Deinen Einstellungen unter IPS. (Modbus-Modul, Modbus RTU/TCP Splitter und Wago Client-Socket)

    Zitat Zitat von Zaphod Beitrag anzeigen
    Gibt es was, wo man die per Modbus eingelesenen Rohdaten direkt live einsehen kann?
    Die angezeigten Werte innerhalb von IPS sind mehr oder weniger Modbus-"Rohdaten" - mehr gibt es nicht...

    Zitat Zitat von rene Beitrag anzeigen
    Man kann die Merkeradressen in IPS nur Wordweise auslesen bzw. schreiben. (Ist jedenfalls bei mir so).
    Für ein Byte oder ein Bit würde immer mindestens ein Word verbraucht werden.
    Hallo René,

    ein bitweiser Zugriff auf Modbus-Adressen ist natürlich auch mit IPS möglich.
    MW200 = Modbus 12488 (Register -> 16Bit Datentyp)
    MX200.0 = Modbus 15488 (Coil -> 1Bit Datentyp)

    Schöne Grüße
    Roland
    IPS 4.x | Wago 881 | 1-Wire | XBee | 22" Touchscreens | iPad | IRTrans | Harmony One

  8. #8
    Registriert seit
    Sep 2007
    Beiträge
    253

    @Roland

    Danke für den Hinweis mit dem weiteren Adressbereich um die Daten bitweise auslesen zu können. Das wusste ich bis jetzt noch nicht. Steht aber bestimmt irgendwo in der Wagon Doku. Man ist halt einfach immer zu faul zu lesen.

    Ciao
    Rene
    IPS 5.0;3x WAGO 841/881; FS20; FHT; Homematic; HMS; 1-Wire; EnOcean; DMX;KNX; 3xHMI KINCO; Viessmann Regelung <--> WAGO; Thermokon Thanos; SMA SI 4.4M SB5000TL-21; Notstromdiesel 5 kW

  9. #9
    Registriert seit
    Oct 2010
    Beiträge
    8

    Guten Morgen, Ihr Helfer!

    Tausend Dankd für die verschiedenen Ansätze mein (Verständnis-)Problem etwas zu erhellen.

    @boXer: Die Unterlagen sind Klasse. Danke. Anhand der Grafik auf S. 21 habe sogar ich verstanden, dass die Adressierung im Modbus sich anhand der Funktionscodes (die ja durch Angabe der zu lesenden Variable definiert werden) ändert.

    @rene: Genau so hatte ich es mir gedacht, bis ich hier die Info erhalten habe, dass man auch gezielt einzeln lesen kann. Aber so ein CFodeschnipsel ist immer toll, um weiter zu lernen. Vielen Dank.

    @MTec: Vielen Dank auch für Deinen Beitrag, auch wenn ich noch Fragen habe. :-)

    Zitat:
    Zitat von Zaphod Beitrag anzeigen
    Ich weiss einfach nicht, warum ein Word, in dem nur ein BIT true sein kann, nicht sauber angezeigt wird.
    Hallo Zaphod,

    der Bit- bzw. Word-Zugriff von IPS auf den Wago-Controller geht definitiv problemlos, aber ohne nähere Informationen wird Dir keiner wirklich sinnvoll weiterhelfen können.
    Mach doch mal ein paar Screenshots von Deinen Einstellungen unter IPS. (Modbus-Modul, Modbus RTU/TCP Splitter und Wago Client-Socket)
    Sicher geht der Zugriff problemlos. Die "konfuse" Fragestellung lag nur an meiner falschen Auffassung. Aber als Du schriebst, waren schon zwei sinnvolle Antworten gepostet worden.


    ein bitweiser Zugriff auf Modbus-Adressen ist natürlich auch mit IPS möglich.
    MW200 = Modbus 12488 (Register -> 16Bit Datentyp)
    MX200.0 = Modbus 15488 (Coil -> 1Bit Datentyp)
    Ähh, das habe ich jetzt noch nicht ganz verstanden. Warum ändert sich die Adresse von 12488 auf 15488?
    Ist das eine festgelegte Modbus-Definition?
    Oder eine von Wago?
    Wo hätte ich das finden können/müssen?
    Wäre dann MX200.1 = Modbus 15489 ?





    Ich finde es super, dass ich so schnell so viele kompetente Antworten bekommen habe mit mehr als nur einem Lösungsansatz.


    Gruss

    Zaphod

  10. #10
    Registriert seit
    Mar 2010
    Beiträge
    77

    Hallo Zaphod
    Ähh, das habe ich jetzt noch nicht ganz verstanden. Warum ändert sich die Adresse von 12488 auf 15488?
    Ist das eine festgelegte Modbus-Definition?
    Oder eine von Wago?
    Wo hätte ich das finden können/müssen?
    Wäre dann MX200.1 = Modbus 15489 ?
    Richtig MX200.1 ist Modbusadresse 15489, dies ergibt sich durch das Prozessabbild der SPS. Die Modbusadressen wiederholen sich. Die Unterscheidung erfolgt durch die Abfrage als Word (Register) oder Bit (Coil). Schau Dir doch bitte mal die Seite 20-21 des PDF an, dort ist der Zusammenhang in einer Tabelle aufgezeigt.
    Gruß
    Joachim

Ähnliche Themen

  1. Moeller SPS Mit Modbus RTU
    Von Professorakiera im Forum SPS Automatisierungstechnik
    Antworten: 4
    Letzter Beitrag: 10.04.11, 17:35
  2. Modbus RTU einrichten
    Von sab4pv im Forum SPS Automatisierungstechnik
    Antworten: 1
    Letzter Beitrag: 21.03.10, 18:36
  3. Modbus Probleme
    Von Herr-W im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 3
    Letzter Beitrag: 15.11.09, 10:15
  4. Wago: UDINT über Modbus auslesen
    Von dtm im Forum SPS Automatisierungstechnik
    Antworten: 17
    Letzter Beitrag: 21.10.09, 08:05
  5. ModBus mit IP-Symcon
    Von zkra im Forum Allgemeine Diskussion
    Antworten: 2
    Letzter Beitrag: 15.11.08, 10:45