neues Modul: SIEMENS Anbindung / S7 / Siemens Logo

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

Vorheriges Thema - Nächstes Thema

Starkstrombastler

ZitatIch suche nun Leute: die die libNoDave für folgende Plattformen kompilieren:
* linux x86
Hier die libnodave.so und Nodave.so, wie ich sie auf meinem 32Bit x86-System kompiliert habe.

Auf meinem System funktioniert damit die grundsätzliche Kommunikation mit einer Logo7, ich habe aber noch nicht alle Funktionen getested.
IPC\Ubuntu + Fhem, 1wire, Shellies, Siemens Logo!, Z-Wave, PhilipsTV, Vu+duo2, KM200

fu_zhou

#196
Hallo zusammen,

ich habe es dank der hervorragenden Beschreibungen hier geschafft, Analogwerte aus meine S7 (projektiert mit PCS 7) über TCP/IP in FHEM darzustellen. Es handelt sich um die Temperatur und Feuchte im Keller, die über zwei 0-10V Analogeingänge an der S7 hängen.

Da ich die Werte als Float (Doppelwörter) übergebe, stellt FHEM entsprechend viele Nachkommastellen dar. Gibt es die Möglichkeit, z.B. über ein Attribut, die Nachkommastellen auf z.B. 2 zu limitieren und dann noch die Einheit (frei vergebbar wie room oder group) anzuzeigen - hier °C und % rel. H.?

Obwohl ich die libnodave version 8.5 installiert habe, wird "get S7 libnodaveversion" in FHEM mit 8.4 beantwortet. Kann das jemand bestätigen?

Binärwerte schreiben funktioniert auch mit:
define Binaer_an_S7 S7_DWrite db 23 0.0
Ist es möglich, den IST-Zustand und Schaltbefehl in einem "Gerät" anzuzeigen? Im Moment lese ich ein Bit aus dem DB, das angezeigt wird und ich schreibe ein Bit in einen DB, das auch angezeigt wird - das ist S7_DRead und S7_DWrite. Idealerweise gibt es ein Gerät, das den IST-Zustand (über S7_DRead) anzeigt und den Schaltbefehl (über S7_DWrite) mit ON OFF ausführen kann. Vielleicht kann man das ja auch mit FHEM-Mitteln hinbekommen, da habe ich aber bisher nichts gefunden. Für Analogwerte wäre das ebenso sinnvoll - Istwert (S7_ARead) und Sollwert (S7_AWrite).

Will ich allerdings einen Analogwert schreiben mit:
define Feuchte_Soll S7_AWrite db 22 0 u16

kommt immer die Meldung:
old version of libnodave, you need to update the libnodave


und Feuchte_Soll wird nicht angelegt.

Hat jemand eine Idee? Wie gesagt, die Libnodave ist die Neueste, die angeboten wird (8.5). Mit 8.5.1 kommt die selbe Meldung.


Für die Hilfe besten Dank vorab und Gruß an alle S7-FHEM-Koppler!
FHEM auf RasPi 2, S7-300 mit ET200S über ProfiNet

moonsorrox

wieder einmal etwas von mir, folgendes ist passiert ohne das ich an Fhem etwas gemacht habe.
Ich schaue den Status und sehe fhem not running, ist wohl um 13.19 passiert

Hier mal der log Auszug:
2014.12.29 13:20:01 3: S7: mylogo disconnected
2014.12.29 13:20:00 3: mylogo S7_connect daveConnectPLC error: -1=no message defined!
2014.12.29 13:19:59 1: Accept failed (WEB: Too many open files)
2014.12.29 13:19:58 3: S7: mylogo disconnected
2014.12.29 13:19:58 3: mylogo S7_connect: connect to PLC: 0
2014.12.29 13:19:58 1: Accept failed (WEB: Too many open files)
2014.12.29 13:19:58 3: mylogo S7_connect daveConnectPLC error: -1=no message defined!
2014.12.29 13:19:56 3: mylogo S7_connect: connect to PLC: 0
2014.12.29 13:19:56 3: S7: mylogo disconnected
2014.12.29 13:19:56 1: Found and deleted bad fileno for FHEMWEB:84.131.191.117:58290
2014.12.29 13:19:56 1: ERROR: Select error -1 (9), error count= 0
2014.12.29 13:19:56 3: mylogo S7_Undef closeSocket error: -1=no message defined!
2014.12.29 13:19:56 3: S7: mylogo disconnected
2014.12.29 13:19:56 3: S7: mylogo disconnected
2014.12.29 13:19:56 3: S7: mylogo disconnected
2014.12.29 13:19:56 3: mylogo S7_connect daveConnectPLC error: -1=no message defined!
2014.12.29 13:19:54 3: mylogo S7_connect daveConnectPLC error: -1=no message defined!
2014.12.29 13:19:53 1: Accept failed (WEB: Too many open files)
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

charlie71

Hallo fu_zhou

siehe meine Kommentare unten.

lG
Charlie71

ZitatDa ich die Werte als Float (Doppelwörter) übergebe, stellt FHEM entsprechend viele Nachkommastellen dar. Gibt es die Möglichkeit, z.B. über ein Attribut, die Nachkommastellen auf z.B. 2 zu limitieren und dann noch die Einheit (frei vergebbar wie room oder group) anzuzeigen - hier °C und % rel. H.?
Ist ein Guter Vorschlag, ich kann mir vorstellen, dass diese Features in der nächsten Version enthalten sein werden.


ZitatObwohl ich die libnodave version 8.5 installiert habe, wird "get S7 libnodaveversion" in FHEM mit 8.4 beantwortet. Kann das jemand bestätigen?
Du verwendest die originale libnodave Version. Leider befinden sich im originalen Perl interface nicht alle Funktionen die benötigt werden. Aus diesem Grund haben wir das perl interface (Nodave.xs) erweitert und neu compiliert.
--> verwende einfach die beiliegenden libs (Nodave.so) dann sollte es klappen.


ZitatBinärwerte schreiben funktioniert auch mit:
define Binaer_an_S7 S7_DWrite db 23 0.0
Ist es möglich, den IST-Zustand und Schaltbefehl in einem "Gerät" anzuzeigen? Im Moment lese ich ein Bit aus dem DB, das angezeigt wird und ich schreibe ein Bit in einen DB, das auch angezeigt wird - das ist S7_DRead und S7_DWrite. Idealerweise gibt es ein Gerät, das den IST-Zustand (über S7_DRead) anzeigt und den Schaltbefehl (über S7_DWrite) mit ON OFF ausführen kann. Vielleicht kann man das ja auch mit FHEM-Mitteln hinbekommen, da habe ich aber bisher nichts gefunden. Für Analogwerte wäre das ebenso sinnvoll - Istwert (S7_ARead) und Sollwert (S7_AWrite).

Eigentlich sollte es nicht notwendig sein für einen Binärzustand einen DRead und ein DWrite einzurichten.
Wenn man einen DWrite anlegt, wird der entsprechende Speicherblock von der SPS geholt und als Anfangszustand übernommen. Dieser kann selbstverständlich auch angezeigt werden.


ZitatWill ich allerdings einen Analogwert schreiben mit:
define Feuchte_Soll S7_AWrite db 22 0 u16

kommt immer die Meldung:
old version of libnodave, you need to update the libnodave


und Feuchte_Soll wird nicht angelegt.

Hat jemand eine Idee? Wie gesagt, die Libnodave ist die Neueste, die angeboten wird (8.5). Mit 8.5.1 kommt die selbe Meldung.

Fehlerursache siehe oben.


charlie71

Hallo moonsorrox,

soweit ich dass überblicken kann kommt diese Fehlermeldung wenn ein Prozess zu viele Files öffnet
(Anmerkung: in Linux ist alles ein File auch ein offenes TCP Port.)

Prüfe mal deine Einstellungen wie hier beschrieben:
https://rtcamp.com/tutorials/linux/increase-open-files-limit/

lG
Charlie71

fu_zhou

#200
Hallo charlie71,

