neues Modul: SIEMENS Anbindung / S7 / Siemens Logo

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

Vorheriges Thema - Nächstes Thema

mr_tembo

Hallo Charlie71,

das war es gewesen. An das Update hatte ich nicht mehr gedacht.sorry und herzlichen Dank

GRüße Mr_Tembo

Tesla

Hallo,

@charlie71:
S7 ist ein tolles Modul! Die Logo ist recht weit verbreitet. Wir unterrichten auch an der Schule über und mit der Logo!8.

FHEM betreibe ich unter Raspbian Jessie. Ich habe folgendes Problem und einen Lösungsvorschlag:

Die Logo befindet sich bei mir in einem anderen logischen IP-Netz als FHEM. Daher sind die Paketlaufzeiten größer und der default timeout in IO::Socket::INET (in nicht notwendigem Ausmaß) auch.
Wenn die Logo nicht erreichbar ist, kommt der timeout offensichtlich so spät, dass die anderen Timer nicht mehr wie geplant funktionieren und FHEM fast vollständig geblockt ist. FHEM ist dann jedenfalls nicht mehr funktionsfähig.

Lösungsvorschlag (nur für 44_S7_S7Client, die anderen überblicke ich nicht):
Timeout in sub TCPConnect explizit setzen:

new IO::Socket::INET(
.....
.....
Timeout => 0.5,
)
fest oder besser konfigurierbar.

Ein Wunsch für die Zukunft wäre noch ein "Set Close" für das Modul oder ein Attribut "disable"

mfg Tesla

tugsi

Ich hab mal eine Verständnisfrage bzw. generell eine Frage zu dem Modul.

Ich habe hier bei mir eine S7-300 im Einsatz, die meine Automatisierung übernimmt.
FHEM soll nur ergänzend dazu sein und als Visualisierung mit Touch laufen.
Soweit die Theorie.

Jetzt habe ich zum testen nur mal ein Bit genommen, welches mein Flurlicht einschaltet, das klappt auch sehr gut.
Nur ich habe mir gedacht, wenn ich jetzt zB sämtliche Status die ich in meiner SPS für bestimmte Vorgänge habe, abfrage von FHEM und ebenso an der Visualisierung per Touch ein und ausschalten lasse etc, dann werden da schon eine Menge an Bits etc hin- und hergeschickt.
Dies passiert ja wie ich verstanden habe, im Sekundentakt.

Ich frage mich, ob dies nicht zu einer Belastung wird für den Raspberry und das System?

Bei uns auf der Arbeit schicken wir zwischen den einzelnen SPSen immer ganze DBs hin und her.
Habe ich hier irgendwie auch die Möglichkeit statt aus einem DB einzelne Bits zu nehmen, einen gesamten DB abzufragen?

Ich stelle mir zum Beispiel vor, dass ich ein Gesamt-DB für einzelne StatusBits einlese und in FHEM dann definiere, welches Bit welches ist.
So lese ich nur einmal ein DB ein und nicht jedes Bit einzeln.
Oder macht das Modul dies schon automatisch?
Wie gesagt, ich habe zum testen erst ein BIT aus einem DB.

Ich hoffe ich habe mich einigermassen verständlich ausgedrückt :)

Gruß Thomas

pc1246

Hallo Thomas
Das Modul schcikt nicht jedes Bit einzeln. Wenn ich mich recht entsinne, ist es so aufgebaut, dass aufgrund der Definitionen sinnvolle Bloecke gebildet werden, so dass dann entsprechende Pakete entstehen. Kann man ganz gut sehen, wenn man mal mehrere Bits aus einem DB definiert!
Da das Modul inzwischen auch nonblocking ist (?), sollte es den RPI auch nicht ausbremsen. Ich kann aber mal gucken, wie sehr meine Kommunikation das fhem belastet.
Gruss Christoph
HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly

tugsi

Hab gestern ein Update gemacht und auch gesehen, dass die S7- Dateien upgedatet wurden, aber seitdem habe ich mySPS als Device nicht mehr und wenn ich es versuche zu definieren, wird mir gesagt, dass er dei S7 module nicht laden kann.
Das Log sagt folgendes:

