neues Modul: SIEMENS Anbindung / S7 / Siemens Logo

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

Vorheriges Thema - Nächstes Thema

gremlin3.2

Guten Abend zusammen.

Ich habe hier im Forum noch nie etwas geschrieben, da ich meine SPS S7 315 noch nicht so lange habe.

Zuerst möchte ich mich für das Modul und für Fhem ueberhaupt hier einmal bedanken.

Ich habe die Funktionen alle am laufen und bin begeistert, wie auf einmal die Möglichkeiten bei mir im Haus realisierbar werden.

Ich hätte da allerdings ein kleines Problem!!!!!
Ich möchte eine Zahl in Fhem umwandeln. Mein Thermostat liefert zb. 25.5 Ich brauche aber eine Zahl ohne Kommastellen.

In der SPS ist diese Variable als Integer angelegt. Wie rechne ich nun 25,5 um in 25 als Zahlenwert ohne Komma?

Ich denke das das für die meisten von euch banal ist, aber ich sitze hier ohne Perl Kenntnisse seit zwei tagen und habe graue Haare. 8)

Danke für eure Hilfe im voraus.
mfg Helmut
 

pc1246

#541
Hallo Helmut
Schau Dir mal die UserReadings an! Damit wirst Du weiterkommen!
Gruss Christoph

Edit:
Ich habe Dir mal ein Beispiel erstellt, in dem auch noch richtig gerundet wird.
temp_no_dec {int(ReadingsVal("HM_EZ","measured-temp",0)+0.5)*10/10;; }
temp_no_dec ist das UserReading, HM_EZ ist das eigentliche Element und measured_temp ist der zu lesende Wert. Die 0 ist der Ersatzwert, und 0.5 werden addiert, um zu Runden. Danach noch mit 10 multiplizieren und danach dividieren!
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

gremlin3.2

Mach Ich allerdings fehlt mir etwas der Ansatz

Cu
Dake

pc1246

Helmut
Habe meinen post gerade editiert! Siehe oben!
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

gremlin3.2

Danke Ich war etwas beschäftigt mit dem was ich mir zusammengesucht habe

define Wohnzimmer_SPS notify Termostat:desired-temp.* {my $bad=sprintf("%%.0f",ReadingsVal("Termostat","desired-temp", 18) ) ; fhem("set Temp_schieber_Wohnzimmer state $bad");}


Events:
2015-03-06 21:47:51 S7_AWrite Soll_Temp_SPS_Wohnzimmer 15.0
2015-03-06 21:47:51 CUL_HM CUL_HM_HM_CC_TC_1EA875_Climate desired-temp: 15.0

Leider ohne Erfolg.
15.0 ist es immer noch nicht.
werde deine Lösung jetzt mal ausprobieren.

Ich habe eine Fussbodenheitzung mit Fhem am laufen.

Gefühlte 3 Monate gebraucht um zu verstehen was ich machen muss.

jetzt geht alles prima.

Die SPS bekomme ich da auch noch rein.

Danke Danke für die Hilfe.
Ich weiss das ich hier Anfängerfragen stelle aber irgendwann haben wir alle einmal angefangen.

mfg Helmut

alfonsmoeller

#545
Hallo gremlin3.2,
Versuch es doch mal so:

# Rücklesewert ob 315 den Wert bekommen hat
define vonSPS S7_ARead db 34 0 float
attr vonSPS IODev PCS_7
attr vonSPS event-on-change-reading state
attr vonSPS group 1_SPS
attr vonSPS room SPS
attr vonSPS stateFormat {sprintf("%0.0f",ReadingsVal($name,"state",%0.0))}

Analog deiner Anwendung um schreiben.
m.f.G. Alfons
PS: Ich hoffe das ich richtig verstanden habe.
Bild Anhang

gremlin3.2

Ich habe warscheinlich ein Brett vorm Kopf.
Sicher sogar.........

set Temp_schieber__SPS__Wohnzimmer {int(ReadingsVal("Termostat","desired-temp",0)+0.5)*10/10;; }

wäre mein nächster Ansatz um diese Variable an das Modul AWrite zu übergeben.

db 33 78 s16

Raus kommt dabei

Temp_schieber__SPS__Wohnzimmer You have to enter a numeric value: -32768 - 32767

Ich habe da keinen plan bzw Übersicht verloren.....

Vielleicht zu lange am rumprobieren...

hat jemand eine Lösung ???

mfg Helmu

gremlin3.2

Also .......
attr vonSPS stateFormat {sprintf("%0.0f",ReadingsVal($name,"state",%0.0))}

Funktioniert!!!

Es wird eine Zahl ohne Komma ausgegeben.
Aber leider kann ich diese nicht weiterschicken da sie in den Internals auftaucht unter STATE.

Abfragen oder weiterleiten kann ich aber nur state aus den Readings .

Ich bekomme es einfach nicht hin den gerundeten wert zur SPS zu schicken.
Grummpff

Ich habe einmal ein Bild angehängt und hoffe das man daraus erkennt wass ich meine.

Danke nochmal für eure Hilfe .
Ich bin wahrscheinlich ohne euch aufgeschmissen in dieser Angelegenheit.

cu Helmut


gremlin3.2

Guten Morgen zusammen.

Hier noch einmal zum Verständnis.

Ich möchte den desired-temp Wert zb 18.5 meines Thermostates als Ganzzahl 19 an das Modul AWrite übergeben.

Ich scheitere an der Umrechnung als Ganzzahl da ich mich in Perl leider nicht sonderlich auskenne.

Ich habe einen Temperaturschieber dessen Werte ich über ARead  db 33 78 s16 geliefert bekomme. (klappt super)
Jetzt möchte ich den Wert den mein Termostat liefert, wenn sich am Termostat der Wert ändert an das Anzeige Terminal übermitteln damit der schieber die Position des Wertes übernimmt.
Dabei stolpere ich über die Umrechnung als Ganzzahl.

Also ohne Syntex

"define übergabe SPS-S7_Awrite Thermostat(Thermostat.desired-temp(Ganzahlumrechnung)"

set übergabe 18 klappt
set übergabe 18.5 geht nicht.

Ich lese Hier im Forum schon seit Jahren mit und habe über die codeschnipsel  und in den Beiträgen zu meinem jetzigen Problem nichts gefunden.

Deshalb hier mein erster versuch im Forum etwas zu schreiben (obwohl ich nicht der Fachmann bin)

Vielen Dank für eure Mühe im Voraus

mfg Helmut




alfonsmoeller

Hallo gremlin3.2,
warum versuchst Du nicht das Problem auf S7 Seite zu lösen.
Schreib doch den Sollwert als Real zur SPS und dort wandelst Du
über die Funktionen real_to_integer() oder real_to_byte() um.
m.f.G.Alfons

gremlin3.2

Das ist hilfreich

werde ich gleich testen

Danke Danke
MFG Helmut

gremlin3.2

Hallo zusammen.......

Das Problem war auf der S7 Seite gar keins.

Ich habe sogar im Simatic Panel nach einer Minute die folgende Funktion gefunden.


Int, Fix-Funktionen

--------------------------------------------------------------------------------

Beschreibung
Gibt den ganzzahligen Anteil einer Zahl zurück.
Syntax
Int(Zahl)
Fix(Zahl)

Das Argument Zahl kann ein beliebiger gültiger numerischer Ausdruck sein. Wenn Zahl den Wert Null enthält, wird Null zurückgegeben.

Hinweise
Sowohl Int als auch Fix entfernen die Nachkommastellen einer Zahl und geben den daraus resultierenden ganzzahligen Wert zurück.
Der Unterschied zwischen Int und Fix besteht darin, dass bei negativen Zahlen Int die negative ganze Zahl zurückgibt, die kleiner oder gleich dem Argument Zahl ist, während Fix die negative ganze Zahl zurückgibt, die größer oder gleich dem Argument Zahl ist. Int wandelt -8,4 zum Beispiel in -9 um, während Fix -8,4 in -8 umwandelt.

Fix(Zahl) entspricht dem folgenden Ausdruck:

Sgn(Zahl) * Int(Abs(Zahl))

Sehr gute Lösung die ich umsetzen kann.

Danke für die schnelle Hilfe.

Vieleicht muss ich öfters mal Fragen, spart auf jedenfall einiges an Zeit..

CUCU Helmut


fu_zhou

Hallo Charlie,

ich habe heute auf die V2.9 hochgerüstet. Sporadisch steht im Log:

...
2015.03.08 09:50:28 0: DIE:send: Cannot determine peer address at FHEM/44_S7_Client.pm line 863

2015.03.08 09:50:28 3: 317 S7_ReadBlockFromPLC ReadArea error: -2=unknown errorcode
2015.03.08 09:50:28 2: 317 S7 disconnected
2015.03.08 09:50:31 3: 317 S7_connect: connect to PLC with maxPDUlength=960
...
2015.03.08 16:09:22 0: DIE:send: Cannot determine peer address at FHEM/44_S7_Client.pm line 863

2015.03.08 16:09:22 3: 315 S7_ReadBlockFromPLC ReadArea error: -2=unknown errorcode
2015.03.08 16:09:22 2: 315 S7 disconnected
2015.03.08 16:09:25 3: 315 S7_connect: connect to PLC with maxPDUlength=240
...

Wie du siehst, passiert das bei beiden CPUs (PDU 960 und 240). Ich konnte das Ereignis, das zu dem Log-Eintrag führt, bisher nicht reproduzieren. Irgendeine Idee?

Danke und Gruß

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

fu_zhou

Hallo zusammen,

weiß jemand, was der Log-File-Eintrag nach dem Update bedeutet:
Calling /usr/bin/perl ./contrib/commandref_join.pl, this may take a while
2015.03.09 07:47:06 1: EN FHEM/44_S7.pm: Unbalanced ul (1, last line ok: 871) EN FHEM/44_S7_AWrite.pm: Unbalanced ul (1, last line ok: 395) *** EN FHEM/44_S7_Client.pm: No document text found *** EN FHEM/95_WebViewControl.pm: No document text found DE FHEM/44_S7.pm: Unbalanced ul (1, last line ok: 933)
2015.03.09 07:47:06 1:

In erste Linie meine ich "Unbalanced ul...". Was muss man tun, um für den S7_Client einen "document text" verfügbar zu machen? Ich würde mich dann mal darum kümmern und Basics aus dem Wiki nehmen.
FHEM auf RasPi 2, S7-300 mit ET200S über ProfiNet

Starkstrombastler

Hallo,

ich habe jetzt seit einiger Zeit zwei Logo 0BA7 problemlos am Laufen und möchte mich bei allen Beteiligten für die tolle Arbeit bedanken.

Eine Kleinigkeit wurde scheinbar noch nicht getestet:
Das nachfolgende Coding funktioniert, d.h. ich kann mittels Fhem u.a. Eingänge und Ausgänge lesen sowie Netzwerkeingänge in der Logo schreiben.
define LogoM S7 LOGO7 192.168.178.72

define Mi12 S7_DRead I12
attr Mi12 IODev LogoM

define Mq8 S7_DRead Q8
attr Mq8 IODev LogoM

define Mni1.0 S7_DWrite DB 0 8
attr Mni1.0 IODev LogoM


Das Schreiben der Netzwerkeingänge geht allerdings nur mit der langen Notation. Es wäre aber schön, wenn die kurze Notation wie z.B. folgendes Define funktionieren würde:
define Mni20 S7_DWrite NI20
Es kommt stattdessen die Fehlermeldung:
wrong syntax : define <name> S7_DWrite {inputs|outputs|flags|db} <DB> <address>
Only for Logo7 or Logo8:
define <name> S7_DWrite {I|Q|M|NI|NQ}1..24

Laute Wiki geht das nur für Logo8, aber das leuchtet mir nicht so recht ein. Die kurze Syntax wäre eine echte Erleichterung, wird das hier auch gehen?
IPC\Ubuntu + Fhem, 1wire, Shellies, Siemens Logo!, Z-Wave, PhilipsTV, Vu+duo2, KM200