neues Modul: SIEMENS Anbindung / S7 / Siemens Logo

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

Vorheriges Thema - Nächstes Thema

charlie71

Hallo John,

vielen Dank für deine Anregungen.

Das Modul unterstützt 2 Config modi:
a) den manuellen - hier muss, wie der Name ja sagt, die Lese und Schreibblöcke manuell gesetzt werden.
b) den einfachen - hier muss man nur die Ein- und Ausgänge konfigurieren die Config für die Lese und Schreibblöcke wird manuell generiert.

Den Modus a) gibt es für alle SPS den b) nur für die Logo.

ad Leseblöcke)
Grundsätzlich hast Du recht, dass sich der zu lesende Speicherbereich aus der Datenpunktenkonfiguration ergibt.
Jedoch das Aktualisierungsintervall  wird darin nicht festgelegt.

Anmerkung: Ich verwende das Modul für das loggen der Temperatur, wenn ich hier ein Intervall mit 1s zum loggen wähle, dann dauert das Ausbauen der Monatsgrafik gefühlte 15min da hier ca 2600000 Datenpunkte für 4 Kanäle zu laden waren. Aus diesem Grund habe ich mich entschlossen das Aktualisierungsintervall einzuführen. Aber vielleicht habe ich mein Problem ja auf der Falschen Ebene gelöst.

Eine mögliche Lösung währe es das Aktualisierungsintervall aus die Ebene der Datenpunkte zu haben, dann würde die Notwendigkeit der Leseblöke Config wegfallen (Vielleicht hast Du ja Lust das umzubauen).

ad Schreibblöcke)
Hier besteht die Notwendigkeit eigentlich keine Notwendigkeit ein Writer Block zu verwenden - die Lösung ist eben so gewachsen.
Hier kann ich mir vorstellen, dass die Blockconfig in einer der nächsten Version fällt.

lG Charlie71

John

Hallo Charly71,

ZitatAnmerkung: Ich verwende das Modul für das loggen der Temperatur, wenn ich hier ein Intervall mit 1s zum loggen wähle, dann dauert das Ausbauen der Monatsgrafik gefühlte 15min da hier ca 2600000 Datenpunkte für 4 Kanäle zu laden waren. Aus diesem Grund habe ich mich entschlossen das Aktualisierungsintervall einzuführen. Aber vielleicht habe ich mein Problem ja auf der Falschen Ebene gelöst.

Das Problem lässt sich mit den Board-Mechanismen von FHEM elegant lösen durch eine Kombination von event-min-interval und
event-on-change-reading. Da gibts nichts mehr zu programmieren, das Problem ist gelöst.

Anbei die Parameter meiner Vorlauftemperatur

event-on-change-reading .*:0.5 besagt, daß nur Änderung von mehr als 0.5 Grad einen Event feuern sollen.

event-min-interval .*:900 besagt, dass das Feuern eines Readings nach spätestens 15 Minuten erfolgen soll, auch wenn
dies nach der Regel von event-on-change-reading nicht nötig wäre.

Hierzu einfach die Standard-Attribute von FHEM via dem vordefinierten  $readingFnAttributes verwenden:
  $hash->{AttrList} = 'PLCDev DPGain DPOffset readOnly:0,1 disable:0,1 ' . $readingFnAttributes;

John


CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

alfonsmoeller

#287
Hallo hat jemand eine Idee was ich falsch mache:

# S7 Kommunikation
define PCS_7 S7 192.168.0.14 0 2
attr PCS_7 ReadDB-Config 21 0 2 1
attr PCS_7 WriteDB-Config 23 0 2

# Lichttaster an S7 schaltbar über Icon
define Taster0_Icon S7_DWrite db 23 0.0
attr Taster0_Icon IODev PCS_7
attr Taster0_Icon eventMap on:on off:off
attr Taster0_Icon group Licht
attr Taster0_Icon room Keller

define Rueckmeldung0 S7_DRead db 21 0.0
attr Rueckmeldung0 IODev PCS_7
attr Rueckmeldung0 group Licht
attr Rueckmeldung0 room Keller

Das lesen des DB21 funktioniert.
Clicke ich das Icon Taster0_Icon an, wird folgende Fehlermeldung
im Log ausgegeben:

2015.01.26 11:08:36 3: PCS_7 S7_WriteBlockToPLC WriteArea error: 3=?
2015.01.26 11:08:36 2: PCS_7 S7 disconnected
2015.01.26 11:08:36 3: PCS_7 disconnected
2015.01.26 11:08:36 2: PCS_7 S7 disconnected
2015.01.26 11:08:37 3: PCS_7 disconnected
2015.01.26 11:08:37 2: PCS_7 S7 disconnected
2015.01.26 11:08:38 3: PCS_7 disconnected
2015.01.26 11:08:39 2: PCS_7 S7 disconnected
2015.01.26 11:08:39 3: PCS_7 S7_connect: connect to PLC with maxPDUlength=240
2015.01.26 11:08:39 2: PCS_7 S7_connect: allready connected!
2015.01.26 11:08:40 2: PCS_7 S7_connect: allready connected!
2015.01.26 11:08:42 2: PCS_7 S7_connect: allready connected!

Im DB23 erfolgt keine Änderung.
Gleiches habe ich mit Ausgänge und Merker versucht. Immer die gleiche Reaktion.
Wo kann ich den Fehlercode finden.
m.f.G. Alfons
ps.: es handelt sich um eine S7-300

pc1246

Hallo Alfons
Grundsaetzlich sieht das erst einmal richtig aus! Welche Version der Module benutzt du denn? Bei Ausgaengen musst Du den DB0 nehmen, wie auch bei Eingaengen (Merker weiss ich nicht)! Ausserdem gehen Ausgaenge und Merker nur wenn sie im Programm nicht beschrieben werden ,was aber nichts mit dem Fehler zu tun hat!
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

alfonsmoeller

Danke für die schnelle Antwort!
Ich benutze die Version 2.2 aus dem ersten Beitrag vom 24.1.2015.
Ich werde die jetzt aber Sicherheitshalber noch mal vergleichen.
m.f.G. Alfons

pc1246

#290
Hallo Alfons
Ich kann sonst erst heute Abend gucken, aber Charlie ist eigentlich immer present!
BTW: reload der Module gemacht? oder fhem Neustart? Oder Ersteinsatz der Module?
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

charlie71

Hallo Alfons

der Fehlercode bedeutet errTCPDataRecvTout, dh die SPS hat nicht innerhalb des Timeouts von 1 Sekunde geantwortet.
Die Errorcodes entsprechen den von settimino:
http://settimino.sourceforge.net/errors.html

lG
Charlie71

alfonsmoeller

Hallo pc1246, Hallo charlie71,
danke für die schnellen Antworten.
Das die S7 zu lange zur Antwort braucht kann ich mir fast nicht vorstellen, aber ich werde es
mit ein beziehen.
Jetzt habe ich noch folgende Fehlermeldung auf dem LXTerminal entdeckt:

Argument "PCS_7 S7_WriteBlockToPLC WriteAerea error: 3=?" isn't numeric in numeric eq (==) at ./FHEM/44_S7_DWrite.pm line 290.

Hilft das weiter, oder ist das die Bestätigung?

m.f.G. Alfons

charlie71

Hallo Alfons,

dieser Fehler tritt nur deshalb auf, da der Schreibbefehl zur SPS fehlgeschlagen ist.

lG
Charlie71

charlie71

Hallo John,

guter Vorschlag, nur denke ich dass event-on-update-reading und event-min-interval wird nicht vom Modul nicht unterstützt wird. Wenn ich es richtig verstanden habe, gibt diese Attribute nur bei Module die ein standardisiertes readin update verwenden.
Aber vielleicht kannst du ja hier weiterhelfen und klären warum dieses Attribut bei dem Modul S7_ARead nicht vorhanden ist.