2017.11.29 04:28:10 1: PERL WARNING: Subroutine S7_Initialize redefined at ./FHEM/44_S7.pm line 38.
2017.11.29 04:28:10 1: PERL WARNING: Subroutine S7_connect redefined at ./FHEM/44_S7.pm line 66.
2017.11.29 04:28:10 1: PERL WARNING: Subroutine S7_disconnect redefined at ./FHEM/44_S7.pm line 139.
2017.11.29 04:28:10 1: PERL WARNING: Subroutine S7_reconnect redefined at ./FHEM/44_S7.pm line 156.
2017.11.29 04:28:10 1: PERL WARNING: Subroutine S7_Define redefined at ./FHEM/44_S7.pm line 173.
2017.11.29 04:28:10 1: PERL WARNING: Subroutine S7_Undef redefined at ./FHEM/44_S7.pm line 260.
2017.11.29 04:28:10 1: PERL WARNING: Subroutine S7_Set redefined at ./FHEM/44_S7.pm line 274.
2017.11.29 04:28:10 1: PERL WARNING: Subroutine S7_Get redefined at ./FHEM/44_S7.pm line 281.
2017.11.29 04:28:10 1: PERL WARNING: Subroutine S7_Attr redefined at ./FHEM/44_S7.pm line 305.
2017.11.29 04:28:10 1: PERL WARNING: Subroutine S7_getAreaIndex4AreaName redefined at ./FHEM/44_S7.pm line 419.
2017.11.29 04:28:10 1: PERL WARNING: Subroutine S7_WriteToPLC redefined at ./FHEM/44_S7.pm line 438.
2017.11.29 04:28:10 1: PERL WARNING: Subroutine S7_WriteBitToPLC redefined at ./FHEM/44_S7.pm line 510.
2017.11.29 04:28:10 1: PERL WARNING: Subroutine S7_ReadBlockFromPLC redefined at ./FHEM/44_S7.pm line 584.
2017.11.29 04:28:10 1: PERL WARNING: Subroutine S7_setBitInBuffer redefined at ./FHEM/44_S7.pm line 653.
2017.11.29 04:28:10 1: PERL WARNING: Subroutine S7_getBitFromBuffer redefined at ./FHEM/44_S7.pm line 697.
2017.11.29 04:28:10 1: PERL WARNING: Subroutine S7_getAllWritingBuffersFromPLC redefined at ./FHEM/44_S7.pm line 724.
2017.11.29 04:28:10 1: PERL WARNING: Subroutine S7_GetUpdate redefined at ./FHEM/44_S7.pm line 783.
2017.11.29 04:28:10 1: PERL WARNING: Subroutine S7_dispatchMsg redefined at ./FHEM/44_S7.pm line 803.
2017.11.29 04:28:10 1: PERL WARNING: Subroutine S7_readAndDispatchBlockFromPLC redefined at ./FHEM/44_S7.pm line 825.
2017.11.29 04:28:10 1: PERL WARNING: Subroutine S7_getReadingsList redefined at ./FHEM/44_S7.pm line 894.
2017.11.29 04:28:10 1: PERL WARNING: Subroutine S7_readFromPLC redefined at ./FHEM/44_S7.pm line 1093.
2017.11.29 04:28:10 1: reload: Error:Modul 44_S7 deactivated:
Attempt to reload 44_S7_S5Client.pm aborted.
Compilation failed in require at ./FHEM/44_S7.pm line 12.

2017.11.29 04:28:10 0: Attempt to reload 44_S7_S5Client.pm aborted.
Compilation failed in require at ./FHEM/44_S7.pm line 12.


Ist da was fehlerhaft oder muss ich irgendwas auf meinen Raspberry noch nachinstallieren, was bisher nicht gebraucht wurde?

Gruß Thomas

pc1246

Moin
Charlie hatte ein Update gemacht wegen eines Fehlers bei treshold. Wenn das bei Dir fehlschlaegt, dannhat er evtl. einen Fehler eingebaut. Einfach die letzten versionen wieder einspielen, und abwarten!
Gruss Christoph
HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly

doesel

Hallo,
auch mich hat das Update gestern kalt erwischt:
2017.11.28 13:11:15 1: PERL WARNING: Subroutine S7_Initialize redefined at ./FHEM/44_S7.pm line 38, <$fh> line 5.
2017.11.28 13:11:15 1: PERL WARNING: Subroutine S7_connect redefined at ./FHEM/44_S7.pm line 66, <$fh> line 5.
2017.11.28 13:11:15 1: PERL WARNING: Subroutine S7_disconnect redefined at ./FHEM/44_S7.pm line 139, <$fh> line 5.
2017.11.28 13:11:15 1: PERL WARNING: Subroutine S7_reconnect redefined at ./FHEM/44_S7.pm line 156, <$fh> line 5.
2017.11.28 13:11:15 1: PERL WARNING: Subroutine S7_Define redefined at ./FHEM/44_S7.pm line 173, <$fh> line 5.
2017.11.28 13:11:15 1: PERL WARNING: Subroutine S7_Undef redefined at ./FHEM/44_S7.pm line 260, <$fh> line 5.
2017.11.28 13:11:15 1: PERL WARNING: Subroutine S7_Set redefined at ./FHEM/44_S7.pm line 274, <$fh> line 5.
2017.11.28 13:11:15 1: PERL WARNING: Subroutine S7_Get redefined at ./FHEM/44_S7.pm line 281, <$fh> line 5.
2017.11.28 13:11:15 1: PERL WARNING: Subroutine S7_Attr redefined at ./FHEM/44_S7.pm line 305, <$fh> line 5.
2017.11.28 13:11:15 1: PERL WARNING: Subroutine S7_getAreaIndex4AreaName redefined at ./FHEM/44_S7.pm line 419, <$fh> line 5.
2017.11.28 13:11:15 1: PERL WARNING: Subroutine S7_WriteToPLC redefined at ./FHEM/44_S7.pm line 438, <$fh> line 5.
2017.11.28 13:11:15 1: PERL WARNING: Subroutine S7_WriteBitToPLC redefined at ./FHEM/44_S7.pm line 510, <$fh> line 5.
2017.11.28 13:11:15 1: PERL WARNING: Subroutine S7_ReadBlockFromPLC redefined at ./FHEM/44_S7.pm line 584, <$fh> line 5.
2017.11.28 13:11:15 1: PERL WARNING: Subroutine S7_setBitInBuffer redefined at ./FHEM/44_S7.pm line 653, <$fh> line 5.
2017.11.28 13:11:15 1: PERL WARNING: Subroutine S7_getBitFromBuffer redefined at ./FHEM/44_S7.pm line 697, <$fh> line 5.
2017.11.28 13:11:15 1: PERL WARNING: Subroutine S7_getAllWritingBuffersFromPLC redefined at ./FHEM/44_S7.pm line 724, <$fh> line 5.
2017.11.28 13:11:15 1: PERL WARNING: Subroutine S7_GetUpdate redefined at ./FHEM/44_S7.pm line 783, <$fh> line 5.
2017.11.28 13:11:15 1: PERL WARNING: Subroutine S7_dispatchMsg redefined at ./FHEM/44_S7.pm line 803, <$fh> line 5.
2017.11.28 13:11:15 1: PERL WARNING: Subroutine S7_readAndDispatchBlockFromPLC redefined at ./FHEM/44_S7.pm line 825, <$fh> line 5.
2017.11.28 13:11:15 1: PERL WARNING: Subroutine S7_getReadingsList redefined at ./FHEM/44_S7.pm line 894, <$fh> line 5.
2017.11.28 13:11:15 1: PERL WARNING: Subroutine S7_readFromPLC redefined at ./FHEM/44_S7.pm line 1093, <$fh> line 5.
2017.11.28 13:11:15 1: reload: Error:Modul 44_S7 deactivated:
Attempt to reload 44_S7_S5Client.pm aborted.
Compilation failed in require at ./FHEM/44_S7.pm line 12, <$fh> line 5.

2017.11.28 13:11:15 0: Attempt to reload 44_S7_S5Client.pm aborted.
Compilation failed in require at ./FHEM/44_S7.pm line 12, <$fh> line 5.

2017.11.28 13:11:15 2: wrong syntax : define <name> S7_DRead {inputs|outputs|flags|db} <DB> <address>
Only for Logo7 or Logo8:
define <name> S7_DRead {I|Q|M|NI|NQ}1..24

Schlauerweise hat mir FHEM meine Logo-Definitionen gleich aus der config gelöscht! Wohl dem, der regelmäßig ein Backup macht.
Doesel
(FHEM auf Cubietruck mit Igor-Image, 64GB SSD), seit März 19 FHEM auf NUC im Proxmox-Container, 240GB SSD, div. Homematic, Max Fensterkontakte, Onewire über Firmata und FHEM2FHEM auf Raspberrys, MySensors, Jeelink-Clone mit GSD-Modul, CUL, SDM220Modbus, Logo!8, WS980WiFi

tugsi

Danke für die Info, hab ich mir schon fast gedacht, mich hatte nur gewundert, dass hier noch keiner was dazu geschrieben hatte.

Gibt es denn für die einzelnen Module sowas wie Github o.ä. wo man nachschauen kann, was geändert wurde?

fhainz


charlie71

#984
Hallo tugsi,

Das Modul führt kein Bitweises Lesen durch, sondern das Modul ist so schlau, dass es anhand der Konfiguration berechnet welche Blöcke gelesen werden müssen. Somit werden die Lesevorgänge minimiert. Nur das Schreiben (FHEM -> SPS) wird bitweise durchgeführt.
Das Modul ist übrings nicht Nonblocking, das Lesen von 40 - 60 Datenpunkten dauert bei mir ca 40ms (gemessen mit apptime). Durch eine nonblocking Implementierung würde die Geschwindigkeit nicht gesteigert werden, da der overhead beim nonblocking den geschwindigkeitsvorteil wieder kompensieren würde (Ich hab das testweise ausprobiert).

