Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

REAL zahlen werden scheinbar duch zufällige Zahlen vom s7.Adapter ersetzt. #13

Closed
thomigueh opened this issue Dec 28, 2018 · 59 comments
Closed
Labels

Comments

@thomigueh
Copy link

thomigueh commented Dec 28, 2018

Ich nutze das JavaScript aus den Beispielen um Elevation und Azimut der Sonne zu berechen. Diese schreibe ich in ein Datenwort meines S7.Adapters.
Ab und an werden dann anscheint zufällige Zahlen vom s7.Adapter zurück gegeben, die so auch in der S7-300 stehen (Siehe Bild), manchmal wird auch einfach eine Null geschrieben.

Ich habe inzwischen auch mit Node.Red in die S7 geschrieben dort sind mir diese Fehler nicht aufgefallen.
Ist das Problem bekannt und gibt es einen fix?

anmerkung 2018-12-28 135634

@Apollon77
Copy link
Contributor

Wenn du debug log aktivierst kommt da noch mehr Info irgendwie?

@thomigueh
Copy link
Author

Das werde ich probieren, habe es eben aktiviert und werden schauen was passiert wenn der Fehler wieder auftritt.

@MarkF77
Copy link

MarkF77 commented Dec 29, 2018

Bei mir genau die gleichen Fehler, sowohl bei INT als auch REAL.
Teils 0, teils sehr große positive oder negative Zahlen.

Im debug log steht nichts.
2018-12-29 20_12_55-objects - iobroker

@thomigueh
Copy link
Author

Moin,
also bei mir ergab das debug log jetzt nichts sinnvolles, ab und an kamen mal solche meldung
`
2019-01-06 16:28:35.524 - debug: s7.0 system.adapter.admin.0: logging false

2019-01-06 16:28:41.007 - debug: s7.0 system.adapter.admin.0: logging true
2019-01-06 16:29:15.530 - debug: s7.0 system.adapter.admin.0: logging false
2019-01-06 16:33:37.175 - debug: s7.0 system.adapter.admin.0: logging true
2019-01-06 16:41:24.550 - debug: s7.0 system.adapter.admin.0: logging false
`
die auf den S7 Adapter schließen lassen, das war es dann aber auch schon. Diese Meldungen decken sich Zeitlich aber auch nicht mit den auftretenden beschriebenen Fehler.

@Apollon77
Copy link
Contributor

Diese Log Zeilen kommen wenn Du im Admin auf Logs klickst :-)

@fu-zhou
Copy link

fu-zhou commented Jan 25, 2021

Kaum 2 Jahre um, schon gibt es eine Idee:
@thomigueh @MarkF77
Ich hatte das auch: Im Script (Blockly) muss der Real-Wert "aktualisiert" nicht "gesteuert" werden. Nachdem ich das umgestellt hatte, hat alles funktioniert - keine Ausreißer mehr, sieht dann so aus:
Zwischenablage02
Binärwerte werden aber gesteuert, dass es funktioniert:
Zwischenablage04

Ich hoffe, dass der Fall hier damit geschlossen werden kann?!

@Apollon77
Copy link
Contributor

mit "aktualisiert" schreibst Du nur werte in den State die NIE an das Gerät gesendet werden. Das wird nur bei "gesteuert" gemacht.

@fu-zhou
Copy link

fu-zhou commented Jan 25, 2021

Bei der Kommunikation mit der S7 werden die konfigurierten DBs (Datenbaustein) zyklisch gelesen/ geschrieben (definiert im Adapter in "Poll-Delay"). Es wird also ein Real-Wert in einem DB aktualisiert (alle Datenpunkte in einem DB sind in iobroker als Objekt abgebildet, z.B. s7.0.DBs.DB22.PV_Netzleistung_IST) und der wird dann so im nächsten Zyklus geschrieben. Das o.a. Problem ist definitiv so behoben, wie oben von mir beschrieben. Ich hatte das auch schon mal im Forum gepostet, allerdings unter Blockly: https://forum.iobroker.net/topic/33900/blockly-sporadisch-werden-falsche-werte-geschrieben
Warum mit "steuern" sporadische Ausreißer geschrieben werden - keine Ahnung, aber die kommen auch in der S7 an und werden vom Script erzeugt, ich hatte da mal eine Fang-Schaltung in der S7 gebaut.
Versucht "steuern" evtl. das Schreiben zum Gerät zu triggern und dann kommt im Fall der S7 ab und zu Müll an, nämlich dann, wenn Polling und "steuern" genau zusammenfällt?

