neues Modul: SIEMENS Anbindung / S7 / Siemens Logo

Begonnen von charlie71, 12 August 2014, 15:33:23

Vorheriges Thema - Nächstes Thema

fu_zhou

#240
Die Kopplung steht jetzt, allerdings funktioniert ARead nicht richtig. In meinem DB 20 steht ab Byte 0 52.3 (float) und ab Byte 4 23.9 (float). Angezeigt in FHEM wird 66.0 und 65.0.
FHEM auf RasPi 2, S7-300 mit ET200S über ProfiNet

John

#241
Hallo Charly71,

es gibt einen S7-Simulator, der dir beim Testen sehr behilflich sein kann.

http://www.deltalogic.de/automatisierungstechnik/software/accontrol-s7-win32.html

Die Demo-Version ist völlig ausreichend. Das Teil ahmt eine S7 nach.
Wenn dir einer der User noch ein S7-Projekt mit den passenden DBs zusendet, kannst du dieses einspielen
und direkt testen. (Windows Umgebung vorausgesetzt).

Nur so als Idee. Mir hat das Teil sehr geholfen.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

fu_zhou

#242
AWrite scheint nicht zu funktionieren. Es kommen keine Werte im DB an. DRead und DWrite funktioniert, so weit ich das bisher erkennen kann.
Beim Rückrüsten auf V1.15 funktioniert ARead und AWrite wieder.

Ich hoffe, das ist in Ordnung, wenn ich hier zunächst kurz und knapp schreibe, was ich herausfinde. Im Perl-Code finde ich mich sowieso nicht zurecht...

Gruß

fu_zhou
FHEM auf RasPi 2, S7-300 mit ET200S über ProfiNet

charlie71

#243
Hallo fu_zhou,

mit der beliegenden SW sollte der Bug mit dem "Float" lesen gefixt sein.

Bei den Schreiboperationen klemmt es noch ein wenig.
Ich habe die aktuelle Version unter Linux  und Windows getestet.
Lesen funktioniert auf beiden Plattformen, schreiben nur unter Linux.
Interessant dabei ist, das jeweils die selben TCP Daten geschickt wird. Unter Windows scheinen die Information nicht anzukommen.
Das Schreiben funktioniert auch auf eine S300!!!!

Bitte um Feedback ob das Lesen von Float Variablen jetzt funktioniert.
lg
Charlie71

charlie71

#244
Hallo fu_zhou,

nachdem das Schreiben bei meiner S300 unter Linux funktioniert, würde ich dir gerne ein Testprogramm (testS300DB20.pm + 44_S7_Client.pm) zur Verfügung stellen.
Das Testprogramm geht wie folgt vor:
lesen von DB20 ab Position 0:
W0 ... 16 bit int
W2 ... 16 bit int
F4 ... 32bit float

schreiben auf DB20 ab Position 0:
W0 ... 16 bit int (neuer Wert 11)
W2 ... 16 bit int (neuer Wert 22)
F4 ... 32bit float (neuer Wert 3.14)

lesen von DB20 ab Position 0 (zur Kontrolle ob das Schreiben funktioniert hat):
W0 ... 16 bit int
W2 ... 16 bit int
F4 ... 32bit float

Bevor du das Testprogramm startest bitte den lib pfad im file "testS300DB20.pm" anpassen. Bitte auch die IP Adresse prüfen.

Zum Ausführen beide Files auf den FHEM server kopieren und dann in der Console ausführen:
perl testS300DB20.pm

Kannst du bitte das Ergebnis posten.

Danke und lG
Charlie71

pc1246

Heute abend habe ich sturmfrei!
Da mache ich dann auch mal mit!
Gruss Christoph
HP T610
Onkyo_AVR;Enigma2; SB_Server; SB_Player; HM-USB; PhilipsTV; harmony hub; Jeelink mit PCA301; Somfy; S7-300; LGW; HUE; HM-IP auf Charly; div

fu_zhou

#246
Hallo charlie71,

mit dem remote TSAP 0x0102 klappt es, ich sehe die Werte auch online auf dem PG im DB20 (logisch). Also funktioniert ja INT und REAL schreiben und lesen, was muss ich jetzt in FHEM anders machen?
------------------------------------------------
Byteorder: 12345678

------------------------------------------------
TEST PLC CONNECTION
------------------------------------------------
Connected ! PDU Length = 240
------------------------------------------------
READ TEST DB20 start 0 length 8
------------------------------------------------
ReadArea: 00, 00, 00, 00, 00, 00, 00, 00

W0: 0 , W2: 0 , F4: 0

------------------------------------------------
WRITE TEST DB20 start 0 length 8
------------------------------------------------
WriteArea: 00, 0b, 00, 16, 40, 48, f5, c3
WriteArea: sending Data (43):03, 00, 00, 2b, 02, f0, 80, 32, 01, 00, 00, 05, 00, 00, 0e, 00, 0c, 05, 01, 12, 0a, 10, 02, 00, 08, 00, 14, 84, 00, 00, 00, 00, 04, 00, 40, 00, 0b, 00, 16, 40, 48, f5, c3

------------------------------------------------
READ TEST DB20 start 0 length 8
------------------------------------------------
ReadArea: 00, 0b, 00, 16, 40, 48, f5, c3

W0: 11 , W2: 22 , F4: 3.14000010490417

------------------------------------------------
Test End
------------------------------------------------
FHEM auf RasPi 2, S7-300 mit ET200S über ProfiNet

charlie71

#247
Hallo fu_zhou,

perfekt, das sind ja gute Nachrichten. Bitte tausche die folgende Datei aus dem S7 FHEM Modul.
Bitte wieder um Feedback.

lG
Charlie71

fu_zhou

Kein Erfolg in FHEM. Schreiben funktioniert nicht und die float-Werte werden nicht richtig gelesen (INT lesen funktioniert). Ich habe zunächst mal alles auf ein und den selben Lese- und Schreib-DB reduziert. Der DB hat 4 Real (0.0, 4.0, 8.0, 12.0) und zwei INT (16.0, 18.0), also 20 Byte. Hier meine fhem.cfg:

# S7 Kommunikation
define PCS_7 S7 192.168.1.101 0 2
attr PCS_7 ReadDB-Config 22 0 20 1
attr PCS_7 WriteDB-Config 22 0 20

# Analogwerte
define INT_schreiben S7_AWrite db 22 16 s16
attr INT_schreiben IODev PCS_7
define REAL_schreiben S7_AWrite db 22 0 float
attr REAL_schreiben IODev PCS_7

define INT_lesen S7_ARead db 22 16 s16
attr INT_lesen IODev PCS_7
define REAL_lesen S7_ARead db 22 0 float
attr REAL_lesen IODev PCS_7
FHEM auf RasPi 2, S7-300 mit ET200S über ProfiNet

fu_zhou

#249
Jetzt passiert was ganz Verrücktes: Schreibe ich einen INT oder FLOAT, werden uralte Werte (INT: 5555, FLOAT: 45.67) in den DB geschrieben, aber nicht die, die ich eingebe. 5555 und 45.67 habe ich vorhin mal zu Testzwecken mit der Variablentablelle in den DB geschrieben.
INT Schreiben führt dazu, dass INT u n d FLOAT gleichzeitig mit den alten Werten beschrieben werden.
FLOAT Schreiben führt dazu, dass INT u n d FLOAT gleichzeitig mit den alten Werten beschrieben werden.
Wenn ich Licht schalte über DWrite (Trigger), geht der FLOAT Wert für die eine Sekunde im DB von 45.67 auf 182.68. Gleichzeitig wird der FLOAT und INT Wert im DB 22 wiede mit 5555 und 45.67 beschrieben, wenn vorher etwas anderes drin stand.
FHEM auf RasPi 2, S7-300 mit ET200S über ProfiNet

pc1246

#250
Hallo Ihr zwei
Ich spiele auch gerade mal ein bisschen rum! Ich habe aber die S7_Client von 11:32 am Wickel, da fu_zhou mit der anderen ja eher Probleme hat! Ich habe aber einige Probleme!

  • Das aktualisieren der Daten faengt erst an, wenn ich die DEF noch einmal neu schreibe. Fuer jeden Wert!
  • D_Write kann ich nur ein Bit nehmen, danach hat jedes weitere Fragezeichen
  • A_Write schreibt nicht auf die SPS

Gruss Christoph

Edit:
Habe gerade gesehen, die S7_Client ist von 16:46!
A_Write traegt auch nichts in den Write_puffer ein!
Im ersten Write_puffer sind noch seltsame Fragmente!
HP T610
Onkyo_AVR;Enigma2; SB_Server; SB_Player; HM-USB; PhilipsTV; harmony hub; Jeelink mit PCA301; Somfy; S7-300; LGW; HUE; HM-IP auf Charly; div

fu_zhou

#251
Hallo Christoph,

wir haben per PM noch einige Tests gemacht und charlie wird wohl eine Nacht drüber schlafen. Es bleibt spannend, ich fände es aber stark, wenn das rein Perl-basierte S7 Modul funktioniert und auch offiziell wird. Hoffentlich verliert charlie nicht die Lust, ich stehe auf jeden Fall für sämtliche Tests weiterhin zur Verfügung!

Was ich auch festgestellt habe zum Thema Fragmente: In meinem DB, in den ich Binärwerte von FHEM schreibe, ist das Bit 0.2 immer auf 1 gesetzt, wenn FHEM startet.
Es werden (bei der Libnodave) am Anfang alte/ seltsame Analogwerte angenommen, so dass ich beim Start von FHEM erst einmal initialisiere. Ich nutze z.B. die Außentemperatur aus dem Web mit dem Weather Modul. Solange das Module nicht updated steht in der Außentemperatur zur S7 der Wert eines anderen Analogwertes drin. Nach dem ersten Update von Weather passt es dann aber. Das ist wahrscheinlich ein Thema für später einmal...
FHEM auf RasPi 2, S7-300 mit ET200S über ProfiNet

pc1246

#252
Hallo fu_zhou
Ja ich bin auch gerne bereit weiter mit zu testen! Weil das Modul ist genau das was ich wirklich brauche! Wie sieht das denn bei Dir aus?
Geht bei Dir mehrere Bits schreiben?
Nach fhem-Neustart kommen alle Werte von der S7? (Ich habe da auch Fehler im log, als ob erst die Variablen angelegt werden und dann das IO_Dev)
Wenn ich einen reload des S7_Clients mache kriege ich eine Fehlermeldung:
Undefined subroutine &main::S7_Client_Initialize called at fhem.pl line 2052
Hast Du das auch?

Da ich es noch nicht produktiv nutze ist es momentan nicht so schlimm, aber ich wuerde gerne!

Gruss Christoph

Edit:
Habe gerade Dein Edit gelesen! Bei mir schimmelt die Libnodave natuerlich noch irgendwo rum! Nicht, dass die die Probleme bereitet!  :(
HP T610
Onkyo_AVR;Enigma2; SB_Server; SB_Player; HM-USB; PhilipsTV; harmony hub; Jeelink mit PCA301; Somfy; S7-300; LGW; HUE; HM-IP auf Charly; div

fu_zhou

#253
Hallo Christoph,

mehrere Bits schreiben habe ich noch gar nicht probiert, werde ich morgen mal rangehen. Ansonsten ist mein Logfile aber sauber und die Werte kommen (float zwar nicht richtig - wurde ja schon beschrieben).
Ich bin auch noch nicht produktiv mit FHEM und S7, das will ich aber unbedingt machen, weil ich keinen PC mit 250 Watt Tag und Nacht laufen lassen werde, nur um an der S7 über Tablet einen Raumsollwert zu ändern.

Ich glaube nicht, dass die Libnodave Probleme bereitet, die sitzt in ihrem Verzeichnis und wird ja von den neuen 44_S7 Modulen nicht aufgerufen. Ich habe sie bewusst drin gelassen, um durch den Tausch der 44_S7 Module aus der V1.15 schnell umrüsten zu können.
FHEM auf RasPi 2, S7-300 mit ET200S über ProfiNet

pc1246

#254
Deswegen ist meine auch noch da!
Na ich werde mal eben nach den floats gucken! Und dann wars fuer heute auch wieder lange genug vor der Kiste!
Wir hoeren uns!
Christoph

Edit:
Ich habe jetzt noch mal ein wenig rumprobiert!
Also die Berechnung der float-Werte ist falsch! Ich habe mich gerade gestern mit dieser kranken formel beschaeftigt, und mir scheint zumindest die Reihenfolge der Bytes stimmt nicht!
In den S7_Axxx-Modulen taucht auch noch jede Menge dave-Geraffel auf!? Da scheint entweder was von gebraucht zu werden, oder es wurde vergessen!?
Charlie, wenn wir Dir helfen koennen melde Dich bitte!

Danke und gute Nacht
Christoph

(//)

Hier mal die tolle Formel und noch ein Link wo ich es her habe:http://www.sps-lehrgang.de/zahlenformate-step7/
HP T610
Onkyo_AVR;Enigma2; SB_Server; SB_Player; HM-USB; PhilipsTV; harmony hub; Jeelink mit PCA301; Somfy; S7-300; LGW; HUE; HM-IP auf Charly; div