NEWS
S7 Adapter aktualisiert nicht komplett
-
Hallo Forum Gemeinde
zu aller erst ein großes Lob an die Entwickler von IoBroker und den Adaptern.
Mein Wohnhaus wurde vor ca. 5 Jahren gebaut und die komplette Steuerung wurde mit einer S7 Steuerung versehen. Licht, Rollladen, Heizung usw. werden hierüber gesteuert. Beruflich komme ich aus der Automatisierungswelt und programmiere täglich diese Steuerungen.
Nun möchte ich die Funktionen gerne mit einer Siri Sprachsteuerung erweitern. Dazu habe ich mir ein Raspberry PI 3 erworben und dort IoBroker installiert. Dies funktioniert auch. Der S7 Adapter (Version 0.3.0) wurde installiert und auch der Yahka Adapter (Version 0.55) wurde installiert.
Im S7 Adapter habe ich die benötigten Datenbaustein Adressen eingestellt und dazu eindeutige Namen (ID) vergeben. Die Variablen sind den jeweiligen Räumen zugeordnet. Diese tauchen nach dem Speichern und Aktivieren unter Objekte (z.B. s7.0.DBs.DB1600.Wohnzimmer_Steckdosen) auf. Ich habe das Steuerungsprogramm und die Signale in verschiedenen Datenbausteinen gegliedert.
Mein Problem ist nun folgendes:
Einige Datenbausteine können gelesen werden und andere wiederum nicht. Beispiel ist z.B. die Lüftungsanlage. Diese liegt im Datenbaustein DB2200.DBX0.0. Diese Variable wurde angelegt, die Kommunikation wird aufgebaut und ich sehe den Wert im IoBroker. Dieser Datenpunkt funktioniert auch schon mit dem Yahka Adapter und ich kann die Lüftungsanlage über Siri ein- und ausschalten.
Wenn ich dann aber z.B. die Steckdosen im Wohnzimmer ansteuern möchte (DB1600.DBX2378.0) dann kann ich diese schalten. Der Wert kommt auch in der Steuerung an und die Steckdosen werden eingeschaltet. 1 bis 2 Sekunden nachdem ich gesteuert habe, sehe ich dann das sich der Status im IoBroker wieder auf "false" zurück setzt. In der Steuerung bleibt das Bit allerdings auf "true". Somit sehe ich dann in der HomeApp nicht den aktuellen Status der Steckdose oder Lampe oder, oder, oder. Wenn ich in der Seite Objekte in der Spalte "Wert" den Wert schreibe, passiert dasselbe.
Die angesprochenen Steckdosen im Wohnzimmer sind folgend parametriert:
raw
{ "common": { "name": "Wohnzimmer Steckdosen schalten", "role": "switch", "type": "boolean", "unit": "", "history": "" }, "native": { "cat": "db", "type": "BOOL", "db": "DB1600", "len": "", "dbId": 1600, "address": 2378, "offsetBit": 0, "rw": true, "wp": false }, "acl": { "object": 1638, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1638 }, "_id": "s7.0.DBs.DB1600.Wohnzimmer_Steckdosen", "type": "state" }
Was ich schon versucht habe:
1. Datenbaustein Größen verkleinert und vergrößert > kein Erfolg 2. Datenbaustein Nummer verändert > kein Erfolg 3. S7-Adapter deinstalliert und neu installiert > kein Erfolg 4. Nur 1 Datenpunkt aus dem Datenbaustein abgefragt > kein Erfolg 5. IoBroker Update > kein Erfolg 6. Raspberry komplett neu aufgesetzt > kein Erfolg
7. Die gleiche Adresse mit Node-Red angesprochen > Funktionierte auf Anhieb
Allmählich gehen mir die Ideen aus wo ich noch nach meinem Fehler suchen soll. Hat irgend jemand eine Idee was ich probieren könnte?
Für eure Hilfe bedanke ich schon mal im Vorraus.
-
Kennst du wireshark? Es ist interessant was tatsächlich im DB1600 gelesen wird, nachdem als true geschrieben wurde.
-
Wireshark ist mir bekannt, habe aber bisher nur einmal mit gearbeitet. Dies dann mehr mit probieren anstelle von wirklich wissen :roll: .
Das komische ist halt, dass die Kommunikation ja prinzipiell funktioniert. Ich gebe den Befehl aus IoBroker und er kommt an der richtigen Stelle in der SPS an. Dort bleibt das Bit dann auch auf "true" nur nach den 2 Sekunden geht's im Objekt Baum in IoBroker wieder auf "false" obwohl es in der SPS auf "true" bleibt.
Mit dem Wireshark kann ich dann zumindest sehen ob im Protokoll ein zweiter Befehl mit einem "false" durchgeht. Werde es heute Abend ausprobieren.
Danke.
-
Kurzer Nachtrag
Habe gerade mit dem Poll Delay gespielt. Wenn ich diese Zeit erhöhe (z.B. 30000ms) dann verlängert sich auch der Abstand zwischen dem Absetzen des Befehls auf "true" und dem danach automatischen zurücksetzen auf "false" im IoBroker Objekt Baum.
-
Hallo Matze,
ich habe auch die S7 im Einsatz - der Adapter funktioniert bei mir einwandfrei. Ich nutze allerdings DBs < 100. Ich habe 4 Kommunikations DBs mit ioBroker angelegt (1x binär lesen, 1x binär schreiben, 1x real lesen, 1x real schreiben). Binär schreibe (von ioBroker Richtung S7) ich nur als Impuls, wenn ich ein Dauersignal brauche, setze ich in der SPS ein Flipflop. Hintergrund ist, dass ich Licht über Stromstoßrelais schalte, da is der DO einfach parallel zum Taster.
Auf der Startseite des Adapters kannst du ja die Impulslänge sowie Poll-Zeit paramterieren. Wie konfigurierst du den Adapter (die Datenpunkte/ DBs)? Ich habe mir da ein Excel-Tool gebaut und importiere alles über die CSV-Import Funktion vom Adapter - s. S7 Anleitung auf der Homepage.
Schau auch mal nach der Zykluszeit deiner S7, die sollte aber kaum über 50ms liegen, wie lange braucht der S7 Adapter für einen Zyklus - steht unter Objekte - S7.0 - Configuration oder so ähnlich. Da steht "Connection - True" und auch die Zeit - bei mir mit meinen 4 DBs zwischen 80 und 120 ms, Poll Delay habe ich dabei auf 200 ms gesetzt.
Wir können gerne per Email weitermachen…
-
Hallo fu_zhou
ich habe gerade nochmal den ganzen Raspi neu aufgesetzt mit dem Image "ioBroker_Image_RPi_2-3_20170830_stretch". Hier habe ich bewusst nichts geändert bzw. irgendwelche Updates laufen lassen. War mir selber nicht mehr sicher da ich mit dem Jessie Image verschieden Sachen ausprobiert habe .
Leider macht der Adapter genau das selbe wie gestern und heute morgen. Anbei habe ich ein paar Screenshots hochgeladen welche meine Einstellungen definieren.
Die Zykluszeit der Steuerung beträgt 14ms. Das ganze läuft auf einem IPC277E 12" und der Soft SPS Win AC RTX. Das Programm wurde mit Tia Portal V13 geschrieben.
Ich habe mir ebenfalls eine Excel Tabelle gemacht in der ich alle Datenpunkte dann einfach importieren kann. Der Import Vorgang funktioniert ja auch problemlos.
Hallo Bluefox
Anbei habe ich das Wireshark Capture File mit gesendet. Ich habe an meinem Switch den Port des Raspi gespiegelt und mich mit dem Rechner dran gehängt. Dann das Protokoll nach S7Comm gefiltert und nur die eine Variable ausgelesen. Diese ist in der Steuerung die ganze Zeit auf true gewesen. Leider komme ich da nicht ganz hinter wo wirklich das Bit abgefragt wird.
Ich hoffe euch damit einiges an Informationen zu geben um dem Problem auf die Spur zu kommen.
Gerne komme ich auch auf das Angebot der privaten Email zurück.
3574_raspberry_pi_2017_09_19_211704.rar -
Der Adapter basiert auf Snap7. Hier heißt es:
> Snap7 is an open source, 32/64 bit, multi-platform Ethernet communication suite for interfacing natively with Siemens S7 PLCs. The new CPUs 1200/1500, the old S7200, the small LOGO 0BA7/0BA8 and SINAMICS Drives are also partially supported.
Die Soft SPS sollte sich eigentlich verhalten, wie eine S7 CPU - in Step7 ist das sicherlich der Fall. Kann es sein, dass Snap7 ein Problem mit Win AC hat? Kann ich mir zwar eigentlich nicht vorstellen, aber wer weiß…
Hast du mal probiert über vis zu schalten, z.B. mit einem HQ Widget?
-
Hallo
Die Vermutung hatte ich auch schon. Ich wollte morgen mal mit der alten S7-315 PN testen. Die liegt noch im keller und müsste auch noch funktionieren. Was und wie die WinAC arbeitet und reagiert weiß ich halt nicht.
Mal schauen was damit passiert. Ich werde dann die Ergebnisse hier posten.
Danke.
-
Hallo fu_zhou
Hallo Bluefox
ich habe soeben einen Test gefahren mit Hardware CPU S7-315-2 PN/DP (6ES7 315-2EG10-0AB0 v 2.3) .
In der Steuerung habe ich einen Datenbaustein DB200 angelegt mit einem Array [0..10000] of Byte. Dort wollte ich das Bit DB200.DBX2378.0 einschalten. Der Befehl wurde abgesetzt und in der Steuerung wechselte das Bit von "false" auf "true". Die Kommunikation zur Steuerung und der richtigen Speicherstelle funktioniert. Wie schon die Tage bei der Soft SPS wechselt hier ebenfalls der Status im Objektbaum nach 1 bis 2 Sekunden wieder auf "false". In der SPS blieb das Bit auf "true".
Danach habe ich das Bit geändert und das Bit DB200.DBX0.0 eingeschaltet. Nach absetzen des Befehls wurde das Bit in der SPS auf "true" geschaltet. Hier blieb auch nach mehreren 10 Sekunden das Bit im Objekt Baum ebenfalls auf "true". Sprich das Verhalten ist zwischen dem Bit 0.0 und dem Bit 2378.0 zumindest unterschiedlich.
Danach habe ich nochmals wieder auf das Bit 2378.0 zugegriffen und der Status im Objektbaum sprang wieder nach 1-2 Sekunden auf "false".
Dann habe ich weiter getestet ab welchem Bit der Unterschied auftaucht. Bei der Abfrage der Bits 0.0 - 0.7 bleibt der Status im Objektbaum entsprechend dem Status wie er in der SPS anliegt. Ab Bit 1.0 geht der Status nach den besagten 1-2 Sekunden wieder auf "false".
Was könnte ich noch testen bzw. wo könnte es noch ein Fehler geben?
@Bluefox Konnte man aus dem Wireshark Capture was ermitteln?
-
Kannst du diese Zeile
https://github.com/ioBroker/ioBroker.s7 … n.js#L1245
So modifizieren?
main.dbs[n].offsetByte - main.db_size[n].lsb,
Und dann testen?
-
Ich habe jetzt einen DB28 angelegt und schreibe mit einem Schalter (hqWidgets - Checkbox) in den DBX0.0 und DBX1.0. Bei mir ist das Verhalten folgendermaßen:
-
die Werte kommen im DB richtig an und das Widget zeigt auch den richtigen Zustand an
-
unter "Zustände" wird auch der richtige Wert angezeigt - wie im Widget und wie im DB28
-
ABER: unter "Objekte" bleibt der DBX0.0 auf "true" stehen, während der DBX1.0 von "true" auf "false" wechselt und den korrekten Zustand anzeigt.
-
und noch einmal ABER: nach einem Refresh der Objekte-Seite (z.B. F5) hat der DBX0.0 auch wieder korrekt angezeigt.
-
Funktioniert sowohl mit Dauersignal als auch mit Impuls und auch mit DBX2378.0 (anstatt DBX1.0)
Alles mit der Version 0.3.0, daher ist aus meiner Sicht bei der Kommunikation im Moment keine Anpassung notwendig. Die 0.3.1 habe ich (noch) nicht installiert, da die 0.3.0 bei mir läuft und ich nicht weiß, was die 0.3.1 in meinem System bewirkt.
Durch den großen DB28 (Array of 0..30000 of Bool) ist meine poll time von 100 ms auf über 400 hoch gegangen. Da haben sich bei einer eingestellten poll delay Zeit von 500 ms die Objekte seltsam verhalten - sind beim Bedienen zwischen True und False hin und her gesprungen, bis sie ihren endgültigen (richtigen) Zustand erreicht hatten. Die poll delay Zeit sollte mindestens 3x so groß gewählt werden, wie die poll time, gemessen vom Adapter. Bei 400ms habe ich 1500 ms eingestellt, damit war das hin- und herspringen zwischen true und false vorbei.
Ich habe den DB28.DBX0.0, DBX2378.0 händisch bei den Datenpunkten hinzugefügt. Wenn man diese Datenpunkte wieder löscht, wird "speichern" oder "speichern und schließen" nicht aktiv und so bleiben die gelöschten Datenpunkte vorhanden. Wenn man z.B. Poll Delay unter "Allgemein" kurz verändert, wird "speichern" klickbar und nach dem Speichern sind auch die händisch gelöschten Datenpunkte weg. Hier sollte in der Oberfläche noch mal nachgebessert werden.
-
-
Ich habe jetzt einen DB28 angelegt und schreibe mit einem Schalter (hqWidgets - Checkbox) in den DBX0.0 und DBX1.0. Bei mir ist das Verhalten folgendermaßen:
-
die Werte kommen im DB richtig an und das Widget zeigt auch den richtigen Zustand an
-
unter "Zustände" wird auch der richtige Wert angezeigt - wie im Widget und wie im DB28
-
ABER: unter "Objekte" bleibt der DBX0.0 auf "true" stehen, während der DBX1.0 von "true" auf "false" wechselt und den korrekten Zustand anzeigt.
-
und noch einmal ABER: nach einem Refresh der Objekte-Seite (z.B. F5) hat der DBX0.0 auch wieder korrekt angezeigt.
-
Funktioniert sowohl mit Dauersignal als auch mit Impuls und auch mit DBX2378.0 (anstatt DBX1.0)
Alles mit der Version 0.3.0, daher ist aus meiner Sicht bei der Kommunikation im Moment keine Anpassung notwendig. Die 0.3.1 habe ich (noch) nicht installiert, da die 0.3.0 bei mir läuft und ich nicht weiß, was die 0.3.1 in meinem System bewirkt.
Durch den großen DB28 (Array of 0..30000 of Bool) ist meine poll time von 100 ms auf über 400 hoch gegangen. Da haben sich bei einer eingestellten poll delay Zeit von 500 ms die Objekte seltsam verhalten - sind beim Bedienen zwischen True und False hin und her gesprungen, bis sie ihren endgültigen (richtigen) Zustand erreicht hatten. Die poll delay Zeit sollte mindestens 3x so groß gewählt werden, wie die poll time, gemessen vom Adapter. Bei 400ms habe ich 1500 ms eingestellt, damit war das hin- und herspringen zwischen true und false vorbei.
Ich habe den DB28.DBX0.0, DBX2378.0 händisch bei den Datenpunkten hinzugefügt. Wenn man diese Datenpunkte wieder löscht, wird "speichern" oder "speichern und schließen" nicht aktiv und so bleiben die gelöschten Datenpunkte vorhanden. Wenn man z.B. Poll Delay unter "Allgemein" kurz verändert, wird "speichern" klickbar und nach dem Speichern sind auch die händisch gelöschten Datenpunkte weg. Hier sollte in der Oberfläche noch mal nachgebessert werden. `
Ich habe doch ein Problem gefunden. Wenn man nicht von 0 in DB startet dann wird falsch berechnet.Als Workaround kann ich anbieten ein Datenpunkt mit 0.0 im DB anzulegen.
-
-
mit der 0.3.1 kommen keine Real-Werte mehr an! - Werde wohl mal Back in Time bemühen…
-
Hallo zusammen,
es hat mir auch die ganze Zeit keine Ruhe gelassen. Es liegt in der Tat an dem im letzten Beitrag von Bluefox beschriebenen Workaround. Wenn in den Datenbausteinen jeweils ein Dummy Bit (DBX0.0) angelegt wird, werden alle anderen Werte die diesem folgen auch richtig angezeigt.
Leider ist es aber auch so, dass die Version 0.3.1 durch die gestrigen Änderungen die Real Werte auch mit diesem Workaround nicht richtig anzeigt. Diese Änderungen sollten angepasst bzw. Rückgängig gemacht werden. Ich arbeite aktuell jetzt mit der Version 0.2.6 die alle Werte, so wie ich es im Moment beurteilen kann, richtig schreibt und liest.
Ich möchte mich auf jeden Fall bei Bluefox und fu_zhou für die Unterstützung und Hilfe bedanken. Super Arbeit .
-
Habe den Fehler gefunden und gecheckt. Bitte 0.3.2 testen
-
Habe eben auf die 0.3.2 hochgerüstet - scheint zu funktionieren. Nur ein kleiner Bug: wenn man unter "DB" einen Datenpunkt manuell löscht, wird "speichern" nicht als Schaltfläche aktiv. Da muss man unter "Allgemein" kurz was ändern und wieder zurück gehen, dann kann man speichern und der Datenpunkt ist auch weg.
-
Habe eben auf die 0.3.2 hochgerüstet - scheint zu funktionieren. Nur ein kleiner Bug: wenn man unter "DB" einen Datenpunkt manuell löscht, wird "speichern" nicht als Schaltfläche aktiv. Da muss man unter "Allgemein" kurz was ändern und wieder zurück gehen, dann kann man speichern und der Datenpunkt ist auch weg. `
Fixed in 1.0.0 -
1.0.0 läuft!
-
Ich habe den Adapter 1.0.0 getestet und hatte Probleme mit den Datenpunkten. Zuerst schien alles zu funktionieren. Beim Testen wurden dann auf einmal nur falsche Werte angezeigt. Auch ein das Dummy Bit 0.0 für die Datenbausteine brachte keine Änderung. Ich musste dann wieder zurück nach 0.2.6, damit nicht was falsches in die Steuerung geschrieben wird da mittlerweile eine Visu darauf läuft.
Kann es jetzt auf die Schnelle nicht nachvollziehen und testen. Hoffe, dass ich da Anfang der Woche dran komme.
Gruß Matthias
-
Hallo zusammen,
seit gestern Abend habe ich nun auch den Adapter mit der Version 1.0.0 bei mir am laufen. Scheint so alles zu funktionieren . Warum es beim letzten Mal nicht ganz passte, keine Ahnung.
Des weiteren habe ich mittlerweile auch die Mobile Ansicht zum laufen bekommen. Hier wurden mir ja schon in der Vergangeheit alle Aufzählungen angezeigt aber ich konnte nichts schalten. Um auch schalten zu können mussten in den Objekten die Eigenschaften "Read" und "Write" hinzugefügt werden.
Könnte man dies eventuell auch automatisiert beim Anlegen der Objekte mit übernehmen. Im S7-Adapter werden diese Eingeschaften ja schon festgelegt und daraus dann die Objekte erstellt.