+ Antworten
Ergebnis 1 bis 8 von 8
  1. #1
    Registriert seit
    Feb 2012
    Beiträge
    46

    Standard Modbus RTU & Variablenaktualisierung

    Hallo Zusammen,

    ich betreibe Modbus RTU über einen USB/RS485 Adapter. Da ich Probleme habe mit Timeouts von Scripten, die Manuell die Instanzen für einen Lesevorgang Triggern, suche ich gerade den Fehler. Dabei lese ich zum Testen sekündlich eine einzige Instanz/Variable aus (Die anderen Instanzen der Geräte habe ich testweise deaktiviert - durch ein sehr langes Auslese-Intervall).
    Dabei fällt mir auf dass, wenn ein Wert reinkommt der identisch ist zum Inhalt der Variable im IPS, dann wird die Variable nicht aktualisiert, bzw. nur sporadisch aktualisiert, ca. pro 2 Minuten ungefähr 1x. Dies sehe ich an der Aktualisierungs-Uhrzeit im Objektbaum. Die Werte kann ich im Debug-Modus in der Schnittstelle und im Cutter sekündlich sehen. Diese passen auch, habe ich mit dem Hex-Rechner nachgerechnet.
    Die Frage hier ist: Bug oder Feature?
    Frage am Rande: Kann man das Automatische Auslesen bei einer ModBus-RTU Instanz richtig deaktivieren? Das Ausleseintervall hochzustellen auf 9999999ms gefällt mir nicht...

    Gruß
    Bikasso

  2. #2
    Registriert seit
    Sep 2014
    Ort
    Limeshain (Hessen)
    Beiträge
    5,326

    Moin!

    Ob es in diesem Fall Absicht ist, dass die Variable nur aktualisiert wird wenn der Wert sich ändert, kann ich dir nicht sagen. Aber es ist besser so!

    Wenn ich Skripte/Module mache, sehe ich zu, dass Variablen nur geändert/geschrieben werden, wenn der Wert sich ändert. Spart "Schreibvorgänge" und Log-Einträge.

    Von daher würde ich sagen > Feature

    Grüße,
    Chris
    IP-Symcon Module >> www.bayaro.net << Verfügbare Module: BatterieMonitor, BundesligaTabelle, Enigma2BY, HeizölPreise, Helios, Horoskop, HostMonitor, IPSInformations, MELCloud, Müllabfuhr, PJLink, RSS, TankerkönigSpritpreise, xREL
    IPS Unlimited, ~1200 Scripte, ~7000 Variablen

  3. #3
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    22,145

    0 ist aus.

    Und wir schreiben bei keiner Änderung nur 1x pro Minute den gleichen Wert als "KeepAlive" in die Variable.

    paresy

  4. #4
    Registriert seit
    Feb 2012
    Beiträge
    46

    Hallo,
    danke für die Antworten, hat mir sehr weitergeholfen.
    Ich habe nun nach einiger Zeit auch den "Fehler" gefunden. Ich hatte sporadische Timeouts bei Scripten die Mod-Bus-RTU Geräte auslesen (2 Geräte auf einem Bus). NallChan hatte mich vor einiger Zeit drauf hingewiesen dass IPS mit 2 Geräte an einem Strang Probleme hat. Ich konnte ihm anfangs nicht zustimmen, da es bei mir scheinbar einwandfrei funktionierte. Bei genauerem Hinsehen hab ich dann doch bemerkt dass etwas "im Busch" ist, und Handlungsbedarf besteht. Ich frage auf das damalige Anraten von NallChan mit einem Script alle Instanzen aller Geräte nacheinander ab, um gleichzeitige Abfragen auf dem Bus zu vermeiden. Leider ergab dies auch Timeouts. Ich hatte anfangs die Hardware unter Verdacht, die ich auch ausgetauscht habe, aber es liegt an IPS selbst:
    Ich habe nun rausgefunden dass wenn ich im Script zuerst eine Instanz von Adresse 1 und danach eine Instanz von Adresse 2 abfrage gibt's einen Timeout. Wenn ich mit allerdings mit usleep 100ms zwischen den Abfragen warte funktioniert alles einwandfrei.
    Jetzt weiß ich wie ich es anpacken muss dass ich gescheite Werte bekomme, das sieht jetzt für mich aber nach einem Bug aus...

    Hier noch mein Code (ohne die Zeile "usleep(100000);" funktioniert er nicht):

    PHP-Code:
    ModBus_RequestRead(44083 /*[Energie\Wechselrichter\Rohdaten\WR1 Leistung Skalierungsfaktor]*/);
    $PotenzVorher GetValue(55417 /*[Energie\Wechselrichter\Rohdaten\WR1 Leistung Skalierungsfaktor\Value]*/   );
    ModBus_RequestRead(30469 /*[Energie\Wechselrichter\Rohdaten\WR1 Leistung]*/);
    $Wert_Original GetValue(54417 /*[Energie\Wechselrichter\Rohdaten\WR1 Leistung\Value]*/  );
    ModBus_RequestRead(44083 /*[Energie\Wechselrichter\Rohdaten\WR1 Leistung Skalierungsfaktor]*/);
    $PotenzNachher GetValue(55417 /*[Energie\Wechselrichter\Rohdaten\WR1 Leistung Skalierungsfaktor\Value]*/   );

    $Wert_Neu_WR1 0;
    if (
    $Wert_Original == ){
       
    SetValue (45860 /*[Energie\Wechselrichter\WR1 Leistung]*/  0);
    }else{
    if (
    $PotenzVorher == $PotenzNachher) {
                                   
    $Wert_Neu_WR1 round$Wert_Original pow(10,$PotenzNachher)*0.001,2);
      
    SetValue (45860 /*[Energie\Wechselrichter\WR1 Leistung]*/   $Wert_Neu_WR1);
                    }
    }

    usleep(100000);

    ModBus_RequestRead(53281 /*[Energie\Wechselrichter\Rohdaten\WR2 Leistung Skalierungsfaktor]*/);
    $PotenzVorher GetValue(10019 /*[Energie\Wechselrichter\Rohdaten\WR2 Leistung Skalierungsfaktor\Value]*/   );
    ModBus_RequestRead(46019 /*[Energie\Wechselrichter\Rohdaten\WR2 Leistung]*/);
    $Wert_Original GetValue(42431 /*[Energie\Wechselrichter\Rohdaten\WR2 Leistung\Value]*/  );
    ModBus_RequestRead(53281 /*[Energie\Wechselrichter\Rohdaten\WR2 Leistung Skalierungsfaktor]*/);
    $PotenzNachher GetValue(10019 /*[Energie\Wechselrichter\Rohdaten\WR2 Leistung Skalierungsfaktor\Value]*/   );

    $Wert_Neu_WR2 0;
    if (
    $Wert_Original == ){
       
    SetValue (52774 /*[Energie\Wechselrichter\WR2 Leistung]*/  0);
    }else{
    if (
    $PotenzVorher == $PotenzNachher) {
                                   
    $Wert_Neu_WR2 round$Wert_Original pow(10,$PotenzNachher)*0.001,2);
      
    SetValue (52774 /*[Energie\Wechselrichter\WR2 Leistung]*/   $Wert_Neu_WR2);
                    }
    }
    SetValue (12866 /*[Energie\Wechselrichter\PV Leistung gesamt]*/ ,$Wert_Neu_WR1 $Wert_Neu_WR2); 
    Gruß
    Bikasso

  5. #5
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,585

    Inzwischen hat IPS 4 da intern Abhilfe mit mehreren Geräten auf einem Bus.
    Somit solltest du das Script nicht mehr benötigen.
    Stand auch in irgendeinem Changelog
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  6. #6
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    22,145

    Nutzt du bereits IP-Symcon 4.0? Dort sollte das Problem für RTU Geräte eigentlich gelöst sein?

    paresy

  7. #7
    Registriert seit
    Feb 2012
    Beiträge
    46

    Hallo Paresy,

    natürlich nutze ich IPS 4.0 ;-)
    Die genaue Version hab ich nicht zur Hand, aber am 12.03.2016 hab ich ein Update gemacht.

    Gruß
    Bikasso

  8. #8
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    22,145

    Hast du das aktuellste Update der 4.0 mal probiert? Ist der Fehler immer noch aktuell?

    paresy

Ähnliche Themen

  1. Modbus TCP stürzt ab, wenn ein Gerät über Modbus RTU keine Spannung hat
    Von Helmut im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 22
    Letzter Beitrag: 04.06.15, 07:32
  2. Modbus RTU SDM-220
    Von SteffenR im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 5
    Letzter Beitrag: 27.05.15, 18:12
  3. Modbus Problem mit Variablenaktualisierung
    Von wolf61 im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 3
    Letzter Beitrag: 24.10.12, 20:36
  4. Modbus RTU
    Von heizung260 im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 11
    Letzter Beitrag: 06.09.12, 20:55
  5. Modbus RTU einrichten
    Von sab4pv im Forum SPS Automatisierungstechnik
    Antworten: 1
    Letzter Beitrag: 21.03.10, 18:36