ich habe die "libnodave.so" und "Nodave.so" aus dem ARM-Verzeichnis der Version 1.13 in die entsprechenden Pfade auf dem Pi kopiert. "Get libnodaveversion" gibt jetzt auch 8.5.1 zurück, trotzdem kommt die Fehlermeldung "old version of libnodave, you need to update the libnodave" wenn ich "define Feuchte_Soll S7_AWrite db 22 0 u16" über das Befehlsfeld abschicke.
Habe komplett auf die 8.5.1 hochgerüstet (also wget http://downloads.sourceforge.net/project/libnodave/libnodave/libnodave-0.8.5.1.tar.gz mit allem was dazu gehört), leider ohne Erfolg.

Bei S7_DRead ist mir noch aufgefallen, dass der Wert nicht zyklisch gelesen und aktualisiert wird. Während beim S7_ARead im Feld "Readings" der "state" sekündlich aktualisiert wird, die Zeitangabe daneben rot ist und mit jeder Aktualisierung die neue Uhrzeit zeigt, passiert dies bei S7_DRead nicht und die Uhrzeit bleibt grau. Wenn man das Browserfenster aktualisiert, wird der neue Wert gezeigt.
Dies gilt in beiden Fällen sowohl für die Übersicht ("Glühbirne") als auch für die Detailanzeige wenn man auf das Gerät klickt. Ich würde auch gerne die S7_DReads zyklisch aktualisiert haben.

Ich habe 2 "S7" angelegt - eine für Binärwerte und eine für Analogwerte. In beiden habe ich eine ReadDB-Config und WriteDB-Config:
S7-ANA: ReadDB-Config: 20 0 8 1 (2 Floats)
S7-ANA: WriteDB-Config: 22 0 4 (1 Float) - wenn ich es dann mal auf meinem System zum Laufen bekomme...

S7-BIN: ReadDB-Config: 21 0 2 1 (16 bit, wobei ich im Moment nur bit 0.0 verwende)
S7-BIN: WriteDB-Config: 23 0 2 (16 bit, wobei ich im Moment nur bit 0.0 verwende)

Alles das was bei mir bisher funktioniert ist überraschend schnell, in Bruchteilen von Sekunden sehe ich nach dem Schalten in FHEM den neuen Binär-Wert im DB der S7 und die Float-Werte werden auch quasi in Echtzeit aktualisiert (wie sinnvoll das ist, ist eine andere Frage, beim Testen aber sehr hilfreich)
FHEM auf RasPi 2, S7-300 mit ET200S über ProfiNet

charlie71

Hallo fu_zhou,

@Lib
das Modul prüft ob in der Nodave.so die funktion "davePut8At" vorhanden ist. Wenn nicht wird diese Fehlermeldung ausgegeben. Ich denke dass aus irgend einem Grund hier noch die alte lib geladen wird und nicht die die beim modul attached ist.
(Es ist nicht notwendig dass du den Source von der libnodave herunterlädst).

@Aktualisieren der Readings
Im wesentlichen kannst du selbst konfigurieren welcher Speicherblock wie oft von einer SPS geholt wird.
Das geht mit dem Attribut "ReadDB-Config" für das S7 modul.
Beispiel:
SET attr myS7 ReadDB-Config 0 0 8 300 0 923 61 2 0 600 10 5
Hier werden 3 lese Speicherbereiche (Reading) definiert:
0 0  8 300 ... liest 8 Bytes von DB0 ab Adresse 0 alle 5 min von der SPS (ich verwende diese Konfig für mein Temperaturlogging, ich möchte ja nicht zu viele Daten loggen)
0 923 61 2 ... liest 61 Bytes von DB0 ab Adresse 923 alle 2 min (ich verwende dies um Schalterzustände zu visualisieren)
0 600 10 5 ... liest 10 Bytes von DB0 ab Adresse 600

Bitte prüfe deine Config ob du für alle benötigten Speicher bereiche ein Reading definiert hast.
Ich empfehle das nur ein S7 Modul pro SPS eingerichtet wird, da man ja mehrere Readings definieren kann.

@Aktualisierungsgeschwindigkeit:
Aktuell ist es so, dass nach jedem SET Zugriff auf eine Analoge/Digitale Größe ein sofortiges Update zur SPS geschickt wird.

lG
Charlie71

fu_zhou

#202
Hallo charlie71,

habe meine Konfiguration jetzt umgebaut und verwende nur noch eine S7, dafür lese ich jetzt mit einer ReadDB-Config 2 DBs ein. Jetzt funktioniert auch das zyklische Update sämtlicher Werte ohne Probleme!
Danke für die Hinweise!

Was hat das nun mit der PDU Länge auf sich? Lt. Handbuch ist die bei einer S7-300 222 Byte groß, wennn ich nun 2 DBs mit einer ReadDB-Config lese, dürfen diese dann zusammen max. 222 Byte groß sein?

Allerdings ist das mit S7_AWrite zum Mäuse melken! Ich habe noch einmal die Dateien überprüft: Auf dem PI sind die aus deinem Paket (Größe stimmt und unterscheidet sich vom Original) und auch die Rechte sind wie bei den Originalen zuvor.
Aber irgendetwas hat sich doch geändert: Während bisher das Log-File mit Einträgen
S7: PCS_7 S7_connect Warning your libnodave does not support setting the PDUlength, this could be a potential issue
S7: PCS_7 S7_connect Warning your libnodave does not support setting the Communicationtype, this could be a potential issue

voll war, kommen diese seit Ersetzen der lib nicht mehr. S7_AWrite lässt sich dennoch nicht überreden...

Wenn es sein muss, installieren ich nochmal von Ganz vorne, also beginnend mit dem Raspbian Image. Wann hat du die libnodave.so und Nodave.so ersetzt? Wie hast du die Libnodave installiert? So wie auf Seite 1 von ThomasRamm beschrieben? Wahrscheinlich nicht, da du ja schreibst, dass man die Source nicht runterladen braucht. Vor der FHEM installation?

Weiterhin vielen Dank!
FHEM auf RasPi 2, S7-300 mit ET200S über ProfiNet

moonsorrox

#203
Zitat von: charlie71 am 29 Dezember 2014, 20:32:25
Hallo moonsorrox,

soweit ich dass überblicken kann kommt diese Fehlermeldung wenn ein Prozess zu viele Files öffnet
(Anmerkung: in Linux ist alles ein File auch ein offenes TCP Port.)

Prüfe mal deine Einstellungen wie hier beschrieben:
https://rtcamp.com/tutorials/linux/increase-open-files-limit/

lG
Charlie71

ich muss mich jetzt hier mal verabschieden, da ich echt massive Probleme mit Fhem habe seit ich das mit dem Logo installiert habe...!
Folgendes dazu ich habe heute wieder ca. 3x einen Fhem Absturz gehabt, welchen ich noch nicht mal sofort bemerkt habe..
Fhem über putty auf den Status abgefragt sagt er mir fhem is not running...!
Das passierte laufend die Tage, denn ich habe mich gewundert das verschiedene Befehle nicht ausgeführt wurden.

Deshalb habe ich heute gegen 14 Uhr alles was damit zutun hat entfernt, da der letzte Absturz ca. 13.30 Uhr war...
Sorry für diese schlechten Nachrichten, aber ich verzichte erst einmal lieber auf die Anzeige des Logo, als das ich mit den Abstürzen lebe...
So brauche ich nicht laufend zu kontrollieren ob mein Fhem noch läuft... denn fhem läuft jetzt erst einmal wieder ohne Absturz, bisher...! :-\

charlie71 und andere ihr macht hier einen Super Job  :D, weiter so ich lese trotzdem eifrig mit was sich so tut
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

charlie71

Hallo fu_zhou,

@PDU Length. Diese ist abhängig vom SPS Typ.
Die PDU beschränkt die maximale länge eines Datenpaketes von der SPS.
Wenn längere Daten benötigt werden müsste ein multiread implementiert werden.

Für dieses Modul, heist das folgendes: Du musst lediglich darauf achten, dass kein einzelnes reading eine Länge > der maximalen PDU length ist. Es spricht aber nichts dagegen, dass jedes reading gleich der maximalen PDU length ist.

@Libnodave
Die Log file Einträge zeigen, dass du noch eine falsche libnodave verwendest.
Bist du sicher, dass du nach der Beschreibung im Readme.txt vorgegangen bist:
Zitat2) Installation

a) Copy the libnodave.so into your bin directory (take care of your plattform). For example /usr/lib/
b) Copy the nodave.pm into your perl lib dir: For example /usr/local/lib/perl/5.18.2
c) Create a "Nodave" dir into you perl lib auto direction:: For example /usr/local/lib/perl/5.18.2/auto/Nodave
d) Copy the Nodave.so into that dir
e) Copy the fhem modules into the fhem modules dir: For example: /opt/fhem/FHEM/


Bist du sicher dass du die Files aus dem ZIP-file verwendest (Du musst nix kompilieren!).

lG
Charlie71

John

Hallo Charlie71,

gibt es den keine Möglichkeit die tatsächliche PDU-Length von Libnodave ermitteln zu lassen ?

Die Antwort liegt im ISO-Response nach einem ISO-Connect.

Mit dem  Wissen darüber  könntest du viele User-Fehler bereits auf Modul-Ebene abfangen.
John

CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

fu_zhou

Hallo Charlie71,

ich habe noch einmal von Vorne angefangen, das System komplett neu installiert. Dabei habe ich die Libnodave nicht heruntergeladen, sondern nur die Dateien aus der V1.13 verwendet. Meine zuvor gesicherte fhem.cfg (copy - paste in ein txt-File) hat auch auf Anhieb wieder funktioniert, im Log-File wurde das Fehlen der autosplit.ix bemängelt (PERL WARNING: Can't locate auto/Nodave/autosplit.ix...), da habe ich die Datei von Seite 13 hergenommen und dazu kopiert, steht jetzt im Verzeichnis mit Nodave.so
Trotzdem bleibt es bei dem Fehler: Feuchte_Soll S7_AWrite_Define: old version of libnodave, you need to update the libnodave
An einer Stelle steht noch im Log: PERL WARNING: Use of uninitialized value $a[5] in lc at ./FHEM/44_S7_AWrite.pm line 57. Das ist aber bei den weiteren Versuchen, S7_AWrite anzulegen, nicht mehr gekommen.

Die verwendete Nodave.so hat eine Dateigröße von 225.953
libnodave.so: 139.896
Nodave.pm: 8.697
44_S7.pm: 32.913
44_S7_ARead.pm: 8.061
44_S7_AWrite.pm: 14.276
44_S7_DRead.pm: 8.799
44_S7_DWrite.pm: 13.944
FHEM auf RasPi 2, S7-300 mit ET200S über ProfiNet

charlie71

Hallo John,

ich denke die Libnodave sollte das können. Ich hab das ganze schon mal in einem Log gesehen.
Jedoch habe ich im Sommer ohne dem manuellen setzen keine Verbindung zur Logo aufbauen können.

Ich werde mir das nochmals anschauen.

lG
Charlie71

Zitat von: John am 30 Dezember 2014, 10:32:55
Hallo Charlie71,

gibt es den keine Möglichkeit die tatsächliche PDU-Length von Libnodave ermitteln zu lassen ?

Die Antwort liegt im ISO-Response nach einem ISO-Connect.

Mit dem  Wissen darüber  könntest du viele User-Fehler bereits auf Modul-Ebene abfangen.
John

charlie71

Hallo

So jetzt gibt es eine neuer Release.
Diesmal nur Bugfixes.

Versionsinfo V1.14:

* Fehler in recreation behoben. (IMPORTANT FIX!!!!)
* PLC reconnection function improved
* Minor Fix for Logo addressing
* Installation files updated (X86 files included, ARM libs updated, autosplit inkludiert) --> ARM Nodave.so tauschen

Ein update auf diese Version ist dringend empfohlen, da die Versionen davor einen MAJOR Bug beim Reload der config haben. Dieser kann auch zum Totalabsturz von FHEM führen.

Die Version kann im ersten Beitrag heruntergeladen werden.

lG
Charlie71

fu_zhou

Bei mir klappt jetzt die bidirektionale Kommunikation von Binär- und Analogwerten. Ich würde an diesem freudigen Ereignis gerne jeden teilhaben lassen, aber meine Anleitung zur Installation auf dem Pi vom OS über Perl bis zur LibNoDave kann ich leider nicht hochladen (Upload Verzeichnis voll, kontaktieren Sie den Administrator). Weiß jemand eine Möglichkeit, liegt das an meinem erst taufrischen Account?

Meine Config hat aber nicht mehr funktioniert, ich habe eine neue S7 angelegt. PDU Length 222 hat dazu geführt, dass die Kommunikation nicht funktioniert, bei 240 und beim weglassen (=960) dann schon.

Ich versuche weiterhin mit konstruktiven Fragen und Anregungen zur Weiterentwicklung beizutragen.
FHEM auf RasPi 2, S7-300 mit ET200S über ProfiNet