Add Block Read/Writer Config) Das Problem mit dem Mono-Mastersystem wird es für digitalen reads/writes immer geben, denn die kleinste Bocklänge die man schreiben kann ist ein Byte.
Somit muss man bei digitalen writings immer eine lokale Kopie des Bytes vorhanden sein.

lG
Charlie71

alfonsmoeller

Hallo charlie71,
Du hattest recht. Ich habe jetzt eine andere Hardware genommen. Jetzt funktioniert es.

Mir ist das aber trotzdem rätselhaft. In dem anderen Fall funktioniert es mit LIBNODAVE.
Was ist da anders?
m.f.G. Alfons

John

Hallo Charly71,

ZitatWenn ich es richtig verstanden habe, gibt diese Attribute nur bei Module die ein standardisiertes readin update verwenden.

Damit sollte die Aufgabe gelöst sein.
$hash->{AttrList} = "IODev offset multiplicator precision unit "  . $readingFnAttributes;

ZitatAdd Block Read/Writer Config) Das Problem mit dem Mono-Mastersystem wird es für digitalen reads/writes immer geben, denn die kleinste Bocklänge die man schreiben kann ist ein Byte.
Das Lesen ist nicht das Problem, das Schreiben schon.

Snap7 (und ich meine auch libnodave) kennt den Parameter Wordlen, dar auch Bit sein kann. Damit sind tatsächlich Schreibfunktionen auf Bit-Ebene möglich, so dass unser "Write-Dirty" Problem auf Bit-Ebene gelöst ist.

Natürlich ist es immer möglich dass ein Objekt von 2 Seiten beschrieben wird, solange das Objekt nach dem Schreibvorgang konsistent
bleibt, sehe ich darin kein Problem, der Anwendungsprogrammierer muss schon wissen was wer tut.
Das ist in der Siemens Welt Standard.

Allerdings ist es schon ein Problem, wenn 1 Objekt geändert und aufgrund der Architektur 50 andere überschrieben werden, die
davon eigentlich nicht betroffen sind.

John



CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

charlie71

Hallo John,

vielen Dank für den Tipp für readingFnAttributes.

Ich hab mir mal angeschaut was zu tun ist um diese setBit Funktionalität zu implementieren.
Das PERL Kommunikationsmodul muss erweitert werden dass auch einzelne Bits gesetzt werden können.
Das ist - soweit ich das überblicken kann - eine ziemliche  Arbeit, da hier wieder C - Code portiert werden muss.
In diesem Fall nicht aus der kleinen und überschaubaren settimino Project sondern aus der Snap7. Das scheint mir sehr Zeitaufwendig zu sein.
Der Rest - die Anpassungen aller anderen Module - ist dann nicht so schlimm.

Summa summarum: nicht wenig Arbeit. Wer mag mithelfen?

lG
Charlie71

fu_zhou

#298
Ich teste mir gerne wieder die Seele aus dem Leib - mit meiner S7. Auch leiste ich gerne einen Beitrag zum Wiki. Bei Perl kann ich nur leider so gar nicht unterstützen!

Grüße, fu_zhou

P.S. Charlie, wirst du das
- event-on-change-reading
und
- event-min-interval
implementieren? Scheint vernünftig zu sein...
FHEM auf RasPi 2, S7-300 mit ET200S über ProfiNet

charlie71

Hallo fo_zhou,

folgende Features habe ich für die nächste Release geplant:

1) Error Text ... es wird dann ein Fehler Text statt ein Fehlercode bei PLC connection Problemen ausgegeben (done)
2) - event-on-change-reading (open)
3) - event-min-interval (open)
4) fix für LOGO8 simple config (NI) (open)

Release Termin: diese Woche
lG
Karl