neues Modul: SIEMENS Anbindung / S7 / Siemens Logo

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

Vorheriges Thema - Nächstes Thema

mani

Hallo

Super Modul :D

Hab schon einige DRead und DWrite Verbindungen mit meiner Logo7 gemacht und jetzt würde ich gerne die Aussentemperatur von meiner Luxtronik2 an die Logo weitergeben geht das?

Danke Manfred

RasPi B+,Onkyo_AVR,Luxtronik2,Logo7,Mpd,Arduino Uno mit Ethernet,KNX,Jablotron

pc1246

Hallo Mani

Im 1. Post steht ein link zum Wiki, da steht alles beschrieben! Hier noch einmal fuer Dich: http://www.fhemwiki.de/wiki/S7

Gruss Christoph

P.S.: Willkommen im Forum!
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

charlie71

Hallo

vielen Dank fürs schnelle Feedback.
Hab wieder einen kleinen Fehler gefixed. (ich find es unheimlich interessant wie fehlertolerant die Logo ist, denn auch dieser Fehler hatte keine Auswirkungen auf die Kommunikation mit der Logo).

Bitte wieder File tauschen.

lg
Charlie71

rhonline

Hallo charlie71,

ich glaube, jetzt klappt es sogar bei mir erstmalig mit dem Schreiben in die S7-300 !!!
Muss nachher noch ausgiebiger Testen, aber die letzte Änderung hat etwas bewirkt !

DANKE für die wahnsinnige und aufopferungsvolle Arbeit !

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

mani

Hallo Christoph,
Danke für die schnelle Antwort den Beitrag habe ich bereits gelesen.
Aber ich kann nicht heraus finden wie ich einen AWrite Eingang für die Logo7 erstelle im Wiki ist die Beschreibung für die S7 mit Datenpunkten  aber für die Logo brauch ich normal nur den Merker angeben.
Weiß nicht wie ich auf den Datenpunkt komme....
RasPi B+,Onkyo_AVR,Luxtronik2,Logo7,Mpd,Arduino Uno mit Ethernet,KNX,Jablotron

alfonsmoeller

Hallo charlie71,
es funktioniert auf der RTX!!
Wieder die gleiche Reihenfolge an Bit's wie in den vorherigen Protokollierungen 0=1 7=1 7=0 0=0

2015.02.02 14:23:53 1: PCS_7 S7_WriteBitToPLC: Write Bytes to PLC: 7, 33, 0 , 1, 1
2015.02.02 14:23:53 1: TCPClient WriteArea : 03, 00, 00, 24, 02, f0, 80, 32, 01, 00, 00, 00, 00, 00, 0e, 00, 05, 05, 01, 12, 0a, 10, 01, 00, 01, 00, 21, 84, 00, 00, 00, 00, 03, 00, 01, 01
2015.02.02 14:23:58 1: PCS_7 S7_WriteBitToPLC: Write Bytes to PLC: 7, 33, 7 , 1, 1
2015.02.02 14:23:58 1: TCPClient WriteArea : 03, 00, 00, 24, 02, f0, 80, 32, 01, 00, 00, 00, 00, 00, 0e, 00, 05, 05, 01, 12, 0a, 10, 01, 00, 01, 00, 21, 84, 00, 00, 07, 00, 03, 00, 01, 01
2015.02.02 14:24:03 1: PCS_7 S7_WriteBitToPLC: Write Bytes to PLC: 7, 33, 7 , 1, 0
2015.02.02 14:24:03 1: TCPClient WriteArea : 03, 00, 00, 24, 02, f0, 80, 32, 01, 00, 00, 00, 00, 00, 0e, 00, 05, 05, 01, 12, 0a, 10, 01, 00, 01, 00, 21, 84, 00, 00, 07, 00, 03, 00, 01, 00
2015.02.02 14:24:07 1: PCS_7 S7_WriteBitToPLC: Write Bytes to PLC: 7, 33, 0 , 1, 0
2015.02.02 14:24:07 1: TCPClient WriteArea : 03, 00, 00, 24, 02, f0, 80, 32, 01, 00, 00, 00, 00, 00, 0e, 00, 05, 05, 01, 12, 0a, 10, 01, 00, 01, 00, 21, 84, 00, 00, 00, 00, 03, 00, 01, 00

Ich teste noch weiter ob ich was übersehen habe.
m.f.G. Alfons

charlie71

Hallo Mani,

schau dir mal im Porsti #39 das Attachment von Porsti an, dass sollte deine Frage Beantworten.

lG
Charlie71

Zitat von: mani am 02 Februar 2015, 14:18:43
Hallo Christoph,
Danke für die schnelle Antwort den Beitrag habe ich bereits gelesen.
Aber ich kann nicht heraus finden wie ich einen AWrite Eingang für die Logo7 erstelle im Wiki ist die Beschreibung für die S7 mit Datenpunkten  aber für die Logo brauch ich normal nur den Merker angeben.
Weiß nicht wie ich auf den Datenpunkt komme....

rhonline

Hallo charlie71,

kann es sein, dass das Attribut "Unit" bei ARead nicht mehr existent ist ?

z.B.
attr DB70_Wert unit Watt

Da bringt die cfg eine Fehlermeldung.

DB70_Wert: unknown attribute unit. Type 'attr DB70_Wert ?' for a detailed list.
fhem auf RasPi B+ / S7-300 / 44_S7 V2.x

charlie71

#368
Hallo rhonline,

ja föllig richtig, eigentlich habe ich angekündigt sie bereits in der V2.3 rauszuwerfen.
Begründung: Seit V2.3 gibts Standardattribute die diese Aufgabe übernehmen können.
Ein Beispiel findest du in den Releasenotes.

lG
Charlie71

rhonline

Hallo charlie71,

sorry, nicht mehr präsent gehabt.
Ich meine aber, das hat bis zu Deiner letzten S7_Client-Änderung noch funktioniert ???  :-\
Werde in Ruhe nochmal eine neue cfg aufsetzen, jetzt wo auch bei mir das Schreiben funzt.


Zitat von: charlie71 am 02 Februar 2015, 15:45:19
Hallo rhonline,

ja füllig richtig, eigentlich habe ich angekündigt sie bereits in der V2.3 rauszuwerfen.
Begründung: Seit V2.3 gibts Standardattribute die diese Aufgabe übernehmen können.
Ein Beispiel findest du in den Releasenotes.

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

John

@charlie71,

ich bin mir nicht sicher in dem was folgt, da ich deinen Code nicht umfassend verstanden habe.

In sub S7_readFromPLC($) fragmentierst du das Lesen eines Blockes, wenn die PDU-Size für die Blockgrösse zu klein ist.

Bereits nach dem ersten gelesenen Segment reichst du dieses an S7_readAndDispatchBlockFromPLC weiter.
Nun kann es sein, dass das Ende des Segmentes die ersten beiden Bytes eines Datenpunktes mit Format real (4 byte) umfasst.
Diese würde erst vollständig abgebildet werden, wenn auch das Folgesegment eingelesen ist.

Dies wäre klassischer Dirty Read, in dem nur ein Teil eines konsistenten Objektes aktualisiert wird.
Besser wäre es denn Datenblock vollständig einzulesen, bevor du ihn an die übergeordneten Schichten weiterreichst.

Vielleicht liege ich auch falsch mit meiner Analyse.


John

CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

charlie71

Hallo John,

danke für dein Feedback.
die Funktion  S7_readFromPLC($) prüft ob mit dem Hinzufügen des nächsten Clients ($logoClientsDB{$positioned[$i]}{ADDRESS} + $logoClientsDB{$positioned[$i]}{LENGTH}) die Maximalgröße (MaxReadLength) verletzt wird:

if($logoClientsDB{$positioned[$i]}{ADDRESS} + $logoClientsDB{$positioned[$i]}{LENGTH} - $blockstartpos <= $hash->{S7TCPClient}->{MaxReadLength}){
#extend existing block
$blocklength = int($logoClientsDB{$positioned[$i]}{ADDRESS}) + $logoClientsDB{$positioned[$i]}{LENGTH} - $blockstartpos;
} else {
#block would exeed MaxReadLength
#read and dispatch block from PLC
$res = S7_readAndDispatchBlockFromPLC($hash,$logoClientsDB{$positioned[$i]}{AREA},$logoClientsDB{$positioned[$i]}{DB},$blockstartpos,$blocklength);
return $res if ($res != 0);

#start new block new time
$blockstartpos = int($logoClientsDB{$positioned[$i]}{ADDRESS});
$blocklength = $logoClientsDB{$positioned[$i]}{LENGTH};

}


wenn ich nichts übersehen habe, somit kein dirty read auftreten.

lg
Charlie71

charlie71

Hallo John,

es gibt einen Punkt, wo du mir helfen könntest.
Nach der Aktualisierung der DReads tauchen keine Events mehr im Event Monitor auf. Somit wird auch die Anzeige nicht mehr aktualisiert.

Kannst Du mir hier weiterhelfen.
Danke und lG
Charlie71

John

Das Thema event-min-interval habe ich hier
http://forum.fhem.de/index.php/topic,33069.0.html eingehängt.

Rudi ist wohl noch am überlegen.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

John

@charlie71

ich weiss nicht womit du entwickelst, aber ich finde EPIC extrem hilfreich
http://www.epic-ide.org/
Eclipse mit Perl-Plugin.

Man kann
* Code Formatieren
* Debuggen (Breakpoints, Data Views)
* den lokalen Source-Code automatisch mit dem Laufzeitrechner synchronsieren (Remote System Explorer)
* vorab die Syntax validieren (Sofortanzeige von Fehlern während der Eingabe)

John




CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP