neues Modul: SIEMENS Anbindung / S7 / Siemens Logo

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

Vorheriges Thema - Nächstes Thema

charlie71

Hallo John,

so jetzt hab ich PDU - Klarheit ;-)

die libnodave ermittelt die PDU length vom Device automatisch. (Das passiert beim Ersten connect).
Das Problem dabei ist jedoch, dass man zu Beginn ein Start PDU verwenden muss (Das ist derzeit der optionale PDU Parameter). Ist dieser zu hoch, kann keine Verbindung aufgebaut werden.
Beim Versionsupdate der libnodave von 8.4 ->  8.5 wurde die default PDU length von ursprünglich 960 auf 1920 geändert. Mit dem Neuen Default wert, hat das Verbinden mit der Logo nicht mehr geklappt.

Aktuell wird die von der libnodave ausgehandelte PDU length in der S7 lib nicht berücksichtigt.
In der nächsten Version wird das angepasst werden.

lG
Charlie71

John

Hallo charlie71,
das ist doch eine gute Nachricht.

Vielleicht gelingt es dann auch die User davon zu befreien, auf die PDU-Länge achten zu müssen,
so daß das Modul "überlange" Bereiche automatisch in sequenzielle Scans umwandelt.

Sonst müssen sie auch noch lernen, welchen Overhead sie berücksichtigen müssen, um die Netto-Last berechnen zu können.

Ich habe beim Modul LOGO auf Datenbereiche (ReadDB-Config, WriteDB-Config) aus Sicht des Anwenders verzichtet.
und versucht es für ihn so einfach wie möglich zu machen.
Der Anwender muß nur seine Datenpunkte definieren.
Den Rest erledigt das Modul selbst.

Wenn du an der Architektur noch drehen willst, werde ich dich gerne unterstützen.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

charlie71

Hallo John,

ja ich sehe dass genau so, dass das eigentlich Einstellungen sind die für den Nutzer nicht wichtig sein sollten.

Das Konzept dass nur Datenpunkte definiert werden müssen, funktioniert auch bereits in diesem Modul.

Was mich eigentlich stört ist, dass man C modul benötigt. Schön währe es wenn man eine reine PERL Lösung hätten. Ich hab mir mal den C Source Code von der libnodave mal angesehen, ist eine ziemliche Arbeit diesen auf Perl zu konvertieren. Aber vielleicht hast du ja eine Idee.

lG
Charlie71

John

Hallo Charlie71,

ZitatSchön wäre es wenn man eine reine PERL Lösung

Das ist eine Lebensaufgabe, lass die Finger davon.
Es leben Firmen davon einen S7-Treiber zu hosten.

Ich habe mich gegen LibnoDave entschieden, weil es total unübersichtlich und überfrachtet ist.
Snap7 nutzt nur noch die TCP/IP Kommunikation, ist super dokumentiert und hat eine durchdachte Architektur.

Ich habe den Port auf Perl mit dem Tool Swig hinbekommen, ein Wrapper-Framework, das aus C/C++ Libraries Wrapper für verschiedene
Sprachen generieren kann
http://forum.fhem.de/index.php/topic,30317.0.html

Snap7 bietet auch einen Server, so könnte etwa FHEM nach aussen wie eine S7-300 erscheinen.
Dann kann z.B. eine Logo aktiv nach FHEM schreiben oder ein Siemens operator Panel /WinCC Daten von FHEM visualisieren.
Vom gleichen Autor gibts noch eine MicroLibrary für Arduino, so daß z.B ein Temperaturfühler seinen Wert direkt in die LOGO schreibt.

Wirf einfach mal einen Blick rein, vielleicht wird auch dich was du siehst begeistern.
http://snap7.sourceforge.net/snap7_api_ref.html

Wir können gerne auch über eine gemeinsame Code-Basis diskutieren.

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

charlie71

Hallo John,

mein eigentliches Ziel habe ich mit diesem Projekt erreicht.
Als ich vor einem Jahr mir überlegt habe wie ich meine Logos in eine erweitere Visualisierung einbinden kann, habe ich keine sinnvolle Möglichkeit gefunden. Ich habe mit damals für libnodave entschieden, da es hier bereits eine fertige Perlanbindung gegeben hat. Das war für mich DER Vorteil da die mein erstes Projekt in Perl war.
(Anmerkung: Da es mein erstes PERL und auch mein erstes FHEM Projekt war, hat es bei manchen Fixes ein wenig länger gedauert. Ich hoffe die Community entschuldigt dies.)

Aus der jetzigen Perspektive würde ich manches besser machen. Ich bin mir jedoch nicht sicher ob sich das Ergebnis wesentlich unterscheiden würde.

Wie schon anfangs erwähnt, mein Ziel wurde erreicht. Es gibt nun sogar 2 Möglichkeiten für eine S7 Anbindung (dein Modul).

Ich würde mich freuen wenn wir eine gemeinsame Code Basis schaffen würden.
Wir sollten dafür festlegen welche Ziele erreicht werden sollen.

lG und guten Rutsch ins Neue Jahr
Charlie71

John

Hallo charly71

ZitatWie schon anfangs erwähnt, mein Ziel wurde erreicht. Es gibt nun sogar 2 Möglichkeiten für eine S7 Anbindung (dein Modul).
Dabei sollten wir es vorerst belassen und das "Faß" erst dann wieder öffnen, wenn der Leidensdruck steigt.

Auch dir wünsche ich ein gutes nächstes Jahr.
John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

phel

Hallo Charlie,

danke für deine tolle Arbeit!
Da du das einbinden von Logo!s vereinfacht hast, würde ich das gerne bei mir auch umsetzen.
Zitat von: charlie71 am 23 Dezember 2014, 21:03:41
New Features:
* Logo7 und Logo8 können nun sehr nur durch Angabe der IP Adresse angelegt werden. Beispiel:
define logo2 S7 LOGO7 10.0.0.242
define logo3 S7 LOGO8 10.0.0.243

alle internen Settings werden dann automatisch generiert.

Im Code scheint nur LOGO7 implementiert zu sein, und in der Readme wird noch die alte Methode beschrieben. Ist das inzwischen wieder rausgeflogen?

Grüße
Phel

charlie71

Hallo phel,

ja das stimmt in der V1.14 war nur die Logo7 aktiviert.
in der V1.15 wird auch die die Logo8 unterstützt, bitte um Feedback.

lg
Charlie71

charlie71

Hallo Leute,

ich habe mal eine neue Version V1.15 erstellt. Versioninfo:

* Fix minor - PDU size of the connection  instead of the initial PDU Size (Parameter) is used for length checks
* Fix minor - fix für simple config LOGO8
* Cosmetical - cleanup logging info
* New Feature - New Parameter for Analog Reads and Analog Writes:  unit: This can be used to show a unit after the analog value
* New Feature - New Parameter for Analog Reads and Analog Writes:  precision: defines how many X places after the comma the value should be shown

Das File befindet sich im ersten Posting.
lG
Charle71

phel

Das ging ja schnell! Danke.

Lesen geht jetzt wunderbar, habe I und Q getestet.

Allerdings habe ich beim Schreiben Probleme - vielleicht gibts bei mir auch ein Verständnisproblem!?

ersteinmal meine config:
# Anbindung Siemens Logo
define mylogo S7 LOGO8 192.168.188.222
attr mylogo ReadDB-Config 0 1024 8 1 0 1064 8 1
attr mylogo WriteDB-Config 0 1024 8
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 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 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 group Logo 8
attr I1_mylogo room Automation

define I23_mylogo S7_DRead I23
attr I23_mylogo IODev mylogo
attr I23_mylogo alias I23
attr I23_mylogo group Logo 8
attr I23_mylogo room Automation

define I1_mylogo_w S7_DWrite I1
attr I1_mylogo_w IODev mylogo
attr I1_mylogo_w alias I1_w
attr I1_mylogo_w group Logo 8
attr I1_mylogo_w room Automation

define I23_mylogo_w S7_DWrite I23
attr I23_mylogo_w IODev mylogo
attr I23_mylogo_w alias I23_w
attr I23_mylogo_w group Logo 8
attr I23_mylogo_w room Automation


Ich habe versucht auf I1 und I23 zu schreiben - Ich dachte, dass ich vielleicht auf I23 eher schreiben kann, da dieser Eingang nicht in Hardware an meiner Logo vorhanden ist. I1 hätte ja einen Konflikt mit einem Hardware Schalter den ich angeschlossen habe.
Allgemein denke ich aber eher, dass die Netzwerkeingänge dafür gedacht sind. Ich habe NI1 in der Logo wie im angehängten Screenshot konfiguriert.

Leider fangen meine Probleme schon beim definieren an:
define NI1_mylogo_w S7_DWrite db 0 8324
bringt
S7_DWrite_Define: wrong memory area, valid position : (7536 - 7544) (7384 - 7400) (7584 - 7608) (9968 - 10088) (8512 - 8568) (8192 - 8248)


Grüße
Phel


phel

Grade nocheinmal schreiben auf Merker getestet, das funktioniert wunderbar  :)
Dann kann ich jetzt damit Arbeiten! Danke.

Vielleicht schaust du in einer ruhigen Minute mal nach meinem Posting.

charlie71

Hallo phel,

also das direkte Schreiben auf Eingänge funktioniert nicht (wie bereits schon mehrmals erwähnt). Grund Es wird zwar im Speicher der SPS der Wert gesetzt, jedoch zu Beginn jedes SPS Zyklus wird der Eingangsspeicher mit dem aktuellen Zustand der HW überschrieben.
Die Lösung ist somit Netzwerkeingänge zu verwenden. (Ich denke es auch besser die Netzwerkeingänge als Merker zu verwenden.)

1) Schritt such dir einen freien Variablen Speicherbereich in der SPS (in meinen Beispiel 602). Verbinde die Netzwerkeingänge mit dem variablen Speicher (in meinen Beispiel V602.0 und V602.1).

Siehe Screenshot im Attachment.

2) Im Fhem muss nun ein Writingconfig angelegt werden die diesem Speicher immer von FHEM auf die SPS schreibt:
Beispiel: Schreibt 5 Bytes ab Adresse 600 zur SPS (Anmerkung: Eigentlich würde es reichen wenn wir an Adresse 602 ein Byte schreiben würden.)
attr logo WriteDB-Config 0 600 5

3) Nun können die DWrites eingerichtet werden.
Beispiel:

define NI2 S7_DWrite db 0 602.0
define NI3 S7_DWrite db 0 602.1


Das war's auch schon.  Ich hoffe ich konnte ein wenig helfen.
lg
Charlie71

phel

Perfekt, danke!

Dann war meine Vermutung richtig mit den HW Ausgängen. Bei den NIs dachte ich, es gäbe feste Bereiche wie in der Hilfe angegeben (siehe Anlage von vor 2 Postings). Aber jetzt ist alles klar und funktioniert auch mit Netzwerkeingängen!

Grüße
Phel

fu_zhou

Hallo charlie71,

precision und unit ist genial! Wäre es möglich, für unit ein Auswahl-Fenster zu zeigen (wie bei room oder group), in dem alle schon definierten Einheiten zur Auswahl stehen plus dem Textfeld für eine neue Einheit?

Überhaupt sollte unit grundsätzlich als attr eingeführt werden, ich habe den slider zum Sollwert setzen jetzt hinbekommen, nur der slider selber zeigt natürlich keine Einheiten an.

define Feuchte_Soll S7_AWrite db 22 0 float
attr Feuchte_Soll IODev PCS_7
attr Feuchte_Soll group Raumluft
attr Feuchte_Soll precision 1
attr Feuchte_Soll room Keller
attr Feuchte_Soll unit % rel. Feu

define Feuchte_Soll_Slider dummy
attr Feuchte_Soll_Slider group Raumluft
attr Feuchte_Soll_Slider room Keller
attr Feuchte_Soll_Slider setList state:slider,40,0.5,70,1
attr Feuchte_Soll_Slider webCmd state

define Feuchte_Soll_Slider_notify notify Feuchte_Soll_Slider {\
fhem "set Feuchte_Soll ".ReadingsVal("Feuchte_Soll_Slider","state","50");;\
}
FHEM auf RasPi 2, S7-300 mit ET200S über ProfiNet

rhonline

Hallo zusammen und ein gutes neues, gesundes und erfolgreiches Jahr 2015 !!!

Ich verzweifle   :-\

Seit Monaten beschäftige ich mich immer mal wieder mit dem Thema, eine Verbindung zwischen fhem und der S7 hinzubekommen.
Nun habe ich durch dieses Modul 44_S7 endlich geschafft !!! Vielen Dank für diese Entwicklung.
Ich kann Werte und Bits hin und herbewegen!
Und mittlerweile habe ich es auch anhand von einigen Codeschnipseln hier aus dem Forum geschafft,
einen analogen Wert (Temperatur vom FHT) an die S7 zu übergeben.
Da ich aber kein fhem bzw. perl-Programmierer bin und mir auch leider immer nur kleine Zeitscheiben zum Basteln zur Verfügung stehen,
habe ich das Gefühl, bei jeder Anweisung fange ich wieder bei null an.

Mit folgendem Code schiebe ich die Temperatur zur S7 :
define WZ_Regler_notify notify WZ_Regler {\
fhem "set Temp_Ist ".ReadingsVal("WZ_Regler","temperature","18.0");;\
}


Auch wenn es für euch banal ist, ich versuche schon die ganze Zeit, z.B. einen Fensterkontakt zur SPS zu beamen und bekomme es einfach nicht hin.
Und ich habe hier schon etliche Threads durchforstet und einiges versucht.

Vielleicht kann mir ein Spezi hier ein paar Grundzeilen zusammenfassen, wie ich das hinbekomme.
Bitte nicht schimpfen, wenn es zu banal ist, aber mir fehlt einfach die Zeit und ich verliere so langsam die Lust, da ich es einfach nicht hinbekomme.


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