neues Modul: SIEMENS Anbindung / S7 / Siemens Logo

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

Vorheriges Thema - Nächstes Thema

charlie71

Hallo Leute,

ich hab wieder eine neue Version (V213) gebaut.
Gegenüber der V212 ist nur der Fix für S7_AWrite enthalten.

Neue Version kann wie immer im ersten Posting herunter geladen werden.

lG
Charlie71

winner81

Hallo zusammen

Erstmal Danke für die super Arbeit von Euch!
Ich habe noch ein Problem bei mir. Im Einsatzt ist eine 1513-1PN CPU sowie die neusten Module V213.

Ich kriege beim S7_AWrite folgende Meldung im Log:


016.01.11 21:52:53 3: mySPS S7_connect: connect to PLC with maxPDUlength=960
2016.01.11 21:53:00 3: mySPS S7_ReadBlockFromPLC ReadArea error: 256=Invalid PDU received.
2016.01.11 21:53:00 2: mySPS S7 disconnected
2016.01.11 21:53:03 3: mySPS S7_connect: connect to PLC with maxPDUlength=960
2016.01.11 21:53:10 3: mySPS S7_ReadBlockFromPLC ReadArea error: 256=Invalid PDU received.
2016.01.11 21:53:10 2: mySPS S7 disconnected
2016.01.11 21:53:13 3: mySPS S7_connect: connect to PLC with maxPDUlength=960
2016.01.11 21:53:20 3: mySPS S7_ReadBlockFromPLC ReadArea error: 256=Invalid PDU received.
2016.01.11 21:53:20 2: mySPS S7 disconnected



Hier meine Config: (Hab den gleichen Fehler für Byte, UINT und FLOAT)


##############################################################
## S7 Verbindung
##############################################################
define mySPS S7 192.168.1.200 0 1
attr mySPS room System

# Temperatur aus dem Web an mySPS schicken
define Wetter Weather 638242 1800 de
attr Wetter room Wetter

define Temp_AU_Web S7_AWrite db 20 72 u8
attr Temp_AU_Web IODev mySPS
attr Temp_AU_Web event-on-change-reading state
attr Temp_AU_Web room Wetter
attr Temp_AU_Web stateFormat {sprintf("%.1f",ReadingsVal($name,"state",0))." °C"}

define Temp_AU_Web_notify notify Wetter {\
fhem "set Temp_AU_Web ".ReadingsVal("Wetter","temp_c","10");;\
}
attr Temp_AU_Web_notify room Wetter


Wie Ihr seht, das Anfänger Beispiel...
Wenn ich den AWrite ausmaskiere bleibt die Verbindung bestehen.

DB20 ist vorhanden auf der Steuerung

Danke und Gruss
Ronny

charlie71

Hallo Winner81

sorry dass erst jetzt die Antwort kommt.
Wenn ein AWrite definiert wird, wird der verwendete Speicherbereich zyklisch von der SPS gelesen.
Diese Leseoperation schlägt in deinem Fall fehl.
Meist liegt es an einem Konfigproblem: zb Datenbaustein existiert auf SPS Seite nicht, falscher Datenbereich, ....
--> Config Prüfen

Anmerkung: Wenn du das einzige logische Modul herausnimmst, wird nur die ISOoverTCP Verbindung aufgebaut - was in deinem Fall ja funktioniert - aber es findet kein Datenaustausch statt.

lG
Charlie71

winner81

#753
Hallo Charlie71

Vielen Dank für Deine Antwort.
Also der DB existiert, auch der Adressbereich stimmt (DB20.DBB72). Siehe Anhang.
Muss ich von der Steuerung aus auch eine ISOoverTCP Verbindung auf FHEM anlegen? Da bin ich mit Wiki nicht ganz gestiegen.
Wenn ich Online auf der Steuerung geschaut habe, wurde die Verbindung aber als PG-Verbindung angezeigt.
Oder was muss ich sonst noch Steuerungsseite anlegen? Eine Serververbindung wie bei der LOGO ist bei der S7-1500 nicht vorhanden.

Danke und Gruss
Ronny

charlie71

Hallo Winner81,

auf der FHEM musst du nichts mehr konfigurieren.
Stimmt deine Rack / Slot Konfig auf der S7 (aktuell hast Rack = 0 und Slot = 1 im FHEM ausgewählt) ?

Wenn das nicht klappt, versuch mal mit einen ARead einen anderen Wert (eventuell auch von einem anderen DB) auzulesen.

lg
Charlie71

winner81

Hallo charlie71

Danke für die Info's! Werde es am WE testen und dann ein Feedback geben.

Gruss
Ronny

winner81

Problem gelöst :D
Bei der 1513-1PN CPU muss in den Einstellungen unter Schutz die Freigabe für die GET/PUT Kommunikation gegeben werden (siehe Anhang).
Rack und Slot sind bei dieser CPU (0/1).

Nochmals vielen Dank für Deine Unterstützung.
Gruss
winner81


charlie71

Hallo Winner81

super da es jetzt klappt.
Es währe nett, wenn du eine kurze Zusammenfassung deiner S7-1500 Config ins S7 Wiki schreiben könntest.
Diese würde sicher Anderen weiterhelfen.

Danke & lG
Charlie71

zicki

Moin zusammen,

ich hatte auch den Fehler, das beim Senden der Formate u16, s16, u32, s32 sowie Float per S7_AWrite zu einer S7 200 und zur S7 300 ein Fehler auftrat und die Verbindung abgebrochen wurde. Habe dann im Modul S7_AWrite Zeile 239, 245, 251, 257 sowie 263 auf jeweils $WordLen = &S7Client::S7WLByte; geändert und es funktioniert  ;)  Wenn ich das richtig interpretiere soll ja in der Variable $WordLen nicht die Länge sondern das zu übertragende Format (0x02 für Byte) enthalten sein. Vielleicht hilft es ja jemandem der ähnliche Probleme hat.
Gruß Zicki
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

MadMax

#759
Hallo,
weiß nicht ob ich die funktion nicht finde oder ob es diese nicht gibt.
Wie kann ich ein Bit, ob merker oder db-bit inst egal, inertieren?

keinne die linnodave aus windows, und bin noch nicht so fit als das ich mir die quellcode selb anpassen könnte fals es das nicht gibt.

gruß

@charlie71
s7-1500 müsste gehen wenn es die libnodave ist, du musst nur put/get aktivieren, das findest du un den Geräteeinstellungen unter Schutz.
Allerdings kannst du nur auf nicht Optimierte Daten zugreifen, zumindest ist mir nur das gelungen.
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

charlie71

Hallo

@Zicki
vielen Dank an Zicki für den Hinweis. Ich werde das in der nächsten Release anpassen.
@MadMax
mir ist nicht ganz klar was Du möchtest.

lG
Charlie

charlie71

Hallo Leute,

ich habe vor kurzen das S7 Modul ins FHEM Sourceforge eingecheckt.
Das Modul ist somit offizielles Modul.
Updates werden somit ab jetzt nur mir über die FHEM Update Funktion zur Verfügung gestellt.

lG
Charlie71

charlie71

Hallo Zikki,

ich habe mal deinen Vorschlag auf meiner Logo7 getestet. Leider funktioniert es nicht - Es gibt immer einen Protokollfehler.
Somit kommt dein Vorschlag vorerst nicht ins Modul.

lG
Charlie71


John

Hi Charly71,

prima, daß dein Modul nun im FHEM Repository liegt.

Ein Hinweis zum Problem von Zicki aufgeworfenen Problem:

In meinem LOGO-Treiber verwende ich ausschliesslich die Wortlänge Byte über alle Datentypen hinweg

Vielleicht liefert dies den allgemeineren Ansatz zum Schreiben von Werten.

Hier ein Auszug aus meinem Code-Fragment:

sub WriteAnalog($$)
{
  my ( $self, $dp, $data ) = @_;
  my $aresult;
  my $aFormat;

  my $asize = $dp->{size};

  # ein C-Array erzeugen
  my $bdata = Device::LOGO::snap7p::new_byteArray($asize);

  # perl number packen mit ziel big endian
  if ( $dp->{format} eq 'i1' || $dp->{format} eq 'u1' )
  {
    $aFormat = $dp->{unpackFormat};
  } else
  {
    $aFormat = $dp->{unpackFormat} . '>*';    # big endian
  }

  my $apackedData = pack( $aFormat, $data );

  # entpacken als array of bytes
  my @arr = unpack( 'C*', $apackedData );

  # bytes nacheinander in das C Array kopieren
  for ( my $i = 0 ; $i < $asize ; $i++ )
  {
    my $cdata = $arr[$i];
    Device::LOGO::snap7p::byteArray_setitemX( $bdata, $i, $cdata );
  }

  # ziel index ermitteln
  my $aindex = $dp->{mindex};
  my $adbno  = $self->{DBNo};
  $aresult = Device::LOGO::snap7p::Cli_WriteArea(
    $self->{client},
    0x84,       # Kennung f. DB
    $adbno,     # db nr
    $aindex,    # location index
    $asize,     # Anzahl
    0x02,       # ID for Bytes
    $bdata
  );
}


John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

Komet16

Hallo ich bin Thorsten,

ich beschäftige mich erst seit kurzen mit dem Raspberry in Verbindung mit S7 habe eine 315 2 DP hier am laufen! Lese auch schon ein paar Daten aus! Läuft also!

Dann habe ich Whatsapp installiert! Läuft auch!

Nun zu meiner Frage ?

Lese eine BOOL aus und wollte mich bei Änderung infomieren lassen über Whatsapp! Aber finde nichts wie ich den Befehl auslesen kann und dann über Whatsapp die Info senden kann!

Und andersrum würde mich auch intressieren! Also ich suchen einen den Befehl für Fhem zum auslesen und senden (s7>Whatsapp) und (Whatsapp> S7)!

Wäre vielleicht einer von euch Fachmänner so Nett mir zu Helfen? Danke schon mal und freue mich über eure Antworten!

Danke und Gruß
Thorsten (Komet16)