neues Modul: SIEMENS Anbindung / S7 / Siemens Logo

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

Vorheriges Thema - Nächstes Thema

charlie71

Hallo Christoph,

ich denke in der Konfig ist ein kleiner Fehler, siehe unten.

lG
Charlie71

Zitat von: pc1246 am 04 Dezember 2014, 23:14:18
Hallo Charlie
Wenn ich bei mir zwei Read Configs anlege, funktioniert nur die eine!

define S7 S7 2 0 192.168.178.233 0 2 102 5
attr S7 ReadDB-Config 100 0 100 5
attr S7 ReadInputs-Config 4 0 20 5

Ich vermute du wollstet hier folgendes Definieren:
1. Reading: lies vom DB 100 vom Start 0. Länge 100 Bytes, es soll alle 5s gelesen werden
2. Reading: lies vom DB 4 vom Start 0. Länge 4 Bytes, es soll auch alle 5s gelesen werden
die Konfig dafür schaut wie folgt aus:
attr S7 ReadDB-Config 100 0 100 5 4 0 20 5



attr S7 room IO_DEV
define DB100_DBD20 S7_ARead db 100 20 u32
attr DB100_DBD20 room S7
define DB100_DBB22 S7_ARead db 100 22 u8
attr DB100_DBB22 room S7
define DB100_DBB10 S7_ARead db 100 10 u16
attr DB100_DBB10 room S7
define E4_6 S7_DRead inputs 4 47
attr E4_6 room S7


In diesem Fall nur das Bit! Da funktioniert die Adressierung auch noch nicht, bzw. habe ich es wahrscheinlich noch nicht verstanden!

Das log sieht dann ungefaehr so aus:
2014.12.04 22:20:31 4: S7: GetUpdate called ...
2014.12.04 22:20:31 4: S7: readFromPLC  129,4,0,20
2014.12.04 22:20:31 5: S7 dispatch A inputs 4 0 20
2014.12.04 22:20:31 5: S7_ARead_Parse A inputs 4 0 20
2014.12.04 22:20:31 4: S7_ARead: Parse no client found (S7) ...
2014.12.04 22:20:31 5: S7 dispatch D inputs 4 0 20
2014.12.04 22:20:31 5: S7_DRead_Parse D inputs 4 0 20


Was ist falsch? PDU habe ich nicht definiert, da automatisch auf 960 eingestellt wird!

Ich denke die PDU Length ist für die S7 nicht so problematisch.

Gruss Christoph

thmarx

ZitatBitte könnt ihr posten auf welcher Umgebung das Problem besteht (ARM oder X86).
ARM. Raspberry mit wheezy 09-09-2013 sowie Logo 0BA7.

Gruß Thomas

charlie71

Hallo Thomas,

wie es scheint habe ich das File "Nodave.so" für die Installation nicht inkludiert. Für dieses File ein eigenes Verzeichnis im perl lib auto dir erstellen:
ZB /usr/local/lib/perl/5.18.2/auto/Nodave

und dann dieses File dort hineinkopieren.
Bitte um Feedback ob es nun klappt.

lG
Karl

thmarx

Hallo Karl,
danke für Deine Bemühungen. Leider klappt es immer noch nicht, genau der gleiche Fehler wie gestern.
define name S7 ... geht noch, wenn ich dann attr name ... aufrufe geht fhem in die Endlosschleife.
Ich bin der Meinung, es liegt an libnodave. Der letzte Eintrag im fhem-log ist readFromPLC ..., unmittelbar danach wird ja daveReadBytes in der 44_S7 aufgerufen. Da bleibt er m.M.n. hängen.
Ich habe mal eine Datei angehängt. Kannst Du vielleicht mal in Zeile 26 auf Deine LOGO-IP anpassen und dann probieren, ob Du damit auf die LOGO kommst? Bei mir gehts halt, wenn ich libnodave 0.8.4.6 benutze, eine jüngere Version klappt nicht...

Gruss
Thomas

charlie71

Hallo Thomas,

du verwendest eine auf dem originalen Test-reading-programm vom libnodave basierende Version.
Diese funktioniert bei der Logo nicht direkt:
1) Das Rack muss auf 0 gesetzt sein
2) die MaxPDULength muss gesetzt werden (Nodave::setmaxPDUlength($dc, 0x3c0);)
3) und zu guter letzt muss der CommunicationTyp auf 2 gesetzt werden (Nodave::daveSetCommunicationType($dc, 2);)

ich hab dein Script angepasst funktioniert bei mir einwandfrei:
set debug level
debug level is: 0
port handle: 3
di: DaveInterface=SCALAR(0x2035410) ok 5
res: 0 ok 6
connect to PLC. function result: 0
read from PLC. function result: 0
IB1: 00000000
IB2: 00000000
IB3: 00000000
AI1: 553
AI2: 0
AI3: 0
AI4: 0
QB1: 00000000
QB2: 00000000
AM1: 0
AM16: 0
Testing multiple item read
function result:0=ok
function result:0=ok
QB1: 00000000
QB2: 00000000
function result:0=ok
AI1: 553
AI2: 0
AI3: 0
AI4: 0
function result:0=ok
AM16: 0
function result:0=ok
function result:0=ok
QB1: 00000000
QB2: 00000000
function result:0=ok
AI1: 553
AI2: 0
AI3: 0
AI4: 0
function result:0=ok
AM16: 0


Bitte poste deine Config.

Anmerkung: Für das Fehm S7 V1.2 Module ist es NICHT notwendig die libnodave upzugraden. Eine bereits existierende Version muss nur im perl interface (Nodave.so) die Funktionen setmaxPDUlength und  daveSetCommunicationType unterstützen.

lG
Charlie71

thmarx

Hallo charlie71,

Zitatdu verwendest eine auf dem originalen Test-reading-programm vom libnodave basierende Version.
Stimmt. Deine Anpassungen funktionieren bei mir. Ich habe libnodave 0.8.5.1 neu compliliert und installiert. Aus Deiner V1.2a habe ich Nodave.so ins perl/5.14.2/auto/Nodave- Verzeichnis kopiert. Dann kann ich mit dem von Dir geänderten Testprogramm auf die Logo zugreifen.

Für FHEM habe ich die Logo so definiert:
define logo19 S7 2 0 192.168.178.19 1 0 102 2 960
FHEM meldet "connected to PLC", im Log erscheint korrekt alle zwei Sekunden "S7: GetUpdate called ..."
Jetzt mache ich
attr logo19 ReadDB-Config 1 923 61 5
Das Log sieht dann so aus:
2014.12.06 12:01:01 4: S7: GetUpdate called ...
2014.12.06 12:01:03 4: S7: GetUpdate called ...
2014.12.06 12:01:05 4: S7: GetUpdate called ...
2014.12.06 12:01:07 4: Connection closed for FHEMWEB:192.168.178.50:53517
2014.12.06 12:01:07 4: Connection accepted from FHEMWEB:192.168.178.50:53609
2014.12.06 12:01:07 4: HTTP FHEMWEB:192.168.178.50:53609 GET /fhem&room=all&cmd=attr+logo19+ReadDB-Config+1+923+61+5
2014.12.06 12:01:07 5: Cmd: >attr logo19 ReadDB-Config 1 923 61 5<
2014.12.06 12:01:07 5: Triggering global (1 changes)
2014.12.06 12:01:07 5: Notify loop for global ATTR logo19 ReadDB-Config 1 923 61 5
2014.12.06 12:01:07 4: HTTP FHEMWEB:192.168.178.50:53609 GET /fhem?room=all
2014.12.06 12:01:07 4: /fhem?room=all / RL:1134 / text/html; charset=UTF-8 / Content-Encoding: gzip
/
2014.12.06 12:01:07 4: HTTP FHEMWEB:192.168.178.50:53609 GET /fhem/pgm2/fhemweb_noArg.js
2014.12.06 12:01:07 4: Connection accepted from FHEMWEB:192.168.178.50:53610
2014.12.06 12:01:07 4: HTTP FHEMWEB:192.168.178.50:53610 GET /fhem/pgm2/fhemweb_time.js
2014.12.06 12:01:07 4: Connection accepted from FHEMWEB:192.168.178.50:53611
2014.12.06 12:01:07 4: HTTP FHEMWEB:192.168.178.50:53611 GET /fhem/pgm2/dashboard_style.css
2014.12.06 12:01:07 4: S7: GetUpdate called ...
2014.12.06 12:01:07 4: S7: readFromPLC  132,1,923,61

danach passiert nichts mehr, fhem läuft mit (fast)100% CPU-Last und ist nicht mehr zu erreichen.

Danke für Deine Hilfe
Thomas

charlie71

Hallo Thomas,

in der Config hast du wieder das Rack auf 1 gesetzt. Versuch mal:

define logo19 S7 2 0 192.168.178.19 0 0 102 2 960

lG
Charlie71

pc1246

Hallo Karl
Ich habe einen Raspi mit aktuellem wheezy! S7-300
Ich wollte eigentlich schon auch Eingaenge lesen! Ganz am Ende auch Ausgaenge! Ich hatte das so interpretiert, dass bei "inputs" diese von der S7 gelesen werden, und dann lokal auf dem Raspi in einem "DB" gespeichert werden! Ich wollte nicht alles erst auf DB's umkopieren!
Gruss Christoph

HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly

thmarx

#68
Hallo Charlie71,

darauf hatte ich nicht geachtet, da ich überall "rack=1 slot=0" gelesen hatte. Mit rack=0 bin ich jetzt einen Schritt weiter. Habe die fhem-config jetzt erweitert:


define logo19 S7 2 0 192.168.178.19 0 0 102 2 960
attr logo19 ReadDB-Config 1 923 61 5
define logo19_AM16 S7_ARead db 1 982 s16


Wenn ich "Nodave::daveSetDebug(Nodave::daveDebugAll);" setzte sehe ich auch, dass Werte hereinkommen. Allerdings bleibt der state von logo19_AM16 auf "???", die Werte werden nicht angezeigt.

Gruss
Thomas

charlie71

Hallo Christoph,

sorry da hab ich was übersehen. Natürlich sollte es so sein, dass du die "Inputs" direkt lesen können solltest.
Was ich bei deiner Config noch nicht verstanden habe:

define DB100_DBD20 S7_ARead db 100 20 u32
--> liest 4 Bytes von Position 20

define DB100_DBB22 S7_ARead db 100 22 u8
--> liest 1 Byte von Position 22

diese zwei analoge Readings überlappen sich.

Bitte versuch folgende Config und poste mir das Logfile:


define S7 S7 2 0 192.168.178.233 0 2 102 5
attr S7 ReadDB-Config 100 0 100 5
attr S7 ReadInputs-Config 4 0 20 5
attr S7 room IO_DEV
define DB100_DBB10 S7_ARead db 100 10 u16
attr DB100_DBB10 room S7
define E4_6 S7_DRead inputs 4 47
attr E4_6 room S7


lG
Charlie71

charlie71

Hallo Thomas,

ja ich weiss das mit der Logo ist eine verzwikte Sache, da es so gut wie keine Doku über die Netzwerkkommunikation gibt.
(Wenn jemand eine gute Doku dazu hat bitte mir schicken)

Da ist zu einem die Sache mit dem Rack = 0 (done).
Und dann gibt es noch die Sache dass bei der Logo der DB = 0 sein muss. (todo)

Versuch es mit folgender Config:


define logo19 S7 2 0 192.168.178.19 0 0 102 2 960
attr logo19 ReadDB-Config 0 923 61 5
define logo19_AM16 S7_ARead db 0 982 s16


lg
Charlie71

Zitat von: thmarx am 06 Dezember 2014, 15:30:30
Hallo Charlie71,

darauf hatte ich nicht geachtet, da ich überall "rack=1 slot=0" gelesen hatte. Mit rack=0 bin ich jetzt einen Schritt weiter. Habe die fhem-config jetzt erweitert:


define logo19 S7 2 0 192.168.178.19 0 0 102 2 960
attr logo19 ReadDB-Config 1 923 61 5
define logo19_AM16 S7_ARead db 1 982 s16


Wenn ich "Nodave::daveSetDebug(Nodave::daveDebugAll);" setzte sehe ich auch, dass Werte hereinkommen. Allerdings bleibt der state von logo19_AM16 auf "???", die Werte werden nicht angezeigt.

Gruss
Thomas

thmarx

Guten Abend.

attr logo19 ReadDB-Config DB 923 61 5
Ich meine gelesen zu haben, dass für die Logo DB=1 richtig wäre. Es ist aber egal, ob ich bei "DB" 0, 1 oder 2 eintrage, die erwartenten Daten werden immer aus der Logo gelesen. (Habs mit "daveDebugALL" beobachtet)

PDU header:
                            0:0x32,0x01,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,
plen: 14 dlen: 0
Parameter:
                            0:0x04,0x01,0x12,0x0A,0x10,0x02,0x00,0x3D,0x00,0x02,0x84,0x00,0x1C,0xD8,
_daveExchange PDU number: 65537
asdf enter _daveExchangeTCP
send packet: :
                            0:0x03,0x00,0x00,0x1F,0x02,0xF0,0x80,0x32,0x01,0x00,0x00,0x00,0x01,0x00,0x0E,0x00,
                            10:0x00,0x04,0x01,0x12,0x0A,0x10,0x02,0x00,0x3D,0x00,0x02,0x84,0x00,0x1C,0xD8,
readISOpacket: 86 bytes read, 86 needed
readISOpacket: packet:
                            0:0x03,0x00,0x00,0x56,0x02,0xF0,0x80,0x32,0x03,0x00,0x00,0x00,0x01,0x00,0x02,0x00,
                            10:0x41,0x00,0x00,0x04,0x01,0xFF,0x04,0x01,0xE8,0x00,0x00,0x00,0x01,0xB0,0x01,0xB0,
                            20:0x01,0xB0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
                            30:0x00,0x00,0x09,0x00,0x00,0x01,0xFE,0x5A,0xFE,0xD6,0xFE,0xD6,0x03,0x2A,0x00,0x00,
                            40:0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                            50:0x00,0x00,0x00,0x00,0x00,0x7E,
asdf _daveExchangeTCP res from read 86
result of exchange: 0
PDU header:
                            0:0x32,0x03,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x41,0x00,0x00,
plen: 2 dlen: 65
Parameter:
                            0:0x04,0x01,
Data     :
                            0:0xFF,0x04,0x01,0xE8,0x00,0x00,0x00,0x01,0xB0,0x01,0xB0,0x01,0xB0,0x00,0x00,0x00,
                            10:0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x00,
                            20:0x01,0xFE,0x5A,0xFE,0xD6,0xFE,0xD6,0x03,0x2A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                            30:0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                            40:0x7E,
Data hdr :
                            0:0xFF,0x04,0x01,0xE8,
Data     :
                            0:0x00,0x00,0x00,0x01,0xB0,0x01,0xB0,0x01,0xB0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                            10:0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x09,0x00,0x00,0x01,0xFE,0x5A,0xFE,
                            20:0xD6,0xFE,0xD6,0x03,0x2A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                            30:0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,
error: ok
_daveSetupReceivedPDU() returned: 0=ok
_daveTestReadResult() returned: 0=ok


define logo19_AM16 S7_ARead db 0 982 s16
Ich habe jetzt alle möglichen Kombinationen für DB probiert, aber noch keinen Erfolg. Der state bleibt immer bei "???". Auszug aus dem fhem-log:
2014.12.06 22:22:47 4: S7: GetUpdate called ...
2014.12.06 22:22:47 4: S7: readFromPLC  132,1,923,61
2014.12.06 22:22:47 5: logo19 dispatch A db 1 923 61
2014.12.06 22:22:47 3: logo19: Unknown S7_ARead device detected, define one to get detailed information.
2014.12.06 22:22:47 5: logo19 dispatch D db 1 923 61
2014.12.06 22:22:47 3: logo19: Unknown S7_DRead device detected, define one to get detailed information.
2014.12.06 22:22:49 4: S7: GetUpdate called ...
2014.12.06 22:22:51 4: S7: GetUpdate called ...
2014.12.06 22:22:53 4: S7: GetUpdate called ...
2014.12.06 22:22:53 4: S7: readFromPLC  132,1,923,61
2014.12.06 22:22:54 5: logo19 dispatch A db 1 923 61
2014.12.06 22:22:54 3: logo19: Unknown S7_ARead device detected, define one to get detailed information.
2014.12.06 22:22:54 5: logo19 dispatch D db 1 923 61
2014.12.06 22:22:54 3: logo19: Unknown S7_DRead device detected, define one to get detailed information.


Gruss Thomas

charlie71

Hallo Christoph

ich im Code für die Multiple Readings ein Fehler gefunden. Wenn mehrere Readings konfiguriert wurden, wurden die Daten nur ein einziges Mal von der SPS gelesen, danach nie wieder.
In der beiliegenden Version V1.3 ist das Problem behoben.
(Du musst nur die 44_S7.pm tauschen, alles andere ist gleich geblieben)

Bitte um Feedback ob das Problem auch bei dir damit behoben ist.

lg
Charlie71

charlie71

Hallo Thomas,

ich habe mal erfolgreich das lesen von den AM16 auf meiner Logo 0BA7 getestet:

define logo S7 2 0 10.0.0.241 0 0 102 2 960
attr logo ReadDB-Config 0 923 61 5
define logo19_AM16 S7_ARead db 0 982 s16


hier der Auszug aus dem LogFile
2014.12.07 08:54:06 4: S7: readFromPLC  132,0,923,61
2014.12.07 08:54:06 5: logo dispatch A db 0 923 61
2014.12.07 08:54:06 5: S7_ARead_Parse A db 0 923 61
2014.12.07 08:54:06 5: Triggering logo19_AM16 (1 changes)
2014.12.07 08:54:06 5: Notify loop for logo19_AM16 0
2014.12.07 08:54:06 4: eventTypes: S7_ARead logo19_AM16 0 -> .*
2014.12.07 08:54:06 5: logo dispatch D db 0 923 61
2014.12.07 08:54:06 5: S7_DRead_Parse D db 0 923 61
2014.12.07 08:54:06 4: S7_DRead: Parse no client found (logo) ...
2014.12.07 08:54:08 4: S7: GetUpdate called ...
2014.12.07 08:54:10 4: S7: GetUpdate called ...
2014.12.07 08:54:12 4: S7: GetUpdate called ...
2014.12.07 08:54:12 4: S7: readFromPLC  132,0,923,61
2014.12.07 08:54:12 5: logo dispatch A db 0 923 61
2014.12.07 08:54:12 5: S7_ARead_Parse A db 0 923 61
2014.12.07 08:54:12 5: Triggering logo19_AM16 (1 changes)
2014.12.07 08:54:12 5: Notify loop for logo19_AM16 0
2014.12.07 08:54:12 4: eventTypes: S7_ARead logo19_AM16 0 -> .*
2014.12.07 08:54:12 5: logo dispatch D db 0 923 61
2014.12.07 08:54:12 5: S7_DRead_Parse D db 0 923 61
2014.12.07 08:54:12 4: S7_DRead: Parse no client found (logo) ...


Bitte teste die selbe Config bei dir.

Danke und lG
Charlie71

pc1246

Hallo Karl
Sowie ich mehrere Bereiche lesen will, schlaegt das fehl! Wobei jetzt zumindest die letzte Definition aktualisiert wird!
Mir ist auch nicht klar wie ich Eingaenge denn definieren muss! Kann eventuell da der Hase im Pfeffer liegen? Man braucht da doch keinen DB, sondern nur Anfang, Laenge und Intervall!?
Wenn Du wirklich ein Log moechtest, dann schreib mir nochmal, wovon genau!
Gruss Christoph
HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly