neues Modul: SIEMENS Anbindung / S7 / Siemens Logo

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

Vorheriges Thema - Nächstes Thema

fu_zhou

#345
Hallo Charlie,

bei meiner S7 funktioniert die Kopplung weiterhin mit beiden Clients, allerdings wird die PDU Länge mit der neuen Version mit 960 angegeben, was eigentlich nicht sein kann, wenn man in die Siemens-Beschreibung schaut:
ZitatEinfluss der PDU-Size:
Die Baustein-Statusinformationen sind abhängig von der so genannten PDU-Size (Protocol Data Unit), die durch die S7-CPU vorgegeben ist. Die Menge der maximal angeforderten Variablen richtet sich nach der aktuellen PDU-Länge und dem Datentyp der Variable. Eine S7-300 kann PDU-Längen von 240 Bytes und eine S7-400 kann PDU-Längen von 480 Bytes bearbeiten.

    MPI- und Profibus-Protokoll für CPU 300/400:
      PDU-Größe: 240 Bytes
      Headergröße: 17 Bytes pro Datenbereich
    Ethernet-Protokoll für CPU 300:
      PDU-Größe: 240 Bytes
      Headergröße: 17 Bytes pro Datenbereich
    Ethernet-Protokoll für CPU 400:
      PDU-Größe: 480 Bytes
      Headergröße: 17 Bytes pro Datenbereich

Gruß und weiterhin danke für dein Engagement!

EDIT: Der NEUE Client arbeitet korrekt! Meine CPU hat tatsächliche eine PDU Länge von 960 (nicht wie in der V2.3 erkannt 240). Auf jeden Fall bringt das auch die Snap7 Client Demo.
FHEM auf RasPi 2, S7-300 mit ET200S über ProfiNet

pc1246

Hallo zusammen
Wollen wir nicht mal etwas klaeren?!
Wer hat wieviele Steuerungen im Einsatz?
Welche Steuerungen sind das?
Was funktioniert, und was nicht?
Wie man das am sinnvollsten darstellt, leider keine Ahnung!

Ich habe eigentlich nur eine S7-300 im Einsatz, kann aber jederzeit (Ok, mit 15 Minuten Verzoegerung) eine WinLC dazu nehmen!
Bei mir funktioniert die 300er problemlos seit V2.1!
Mit der neuen Version kommt eine PDU=960 beim redefinieren der S7! Daraus resultiert ein Verbindungsabbruch, wenn ich dann etwas Steuern will, stellt sich PDU=240 ein und alles ist wieder gut!
Mit der WinLC (Die sich meines Wissens wie eine 400er verhaelt!) bekomme ich PDU=480 und lesen funktioniert, schreiben aber nicht!
Wenn beide Steuerungen angelegt sind, dann beeinflusst die 2te bei Aenderung des zu lesenden Bereiches die 1te! Natuerlich nur im fhem, und auch nur einmalig bei Aenderung wie es aussah! Ich habe dazu kein log erstellt, kann das aber gerne nachholen!

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

pc1246

Zitat von: alfonsmoeller am 01 Februar 2015, 20:13:02
Hallo charlie71,
auf die Schnelle kann ich nur berichten S7-315 ok.
Mit einer RTX keine Änderung. Lesen ok, Schreiben geht nicht!

Das ist jetzt doppelt so viel:
2015.02.01 20:00:37 3: PCS_7 S7_connect: connect to PLC with maxPDUlength=480

m.f.G. Alfons

Hallo Alfons
Wie ist die PDU Laenge bei Dir zustande gekommen? Bleibt die auch nach dem Steuern auf 480 stehen? Kein Verbindungsabbruch?
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

fu_zhou

#348
Ich habe jetzt, basierend auf den letzten Posts, eine zweite S7-300 hinzugefügt (315) mit folgenden Parametern:
define 315 S7 192.168.1.102 0 2
attr 315 ReadDB-Config 70 0 8 1 71 0 2 1
attr 315 WriteDB-Config 72 0 8 73 0 2
attr 315 room System

Ich arbeite jetzt also mit 2 CPUs an FHEM (IP Adresse .101 und .102)
# S7 Kommunikation
define PCS_7 S7 192.168.1.101 0 2
attr PCS_7 ReadDB-Config 20 0 8 1 21 0 2 1
attr PCS_7 WriteDB-Config 22 0 8 23 0 2
attr PCS_7 room System

define 315 S7 192.168.1.102 0 2
attr 315 ReadDB-Config 70 0 8 1 71 0 2 1
attr 315 WriteDB-Config 72 0 8 73 0 2
attr 315 room System


Mit dieser CPU (.102) wird auch die PDU_Länge von 240 "verhandelt". Mit der Snap7 Client Demo aus dem Post von John wird für meine erste CPU (.101 - die eine VIPA 317 ist) als PDU Länge 960 angezeigt, also genau das, was auch das Fhem S7 Modul erkennt. Die Demo erkennt für die zweite CPU (.102 - 315) 240. Aus meiner Sicht funtkioniert damit das Erkennen der echten PDU Länge einer CPU erst so richtig mit dem NEUEN Client, da mit dem V2.3 Client für meine erste CPU (VIPA 317) 240 erkannt wurde.
Für die Verwirrung, die mein Post oben eventuell gestiftet hat, bitte ich um Entschuldigung. Siemens weiß natürlich nicht, was eine VIPA CPU macht, die sich wie eine S7 verhalten soll(te).

Aber: Das FHEM Modul geht derzeit scheinbar von nur einer CPU aus (der Letzten in der fhem.cfg). Daher beschwert sich Fhem auch nach Speichern der fhem.cfg:
S7_DWrite_Define: wrong memory area, valid positions : DB72 (0.0 - 7.7) DB73 (0.0 - 1.7) S7_DWrite_Define: wrong memory area, valid positions : DB72 (0.0 - 7.7) DB73 (0.0 - 1.7) S7_DWrite_Define: wrong memory area, valid positions : DB72 (0.0 - 7.7) DB73 (0.0 - 1.7) S7_DWrite_Define: wrong memory area, valid positions : DB72 (0.0 - 7.7) DB73 (0.0 - 1.7)
Mein DWrite geht auf DB23 (.101 CPU), erwartet wird aber DB73.
Ich habe also meine fhem.cfg von den DB2X auf DB7X umgebaut (inkl. attr IODev) und es geht Lesen und Schreiben in der neuen CPU (.102), während die erste CPU (.101) weiterhin in der fhem.cfg definiert ist. Beim Schreiben in den DB72 wird auch nichts im DB22 überschrieben.
Was ich nicht testen kann ist das Schreiben/ Lesen mit der ersten CPU (.101, DB2X), da ja die Fehlermeldung wie oben beschrieben kommt.
S7_DWrite_Define: wrong memory area, valid positions : DB72 (0.0 - 7.7) DB73 (0.0 - 1.7)
FHEM auf RasPi 2, S7-300 mit ET200S über ProfiNet

charlie71

Hallo Leute,

das Refactoring des Moduls ist nun soweit fertig. DH es benötigt keine Reading/writing configuration mehr.
Die Blöcke die aus der SPS zu holen sind werden dynamisch generiert.
Weiters werden nicht nur ARead und DReads von der SPS gelesen sondern auch AWrite und DWrite werden mit der SPS abgeglichen.

Die neue Version wie immer im ersten Posting.
lG
Charlie71

pc1246

Hallo fu_zhou

Ich war nicht verwirrt! Ich wollte einfach nur Klarheit schaffen! Damit das Modul auch wirklich funktioniert! Wenn ich es jetzt richtig verstanden habe, kannst Du nur mit einer CPU kommunizieren!? Bei mir geht zumindest das lesen von zweien, mit der Einschraenkung von Ueberschreiben! Das Ueberschreiben konnte ich durch Zufall beobachten, da ich in der 300er kontinuierlich ein Doppelwort mit Datum Uhrzeit auslese(DB100)! Als ich dann auf der WinLC mit Steuern/Var einen Wert geaendert habe (DB61), hat sich der Inhalt von Datum Uhrzeit definitiv veraendert, um dann wieder original zu werden!

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

charlie71

Hallo Leute

was mir aufgefallen ist, dass immer wenn Windows im Spiel ist das es Probleme gibt.
Ich habe das Modul unter WIN getestet, lesen funktioniert Schreiben nicht.
obwohl mit Sicherheit der selbe Inhalt übertragen wird.

Ich kann mir vorstellen dass sich WIN und Linux bei den socket options unterscheidet und es somit zu minimalen Unterschieden im Messagetransfer kommt. Mir ist ZB aufgefallen dass unter WIN nicht immer ein ACK Meldung an die SPS geschickt wird.

lG
Charlie71

charlie71

Hallo Christoph

versuch es nochmals mit der V2.4. Ich hab diesen Bereich komplett "refactort".
(Der alte Code war im diesen Bereich zu oft überarbeitet worden)

lG
Charlie71


Zitat von: pc1246 am 02 Februar 2015, 11:29:51
Hallo fu_zhou

Ich war nicht verwirrt! Ich wollte einfach nur Klarheit schaffen! Damit das Modul auch wirklich funktioniert! Wenn ich es jetzt richtig verstanden habe, kannst Du nur mit einer CPU kommunizieren!? Bei mir geht zumindest das lesen von zweien, mit der Einschraenkung von Ueberschreiben! Das Ueberschreiben konnte ich durch Zufall beobachten, da ich in der 300er kontinuierlich ein Doppelwort mit Datum Uhrzeit auslese(DB100)! Als ich dann auf der WinLC mit Steuern/Var einen Wert geaendert habe (DB61), hat sich der Inhalt von Datum Uhrzeit definitiv veraendert, um dann wieder original zu werden!

Gruss Christoph

pc1246

Hallo Charlie
Mache ich gerne heute Abend. Es gibt dann auch sofort Rueckmeldung!
Eine Frage noch, muss ich irgendwas beachten? Wie gesagt die PDU-Berechnung war bei mir irgendwie wirr! Oder einfach nur Module kopieren und reloaden?

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

fu_zhou

#354
Hallo Charlie,

beim Binär-Werte schreiben geht in der V2.4 etwas schief. Im Log steht Folgendes (bei TRIGGER):
2015.02.02 12:25:11 1: PCS_7 S7_WriteBitToPLC: Write Bytes to PLC: 7, 23,0 , 1, 1
2015.02.02 12:25:13 1: PCS_7 S7_WriteBitToPLC: Write Bytes to PLC: 7, 23,0 , 1, 0

Aber das Bit bleibt im DB auf "1" stehen, kein Chance das wieder auf 0 zu setzen.

WriteBitToPLC ist die einzige Aktion, die sich im Log-File verewigt, AWrite trägt nichts ein.
Binär Lesen sowie analog (Float) Lesen und Schreiben funktioniert soweit ich das sehe mit einer CPU.

Analog Lesen (Float) funktioniert mit 2 CPUs, mehr schaffe ich nicht, in der Mittagspause zu testen. Heute Abend werde ich mal eine reine Test-fhem.cfg erstellen, um auf 2 CPUs mit der neuen V.2.4 analog und binär zu schreiben und zu lesen. PDU aushandeln klappt aber für beide CPUs und ich kriege auch keinen Disconnect.
FHEM auf RasPi 2, S7-300 mit ET200S über ProfiNet

charlie71

Hallo

@PDUlength: die PDUlength wird zwischen den beiden Kommunikationspartnern ausgehandelt. In der V2.3 war die default PDULength von FHEM auf 240 seit der V2.4 ist diese auf 960 (960 ist auch der Defaultwert in der libnodave).
Wenn die SPS nur eine kleinere PDUlength unterstützt so teil sie dies dem FHEM modul bei der Message CC (concetion confirm) mit. Das funktioniert bei meiner Logo tadellos: Hier kommt die Verbindung mit einer maxPDU length von 240 zustande.

lG
Charlie71

fu_zhou

Wie schon bestätigt funktioniert das PDU aushandeln bei mir jetzt auch tadellos bei den zwei CPUs die gerade im Einsatz sind. (V2.4)
FHEM auf RasPi 2, S7-300 mit ET200S über ProfiNet

alfonsmoeller

Hallo,
steht im log:
2015.02.02 12:59:16 1: Including fhem.cfg
2015.02.02 12:59:19 3: WEB: port 8083 opened
2015.02.02 12:59:19 3: telnetPort: port 7072 opened
2015.02.02 12:59:23 3: PCS_7 S7_connect: connect to PLC with maxPDUlength=480
2015.02.02 12:59:23 3: PCS_7: unknown attribute ReadDB-Config, choose one of verbose:0,1,2,3,4,5 room group comment alias eventMap userReadings devStateIcon devStateStyle icon sortby webCmd or use attr global userattr ReadDB-Config
2015.02.02 12:59:23 3: PCS_7: unknown attribute WriteDB-Config, choose one of verbose:0,1,2,3,4,5 room group comment alias eventMap userReadings devStateIcon devStateStyle icon sortby webCmd or use attr global userattr WriteDB-Config
2015.02.02 12:59:23 1: configfile: PCS_7: unknown attribute ReadDB-Config, choose one of verbose:0,1,2,3,4,5 room group comment alias eventMap userReadings devStateIcon devStateStyle icon sortby webCmd or use attr global userattr ReadDB-Config
PCS_7: unknown attribute WriteDB-Config, choose one of verbose:0,1,2,3,4,5 room group comment alias eventMap userReadings devStateIcon devStateStyle icon sortby webCmd or use attr global userattr WriteDB-Config
2015.02.02 12:59:23 1: Including ./log/fhem.save
2015.02.02 12:59:23 2: SecurityCheck:  WEB has no basicAuth attribute. telnetPort has no password/globalpassword attribute.  Restart fhem for a new check if the problem is fixed, or set the global attribute motd to none to supress this message.
2015.02.02 12:59:23 0: Server started with 35 defined entities (version $Id: fhem.pl 3872 2013-09-07 11:58:33Z rudolfkoenig $, os linux, user root, pid 12100)
2015.02.02 13:00:01 2: PCS_7 S7 disconnected
2015.02.02 13:00:01 1: Including fhem.cfg
2015.02.02 13:00:01 3: WEB: port 8083 opened
2015.02.02 13:00:01 3: telnetPort: port 7072 opened
2015.02.02 13:00:02 3: PCS_7 S7_connect: connect to PLC with maxPDUlength=480
2015.02.02 13:00:02 1: Including ./log/fhem.save

Setze dann Bit 0 auf 1,Bit 7 auf 1,Bit 7 auf 0,Bit 1 auf 0
2015.02.02 13:00:59 1: PCS_7 S7_WriteBitToPLC: Write Bytes to PLC: 7, 33,0 , 1, 1
2015.02.02 13:01:08 1: PCS_7 S7_WriteBitToPLC: Write Bytes to PLC: 7, 33,7 , 1, 1
2015.02.02 13:01:14 1: PCS_7 S7_WriteBitToPLC: Write Bytes to PLC: 7, 33,7 , 1, 0
2015.02.02 13:01:19 1: PCS_7 S7_WriteBitToPLC: Write Bytes to PLC: 7, 33,0 , 1, 0

macht für mich Sinn aber das Bit in der SPS wird nicht geschaltet.
Hier bei handelt es sich um eine RTX.
m.f.G. Alfons

charlie71

Hallo

bitte tauscht mal die attached files.
Drinnen ist ein kleiner Fehler gefixed, der sich auf meiner Logo nicht ausgewirkt hat. Aber vielleicht spielt er bei der S300 eine Rolle.
Außerdem wird bei der Schreiboperation noch ein paar Zeilen mehr ins Logfile geschrieben.
Wenn funktioniert kommt das Logging wieder raus.

Danke und lg
Charlie71

alfonsmoeller

#359
Hallo charlie71,
wieder die gleichen Bits wie vorhin.
Setze dann Bit 0 auf 1,Bit 7 auf 1,Bit 7 auf 0,Bit 1 auf 0 im DB33
mit der RTX

2015.02.02 13:30:45 1: PCS_7 S7_WriteBitToPLC: Write Bytes to PLC: 7, 33, 0 , 1, 1
2015.02.02 13:30:45 1: TCPClient WriteArea : 03, 00, 00, 24, 02, f0, 80, 32, 01, 00, 00, 00, 00, 00, 0e, 00, 05, 05, 01, 12, 0a, 10, 01, 00, 01, 00, 21, 84, 00, 00, 00, 00, 04, 00, 08, 01
2015.02.02 13:30:48 1: PCS_7 S7_WriteBitToPLC: Write Bytes to PLC: 7, 33, 7 , 1, 1
2015.02.02 13:30:48 1: TCPClient WriteArea : 03, 00, 00, 24, 02, f0, 80, 32, 01, 00, 00, 00, 00, 00, 0e, 00, 05, 05, 01, 12, 0a, 10, 01, 00, 01, 00, 21, 84, 00, 00, 07, 00, 04, 00, 08, 01
2015.02.02 13:30:52 1: PCS_7 S7_WriteBitToPLC: Write Bytes to PLC: 7, 33, 7 , 1, 0
2015.02.02 13:30:52 1: TCPClient WriteArea : 03, 00, 00, 24, 02, f0, 80, 32, 01, 00, 00, 00, 00, 00, 0e, 00, 05, 05, 01, 12, 0a, 10, 01, 00, 01, 00, 21, 84, 00, 00, 07, 00, 04, 00, 08, 00
2015.02.02 13:30:55 1: PCS_7 S7_WriteBitToPLC: Write Bytes to PLC: 7, 33, 0 , 1, 0
2015.02.02 13:30:55 1: TCPClient WriteArea : 03, 00, 00, 24, 02, f0, 80, 32, 01, 00, 00, 00, 00, 00, 0e, 00, 05, 05, 01, 12, 0a, 10, 01, 00, 01, 00, 21, 84, 00, 00, 00, 00, 04, 00, 08, 00

ich ergänz nochmal eine S7-315

2015.02.02 13:41:19 1: PCS_7 S7_WriteBitToPLC: Write Bytes to PLC: 7, 33, 0 , 1, 1
2015.02.02 13:41:19 1: TCPClient WriteArea : 03, 00, 00, 24, 02, f0, 80, 32, 01, 00, 00, 00, 00, 00, 0e, 00, 05, 05, 01, 12, 0a, 10, 01, 00, 01, 00, 21, 84, 00, 00, 00, 00, 04, 00, 08, 01
2015.02.02 13:41:23 1: PCS_7 S7_WriteBitToPLC: Write Bytes to PLC: 7, 33, 7 , 1, 1
2015.02.02 13:41:23 1: TCPClient WriteArea : 03, 00, 00, 24, 02, f0, 80, 32, 01, 00, 00, 00, 00, 00, 0e, 00, 05, 05, 01, 12, 0a, 10, 01, 00, 01, 00, 21, 84, 00, 00, 07, 00, 04, 00, 08, 01
2015.02.02 13:41:26 1: PCS_7 S7_WriteBitToPLC: Write Bytes to PLC: 7, 33, 7 , 1, 0
2015.02.02 13:41:26 1: TCPClient WriteArea : 03, 00, 00, 24, 02, f0, 80, 32, 01, 00, 00, 00, 00, 00, 0e, 00, 05, 05, 01, 12, 0a, 10, 01, 00, 01, 00, 21, 84, 00, 00, 07, 00, 04, 00, 08, 00
2015.02.02 13:41:28 1: PCS_7 S7_WriteBitToPLC: Write Bytes to PLC: 7, 33, 0 , 1, 0
2015.02.02 13:41:28 1: TCPClient WriteArea : 03, 00, 00, 24, 02, f0, 80, 32, 01, 00, 00, 00, 00, 00, 0e, 00, 05, 05, 01, 12, 0a, 10, 01, 00, 01, 00, 21, 84, 00, 00, 00, 00, 04, 00, 08, 00

m.f.G. Alfons