neues Modul: SIEMENS Anbindung / S7 / Siemens Logo

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

Vorheriges Thema - Nächstes Thema

charlie71

Hallo Leute,

da Modul schein ja gut zu laufen. Das Wiki ist auch schon aktualisiert.

Bitte um kurzes Feedback wenn noch jemand Probleme mit dem Modul hat. (Sonst release ich V2.7 mit den fix für overlapping config)
Meine to do Liste für neue Funktionalität ist vorerst einmal leer.

lG
Charlie71

fu_zhou

Hallo Charlie,

ich hätte da noch was....
2015.02.04 12:11:37 3: 315 S7_ReadBlockFromPLC ReadArea error: 3=A timeout occurred waiting a reply.
2015.02.04 12:11:37 2: 315 S7 disconnected
2015.02.04 12:11:40 3: 315 S7_connect: connect to PLC with maxPDUlength=240


Wieder nur bei der einen CPU, die am selben Switch hängt wie die 317. Aber im Vergleich zu gestern sind die Disconnects WESENTLICH weniger geworden. Nur einer heute tagsüber vs. 6 in nur 8 Stunden die Nacht davor. Ich beobachte das mal weiter...
FHEM auf RasPi 2, S7-300 mit ET200S über ProfiNet

John

Hi Charlie71,

ZitatMeine to do Liste für neue Funktionalität ist vorerst einmal leer.

Damit dir nicht langweilig wird, noch einige Gedanken zum diskutieren.

Was passiert wenn ich folgendes mache:

Ich definieren  boshafterweise 10 +x Datepunkte, die im Abstand von MaxPDUSize liegen ?

Wieviele Schleifen wird deine Software drehen ?
Werden diese begrenzt ?
Was ist die maximale Zeit mit der das S7 Modul die anderen FHEM Module blockiert ?
(die haben dann unter Umständen einen Timeout)


John



CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

charlie71

Hallo John,

Zitat von: John am 04 Februar 2015, 20:39:40
Hi Charlie71,

Damit dir nicht langweilig wird, noch einige Gedanken zum diskutieren.

Was passiert wenn ich folgendes mache:

Ich definieren  boshafterweise 10 +x Datepunkte, die im Abstand von MaxPDUSize liegen ?

Wieviele Schleifen wird deine Software drehen ?

Genau 10+x. Die Anzahl der Blöcke ist optimal.

ZitatWerden diese begrenzt ?
Nein! Macht das wirklich Sinn?

ZitatWas ist die maximale Zeit mit der das S7 Modul die anderen FHEM Module blockiert ?
(die haben dann unter Umständen einen Timeout)
Das hängt davon ab, ob ein Timeout auftritt oder nicht.
Ohne Timeout:
Hier gehe ich mal davon aus ,dass die Kommunikation mit der SPS am längsten dauert.
Bei meinen Logo7 dauert dass ca 10ms.
Wenn ich jetzt alle Speicherbereiche von der Logo lesen müsste dann währen das 5 Blöcke. --> Geschätzt 50ms.
DH aktuell gehe ich von einer Zykluszeit < 100 ms aus.


Mit Timeout: (Fehlerfall)
hier bricht die Kommunikation nach 1s ab. --> Zykluszeit 1s.

Ich bin mir nicht sicher, warum es zu Timeouts in anderen Modulen kommen kann?

lG
Charlie71

John

#424
Hallo Charlie71,

das TCP/IP seitige Lesen ist schnell keine Frage.
Aber jeder Datenpunkt wird von FHEM zu allen Notify-Empfängern weitergereicht und das sind nicht nur die,
die für die S7 vorgesehen sind, sondern einfach alle notifies.

Ich empfehle dir das Szenario aufzubauen und zu messen.

ZitatWenn ich jetzt alle Speicherbereiche von der Logo lesen müsste dann währen das 5 Blöcke
Du brauchst für das von mir beschriebene Szenario 10 Durchläufe, da versteh ich dich nicht.
Pro Einzel-Scan werden alle Datenpunkte gechecked.

ZitatIch bin mir nicht sicher, warum es zu Timeouts in anderen Modulen kommen kann?
Beispiel aus der realen Welt.

Set Befehl wird an MAX-Thermostat ausgegeben.
Wenn die Rückantwort nicht binnen 2 Sekunden angekommen ist, gibts Timeout und ein erneuter Versuch startet.


John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

charlie71

Hallo John

die Logo7 hat 990 Bytes die man lesen kann. DH im ungünstigsten Fall ergibt dass bei einer MaxDPU von 240 (~ maximale Blocklänge 225) 5 Blöcke die gelesen werden müssen.

ZitatAber jeder Datenpunkt wird von FHEM zu allen Notify-Empfängern weitergereicht und das sind nicht nur die,
die für die S7 vorgesehen sind, sondern einfach alle notifies.
Dies sollte doch vom versierten Benutzer, der die Performance guidelines gelesen hat, durch die Verwendung von event-on-change-reading in den griff zu kriegen sein.

ZitatSet Befehl wird an MAX-Thermostat ausgegeben.
Wenn die Rückantwort nicht binnen 2 Sekunden angekommen ist, gibts Timeout und ein erneuter Versuch startet.
Wenn die Zykluszeit unter 1s bleibt - davon gehe ich aus - sollte dieser Fall nicht eintreten. Zum anderen lassen sich ja mehrere Connections zu einer SPS einrichten und somit können auch längere Abfragen begrenzt werden.
Ich denke dass hier keine Notwendigkeit für einen Blocking Call (Blocking.pm) besteht.

Es währe schön wenn jemand versucht die Zykluszeit zu bestimmen.

lG
Charlie71

fu_zhou

Wenn mir jemand einen Tipp gibt, was ich zu tun habe (auf der S7 und in FHEM), geh ich da mal am Wochenende ran. Im Moment versteh ich nur Bahnhof...
FHEM auf RasPi 2, S7-300 mit ET200S über ProfiNet

John

#427
Hi Charlie71,

ich weiss ich bin hartnäckig.

Zitat
die Logo7 hat 990 Bytes die man lesen kann. DH im ungünstigsten Fall ergibt dass bei einer MaxDPU von 240
Na ja, es werden ja auch S7 eingesetzt und die DBs können sehr sehr lange werden.
Ausserdem ist das Szenario identisch, wenn du aus 10 DB's jeweils einen Datenpunkt liest.
Dein Read wird entweder durch die DB-Grenze oder durch die PDU begrenzt richtig ?

Zitat
Wenn die Zykluszeit unter 1s bleibt - davon gehe ich aus - sollte dieser Fall nicht eintreten
Bei einer Polling Rate von 1 Sekunde und einer Bearbeitungszeit von 850 ms durch das S7-Modul  wird FHEM keinen Spass mehr machen.
Die Charts werden eine Ewigkeit dauern.
Ich denke du solltest von der Sekunde nicht mehr als 10% = 100 ms verbraten, damit FHEM noch "flüssig" zu bedienen ist.


John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

John

#428
@fu_zhou

Du kannst helfen.
Du solltest mindestens 20 Datenpunkte definiert haben, die du ohnehin für die Anwendung benötigst.
(Bunt gemischt ARead, DRead, AWrite, DWrite)
Polling-Rate 1 Sekunde.

Zusätzlich noch 10 Datenpunkte  wie folgt einrichten.
* neuen DB anlegen
* Abstand der Datenpunkt sollte mindestens die PDU-Size betragen

Zunächst ohne event-on-change-reading laufen lassen.

Ist FHEM noch flüssig bedienbar ? (Charts aufrufen, die fressen richtig viel Zeit)

Dann mit event-on-change-reading.
Wie siehts nun aus ?

John

PS: ich hoffe du hast noch den alten langsamen Raspi.

CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

fu_zhou

#429
Hallo John,

