Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Node-Red
  5. S7 mit Node Red (node-red-contrib-s7)

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    10
    1
    319

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.5k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.4k

S7 mit Node Red (node-red-contrib-s7)

Geplant Angeheftet Gesperrt Verschoben Node-Red
92 Beiträge 9 Kommentatoren 12.1k Aufrufe 9 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • WalW Wal

    @fu_zhou ,
    wenn du dir die api von node snap7 anschaust gibt es das nicht.
    Die Zykluszeit ist nur die Zeit in was für einen Abstand die Daten von der PLC geholt werden und das macht das Programm das node snap7 nutzt, in node red wird das nicht anders sein.

    edit: habe mir nodes7 angeschaut was node-red-contrib-s7 nutzt, da ist es genauso das es kein poll gibt.
    editedit: Der S7-Adapter und node-red-contrib-s7 machen und nutzen den Poll, nicht node-snap7 und nodes7.

    fu_zhouF Offline
    fu_zhouF Offline
    fu_zhou
    schrieb am zuletzt editiert von fu_zhou
    #51

    @wal Ah okay. Was passiert, wenn man aus dem S7-Adapter Poll-Delay einfach mal rauschmeißt? Wird dann eben so schnell kommuniziert, wie es die S7 gerade schafft? Steht in der snap7 API, dass man sich um den Kommunikationszyklus kümmern muss? Ich habe da nichts explizites gefunden in der API Beschreibung...

    Synology DS920+ VM, S7-315 PN mit ET200S

    WalW 1 Antwort Letzte Antwort
    0
    • fu_zhouF fu_zhou

      @wal Ah okay. Was passiert, wenn man aus dem S7-Adapter Poll-Delay einfach mal rauschmeißt? Wird dann eben so schnell kommuniziert, wie es die S7 gerade schafft? Steht in der snap7 API, dass man sich um den Kommunikationszyklus kümmern muss? Ich habe da nichts explizites gefunden in der API Beschreibung...

      WalW Online
      WalW Online
      Wal
      Developer
      schrieb am zuletzt editiert von
      #52

      @fu_zhou sagte in S7 mit Node Red (node-red-contrib-s7):

      @wal Ah okay. Was passiert, wenn man aus dem S7-Adapter Poll-Delay einfach mal rauschmeißt?

      Schau dir den S7 Adapter an wo/wie der Poll genutzt wird, da möchte ich mich nicht befassen wollen.

      Gruß
      Walter

      DoorIO-Adapter
      wioBrowser-Adapter und wioBrowser

      fu_zhouF 1 Antwort Letzte Antwort
      0
      • WalW Wal

        @fu_zhou sagte in S7 mit Node Red (node-red-contrib-s7):

        @wal Ah okay. Was passiert, wenn man aus dem S7-Adapter Poll-Delay einfach mal rauschmeißt?

        Schau dir den S7 Adapter an wo/wie der Poll genutzt wird, da möchte ich mich nicht befassen wollen.

        fu_zhouF Offline
        fu_zhouF Offline
        fu_zhou
        schrieb am zuletzt editiert von
        #53

        @wal Update:
        Ich habe sporadisch Abweichungen, aber die Werte bleiben im Bereich zwischen -99 und 99:

        2023-12-31 08:21:57.712  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: Abweichung S7.0 DB22.Reserve92
        2023-12-31 08:21:57.712  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: 65
        2023-12-31 08:21:57.713  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: 74
        2023-12-31 08:22:02.458  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: Abweichung S7.0 DB22.Reserve92
        2023-12-31 08:22:02.461  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: 74
        2023-12-31 08:22:02.461  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: -99
        2023-12-31 08:22:02.881  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: Abweichung S7.0 DB22.Reserve92
        2023-12-31 08:22:02.884  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: -91
        2023-12-31 08:22:02.884  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: 33
        2023-12-31 08:22:02.973  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: Abweichung S7.0 DB22.Reserve92
        2023-12-31 08:22:02.974  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: -12
        2023-12-31 08:22:02.974  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: 33
        2023-12-31 08:22:03.085  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: Abweichung S7.0 DB22.Reserve92
        2023-12-31 08:22:03.088  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: 71
        2023-12-31 08:22:03.089  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: -87
        2023-12-31 08:22:04.409  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: Abweichung S7.0 DB22.Reserve92
        2023-12-31 08:22:04.409  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: 33
        2023-12-31 08:22:04.411  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: 78
        2023-12-31 08:22:04.483  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: Abweichung S7.0 DB22.Reserve92
        2023-12-31 08:22:04.483  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: -87
        2023-12-31 08:22:04.484  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: 78
        

        Für mich sieht das so aus, als würde node snap7 zyklisch im 1 Sekunden-Takt schreiben, der S7-Adapter braucht aber ab und zu länger, den Wert zu lesen und dann wird die Abweichung erkannt. Wie würdest du das interpretieren? Ich mache mal ne neue Instanz mit nur einem Wert und lass das Script damit arbeiten.

        Synology DS920+ VM, S7-315 PN mit ET200S

        WalW 1 Antwort Letzte Antwort
        0
        • fu_zhouF fu_zhou

          @wal Update:
          Ich habe sporadisch Abweichungen, aber die Werte bleiben im Bereich zwischen -99 und 99:

          2023-12-31 08:21:57.712  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: Abweichung S7.0 DB22.Reserve92
          2023-12-31 08:21:57.712  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: 65
          2023-12-31 08:21:57.713  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: 74
          2023-12-31 08:22:02.458  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: Abweichung S7.0 DB22.Reserve92
          2023-12-31 08:22:02.461  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: 74
          2023-12-31 08:22:02.461  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: -99
          2023-12-31 08:22:02.881  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: Abweichung S7.0 DB22.Reserve92
          2023-12-31 08:22:02.884  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: -91
          2023-12-31 08:22:02.884  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: 33
          2023-12-31 08:22:02.973  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: Abweichung S7.0 DB22.Reserve92
          2023-12-31 08:22:02.974  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: -12
          2023-12-31 08:22:02.974  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: 33
          2023-12-31 08:22:03.085  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: Abweichung S7.0 DB22.Reserve92
          2023-12-31 08:22:03.088  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: 71
          2023-12-31 08:22:03.089  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: -87
          2023-12-31 08:22:04.409  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: Abweichung S7.0 DB22.Reserve92
          2023-12-31 08:22:04.409  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: 33
          2023-12-31 08:22:04.411  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: 78
          2023-12-31 08:22:04.483  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: Abweichung S7.0 DB22.Reserve92
          2023-12-31 08:22:04.483  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: -87
          2023-12-31 08:22:04.484  - javascript.0 (35683) script.js.zz_Test_WIP.S7_Komm_Test_JS: 78
          

          Für mich sieht das so aus, als würde node snap7 zyklisch im 1 Sekunden-Takt schreiben, der S7-Adapter braucht aber ab und zu länger, den Wert zu lesen und dann wird die Abweichung erkannt. Wie würdest du das interpretieren? Ich mache mal ne neue Instanz mit nur einem Wert und lass das Script damit arbeiten.

          WalW Online
          WalW Online
          Wal
          Developer
          schrieb am zuletzt editiert von
          #54

          @fu_zhou ,
          diese Abweichungen sind unwichtig da wie du schon feststellen konntest nur Zeit Überschneidungen sind.
          Diese Überschneidungen habe ich nur bei zu hoher Pollzeit oder ich hatte vergessen bei dem Wert den ich schreibe den Haken bei Abfrage in der Adapter Config zu entfernen.
          abfrage.jpg

          Gruß
          Walter

          DoorIO-Adapter
          wioBrowser-Adapter und wioBrowser

          fu_zhouF 1 Antwort Letzte Antwort
          0
          • WalW Wal

            @fu_zhou ,
            diese Abweichungen sind unwichtig da wie du schon feststellen konntest nur Zeit Überschneidungen sind.
            Diese Überschneidungen habe ich nur bei zu hoher Pollzeit oder ich hatte vergessen bei dem Wert den ich schreibe den Haken bei Abfrage in der Adapter Config zu entfernen.
            abfrage.jpg

            fu_zhouF Offline
            fu_zhouF Offline
            fu_zhou
            schrieb am zuletzt editiert von
            #55

            @wal Prost Neujahr! Eine Idee habe ich noch: Ich schreibe die Zufallszahl -99 - 99 mit Blockly in ein User-Objekt und das Script schickt den Wert dann direkt über node snap 7 an die S7.
            Kannst du mir helfen, die Zeile

             buf.writeFloatBE(parseInt(Math.floor(Math.random() * 198 - 99), 10), 0, 4);
            

            so anzupassen, dass anstatt der Zufallszahl der Wert vom Objekt

            javascript.0.S7_Komm_Test.real
            

            geschrieben wird?

            Ich will testen, on nicht doch Blockly da was verbockt...

            Synology DS920+ VM, S7-315 PN mit ET200S

            WalW 1 Antwort Letzte Antwort
            0
            • fu_zhouF fu_zhou

              @wal Prost Neujahr! Eine Idee habe ich noch: Ich schreibe die Zufallszahl -99 - 99 mit Blockly in ein User-Objekt und das Script schickt den Wert dann direkt über node snap 7 an die S7.
              Kannst du mir helfen, die Zeile

               buf.writeFloatBE(parseInt(Math.floor(Math.random() * 198 - 99), 10), 0, 4);
              

              so anzupassen, dass anstatt der Zufallszahl der Wert vom Objekt

              javascript.0.S7_Komm_Test.real
              

              geschrieben wird?

              Ich will testen, on nicht doch Blockly da was verbockt...

              WalW Online
              WalW Online
              Wal
              Developer
              schrieb am zuletzt editiert von
              #56

              @fu_zhou ,

              buf.writeFloatBE(getState('javascript.0.S7_Komm_Test.real').val);
              

              Gruß
              Walter

              DoorIO-Adapter
              wioBrowser-Adapter und wioBrowser

              fu_zhouF 2 Antworten Letzte Antwort
              0
              • WalW Wal

                @fu_zhou ,

                buf.writeFloatBE(getState('javascript.0.S7_Komm_Test.real').val);
                
                fu_zhouF Offline
                fu_zhouF Offline
                fu_zhou
                schrieb am zuletzt editiert von fu_zhou
                #57

                @wal Was seit Neujahr passiert ist:

                • Alle Real-Werte, die ich schreibe, sind bei mir im DB22
                • Ich habe die S7.1 Instanz angelegt und den DB22 aus der S7.0 dort hin verschoben
                • Regelmäßig schreibe ich nur 4 Real-Werte in die S7 (DB22)
                • Diese Werte schreibe ich jetzt nicht mehr direkt aus Blockly über den Adapter, sondern lege sie mit Blockly in 4 User-Objekten (javascript.0.PV.Netzleistung, javascript.0.PV.Batterieleistung, javascript.0.Ansteuerung_Thyro.AW128_LIMIT, javascript.0.Ansteuerung_Thyro.AW128_LADE_SOLL) ab, welche ich dann regelmäßig über Javascript über node snap 7 in die S7 schreibe (aktuell 200ms Intervall):
                var snap7 = require('node-snap7');
                let buf;
                 
                var s7client = new snap7.S7Client();
                s7client.ConnectTo('1.1.1.1', 0, 2, function(err) {
                    if(err)
                        return console.log(' >> Connection failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                });
                
                function anS7senden() {
                    buf = Buffer.alloc(4);
                    buf.writeFloatBE(getState('javascript.0.PV.Netzleistung').val);
                
                    s7client.DBWrite(22, 336, 4, buf, function(err, res) {
                    if(err)
                        return console.log(' >> DBWrite failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                    });
                
                    buf = Buffer.alloc(4);
                    buf.writeFloatBE(getState('javascript.0.PV.Batterieleistung').val);
                
                    s7client.DBWrite(22, 352, 4, buf, function(err, res) {
                    if(err)
                        return console.log(' >> DBWrite failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                    });
                
                    buf = Buffer.alloc(4);
                    buf.writeFloatBE(getState('javascript.0.Ansteuerung_Thyro.AW128_LIMIT').val);
                
                    s7client.DBWrite(22, 340, 4, buf, function(err, res) {
                    if(err)
                        return console.log(' >> DBWrite failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                    });
                
                    buf = Buffer.alloc(4);
                    buf.writeFloatBE(getState('javascript.0.Ansteuerung_Thyro.AW128_LADE_SOLL').val);
                
                    s7client.DBWrite(22, 348, 4, buf, function(err, res) {
                    if(err)
                        return console.log(' >> DBWrite failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                    });
                
                }
                
                setInterval(anS7senden, 200);
                
                • In dem Blockly, in dem ich die 4 Objekte aktualisiere, überprüfe ich die Werte im DB22 auf Änderung und gebe bei Abweichung eine entsprechend Log-Meldung aus.

                Und jetzt der Knaller: 2 der 4 Werte weichen massiv häufig (beide Werte zusammen 93x in einer Stunde) ab (DB22.DBD352 = Batterieleistung, DB22.DBD340 = AW128_LIMIT), die anderen beiden Werte nicht ein einziges Mal in der gleichen Zeit. Lt. Zeitstempel hat Blockly die Werte nicht verändert, (stehen bei 0), der Zeitstempel der zugeh. Wertes aus dem DB22 steht auf dem Zeitstempel kurz nach dem Überlauf, als 0 wieder geschrieben/gelesen wurde.

                Die Werte, die keine Ausreißer haben (Netzleistung, AW128_Lade_Soll) sind ungleich 0 (Null).

                Hast du eine Idee, wo und wie ich weiter in die Details gehen kann?

                Edit: Habe den Teil im Blockly jetzt mal deaktiviert, wo AW128_LIMIT aktualisiert wird und fest den Wert 1.23 ins Objekt javascript.0.Ansteuerung_Thyro.AW128_LIMIT geschrieben. Ausreißer kommt wieder:

                2024-01-07 20:40:05.197 - debug: javascript.0 (942) script.js._Werte_an_S7.Ansteuerung_Thyro: Abweichung s7.1.DBs.DB22.AW128_LIMIT
                2024-01-07 20:40:05.198 - debug: javascript.0 (942) script.js._Werte_an_S7.Ansteuerung_Thyro: -93510772337884000000
                2024-01-07 20:40:05.198 - debug: javascript.0 (942) script.js._Werte_an_S7.Ansteuerung_Thyro: 1.23
                2024-01-07 20:41:52.834 - debug: javascript.0 (942) script.js._Werte_an_S7.Ansteuerung_Thyro: Abweichung s7.1.DBs.DB22.AW128_LIMIT
                2024-01-07 20:41:52.835 - debug: javascript.0 (942) script.js._Werte_an_S7.Ansteuerung_Thyro: 26160945152
                2024-01-07 20:41:52.835 - debug: javascript.0 (942) script.js._Werte_an_S7.Ansteuerung_Thyro: 1.23
                2024-01-07 20:43:21.150 - debug: javascript.0 (942) script.js._Werte_an_S7.Ansteuerung_Thyro: Abweichung s7.1.DBs.DB22.AW128_LIMIT
                2024-01-07 20:43:21.150 - debug: javascript.0 (942) script.js._Werte_an_S7.Ansteuerung_Thyro: -93510772337884000000
                2024-01-07 20:43:21.151 - debug: javascript.0 (942) script.js._Werte_an_S7.Ansteuerung_Thyro: 1.23
                

                Synology DS920+ VM, S7-315 PN mit ET200S

                1 Antwort Letzte Antwort
                0
                • WalW Wal

                  @fu_zhou ,

                  buf.writeFloatBE(getState('javascript.0.S7_Komm_Test.real').val);
                  
                  fu_zhouF Offline
                  fu_zhouF Offline
                  fu_zhou
                  schrieb am zuletzt editiert von fu_zhou
                  #58

                  @wal Ich glaube, ich habe das Problem gefunden, auf jeden Fall ist seit der Änderung über die letzten 2 Stunden Ruhe mit den Ausreißern - mal sehen, was über die nächsten Stunden so passiert...
                  Ich habe jetzt für jeden der (mittlerweile) 5 zu schreibenden Real-Werte einen eigenen Buffer angelegt: buf1 - buf5. Vorher habe ich für jeden Wert buf verwendet (s.o.):

                  var snap7 = require('node-snap7');
                  let buf1;
                  let buf2;
                  let buf3;
                  let buf4;
                  let buf5;
                   
                  var s7client = new snap7.S7Client();
                  s7client.ConnectTo('1.1.1.1', 0, 2, function(err) {
                      if(err)
                          return console.log(' >> Connection failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                  });
                  
                  function anS7senden() {
                      buf1 = Buffer.alloc(4);
                      buf1.writeFloatBE(getState('javascript.0.PV.Netzleistung').val);
                  
                      s7client.DBWrite(22, 336, 4, buf1, function(err, res) {
                      if(err)
                          return console.log(' >> DBWrite failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                      });
                  
                      buf2 = Buffer.alloc(4);
                      buf2.writeFloatBE(getState('javascript.0.PV.Batterieleistung').val);
                  
                      s7client.DBWrite(22, 352, 4, buf2, function(err, res) {
                      if(err)
                          return console.log(' >> DBWrite failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                      });
                  
                      buf3 = Buffer.alloc(4);
                      buf3.writeFloatBE(getState('javascript.0.Ansteuerung_Thyro.AW128_LIMIT').val);
                  
                      s7client.DBWrite(22, 340, 4, buf3, function(err, res) {
                      if(err)
                          return console.log(' >> DBWrite failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                      });
                  
                      buf4 = Buffer.alloc(4);
                      buf4.writeFloatBE(getState('javascript.0.Ansteuerung_Thyro.AW128_LADE_SOLL').val);
                  
                      s7client.DBWrite(22, 348, 4, buf4, function(err, res) {
                      if(err)
                          return console.log(' >> DBWrite failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                      });
                  
                      buf5 = Buffer.alloc(4);
                      buf5.writeFloatBE(getState('javascript.0.S7_Komm_Test.Reserve').val);
                  
                      s7client.DBWrite(22, 92, 4, buf5, function(err, res) {
                      if(err)
                          return console.log(' >> DBWrite failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                      });
                  }
                  
                  setInterval(anS7senden, 200);
                  

                  Obwohl buf ja immer mit dem neuen Wert beschrieben wird (getState...), scheint der buf da irgendwie sporadisch durcheinander zu kommen und dann stehen die Fantasiewerte drin.

                  Jetzt habe ich überhaupt keine Ahnung, wo und wie dieses Problem abzufangen ist. Im node Snap7 Wrapper? Im S7 Adapter? Hast du eine Idee?

                  Edit: auch nach 10 Stunden (über Nacht) keine Ausreißer mehr...

                  Synology DS920+ VM, S7-315 PN mit ET200S

                  WalW 2 Antworten Letzte Antwort
                  0
                  • fu_zhouF fu_zhou

                    @wal Ich glaube, ich habe das Problem gefunden, auf jeden Fall ist seit der Änderung über die letzten 2 Stunden Ruhe mit den Ausreißern - mal sehen, was über die nächsten Stunden so passiert...
                    Ich habe jetzt für jeden der (mittlerweile) 5 zu schreibenden Real-Werte einen eigenen Buffer angelegt: buf1 - buf5. Vorher habe ich für jeden Wert buf verwendet (s.o.):

                    var snap7 = require('node-snap7');
                    let buf1;
                    let buf2;
                    let buf3;
                    let buf4;
                    let buf5;
                     
                    var s7client = new snap7.S7Client();
                    s7client.ConnectTo('1.1.1.1', 0, 2, function(err) {
                        if(err)
                            return console.log(' >> Connection failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                    });
                    
                    function anS7senden() {
                        buf1 = Buffer.alloc(4);
                        buf1.writeFloatBE(getState('javascript.0.PV.Netzleistung').val);
                    
                        s7client.DBWrite(22, 336, 4, buf1, function(err, res) {
                        if(err)
                            return console.log(' >> DBWrite failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                        });
                    
                        buf2 = Buffer.alloc(4);
                        buf2.writeFloatBE(getState('javascript.0.PV.Batterieleistung').val);
                    
                        s7client.DBWrite(22, 352, 4, buf2, function(err, res) {
                        if(err)
                            return console.log(' >> DBWrite failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                        });
                    
                        buf3 = Buffer.alloc(4);
                        buf3.writeFloatBE(getState('javascript.0.Ansteuerung_Thyro.AW128_LIMIT').val);
                    
                        s7client.DBWrite(22, 340, 4, buf3, function(err, res) {
                        if(err)
                            return console.log(' >> DBWrite failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                        });
                    
                        buf4 = Buffer.alloc(4);
                        buf4.writeFloatBE(getState('javascript.0.Ansteuerung_Thyro.AW128_LADE_SOLL').val);
                    
                        s7client.DBWrite(22, 348, 4, buf4, function(err, res) {
                        if(err)
                            return console.log(' >> DBWrite failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                        });
                    
                        buf5 = Buffer.alloc(4);
                        buf5.writeFloatBE(getState('javascript.0.S7_Komm_Test.Reserve').val);
                    
                        s7client.DBWrite(22, 92, 4, buf5, function(err, res) {
                        if(err)
                            return console.log(' >> DBWrite failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                        });
                    }
                    
                    setInterval(anS7senden, 200);
                    

                    Obwohl buf ja immer mit dem neuen Wert beschrieben wird (getState...), scheint der buf da irgendwie sporadisch durcheinander zu kommen und dann stehen die Fantasiewerte drin.

                    Jetzt habe ich überhaupt keine Ahnung, wo und wie dieses Problem abzufangen ist. Im node Snap7 Wrapper? Im S7 Adapter? Hast du eine Idee?

                    Edit: auch nach 10 Stunden (über Nacht) keine Ausreißer mehr...

                    WalW Online
                    WalW Online
                    Wal
                    Developer
                    schrieb am zuletzt editiert von
                    #59

                    @fu_zhou ,
                    den "buf" gibt es auch im S7 Adapter den ich nach Befüllung mit geloggt hatte und keine Ausreißer hatte, aber zwischen "buf" befüllen und "buf" mit s7client.DBWrite schreiben könnte sich ja evtl. sich was ändern.

                    Gruß
                    Walter

                    DoorIO-Adapter
                    wioBrowser-Adapter und wioBrowser

                    1 Antwort Letzte Antwort
                    0
                    • fu_zhouF fu_zhou

                      @wal Ich glaube, ich habe das Problem gefunden, auf jeden Fall ist seit der Änderung über die letzten 2 Stunden Ruhe mit den Ausreißern - mal sehen, was über die nächsten Stunden so passiert...
                      Ich habe jetzt für jeden der (mittlerweile) 5 zu schreibenden Real-Werte einen eigenen Buffer angelegt: buf1 - buf5. Vorher habe ich für jeden Wert buf verwendet (s.o.):

                      var snap7 = require('node-snap7');
                      let buf1;
                      let buf2;
                      let buf3;
                      let buf4;
                      let buf5;
                       
                      var s7client = new snap7.S7Client();
                      s7client.ConnectTo('1.1.1.1', 0, 2, function(err) {
                          if(err)
                              return console.log(' >> Connection failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                      });
                      
                      function anS7senden() {
                          buf1 = Buffer.alloc(4);
                          buf1.writeFloatBE(getState('javascript.0.PV.Netzleistung').val);
                      
                          s7client.DBWrite(22, 336, 4, buf1, function(err, res) {
                          if(err)
                              return console.log(' >> DBWrite failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                          });
                      
                          buf2 = Buffer.alloc(4);
                          buf2.writeFloatBE(getState('javascript.0.PV.Batterieleistung').val);
                      
                          s7client.DBWrite(22, 352, 4, buf2, function(err, res) {
                          if(err)
                              return console.log(' >> DBWrite failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                          });
                      
                          buf3 = Buffer.alloc(4);
                          buf3.writeFloatBE(getState('javascript.0.Ansteuerung_Thyro.AW128_LIMIT').val);
                      
                          s7client.DBWrite(22, 340, 4, buf3, function(err, res) {
                          if(err)
                              return console.log(' >> DBWrite failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                          });
                      
                          buf4 = Buffer.alloc(4);
                          buf4.writeFloatBE(getState('javascript.0.Ansteuerung_Thyro.AW128_LADE_SOLL').val);
                      
                          s7client.DBWrite(22, 348, 4, buf4, function(err, res) {
                          if(err)
                              return console.log(' >> DBWrite failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                          });
                      
                          buf5 = Buffer.alloc(4);
                          buf5.writeFloatBE(getState('javascript.0.S7_Komm_Test.Reserve').val);
                      
                          s7client.DBWrite(22, 92, 4, buf5, function(err, res) {
                          if(err)
                              return console.log(' >> DBWrite failed. Code #' + err + ' - ' + s7client.ErrorText(err));
                          });
                      }
                      
                      setInterval(anS7senden, 200);
                      

                      Obwohl buf ja immer mit dem neuen Wert beschrieben wird (getState...), scheint der buf da irgendwie sporadisch durcheinander zu kommen und dann stehen die Fantasiewerte drin.

                      Jetzt habe ich überhaupt keine Ahnung, wo und wie dieses Problem abzufangen ist. Im node Snap7 Wrapper? Im S7 Adapter? Hast du eine Idee?

                      Edit: auch nach 10 Stunden (über Nacht) keine Ausreißer mehr...

                      WalW Online
                      WalW Online
                      Wal
                      Developer
                      schrieb am zuletzt editiert von Wal
                      #60

                      @fu_zhou ,
                      bin ja auf dem "latest" und auf nodejs20 mit meinem ioBroker.
                      Habe am Anfang des Jahres alles geupdatet und kann den Fehler seit Stunden mit verschiedenen Skripten nicht mehr reproduzieren.
                      Nach diesem Post wird der Fehler gleich da sein, werde berichten.

                      edit: ich habs gewusst, 2 Minuten hat es gedauert. ;-)

                      Gruß
                      Walter

                      DoorIO-Adapter
                      wioBrowser-Adapter und wioBrowser

                      fu_zhouF 1 Antwort Letzte Antwort
                      0
                      • WalW Wal

                        @fu_zhou ,
                        bin ja auf dem "latest" und auf nodejs20 mit meinem ioBroker.
                        Habe am Anfang des Jahres alles geupdatet und kann den Fehler seit Stunden mit verschiedenen Skripten nicht mehr reproduzieren.
                        Nach diesem Post wird der Fehler gleich da sein, werde berichten.

                        edit: ich habs gewusst, 2 Minuten hat es gedauert. ;-)

                        fu_zhouF Offline
                        fu_zhouF Offline
                        fu_zhou
                        schrieb am zuletzt editiert von fu_zhou
                        #61

                        @wal für mich sieht das mit einem buf so aus: es wird ja nicht gewartet, ob oder bis der Wert aus dem Buffer tatsächlich in der S7 ankommt. Wenn der Schreibvorgang länger als 200ms (mein Intervall) dauert, steht möglicherweise in dem buf schon ein Teil von dem anderen Wert drin und dann ergibt der Inhalt dieser 4 "zusammengewürfelten" Bytes diese Werte, die völlig daneben sind. Das würde auch erklären, dass die Häufigkeit der Abweichung mit steigender Zykluszeit abnimmt. Allerdings kommt bei einem 1 Sek.-Intervall der Fehler noch immer hin und wieder und so lange kann der s7client.DBWrite ja eigentlich nicht dauern - oder hin und wieder eben doch?

                        Wenn wir, außer buf 1 - buf n, eine Lösung finden, immer die korrekten Werte in die S7 zu schreiben, ist das im Adapter leicht behoben, denke ich. Ich habe auch mal in die main.js geschaut und die Zeilen dazu gefunden...

                        In der API-Beschreibung habe ich nichts gefunden, was darauf hinweist, dass auf den Schreibzyklus zu achten wäre. Ich habe das aber mal im issue auf Github gefragt.

                        Synology DS920+ VM, S7-315 PN mit ET200S

                        WalW 1 Antwort Letzte Antwort
                        0
                        • fu_zhouF fu_zhou

                          @wal für mich sieht das mit einem buf so aus: es wird ja nicht gewartet, ob oder bis der Wert aus dem Buffer tatsächlich in der S7 ankommt. Wenn der Schreibvorgang länger als 200ms (mein Intervall) dauert, steht möglicherweise in dem buf schon ein Teil von dem anderen Wert drin und dann ergibt der Inhalt dieser 4 "zusammengewürfelten" Bytes diese Werte, die völlig daneben sind. Das würde auch erklären, dass die Häufigkeit der Abweichung mit steigender Zykluszeit abnimmt. Allerdings kommt bei einem 1 Sek.-Intervall der Fehler noch immer hin und wieder und so lange kann der s7client.DBWrite ja eigentlich nicht dauern - oder hin und wieder eben doch?

                          Wenn wir, außer buf 1 - buf n, eine Lösung finden, immer die korrekten Werte in die S7 zu schreiben, ist das im Adapter leicht behoben, denke ich. Ich habe auch mal in die main.js geschaut und die Zeilen dazu gefunden...

                          In der API-Beschreibung habe ich nichts gefunden, was darauf hinweist, dass auf den Schreibzyklus zu achten wäre. Ich habe das aber mal im issue auf Github gefragt.

                          WalW Online
                          WalW Online
                          Wal
                          Developer
                          schrieb am zuletzt editiert von Wal
                          #62

                          @fu_zhou ,
                          kannst du mal den Adapter über mein Github installieren und testen ?
                          Bei mir dauert es immer sehr lang bis der Ausreißer kommt, deshalb wären 2 Tester besser.
                          Github Link

                          Gruß
                          Walter

                          DoorIO-Adapter
                          wioBrowser-Adapter und wioBrowser

                          fu_zhouF 1 Antwort Letzte Antwort
                          0
                          • WalW Wal

                            @fu_zhou ,
                            kannst du mal den Adapter über mein Github installieren und testen ?
                            Bei mir dauert es immer sehr lang bis der Ausreißer kommt, deshalb wären 2 Tester besser.
                            Github Link

                            fu_zhouF Offline
                            fu_zhouF Offline
                            fu_zhou
                            schrieb am zuletzt editiert von
                            #63

                            @wal Ist jetzt installiert und ich beschreibe die S7 mit dem Adapter mit 200ms Poll-Delay mit 3 Real Werten, wobei einer in der S7 umkopiert wird, also lese ich die 3 geschriebenen + den 1 umkopierten Wert.

                            Ich bin soooo gespannt....

                            Synology DS920+ VM, S7-315 PN mit ET200S

                            WalW 1 Antwort Letzte Antwort
                            0
                            • fu_zhouF fu_zhou

                              @wal Ist jetzt installiert und ich beschreibe die S7 mit dem Adapter mit 200ms Poll-Delay mit 3 Real Werten, wobei einer in der S7 umkopiert wird, also lese ich die 3 geschriebenen + den 1 umkopierten Wert.

                              Ich bin soooo gespannt....

                              WalW Online
                              WalW Online
                              Wal
                              Developer
                              schrieb am zuletzt editiert von
                              #64

                              @fu_zhou ,
                              bis jetzt hatte ich noch kein Ausreißer, aber nach dieser Nachricht ... ;-)

                              Gruß
                              Walter

                              DoorIO-Adapter
                              wioBrowser-Adapter und wioBrowser

                              fu_zhouF 1 Antwort Letzte Antwort
                              0
                              • WalW Wal

                                @fu_zhou ,
                                bis jetzt hatte ich noch kein Ausreißer, aber nach dieser Nachricht ... ;-)

                                fu_zhouF Offline
                                fu_zhouF Offline
                                fu_zhou
                                schrieb am zuletzt editiert von
                                #65

                                @wal seit wann läuft's bei dir?

                                Synology DS920+ VM, S7-315 PN mit ET200S

                                WalW 1 Antwort Letzte Antwort
                                0
                                • fu_zhouF fu_zhou

                                  @wal seit wann läuft's bei dir?

                                  WalW Online
                                  WalW Online
                                  Wal
                                  Developer
                                  schrieb am zuletzt editiert von
                                  #66

                                  @fu_zhou ,
                                  10 Stunden.

                                  Gruß
                                  Walter

                                  DoorIO-Adapter
                                  wioBrowser-Adapter und wioBrowser

                                  fu_zhouF 2 Antworten Letzte Antwort
                                  0
                                  • WalW Wal

                                    @fu_zhou ,
                                    10 Stunden.

                                    fu_zhouF Offline
                                    fu_zhouF Offline
                                    fu_zhou
                                    schrieb am zuletzt editiert von fu_zhou
                                    #67

                                    @wal Noch kein Ausreißer die letzten 20 Minuten!!!!! Ich gehe jetzt nochmal auf den S7 Adapter ohne deine Änderung zurück und schaue, wie lange es dauert, bis der erste Wert daneben liegt.
                                    Edit: die ersten Ausreißer sind angekommen, ich gehe jetzt wieder auf deine Modifikation...

                                    Synology DS920+ VM, S7-315 PN mit ET200S

                                    1 Antwort Letzte Antwort
                                    1
                                    • WalW Wal

                                      @fu_zhou ,
                                      10 Stunden.

                                      fu_zhouF Offline
                                      fu_zhouF Offline
                                      fu_zhou
                                      schrieb am zuletzt editiert von
                                      #68

                                      @wal kein Ausreißer über Nacht - bei 3 Instanzen in 2 ioBroker Installationen, die alle die selbe S7 traktieren. Das war bisher das Rezept für verlässliche sporadische Ausreißer! Kann es das gewesen sein????? - Sieht danach aus!!!!!

                                      Ich würde sagen, dass das eine Version 1.5, wenn nicht sogar 2.0 Wert ist. Kannst du dich darum kümmern, dass das ioBroker Repository angepasst wird, so dass die funktionierende Version über ioBroker installiert wird?

                                      Auf jeden Fall vielen Dank für deine Unterstützung bisher!

                                      Synology DS920+ VM, S7-315 PN mit ET200S

                                      WalW 1 Antwort Letzte Antwort
                                      0
                                      • fu_zhouF fu_zhou

                                        @wal kein Ausreißer über Nacht - bei 3 Instanzen in 2 ioBroker Installationen, die alle die selbe S7 traktieren. Das war bisher das Rezept für verlässliche sporadische Ausreißer! Kann es das gewesen sein????? - Sieht danach aus!!!!!

                                        Ich würde sagen, dass das eine Version 1.5, wenn nicht sogar 2.0 Wert ist. Kannst du dich darum kümmern, dass das ioBroker Repository angepasst wird, so dass die funktionierende Version über ioBroker installiert wird?

                                        Auf jeden Fall vielen Dank für deine Unterstützung bisher!

                                        WalW Online
                                        WalW Online
                                        Wal
                                        Developer
                                        schrieb am zuletzt editiert von
                                        #69

                                        @fu_zhou ,
                                        es waren doch noch mehr User denen das aufgefallen ist, wenn die auch noch einmal testen könnten ...
                                        So schnell wage ich noch kein Pull Request, ;-) lass mal noch eine Woche so laufen.

                                        Gruß
                                        Walter

                                        DoorIO-Adapter
                                        wioBrowser-Adapter und wioBrowser

                                        HF_SPSlerH 1 Antwort Letzte Antwort
                                        0
                                        • WalW Wal

                                          @fu_zhou ,
                                          es waren doch noch mehr User denen das aufgefallen ist, wenn die auch noch einmal testen könnten ...
                                          So schnell wage ich noch kein Pull Request, ;-) lass mal noch eine Woche so laufen.

                                          HF_SPSlerH Offline
                                          HF_SPSlerH Offline
                                          HF_SPSler
                                          schrieb am zuletzt editiert von
                                          #70

                                          Moin @wal ,

                                          ich gehöre auch zu denen die Probleme mit den Ausreißern in den Werten haben :) Leider habe ich tagsüber nicht die Möglichkeit Tests durchzuführen da ich meine private S7 mit dem iobroker gekoppelt habe und mir auf der Arbeit aktuell keine Möglichkeit besteht eine S7 mit einem iobroker zu koppeln.

                                          Aber ich könnte jetzt heute Abend mal eine Trace aufzeichnen, zumindest für ein paar stunden. Jedoch weiß ich leider noch nicht wie man den Adapter von Github installiert bekommt, da bin ich noch totales Greenhorn.

                                          S7 1214 (Master) + Logo!8(Slave Erdgeschoss) + Logo!8 (Slave Obergeschoss) + S7 1214 (Slave Garage/Nebengebäude)

                                          WalW 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          753

                                          Online

                                          32.5k

                                          Benutzer

                                          81.7k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe