neues Modul: SIEMENS Anbindung / S7 / Siemens Logo

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

Vorheriges Thema - Nächstes Thema

web.a

@Ichirou
Ich würde sagen es geht mit der Vipa 313, Eine Verbindung mit dem OC Wizard wird nicht benötigt.
Wenn du über den Netzwerk Anschluss Step 7 Programmieren kannst wird es gehen.

Meine Konfiguration auf FHEM:
define VipaSPS S7 192.168.1.10 0 2
192.168.1.10 IP musst du entsprechend deinem Netzwerk anpassen, die 0 und die 2 wie oben angefügt lasen

Beispiele:

Auslesen Bit 4.3 aus Datenbaustein 10:
define EG_Alarm S7_DRead db 10 4.3

Auslesen Ausgang 2.6:
define FBH_Ein S7_DRead outputs 0 2.6

Auslesen Merker 19.6
define Blinktakt3s S7_DRead flags 0 19.6


Ichirou

Hi web.a,

danke für die Tips, ich kann jetzt mit Freude sagen, es funktioniert 1A.
Die notifys haben mir noch etwas zu schaffen gemacht, der arme Raspi hatte gut zu tun, aber jetzt funktioniert die Testumgebung wunderbar.

Vielen Dank an alle Beteiligten :)

Ichirou

web.a

Ja gerne ;-)

Gesendet von meinem Xperia ZL mit Tapatalk


charlie71

Hallo

das Modul unterstützt nicht nur eine TCP Schnittstelle, sondern auch die serielle MPI Schnittstelle, somit kann nicht nur eine S7 sondern auch eine S5 angebunden werden.
Ob die Kommunikation auch mit der MPI Schnittstelle der Vipa 313 klappt wurde noch nicht getestet.

lg
Charlie71

ralf_

@charlie71 :  als erstes höchsten Respekt für diese tolle Modul !

Ich habe es erfolgreich für S5  (AG115U) eingebunden,
SPS-Daten lassen sich einwandfrei lesen.

Aus meiner Begeisterung heraus habe ich im folgenden gleich einige weitere SPS-Bits in FHEM definiert, und bin dann leider doch auf massive Perfomanceprobleme gestoßen.  Ich rede hierbei nicht von Events und Logs, welche ich von Anfang an mit "on-change-reading=.*" unterbunden hatte.

Über "apptime" habe ich reproduzierbare Messwerte ermittelt,
name                                     function                               max  count    total  average maxDly TS Max call     param Max call
tmr-S7_GetUpdate                         HASH(0x2ff4f18)                       3830      1     3830  3830.00      9 05.07. 22:13:28 HASH(115u)

welche bei jedem Abruf für knappe 4 Sekunden alles blocken. Außer das Intervall auf 60 Sekunden zu setzen, gab es aktuell keine Möglichkeit, FHEM benutzbar zu halten.

Ich rufe einen DB ab, welcher in 2 Bytes insgesamt 15 Datenpunkte  (15 Bits aus einem DB) definiert hat. Der eigentlich Abruf über AS511 dürfte max 300 ms dauern, was auch ein Gegentest mit libnodave bestätigt. Ebenso komme ich in FHEM mit nur einem Bit auf ähnliche Werte.

Im folgenden habe ich die Analyse bis zum Trace der seriellen Kommunikation getrieben und festgestellt, dass für jedes einzelne Bit der komplette DB erneut über AS511 abgerufen wird. Es wird also in jedem Intervall ein und der selbe DB für jedes Bit erneut abgerufen.  Damit erklärt sich auch die 4 Sekunden Bearbeitungszeit.

Gemäß Wiki https://wiki.fhem.de/wiki/S7#Funktionsprinzip war ich davon ausgegangen, dass  je Intervall die benötigten Daten nur einmal über AS511 geholt werden:  "Aus dem Ergebnis werden Leseblöcke abgeleitet, die dann von der SPS geholt werden. Danach werden die Clientmodule mit den aktualisierten Werten versorgt." 
Ist es beabsichtigt, dass  ein DB, welcher in mehreren Devices angesprochen wird, trotzdem mehrfach  (über langsames AS511 mit 9600 Bd) abgerufen wird ?


mfg Ralf

TechnoTron

Hallo,

eine kurze Frage. Ist es möglich, dass man eine Variable mit offset setzen kann? Also einen Array beschreiben kann..?

Lg
Tron
Das Käseparadoxon.

Käse hat Löcher.
Je mehr Käse desto mehr Löcher.
Je mehr Löcher desto weniger Käse.

charlie71

Hallo Ralf,

Sorry für mein Delay, hatte  in den letzten Tagen Handwerker im Haus ;-)

Was Du erklärst scheint soweit schlüssig zu sein. Ich möchte mir gerne das Problem genauer ansehen. Dafür benötige ich weitere Infos:
1. relevanter Auszug aus der fhem.cfg (alles was mit dem Modul zu tun hat wichtig ist die Config der Readings und Writings)
2. Logfileauszug: Damit ich verstehen kann was im Modul passiert, habe ich zusätzliche log Meldungen eingebaut die werden aber erst bei höheren log level.
Bitte den log level von 3 auf 5 setzen:

# globale Änderung des Loglevel, gilt für alle Module
attr global verbose 5

Ich benötige nur einen Auszug von 30s danach kann das Loglevel wieder zurückgesetzt werden. Wenn du das Loglevel nicht zurückdrehst, dann wird dein Log file sehr schnell sehr lang werden.

Bitte dann beide Infos posten, dann kann ich mit der Problemanalyse vorfahren.
lG
Charlie71


ralf_

Hallo Charlie,

vielen Dank für das Angebot der Problemrecherche,
ich habe die SPS-config  und das verbose5-log angehängt,
die sps.cfg ist bei meiner Install sowieso ausgelagert in dieses extra File und somit komplett,
im log ist auf die relevanten Einträge gekürzt.

Dankeschön

viele Grüße Ralf

charlie71

Hallo Ralf,

ich denke ich konnte das Problem lokalisieren. Bitte das File aus dem Anhang tauschen und testen. Bitte um Rückmeldung ob der fix erfolgreich war damit ich das ganze in die offizielle Release aufnehmen kann.

lG
Charlie71

ralf_

Hallo Charlie,

das schaut sehr gut aus,

name                                     function                               max  count    total  average maxDly TS Max call     param Max call
tmr-S7_GetUpdate                         HASH(0x1319f98)                        286    720   189323   262.95    287 13.07. 01:02:51 HASH(115u)


die Zeiten liegen mit dem Fix im erwarteten Rahmen von unter 300ms,
ich konnte das Polling-Intervall nun auf 1 Sekunde setzen,
FHEM reagiert weiterhin flüssig, und die SPS-Aktualisierung nun ebenfalls.

vielen herzlichen Dank, insbsondere für die sehr schnelle Arbeit   :)

mfg Ralf

charlie71

Hallo Leute,

ich hab wieder mal Zeit gefunden die Performance des Moduls zu verbessern.
Die Performanceverbesserungen werden nur mit der Verwendung von "event-on-change-reading" und/oder "event-min-interval" wirksam.

Ich habe die neue Version gerade eingecheckt, kann somit morgen via update bezogen werden.

lG
Charlie71

Cnetrwal

Hallo

Ich habe vor einigen tagen mein FHEM upgedatet und damit die aktuellen S7 Module
installiert. Habe dann das neue Feature mit kurzer LOGO7/8 Notation probiert.
Für digitale Devices funktioniert es auch aber für Analoge nicht. Hab mir den Code angesehen
und festgestellt das das binden an das physikalische Device zu spät passiert. Daher gehen
alle checks für LOGOx schief.
Ich habe z.B.: folgendes geändert:

--- FHEM/44_S7_ARead.pm (Revision 44)
+++ FHEM/44_S7_ARead.pm (Arbeitskopie)
@@ -48,6 +48,7 @@
my @a = split( "[ \t][ \t]*", $def );

my ( $name, $area, $DB, $start, $datatype );
+ AssignIoPort($hash);    # logisches modul an physikalisches binden !!!

$name     = $a[0];
if ( uc $a[2] =~ m/^[NA](\d*)/ ) {
@@ -210,7 +211,6 @@
push( @{ $modules{S7_ARead}{defptr}{$ID} }, $hash );
}

- AssignIoPort($hash);    # logisches modul an physikalisches binden !!!

$hash->{IODev}{dirty} = 1;
Log3 $name, 4,

 

Dann funktioniert es auch mit dem S7_A- devices

LG

Christian

charlie71

Hallo Christian,

vielen Dank für deine Hilfe. Ich hab dass Modul schon angepasst und eingecheckt.

lG
Charlie71

mr_tembo

Hallo Zusammen,

ich betreibe seit ca. 1 Jahr eine LOGO! 8.FS4. Nun wollte ich meine Logo 8 welche unsere Heizungsanlage steuert an meinen Fhem anbinden. 
Das einbinden der Logo sowie den Status der Qx Eingänge abzufragen ist/war kein Problem. Ich scheitere jedoch an dem S7_Aread.

AI1 bis AI4 werden an der Logo als analoge Eingänge betrieben. Nun wollte ich diese Werte über den S7_Aread auslesen.  Ich bekomme immer die Fehlermeldung
"...Only for Logo7 or Logo8: define S7_ARead {AI|AM|AQ|NAI|NAQ}"

Mein Eintrag sieht so aus (wie gesagt DRead funktioniert, nur der ARead nicht)

define Hz.Logo S7 LOGO8 192.168.123.188
attr Hz.Logo room 8.00_Heizung

# Heizkreispumpe
define Hz.Pumpe S7_DRead Q1
attr Hz.Pumpe event-on-change-reading state
attr Hz.Pumpe room 8.00_Heizung

define Hz.Innentemperatur S7_ARead AI3
attr Hz.Innentemperatur IODev Hz.Logo
attr Hz.Innentemperatur event-on-change-reading state
attr Hz.Innentemperatur room 8.00_Heizung
attr Hz.Innentemperatur stateFormat {sprintf("%.1f",ReadingsVal($name,"state",0))." °C"}


Kann mir bitte jemand weiterhelfen.

Herzlichen Dank. Mr. Tembo


auch der Versuch über einen analogen Netzwerkausgang (NAQ1) scheitert.

charlie71

Hallo mr_tembo,

ich hab gerade
define test_ARead S7_ARead AI3
auf der aktuellen Version mit meiner Logo8.FS4 getestet. Funktioniert auf Anhieb einwandfrei.

Bitte aktualisiere dein FHEM auf die neuerste Version.

Bitte um Info ob es dann geklappt hat.
lG
Charlie71