werde ich morgen mal anfangen. Ich nehme an, du meinst mit Charts Logfiles, die dann in einem Plot dargestellt werden? Da muss ich dann erstmal welche einrichten und bis zum Wochenende beschreiben lassen, so dass ordentlich Daten da sind.

Ich habe den RasPi Modell B, der RasPi 2 ist aber schon bestellt, aber nicht aus Performancegründen, sondern weil es ihn gibt. Ich nutze ihn auch quasi nur als Bedieninterface zwichen Tablet, Smartphone, PC und S7.

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

charlie71

Hallo John,

Ich denke das die Zielgruppe von FHEM eine Heimautomatisierung ist. Somit kann man von weniger als 100 digitalen Datenpunkten und weniger als 20 analogen Datenpunkten ausgehen.
Somit sollten sich alle diese Daten mit einem oder zwei readings Einlesen können.

Der Leseblock wird aktuell von der area, db und von der PDU begrenzt.

Die zykluszeit sollte im Fehlerfall bei 1s liegen.
Anmerkung: ich lese von 4 Logos alle Ausgänge (64 digitale Punkte) und logge dazu noch 3 analoge Eingänge von einer Logo.
Die Bedienung war immer flüssig (egal mit oder ohne Event-on-change). einzig wenn die Logos nicht erreichbar sind ist ein wenig träge und für diesem Fehlerfall ist das ok.

Sonst besteht nicht die Möglichkeit durch mehre connections zu einer S7 "performancegruppen" zu bilden und diese unterschiedlich oft zu aktualisieren.

Lg
Charlie71

Zitat von: John am 04 Februar 2015, 22:08:55
Hi Charlie71,

ich weiss ich bin hartnäckig.
Na ja, es werden ja auch S7 eingesetzt und die DBs können sehr sehr lange werden.
Aussdem ist das Szenario identisch, wenn du aus 10 DB's jeweils einen Datenpunkt liest.
Dein Read wird entweder durch die DB-Grenze oder durch die PDU begrenzt richtig ?
Bei einer Polling Rate von 1 Sekunde und einer Bearbeitungszeit von 850 ms durch S7 wird FHEM keinen Spass mehr machen.
Die Charts werden eine Ewigkeit dauern.
Ich denke du solltest von der Sekunde nicht mehr als 10% = 100 ms verbraten, damit FHEM noch "flüssig" zu bedienen ist.


John

alfonsmoeller

Hallo, das war ein erfolgreiches Projekt!
Fangt aber jetzt bitte nicht an Annans und Kartoffeln zu vergleichen.
Die S7 ist ein Echtzeitsystem, die oder das FHEM nicht!
Es ist nur wichtig, auch mal ein Licht über FHEM nach S7 einschalten
zu können. Unser Aller Stolz sollte sein, das es mit Eurer Hilfe möglich
war, ein Tool zu entwickeln z.B. einen RasPi oder AVM mit der S7 zu koppeln
und die "wichtigen" Steuerungsaufgaben zu Hause zu übernehmen.
m.f.G. Alfons

phel

#432
Besonders beeindruckend war, mit welcher rasender Geschwindigkeit sich das Projekt entwickelt hat! Daumen hoch, danke charlie71!

Ich habe jetzt auch mal auf die aktuelle Version aktualisiert und die libnodave eingemottet - leider verträgt mein fhem das nicht ganz so gut.


2015.02.04 19:51:54 3: mylogo S7_ReadBlockFromPLC ReadArea error: 3=A timeout occurred waiting a reply.
2015.02.04 19:51:54 2: mylogo S7 disconnected
2015.02.04 19:51:58 3: mylogo S7_connect: connect to PLC with maxPDUlength=240
2015.02.04 19:52:09 3: mylogo S7_ReadBlockFromPLC ReadArea error: 3=A timeout occurred waiting a reply.
2015.02.04 19:52:09 2: mylogo S7 disconnected
2015.02.04 19:52:12 3: mylogo S7_connect: connect to PLC with maxPDUlength=240
2015.02.04 19:54:37 3: mylogo S7_ReadBlockFromPLC ReadArea error: 3=A timeout occurred waiting a reply.
2015.02.04 19:54:37 2: mylogo S7 disconnected
2015.02.04 19:54:40 3: mylogo S7_connect: connect to PLC with maxPDUlength=240
2015.02.04 19:58:25 3: mylogo S7_ReadBlockFromPLC ReadArea error: 3=A timeout occurred waiting a reply.
2015.02.04 19:58:25 2: mylogo S7 disconnected
2015.02.04 19:58:28 3: mylogo S7_connect: connect to PLC with maxPDUlength=240
2015.02.04 19:58:55 3: mylogo S7_ReadBlockFromPLC ReadArea error: 3=A timeout occurred waiting a reply.
2015.02.04 19:58:55 2: mylogo S7 disconnected
2015.02.04 19:58:58 3: mylogo S7_connect: connect to PLC with maxPDUlength=240
2015.02.04 19:59:09 3: mylogo S7_ReadBlockFromPLC ReadArea error: 3=A timeout occurred waiting a reply.
2015.02.04 19:59:09 2: mylogo S7 disconnected
2015.02.04 19:59:12 3: mylogo S7_connect: connect to PLC with maxPDUlength=240
2015.02.04 19:59:41 3: mylogo S7_ReadBlockFromPLC ReadArea error: 3=A timeout occurred waiting a reply.
2015.02.04 19:59:41 2: mylogo S7 disconnected
2015.02.04 19:59:44 3: mylogo S7_connect: connect to PLC with maxPDUlength=240
2015.02.04 20:00:01 3: mylogo S7_ReadBlockFromPLC ReadArea error: 3=A timeout occurred waiting a reply.
2015.02.04 20:00:01 2: mylogo S7 disconnected
2015.02.04 20:00:04 3: mylogo S7_connect: connect to PLC with maxPDUlength=240
2015.02.04 20:00:17 3: mylogo S7_ReadBlockFromPLC ReadArea error: 3=A timeout occurred waiting a reply.
2015.02.04 20:00:17 2: mylogo S7 disconnected
...


define mylogo S7 LOGO8 192.168.188.222
attr mylogo alias Logo 8  230RCE
attr mylogo group Logo 8
attr mylogo icon it_network
attr mylogo room Automation

define Q1_mylogo S7_DRead Q1
attr Q1_mylogo IODev mylogo
attr Q1_mylogo alias Q1
attr Q1_mylogo devStateIcon Ein:li_wht_on Aus:li_wht_off
attr Q1_mylogo event-on-change-reading state
attr Q1_mylogo eventMap on:Ein off:Aus
attr Q1_mylogo group Logo 8
attr Q1_mylogo room Automation

define Q2_mylogo S7_DRead Q2
attr Q2_mylogo IODev mylogo
attr Q2_mylogo alias Q2
attr Q2_mylogo devStateIcon Ein:li_wht_on Aus:li_wht_off
attr Q2_mylogo event-on-change-reading state
attr Q2_mylogo eventMap on:Ein off:Aus
attr Q2_mylogo group Logo 8
attr Q2_mylogo room Automation


define I1_mylogo S7_DRead I1
attr I1_mylogo IODev mylogo
attr I1_mylogo alias I1
attr I1_mylogo event-on-change-reading state
attr I1_mylogo group Logo 8
attr I1_mylogo room Automation


define NI1_mylogo S7_DWrite db 0 602.0
attr NI1_mylogo IODev mylogo
attr NI1_mylogo alias NI1
attr NI1_mylogo event-on-change-reading state
attr NI1_mylogo group Logo 8
attr NI1_mylogo room Automation,Wohnzimmer
attr NI1_mylogo webCmd ON:OFF:TRIGGER


aktualisiert habe ich gestern Abend, die Fehler fingen dann grob 20h später an. Erste Hilfe mal ein reboot.

Grüße
Phel

pc1246

#433
Hallo Charlie
Leider muss ich John recht geben! Ich habe zum Beispiel ein fertiges Projekt, in dem derzeit verteilt, aber in einem DB, die einzelnen Bits liegen, die ich Steuern moechte! Einer dieser DB's ist z.B. knapp 900 Byte lang! Und ich will eigentlich nicht das Programm anpassen, die Strukturen sind eigentlich mit Absicht so gewaehlt!
Ich hatte schon mal gemeint, dass das Timeout fhem lahmlegt (Stichwort nonblocking!)!
Ich werde einfach mal einige Daten von dem DB abholen, momentan schreibe ich nur, was ja inzwischen Lesen inkludiert!
Auch bin ich mir sicher, dass das Interval derzeit keinen Einfluss hat, da bei mir immer noch sekuendlich aktualisiert wird! Intervall steht derzeit auf 2, stand auch schon probehalber mal auf 4!
Gruss Christoph

P.S.: Habe derzeit etwas mehr Zeit, da krank zu Hause! Koennt mich also etwas strapazieren!

Edit: Irgendwie scheint Intervall doch zu beeinflussen, hatte jetzt mal auf eine Sekunde gestellt, da war fhem dann total langsam!Zurueck auf 2, fuehlt sich besser an!
define DB102_DBX605_0 S7_DWrite db 102 605.0
attr DB102_DBX605_0 IODev S7
attr DB102_DBX605_0 alias SZ_hoch
attr DB102_DBX605_0 group Rollaeden
attr DB102_DBX605_0 room S7
define DB102_DBX605_1 S7_DWrite db 102 605.1
attr DB102_DBX605_1 IODev S7
attr DB102_DBX605_1 alias SZ_runter
attr DB102_DBX605_1 group Rollaeden
attr DB102_DBX605_1 room S7
define DB102_DBX691_0 S7_DWrite db 102 691.0
attr DB102_DBX691_0 IODev S7
attr DB102_DBX691_0 alias Spielen_hoch
attr DB102_DBX691_0 group Rollaeden
attr DB102_DBX691_0 room S7
define DB102_DBX691_1 S7_DWrite db 102 691.1
attr DB102_DBX691_1 IODev S7
attr DB102_DBX691_1 alias Spielen_runter
attr DB102_DBX691_1 group Rollaeden
attr DB102_DBX691_1 room S7
define DB102_DBX777_0 S7_DWrite db 102 777.0
attr DB102_DBX777_0 IODev S7
attr DB102_DBX777_0 alias Timo_hoch
attr DB102_DBX777_0 group Rollaeden
attr DB102_DBX777_0 room S7
define DB102_DBX777_1 S7_DWrite db 102 777.1
attr DB102_DBX777_1 IODev S7
attr DB102_DBX777_1 alias Timo_runter
attr DB102_DBX777_1 group Rollaeden
attr DB102_DBX777_1 room S7
define DB102_DBX519_0 S7_DWrite db 102 519.0
attr DB102_DBX519_0 IODev S7
attr DB102_DBX519_0 alias Arbeit_hoch
attr DB102_DBX519_0 group Rollaeden
attr DB102_DBX519_0 room S7
define DB102_DBX519_1 S7_DWrite db 102 519.1
attr DB102_DBX519_1 IODev S7
attr DB102_DBX519_1 alias Arbeit_runter
attr DB102_DBX519_1 group Rollaeden
attr DB102_DBX519_1 room S7
define DB102_DBX433_0 S7_DWrite db 102 433.0
attr DB102_DBX433_0 IODev S7
attr DB102_DBX433_0 alias WC_hoch
attr DB102_DBX433_0 group Rollaeden
attr DB102_DBX433_0 room S7
define DB102_DBX433_1 S7_DWrite db 102 433.1
attr DB102_DBX433_1 IODev S7
attr DB102_DBX433_1 alias WC_runter
attr DB102_DBX433_1 group Rollaeden
attr DB102_DBX433_1 room S7
define DB102_DBX347_0 S7_DWrite db 102 347.0
attr DB102_DBX347_0 IODev S7
attr DB102_DBX347_0 alias Kueche_hoch
attr DB102_DBX347_0 group Rollaeden
attr DB102_DBX347_0 room S7
define DB102_DBX347_1 S7_DWrite db 102 347.1
attr DB102_DBX347_1 IODev S7
attr DB102_DBX347_1 alias Kueche_runter
attr DB102_DBX347_1 group Rollaeden
attr DB102_DBX347_1 room S7
define DB102_DBX261_0 S7_DWrite db 102 261.0
attr DB102_DBX261_0 IODev S7
attr DB102_DBX261_0 alias EZ_gross_hoch
attr DB102_DBX261_0 group Rollaeden
attr DB102_DBX261_0 room S7
define DB102_DBX261_1 S7_DWrite db 102 261.1
attr DB102_DBX261_1 IODev S7
attr DB102_DBX261_1 alias EZ_gross_runter
attr DB102_DBX261_1 group Rollaeden
attr DB102_DBX261_1 room S7
define DB102_DBX175_0 S7_DWrite db 102 175.0
attr DB102_DBX175_0 IODev S7
attr DB102_DBX175_0 alias WZ_links_hoch
attr DB102_DBX175_0 group Rollaeden
attr DB102_DBX175_0 room S7
define DB102_DBX175_1 S7_DWrite db 102 175.1
attr DB102_DBX175_1 IODev S7
attr DB102_DBX175_1 alias WZ_links_runter
attr DB102_DBX175_1 group Rollaeden
attr DB102_DBX175_1 room S7
define DB102_DBX89_0 S7_DWrite db 102 89.0
attr DB102_DBX89_0 IODev S7
attr DB102_DBX89_0 alias WZ_Fenster_hoch
attr DB102_DBX89_0 group Rollaeden
attr DB102_DBX89_0 room S7
define DB102_DBX89_1 S7_DWrite db 102 89.1
attr DB102_DBX89_1 IODev S7
attr DB102_DBX89_1 alias WZ_Fenster_runter
attr DB102_DBX89_1 group Rollaeden
attr DB102_DBX89_1 room S7
define DB102_DBX3_0 S7_DWrite db 102 3.0
attr DB102_DBX3_0 IODev S7
attr DB102_DBX3_0 alias WZ_Tuer_hoch
attr DB102_DBX3_0 group Rollaeden
attr DB102_DBX3_0 room S7
define DB102_DBX3_1 S7_DWrite db 102 3.1
attr DB102_DBX3_1 IODev S7
attr DB102_DBX3_1 alias WZ_Tuer_runter
attr DB102_DBX3_1 group Rollaeden
attr DB102_DBX3_1 room S7
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

rhonline

Hallo zusammen,

also ich stimme alfonsmoeller vollkommen zu,
dass es sich hier doch in der Hauptsache um ein Modul für kleinere Steuerungsaufgaben und überschaubaren Datenaustausch zwischen S7 und fhem handelt.
Und wenn das Modul doch jetzt nach dieser "heißen" Entwicklung stabil läuft, dann sollten wir doch zufrieden sein.
Und es sollte doch kein Problem für einen S7-Freak sein, neue DB's für den Datenaustausch zwischen S7 und fhem einzurichten.

So eine klare und eindeutige Schnittstelle (z.B. ein DB für Daten von fhem und ein DB zum Senden an fhem) kann man schnell einrichten, diagnostizieren
und abbinden, als wenn fhem auf Bits oder Datenbereiche zugreift, die irgendwo im SPS-Programm verteilt sind und auf die auch das Standardprogramm zugreift.
So sollte man es auch schon immer, wenn möglich, mit den zugehörigen Panels machen, um hier einen effektiven Datenaustausch zu erzielen.

Ich schiebe dann lieber ein paar Bits und Datenworte in der SPS zusammen, damit das Ganze strukturiert aufgebaut ist.

Wollte nur mal meine Meinung sagen  ;)

Ich habe so vor ca. 1,5 Jahren nach so einem Modul gesucht und bin jetzt super zufrieden !
Danke charlie71 !

fhem auf RasPi B+ / S7-300 / 44_S7 V2.x