@fu-zhou
Copy link

fu-zhou commented Mar 8, 2021

@Apollon77 Ich habe jetzt festgestellt, dass die Werte zwar wunderbar in den ioBroker-Objekten im S7-Adapter aktualisiert werden und es zu keinen Ausreißern mehr kommt, in der S7 aber immer "0" ankommt, du hast also (wie kann es anders sein ;-)) Recht mit "... NIE an das Gerät gesendet...". Jetzt habe ich die Blockly-Skripte wieder auf "steuere" umgerüstet und da kommen die Werte in der S7 an, aber sporadisch kommen eben auch die Riesen-Ausreißer - s.u.
Zwischenablage02
Was kann ich tun, um dem Ganzen auf die Spur zu kommen?

@Apollon77
Copy link
Contributor

Ehrlich keine Ahnung, ich habe keineS7 und von daher ist das für mich unbekannt. Wo kommen die werte denn her? Logge doch im Blockyl mal welche werte du schreibst ... dann musst du doch wissen woher sie kommen ...

@fu-zhou
Copy link

fu-zhou commented Mar 8, 2021

Wie kann ich im Blockly loggen? Ich logge die Werte in sql, daher sehe ich ja die Ausreißer. Wie oben schon geschrieben liegt es nach meinen bisherigen "Recherchen" nicht an der S7, sondern die Werte werden vom Skript an die S7 gegeben...

@fu-zhou
Copy link

fu-zhou commented Mar 8, 2021

Meinst du über "verbose"?

@Apollon77
Copy link
Contributor

Es gibt einen Log block glaube ich

@Zerotwo3185
Copy link

Guten Abend ich habe das gleiche Problem das gelegentlich falsche Werte in DBs geschrieben werden wollte mal fragen ob es mittlerweile eine Lösung für das Problem gibt?

@fu-zhou
Copy link

fu-zhou commented May 2, 2021

Bei mir ist das sporadisch immer noch so. Ich gebe einen Grenzwert an die S7, der nicht ganz so kritisch ist, da bin ich jetzt auf den Zeit-Trigger "jede Minute" gegangen, seither gibt es keine Ausreisser mehr bei diesem Objekt - stabil seit 17.04.2021. Dann habe ich einen anderen Wert, der zu S7 muss, der wird durch die Wertänderung getriggert und da kommt es immer wieder zu den berühmten Ausreissern, so 2-4 Mal am Tag, ich finde aber kein Muster zur gezielten Reproduktion.

@Zerotwo3185
Copy link

Ok vielen Dank für die Antwort. mir ist aufgefallen, wenn ich mir z.b die Uhrzeit aus dem Iobroker jede Sekunde übertragen lasse entstehen sehr viele Fehler. wenn ich jedoch nur alle 5 Sek. übertrage entstehen so gut wie keine Fehler. Werde es auch mal mit wertebereichen programmieren.

@stale
Copy link

stale bot commented Aug 3, 2021

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs within the next 7 days. Please check if the issue is still relevant in the most current version of the adapter and tell us. Also check that all relevant details, logs and reproduction steps are included and update them if needed. Thank you for your contributions.
Dieses Problem wurde automatisch als veraltet markiert, da es in letzter Zeit keine Aktivitäten gab. Es wird geschlossen, wenn nicht innerhalb der nächsten 7 Tage weitere Aktivitäten stattfinden. Bitte überprüft, ob das Problem auch in der aktuellsten Version des Adapters noch relevant ist, und teilt uns dies mit. Überprüft auch, ob alle relevanten Details, Logs und Reproduktionsschritte enthalten sind bzw. aktualisiert diese. Vielen Dank für Eure Unterstützung.

@stale stale bot added the wontfix label Aug 3, 2021
@stale
Copy link

stale bot commented Sep 7, 2021

This issue has been automatically closed because of inactivity. Please open a new issue if still relevant and make sure to include all relevant details, logs and reproduction steps. Thank you for your contributions.
Dieses Problem wurde aufgrund von Inaktivität automatisch geschlossen. Bitte öffnet ein neues Issue, falls dies noch relevant ist und stellt sicher das alle relevanten Details, Logs und Reproduktionsschritte enthalten sind. Vielen Dank für Eure Unterstützung.

@stale stale bot closed this as completed Sep 7, 2021
@Wolfling78
Copy link

Dieser Topic wurde zwar geschlossen, aber das Problem besteht bei mir nach wie vor - gibt es hierzu einen Workaround?

@Apollon77 Apollon77 reopened this Oct 22, 2022
@stale stale bot removed the wontfix label Oct 22, 2022
@Apollon77 Apollon77 added the bug label Oct 22, 2022
@fu-zhou
Copy link

fu-zhou commented Oct 23, 2022

Leider nein, ich würde durch Testen gerne nach wie vor meinen Beitrag zur Behebung des Verhaltens leisten, aber da müsste mir jemand auf die Sprünge helfen, weil ich so gar keine Ahnung habe vom Programmieren und dem dazugehörigen Debuggen... beschreiben und Beobachtungen reproduzierbar machen kriege ich aber gut hin, denke ich.

@fu-zhou
Copy link

fu-zhou commented Oct 23, 2022

Ich habe Zugriff auf noch eine S7 CPU neben meinem Produktivsystem. Ich würde die mal mit ins System nehmen und mit Werten beschießen und dann mit der Poll-Zeit vom Adapter spielen etc. was mir halt so einfällt...

@Zerotwo3185
Copy link

Zerotwo3185 commented Oct 23, 2022

Guten Tag
Ich bin dieses Problem umgangen indem ich jede Sekunde die Werte vergleiche und bei einem unterschied lasse ich die Werte erneut übertragen.
Version_1
Screenshot 2022-10-23 134237
Version_2
Screenshot 2022-10-23 134422

hoffe das hilft vielleicht etwas.

@fu-zhou
Copy link

fu-zhou commented Oct 23, 2022

@Zerotwo3185 Guter Ansatz, um das Problem in den Griff zu bekommen - probiere ich mal. Interessanter (oder glücklicher) Weise passieren die Ausreißer nur bei Werten, die ich mit Blockly an die S7 übergebe, egal, ob zeit- oder wert-getriggert (sind nur ein paar Rechenwerte). Werte, die ich über vis in die S7 Schreibe (z.B. Sollwert Raumtemperatur) sind stabil und reißen nicht aus. Hast du das bei dir mal beobachtet?

@Zerotwo3185
Copy link

Da ich Vis nicht nutze, sondern nur WinCC mit eine comfort Panel 1200. Und auf einer virtuellen Maschine ein PC System für ein 2tes Panel. kann ich dazu leider nichts sagen. alle Werte werden bei mir durch Blockly Scripte übertragen

@fu-zhou
Copy link

fu-zhou commented Oct 24, 2022

@Zerotwo3185 Ich würde Version 2 mal probieren, ist für mich einfacher nachzuvollziehen. Hier hast du Eine eunktion "Anzeige" erstellt und, so verstehe ich dich, die triggerst du jede Sekunde dann, oder? So lange steht bei mir der viel zu große oder zu kleine Wert aber gar nicht im Objekt, das ist eigentlich im nächsten Poll-Zyklus schon wieder korrigiert.

@smolo-de
Copy link

smolo-de commented Oct 27, 2023

Ich hatte 2020 schon diverse Konvertierungsprobleme im Adapter und zur S7-1500 festgestellt. Ich hab das zwar notiert bekomme das aber grad nicht mehr zusammen. Was ich damals festgestellt hatte war, das durch die Konvertierungen / Übertragung in String teilweise die Werte verfälscht werden. Das Zurückschreiben zum Adapter führt dann wieder zu kaputten Daten etc.. Das liegt zum Teil daran das die Typen nicht zusammenpassen bzw. der Inhalt String 254 zu 255 Zeichen und ASCII Zeichensätze. Leider habe ich keine Zeit mehr gefunden das auszuarbeiten :-(

Falls jemand Zeit hat hier mal meine Notizen: (Stand 2020)
image
image

@ea7777777
Copy link

@Apollon77 Ich hätte hier schon ne S7 319 rum liegen, die ich dir zum Testen zuschicken könnte. Beim Testen würde ich dir auch gerne soweit helfen, bis wir den Fehler weg haben. Er nervt mich wie schon gesagt seit nem 3/4 Jahr.

@fu-zhou
Copy link

fu-zhou commented Oct 27, 2023

@Apollon77 wenn du da Lust zu hättest könnten wir uns auch mal treffen, nachdem wir in der gleichen Stadt wohnen... Schicken bräuchten wir dann nix, ich habe auch eine Reserve CPU mit Netzteil auf Schiene und Step7 auf einem Laptop...

@ea7777777 du bist natürlich mit dabei, wenn du es einrichten kannst

@Apollon77
Copy link
Contributor

Danke Euch zweien ... Das Thema ist das ich seit fast einem Jahr an Matter für iobroker arbeite und gerade da sehr tief drin bin. Mit allem anderen nebenher (und hier und da Alexa Ablenkungen) schafft mein gehirn es gerade nicht noch ein Thema tief anzuschauen. von daher muss ich euch vertrösten aber es bleibt auf der Liste.

Wenn natürlich Infos wie von @smolo-de zusammengefasst vllt das problem zeigen dann ist eine Code Anpassung (zusammen mit ggf Debug log gar nicht so schwer). Von daher wäre das das was aktuell mehr hilft als die Hardware fürchte ich :-(

Danke für Euer verständnis.

@ea7777777
Copy link

Matter brauchen wir sicher alle früher oder später. Also sehr geil, dass du daran arbeitest!

Wir können wirklich versuchen, den Fehler mit Debugs usw. zu dokumentieren, bis du Zeit findest. @smolo-de Vieleicht macht es sinn, uns da mal zusammen zu tun....

@Apollon77 Wenn du den Bug findest, schick ich dir jedenfalls ne Schnapsflasche deiner Wahl!

@smolo-de
Copy link

Ja das wäre schon eine Sache aber ich brauche noch paar Monate, hänge grad mitten im Bauprojekt. Meine Anlage muss dann aber noch in den IOB integriert werden. Ich mache darüber auch mit Dali die ganze Lichtsteuerung daher ist das mit den richtigen Konvertierungen bei mir auch ein echtes Thema speziell Zeitwerte, Zahlwerte etc.. Es gibt auch geringefügige Unterschiede bei der 300er und 1500er die ich im Einsatz habe. Sobald es bei mir was neues gibt würde ich mich melden.

@ea7777777
Copy link

Ich hab noch ein bischen rumprobiert.

Ich schiebe die Daten mit JS von den Modbus Adaptern in den S7 Adapter. Im JS habe ich eine Überwachung, wenn die Tags unplausible Werte annehmen. Diese schlagen aber nie an. Die selben überwachungen habe ich auf S7 Seite. Da schlagen sie an.

Weiter oben im Thread wurde angenommen, dass der Fehler nur mit JS oder Blockly passiert und nicht mit NodeRed. Deshalb habe ich mal die Werte mit NodeRed statt mit JS in den Adapter schieben lassen. Die Fehler treten immer noch auf.

Ausserdem hab ich mir mal die Werte genauer angesehen. In meinem Fall Int und Dint. Real habe ich nicht dabei. Die Fehler passieren mir bei allen sich häufig änderen Werten bzw häufig übertragenen Werten. Egal welchen Sollwert sie haben (auch bei dauerhafter 0, wenn ich den Wert jede sec rüberschiebe).

Ich habe mal die Protokollebene vom S7-Adapter auf "Silly" gestellt. Der Adapter protokolliert dann alle gesendeten Werte, welche in die S7 geschrieben werden. Wenn ein Ausreisser passiert, dann findet man diese aber nicht im Protokoll. Dort ist anscheinend noch der richtige Wert vorhanden. Fehler meldet der Adapter auch nicht.

Wenn ich mir die Werte Bitweise anschaue, kann ich keinen Zusammenhang sehen. Es sind wirklich zufällige positive oder negative.

Hier mal ein paar Beispiele:

Int Werte:
Istwert Sollwert
32809 ca. 100
53453 ca. 100
12410 ca. 100
9494 ca. 100

DInt Werte:
Istwert Sollwert
-1337028859 ca. 200
-2143383291 ca. 100
1492702470 ca. 1200
12364 ca. 100

@MarkF77
Copy link

MarkF77 commented Nov 5, 2023

@ea7777777
das mit NodeRed hast du falsch verstanden. Der Fehler tritt nicht auf, wenn du mit NodeRed direkt in die S7 schreibst - also den S7 Adapter umgehst. Hierzu musst du in NodeRed eine eigene S7 Verbindung herstellen.
LG

@ea7777777
Copy link

Hallo Mark, ich wusste gar nicht, dass es eine S7-Node gibt. Hab gleich mal die relevanten Werte so umgesetzt. Wäre schön, wenn es da wirklich nicht auftritt.

@ea7777777
Copy link

ea7777777 commented Nov 10, 2023 via email

@fu-zhou
Copy link

fu-zhou commented Nov 10, 2023

muss ich mir mal anschauen, gibt es die Möglichkeit, die Objekte anlegen zu lassen? Ich habe in der S7 Instanz nämlich 773 Objekte, dich ich als TSV einfach bei S7 reinkopiere...

@ea7777777
Copy link

Servus zusammen,

inzwischen bin ich mit all meine Tags vom S7 Adapter nach NodeRed umgezogen. Die Werte werden ohne fantasie Zahlen übermittelt. Die Strings funktionieren nun problemlos bis zur Länge 254... Was soll ich sagen... es funktioniert alles tadellos. Das schöne an NodeRed ist auch, dass man seine aktuellen Werte sieht und die Variablen gleich untereinander verknüpfen kann. Extra Java oder Blocky Scripte kann ich mir daher auch sparen.

Der S7 Adapter ist für mich daher komplett überflüssig geworden.

@fu-zhou
Copy link

fu-zhou commented Dec 10, 2023

@ea7777777 interessant... Würdest du mal eine Anleitung posten, wie du automatisiert die Objekte angelegt hast? Davor graut mir nämlich, das für 773 Objekte händisch zu machen (s. mein Post vom 10.11.). Hast du auch Taster? Die sind im Adapter ja konfigurierbar. Oder würdest du ein Tasten über Node-Red realisieren (also Ausgang setzen und nach 200, 300 ms oder welche Zeit auch immer zurücksetzen = Ansteuerung Stromstoßrelais)?

@ea7777777
Copy link

Nix automatisiert.... hab ca. 350 Variablen in Handarbeit rübergepackt. Bei mir ist die ganze Logik in der S7 Steuerung. Der IOBroker hat nur die Aufgabe, eine Schnittstelle zu Geräten zu schaffen, welche ich nicht direkt mit der S7-319 ansprechen kann.

Die S7-Tags kann man in eine Excel Tabelle packen und dann importieren. Der Rest ist Handarbeit.

@fu-zhou
Copy link

fu-zhou commented Dec 10, 2023

Ich brauche auch "nur" die Variablen meiner Kommunikations-DBs als Objekte für Node-Red, der Rest läuft in der S7. Im Adapter kann man das ja wunderbar im richtigen Format als TSV importieren und dann ist alles da als Objekte. Wie hast du die S7-DBs in Excel gepackt und wo/ wie importiert? Was ist dann genau die Handarbeit? Im Node-Red dann die importierten Variablen anbinden (das wäre logisch)?

@Zerotwo3185
Copy link

Ich habe es aus dem s7.adapter in eine Excel Tabelle exportiert und dann mit Chat GPT alles in das Format gebracht das node Red benötigt .

@fu-zhou
Copy link

fu-zhou commented Dec 10, 2023

Okay, die Langeweile über die anstehenden Feiertage wird sich somit in Grenzen halten... Wollen wir mal im ioBroker-Forum unter Node Red "Kommunikation mit S7" starten und da die Erkenntnisse sammeln. Beginnend bei "npm install node-red-contrib-s7"?

@fu-zhou
Copy link

fu-zhou commented Dec 10, 2023

Ich habe es aus dem s7.adapter in eine Excel Tabelle exportiert und dann mit Chat GPT alles in das Format gebracht das node Red benötigt .

Hat Chat GPT dann ein Import-File für den Flow rausgespuckt, so dass "s7 in" und "s7 out" nach Import schon verbunden ist?

@Zerotwo3185
Copy link

Zerotwo3185 commented Dec 10, 2023

Nein es hat mir nur das Format der Excel Tabellen umgewandelt so das ich dann in node red einfach die Tabelle wider einfügen konnte dann kann man ja die variablen im Dropdown menü auswählen. Chat gpt hat aber ein paar Anläufe gebraucht bis es richtig funktioniert hat.

@ea7777777
Copy link

@Zerotwo3185
Würd mich auch interessieren wie du dies hinbekommen hast. Chat GPT hat doch keinen Dateiupload. Hast du den Excel File Quelltext direkt in die Texteingabe reingepackt?

@Zerotwo3185
Copy link

Zerotwo3185 commented Dec 11, 2023

Ja einfach die spalten markieren und kopieren einfügen habe eine Excel Tabelle mit allen Datentypen als Beispiel erzeugt und anschließend meine Daten in eine Excel Tabelle eingefügt. Dann habe ich Chat gbt gesagt er soll meine Excel Tabelle nach dem oberen Vorgabe Konvertieren. Danach sollte Chat GPT daraus 2 Spaten machen so das ich die Spalte mit den DBs und den Kommentaren Einzelteil kopieren konnte. Wie gesagt hat nicht direkt geklappt brauchte so ca. 6-7 anläufe.

@fu-zhou
Copy link

fu-zhou commented Dec 11, 2023

Ich war jetzt mal so frei, unter Node Red im Forum ein Thema aufzumachen:
https://forum.iobroker.net/topic/70938/s7-mit-node-red-node-red-contrib-s7
Sollen wir uns da weiter austauschen?

Ich habe mal eine Variable manuell angelegt und die Liste dann exportiert, da war das Format dann klar...

@fu-zhou
Copy link

fu-zhou commented Jan 8, 2024

Ich glaube, dass ich einen Schritt weiter bin, s. https://forum.iobroker.net/post/1109064

Zusammenfassung: Ich habe unter Umgehung des S7 Adapters in der Javascript-Umgebung von ioBroker direkt über node Snap7 in die S7 geschrieben (vielen Dank an @Bettman66) und das gleiche Verhalten festgestellt. Als ich für jeden zu schreibenden Wert einen eigenen Buffer angelegt habe, war das Problem verschwunden!

Jetzt die Frage: Wer kennt sich mit Javscript und dem Buffer aus und kann den S7 Adapter entsprechend anpassen?

@fu-zhou
Copy link

fu-zhou commented Jan 10, 2024

@Bettman66 hat im Adapter eine klitze kleine Kleinigkeit verändert und seither (gestern Abend) läuft das Ding stabil ohne Ausreißer!!!
Es wäre schön, wenn Ihr den Adapter mal von Github (https://github.com/Bettman66/ioBroker.s7) installiert und das Verhalten über die nächsten Tage beobachtet und entweder hier oder im Forum (hoffentlich) bestätigt, dass die Ausreißer auch bei Euch nicht mehr vorkommen.

Vielen Dank vorab!

@Apollon77
Copy link
Contributor

Thank you @Bettman66 ... 1.4.3 on it's way to npm and latest soon

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

8 participants