neues Modul: SIEMENS Anbindung / S7 / Siemens Logo

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

Vorheriges Thema - Nächstes Thema

charlie71

Hallo Leute,

hier die neue V2.8.
Releasenotes:
* minor fix in TCP Socked (TCP_NODELAY option now set)
* minor fix in reconnection (perl gets more time for garbage handling)
* connection to the PLC is now deleayed (5sec after creation the connetion is build up, 3 seconds later the reading polling is started)
* minor fix AWrite checks now connection status
* fix for fritzbox (needed because fb uses a old perl version)

lG
Charlie71

alfonsmoeller

Hallo charlie71,
entschuldige bitte meine Abwesenheit. Du bist ja wieder wesentlich weiter.
Habe gerade Vers. 2.8 getestet mit folgenden Ergebnissen.
Eventuell erinnerst Du dich. Mit S7_DWrite hatte ich die Probleme das es auf
einer Hardware S7-315 lief aber mit WinLC und RTX nicht.  Im Moment zeigt sich das
gleiche Bild mit S7_AWrite. S7_ARead funktioniert tadellos. Nur S7_AWrite funktioniert
nicht auf den Soft SPS. Wenn Du was brauchst, kurze Mitteilung, dann teste ich.
m.f.G. Alfons


John

CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

fu_zhou

Hallo Charlie,

kurzer Zwischenbericht: V2.8 läuft jetzt bei mir seit 13.02. stabil ohne Verbindungsabbrüche, wobei ich in der 44_S7_Client.pm
RecvTimeout => 3000, # 500 ms
drin habe.

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

zicki

Hallo zusammen,

erst mal meinen Respekt für die Arbeit. Habe das Modul gerade mal getestet funktionierte sofort auch mit einer S7 200 allerdings glaube ich einen Fehler entdeckt zu haben, und zwar beim einlesen eines DInt war der angezeigt Hex-Wert korrekt allerdings der gewandelte Dezimalwert anscheinend um ein Byte verschoben. Ich habe dann den Code im Modul 44_S7_Client wie folgt geändert danach hat der Wert gestimmt.

sub DWordAt
{
   my ($self, $Buffer, $index) = @_;
   my @myBuffer = unpack("C"x ($index + 4) , $Buffer);

   my $dw1;

   $dw1 = $myBuffer[$index] << 8;

   $dw1 = ($dw1 + $myBuffer[$index + 1]) << 8;

   $dw1 = ($dw1 + $myBuffer[$index + 2]) << 8;

   $dw1 = ($dw1 + $myBuffer[$index + 3]) ; #<< 8; geändert 18.02.2015 Zicki

   return $dw1;
}
Raspberry PI 2 Jessie mit FHEM; FritzBox 7580 FritzOS 06.83; S7 200 für Heizung und Solar;AVR-NET-IO informiert die S7 200 über das Wetter von morgen und die aktuellen Temperaturen (5x 1-Wire)im Solarspeicher sowie 1x AVR-NET-IO mit Ethersex 10x 1-Wire Raumtemperaturen und Status Fensterkontakte

fu_zhou

@John,

ich kann leider nicht feststellen, dass das "event-min-interval" (was korrekter Weise eigentlich "event-max-interval" heißen müsste) implementiert ist und jetzt zusammen mit "event-on-change-reading" funktioniert. Hast du das mal ausprobiert?

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

Hartman85

Hi bin Anfänger was Per und FHEM betrifft habe jedoch bisher erfolgreich DRead, DWrite und ARead umsetzen können jedoch ein Datenwort zur SPS(Bei mir eine S7 315 2 Pn/DP) zu schicken hat bisher noch nicht funktioniert..Habe per "define Aussentemp2 db 20 10 float" eine Variable deklardiert und habe den zu Übertragen Wert mittels stateformat "{sprintf("%.1f",ReadingsVal("Luft","temperature",0))."°C"}" zugewiesen.

Jedoch wird dieser Wert nicht an die SPS übermittelt.

hoffe Ihr könnt mir helfen...bin mega Ratlos.

Anbei Hänge ich einen Auszug meier Log-Datei an.




alfonsmoeller

Hallo Hartman85,
würdest Du mal Deine cfg Zeilen hier posten, aber bitte nur was die SPS betrifft.
Deine LOG ist vom ganzen Monat ? Bitte nur die letzten Zeilen, oder willst Du das Forum
sprengen?
m.f.G. Alfons

Hartman85

#488
Na klar hab hier meine fhemcfg datei angehangen die sich nur auf die SPS Daten bezieht..und den Auszug ausm Logfile auf Verbose 5...hoffe Ihr könnt mir helöfen..schließe auch nicht das das ich wegen Unerfahrenheit was falsch programmiert habe..Hoffe nur ihr könnt mir Tipps geben.

Bevor ichs Vergesse benutze die Modul Version 2.8

Mfg
Hartman85

alfonsmoeller

#489
Hallo Hartman85,
ich blick nicht mehr durch.
Kannst Du dies mal testen?

# FHEM Sollwertgeber an SPS als Slider
define zurSPS S7_AWrite db 34 0 float
attr zurSPS IODev PCS_7
attr zurSPS event-on-change-reading state
attr zurSPS group 1_SPS
attr zurSPS room SPS
attr zurSPS stateFormat {sprintf("%0.1f",ReadingsVal($name,"state",0))}

define zurSPS_Knob dummy
attr zurSPS_Knob group 1_SPS
attr zurSPS_Knob room SPS
attr zurSPS_Knob setList state:slider,0,1,100
attr zurSPS_Knob stateFormat {sprintf("%0.1f",ReadingsVal($name,"state",4))}
attr zurSPS_Knob eventMap on:100% off:0%
#attr zurSPS_Knob webCmd state
attr zurSPS_Knob webCmd 100:90:80:70:60:50:40:30:20:10:0

define zurSPS_Knob_notify notify zurSPS_Knob {\
fhem "set zurSPS ".ReadingsVal("zurSPS_Knob","state","%0.1");;\
}
attr zurSPS_Knob_notify group 1_SPS
attr zurSPS_Knob_notify room SPS

# 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.1f",ReadingsVal($name,"state",%0.1))." K"}


Mußt nur den DB34 in der SPS mit einen REAL Wert neu erzeugen.
Den SPS Namen PCS_7 mit deiner SPS ersetzen.
m.f.G. Alfons


Hartman85

#490
Hab das jetzt so Implementiert und kommt das selbe Problem bei rum hab  die Logdatei mal angehangen...Signifikant bei dem Fehler ist diese Meldung jedoch..."HauptSPS S7_WriteBlockToPLC WriteArea error: 8=Malformed PDU supplied." oder diese"PERL WARNING: Argument "HauptSPS S7_WriteBlockToPLC WriteArea error: 8=Malformed..." isn't numeric in numeric eq (==) at ./FHEM/44_S7_AWrite.pm line 226."


Hatte diese Meldung schonmal als ich das auf anderen Wege versuchte.

Die Logfile mit Verbose5 habe ich den Wert mal geändert von 0 zu 100!!!.

alfonsmoeller

Hallo Hartman85, kannst Du mit dem S7-Manager auch den DB34 als Real Variable sehen?
Gelingt das?
m.f.G. Alfons

Hartman85

Ja im TIA Portal hab ich die Variable aufgerufen und Online Beobachtet es springt auch nix es bleibt immer bei 0.0 stehen

alfonsmoeller

Hallo Hartman85, ich häng noch mal eben den Status meiner S7 an.
Deine S7 hat so glaub ich keine Verbindung.
m.f.G. Alfons

Hartman85

Leider ist es so das die Verbindung immer gegeben ist es sei denn ich versuche es mit dem AWrite dann verbindet er und Disconected wie er will..so bald das wieder raus ist bleibt die Verbindung konstant..

Ich hab echt viel gelesen viel Probiert aber nun nach 4 Tagen probieren musste ich euch hier leider belästigen weiß echt nicht mehr weiter.