lg
Charlie71

Zitat von: tugsi am 12 November 2017, 11:51:13
Ich hab mal eine Verständnisfrage bzw. generell eine Frage zu dem Modul.

Ich habe hier bei mir eine S7-300 im Einsatz, die meine Automatisierung übernimmt.
FHEM soll nur ergänzend dazu sein und als Visualisierung mit Touch laufen.
Soweit die Theorie.

Jetzt habe ich zum testen nur mal ein Bit genommen, welches mein Flurlicht einschaltet, das klappt auch sehr gut.
Nur ich habe mir gedacht, wenn ich jetzt zB sämtliche Status die ich in meiner SPS für bestimmte Vorgänge habe, abfrage von FHEM und ebenso an der Visualisierung per Touch ein und ausschalten lasse etc, dann werden da schon eine Menge an Bits etc hin- und hergeschickt.
Dies passiert ja wie ich verstanden habe, im Sekundentakt.

Ich frage mich, ob dies nicht zu einer Belastung wird für den Raspberry und das System?

Bei uns auf der Arbeit schicken wir zwischen den einzelnen SPSen immer ganze DBs hin und her.
Habe ich hier irgendwie auch die Möglichkeit statt aus einem DB einzelne Bits zu nehmen, einen gesamten DB abzufragen?

Ich stelle mir zum Beispiel vor, dass ich ein Gesamt-DB für einzelne StatusBits einlese und in FHEM dann definiere, welches Bit welches ist.
So lese ich nur einmal ein DB ein und nicht jedes Bit einzeln.
Oder macht das Modul dies schon automatisch?
Wie gesagt, ich habe zum testen erst ein BIT aus einem DB.

Ich hoffe ich habe mich einigermassen verständlich ausgedrückt :)

Gruß Thomas

fhainz

Hallo charlie!

Ich nutze eine Logo8 und mir ist ein seltsames Verhalten bei den Netzwerkeingängen aufgefallen. Ein NI kann von FHEM aus nur in der "langen" Schreibweise mit angabe der db und bit gesetzt werden. Direkt per "Kurzschreibweise" zB NI1 kann er nicht gesetzt werden. Ich hab mir bisher mir der langen Schreibweise beholfen, ein anderer User ist die Tage auch darüber gestolpert. (https://forum.fhem.de/index.php/topic,80743.0.html)

Funktioniert nicht:
define ni1 S7_DWrite NI1

Funktioniert:
define ni1 S7_DWrite db 0 100.0

Hast du eine Idee?

Weiter wollte ich fragen ob das Problem, das FHEM hängt wenn die Logo nicht erreichbar ist, behoben wurde. (https://forum.fhem.de/index.php/topic,26092.msg693316.html#msg693316)

Grüße

charlie71

Hallo fhainz,


Leider liegt das Problem bei der Kurzschreibweise nicht am FHEM Modul sondern an der Logo. Ich habe selbst 4 Logos im Einsatz in manchen Konstellation kann ich direkt auf NI schreiben, aber manchmal nicht. Aber vielleicht kann ja jemand anderer helfen.

Es gibt nun ein Attribut RecvTimeout, damit kann man einstellen wie lange das Modul auf eine Antwort von der S7 wartet.

lG
Charlie71

fhainz


tugsi

Moin,
hatte mal seperat eine Anfrage gestellt, aber keine Antwort bekommen, ich versuche es nochmal hier :-)

-----
Hallo,
ich benutze das SPS-Modul von charlie71 und lese aus einem bereitgestellten DB BOOLs und BYTEs aus.
Jetzt habe ich zB in einem BYTE Hexwerte drin, die mir im Grunde einen bestimmten Status angeben.

Ein Beispiel
Ich bekomme ein Hex B#16#8D (Dezimal 141) dies würde im Klartext bedeuten "Nachtbetrieb".
So gibt es mehrere verschiedene Statuse (ca. 20 Stück)

Jetzt würde ich gerne im FHEM nicht den Dezimalwert sehen sondern sofort den Klartext.

Hab ich irgendwie eine Möglichkeit eine Art Tabelle zu hinterlegen, welche mir dann den richtigen Text anzeigt?

Ich hoffe ich habe es verständlich genug erklärt *lach

pc1246

Hallo tugsi
Ja das geht, ich weiss aber nicht wie! Ich wuerde deine erste Anfrage mal in Anfaengerfragen verschieben. Denn Du willst ja nur eine Uebersetzungstabelle erstellen, das hat nichts mit dem Modul per se zu tun!
Gruss Christoph
HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly