neues Modul: SIEMENS Anbindung / S5

Begonnen von ThomasRamm, 03 Oktober 2014, 16:54:59

Vorheriges Thema - Nächstes Thema

ThomasRamm

Hallo,

ich habe eine Siemens SPS S5 115U und suchte nach Möglichkeiten diese anzubinden. In dem Thread http://forum.fhem.de/index.php?topic=26092.0 habe ich dann eine gute Basis gefunden meine S5 anzubinden.

Als ersten Schritt habe ich den Block "Definition" angepasst damit ich meine S5 anbinden kann. Die Systemlast betrug jedoch auf meinem RaspBerry Pi ständig über 70% so dass ich nach und nach das komplette Modul umgeschrieben habe.
Die aktuelle Systemlast bei über 40 logischen S5 Modulen beträgt nun 1%.
Da ich nur in die Datenbank lesen und schreiben möchte habe ich vorerst nur diesen Teil in das neue Modul implementiert. Um Namensprobleme zu vermeiden habe ich es S5 genannt, auch wenn es mit der S7 genauso gut zusammenarbeitet.

Konfiguration

S5
Abhängig davon ob eine S5 oder eine S7 angeschlossen ist, weichen die Parameter zur Definition voneinander ab.
S5: define <name> S5 S5 <plcMPI> <localMPI> <rack> <slot> <comport> <speed> <parity> <timeout>
S7: define <name> S5 S7 <plcMPI> <localMPI> <rack> <slot> <ip_address> <ip_port> [<PDUlength>]

Parameter:

  • name: Definitionsname
  • module: "S5"
  • type: {S5|S7} anzubindende PLC
  • plcMPI | MPI des PLC
  • localMPI | lokaler MPI
  • rack | rack des PLC
  • slot | slot des PLC
  • comport | Portdefinition, für Windows z.B. COM1, für Linux z.B. /dev/ttyAMA0
  • speed | Port Geschwindigkeit
  • parity | Port Parity
  • timeout | Timeout
  • ip_address | IP Adresse der PLC
  • ip_port | Port der IP Adresse der PLC
  • PDUlength | Optionaler Parameter zum Einstellen der PDUlength

S5 Digital
Die einzelnen Bits die angesprochen werden sollen werden jeweils mithilfe eines S5_Digital Moduls definiert.

define <name> S5_Digital {db} <DB> <position>

Parameter.

  • name | Definitionsname
  • S5_Digital | Name des zu benutzenden Moduls
  • {db} | Name des Bereichs der Angesprochen werden soll. (aktuell nur DB)
  • DB | Nummer der DB der angesprochen werden soll
  • position | Position des Bit das angesprochen werden soll. Die Nummerierung beginnt beim ersten Bit des ersten Bytes der definierten DB

FHEM Beispielkonfiguration
define mysps S5 S5 2 0 0 0 /dev/ttyAMA0 9600 E 50000
attr mysps room S5

define Dummy_db_6_1 S5_Digital db 6 1
attr Dummy_db_6_1 room S5

define Dummy_db_6_3 S5_Digital db 6 3
attr Dummy_db_6_3 room S5

im obigen Beispiel wird eine S5 als Physisches Gerät konfiguriert die am Com-Port /dev/ttyAMA0 (Pin-Leiste des Raspberry PI) angeschlossen ist.
Danach werden zwei Logische Module definiert. Beide zeigen auf die DB6, einmal auf Bit 1 und auf Bit 3 (jeweils im ersten Byte der DB6).

S5 Konfiguration
Warum benötige ich nur Zugriff auf den DB-Baustein um meine Automatisierung mit FHEM zu steuern?

Im Programmplan der S5 werden als erstes alle Ein- und Ausgänge in eine DB übertragen. Danach kommt die gesamte Logiksteuerung, die aber ebenfalls nur die DB verändern. Zum Schluss schreibe ich den aktuellen Stand der DB zurück auf die Ein- und Ausgänge. Dadurch ist es mir mit wenig Aufwand möglich mit beliebigen Programmen auf die Haussteuerung zuzugreifen. (Bisher hatte ich ein C# Programm laufen das die DB in eine mysql-DB übertragen hat. Andere Programme konnten dann die DB auslesen und neu schreiben).

Der Code in der SPS dafür sieht bei mir folgendermaßen aus (Intern werden immer 2 Register gelesen und geschrieben):

Schreiben der Ein-/Ausgänge in die DB:

A   DB 5     auf DB5 wechseln
NOP 0
L   EW 0    Eingaenge 0+1
T   DW 0    DB Eingang 0+1
NOP 0
L   EW 2    Eingaenge 2+3
T   DW 1   DB Eingang 2+3
...
L   DW 4   DB Ausgang 8+9
T   AW 8   Ausgaenge 8+9
NOP 0
...


ToDo

Da ich meine Rolläden ebenfalls darüber steuere will ich noch einbauen das die SPS den aktuellen Stand des Rollos speichert (über die gefahrene Zeit). Wenn das in der SPS umgesetzt ist will ich noch ein Analog Modul einbauen mit dem der Stand in der SPS ausgelesen und geschrieben werden kann (schreiben eigentlich nur falls jemand das Modul benötigt und Analoge Werte schreiben will).

PS: wenn jemand ähnliches mit seiner S5 umgesetzt hat wäre ich sehr am Step5-Code interessiert weil ich mich da immer noch sehr schwer tue und es wahrscheinlich einiges an Verbesserungspotenzial in meiner Programmierung gibt.

Starkstrombastler

Das Modul allgemeiner aufzusetzen finde ich gut. Die aktuelle Namensgebung führt aber zur Verwirrung. Ich schlage deshalb eine generische Bezeichnung vor, z.B.    44_SIMATICplc       oder   44_SIEMENSsps.

Der Parameter typ in der Definition  könnte dann die Werte   S5,   S7  oder Logo  annehmen.

Ich habe das neue Modul noch nicht getestet, ich hänge noch an der Libnodave fest, siehe ursprünglicher Thread http://forum.fhem.de/index.php/topic,26092.msg204930.html#msg204930 .

Die Logo, die ich zum Kommunizieren bewegen möchte, hat schon meine neue Rolladensteuerung mit Analogwertvorgabe 0...100% für die Rollo-Stellung geladen. Daher hier meine Bedarfsmeldung für das "Analog-Write".
IPC\Ubuntu + Fhem, 1wire, Shellies, Siemens Logo!, Z-Wave, PhilipsTV, Vu+duo2, KM200

Neo2304

Hallo,

wie genau hast du die S5 angeschlossen?

Ich meine also den COM-Adapter auf dem Raspberry.


ThomasRamm

#3
Zuerst hatte ich einen USB-Com Conerter am laufen. Von 10 verschiedenen Modellen funktioniert aber nur einer. Dann habe ich das Konverterkabel geöffnet und mit alten pc-Kabeln direkt die Pinscauf dem raspberry verbunden. 2 Zeilen code das dieser auf dem internen com nicht mehr seine default ausgaben macht und das ganze lief. (Die Bastelarbeiten am ppi-com adapterkabel hat ein Freund für mich gemacht).
Am PC kabel hat mein Freund das original kabel dran gelassen und einen Schalter eingebaut. Jetzt hängt das der PC zum programmieren dran und der rasp. Und kann einfach durch den Schalter umgestellt werden. Auf den anderen Bild siehst du die Stecker. Sind beim Rasp B und Rasp B+ identisch

Neo2304

Hallo,

kannst du bitte mal ein Foto von der Platine des Adapterkabels machen. Weist du vielleicht ob er irgendwelche Bauteile getauscht hat? Ich hab ein bisschen Angst wegen der 5V der SPS und der 3,3 des Raspberry. Vielleicht kann er ja mal eine kleine Zeichnung machen, wie er das genau gebaut hat!

ThomasRamm

Habe meine aktuelle Version des Siemens Moduls im ersten Thread von mir aktualisiert.
Ist noch einiges an Optimierung eingeflossen.
läuft seit einem Jahr bei mir ohne Ausfall. (Taster per web schalten, Lichtstatus per web anzeigen, Rolladensteuerung)

JoergBo

Zitat von: Neo2304 am 23 November 2014, 21:48:41
Hallo,

kannst du bitte mal ein Foto von der Platine des Adapterkabels machen. Weist du vielleicht ob er irgendwelche Bauteile getauscht hat? Ich hab ein bisschen Angst wegen der 5V der SPS und der 3,3 des Raspberry. Vielleicht kann er ja mal eine kleine Zeichnung machen, wie er das genau gebaut hat!

Ich habe vor ein paar Tagen eine Kopplung von FHEM zu einer S5 95U aufgesetzt. Funktioniert soweit gut. Als Verbindung habe ich wohl das selbe Seriell<>20mA Adapter benutzt, wie ThomasRamm. eBay 19,95... Kabel für SIMATIC S5 SPS (Bausatz). (www.horter.de) Zum Verbinden mit dem Raspi einfach den MAX232 weggelassen und zwei Brücken 12-13 und 11-14 in den Sockel gesteckt, damit liegt auf der RS232 Seite des Adapters TTL Pegel statt +-9V. Damit auf den Raspi Pin 6-8-10 (TxD,RxD,GND) , Hardware fertig. (Alternativ Umschalter zwischen Max232 TTL Seite und RS232 Pegel)

Von dem Adapter hat He.Horter auch eine Zeichnung online:
http://www.horter.de/sps/tty_passiv/tty_passiv_2.html

Libnodave 0.8.5 wird hier im Forum mehrfach beschrieben, evtl. noch "/m64" aus dem makefile rauswerfen, falls Fehler beim kompilieren.

Bye, Jörg

Btw: Thomas, danke für die Aktualisierung, ich probiers gleich mal...
RasPI4, S5-95U, Hue, Volkszaehler, 1wireTemp, HMLan, sduino, Wlan-IR-Gateway, TelegramBot, Alexa, ...

JürgenD

Hallo zusammen,

ich versuche grade FHEM auf meiner RPI mit einer S5 zu verbinden.
Leider klappt das mal noch so gar nicht.
Beim Versuch eine Verbindung aufzubauen schmiert FHEM komplett ab.
Nach einem Neustart finde ich im LOG noch folgende Einträge:



2016.01.12 01:28:13 3: S5 Define: plcMPI=2, localMPI=0, rack=0, slot=0, comport=/dev/ttyAMA0, speed=9600, parity=E, timeout=50000
2016.01.12 01:28:13 3: port handle: 29
Type of argument to keys on reference must be unblessed hashref or arrayref at ./FHEM/44_S5.pm line 298.
connect::                             
                            0:0x00,0x00,0x00,0x00,0x00,0x63,0x00,0x63,0x80,0x61,0x00,0x5F,0x00,0x60,0x00,0x5D,
                            10:0x00,0x28,0x03,0x40,0xFF,0x00,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,
                            20:0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x01,0x00,0x0A,0x00,0x00,0x10,0x03,
start of inputs in memory 6300
start of outputs in memory 6380
start of flags in memory 6100
start of timers in memory 5f00
start of counters in memory 6000
start of system data in memory 5d00




Was kann das sein?
Ich habe das schon mit einer 95U und mit einer 115U 942 probiert.

Gruß Jürgen

JoergBo

Hi,

Probier mal folgendes: S5_44.pm - Zeile 298 von
   foreach my $x (keys $clientlist) {
durch
   foreach my $x (keys %{$clientlist}) {
ersetzen.

Bye, Jörg
RasPI4, S5-95U, Hue, Volkszaehler, 1wireTemp, HMLan, sduino, Wlan-IR-Gateway, TelegramBot, Alexa, ...

JürgenD

#9
Ja danke,
das hat schon mal geklappt !

Leider taucht nun das nächste Problem auf.

Beim Einbinden von Bits mit:

define Dummy_db_6_1 S5_Digital db 6 1

Bekomme ich folgende Fehlermeldung im LOGFILE

2016.01.13 23:48:00 0: Can't locate Switch.pm in @INC (you may need to install the Switch module)
(@INC contains: /etc/perl /usr/local/lib/arm-linux-gnueabihf/perl/5.20.2 /usr/local/share/perl/5.20.2
/usr/lib/arm-linux-gnueabihf/perl5/5.20 /usr/share/perl5 /usr/lib/arm-linux-gnueabihf/perl/5.20
/usr/share/perl/5.20 /usr/local/lib/site_perl . ./FHEM) at ./FHEM/44_S5_Digital.pm line 8.
BEGIN failed--compilation aborted at ./FHEM/44_S5_Digital.pm line 8.

Scheinbar fehlt da eine Switch.pm Datei.

Wo bekomme ich die her?

Gruß Jürgen

EDIT:
habe selber was gefunden. Mit

sudo apt-get install libswitch-perl

wird die fehlende Datei nachinstalliert. (Laut Google haben da wohl mehrere Leute ein Problem mit)

Hatte ich schon erwähnt das ich ein kompletter Perl Neuling bin? :)



JoergBo

Guten Morgen JürgenD,

Und? Klappt die Verbindung nun? Ich habe noch das Problem, dass die Verbindung zur S5 mehrfach pro Woche ohne erkennbaren Grund abbricht. Ein  "set sps connect" hilft zwar, aber dauerhaft ist das auch noch nicht so schön. Leider ist im fhem-log kein Fehler zu sehen. Bitte mal beobachten, ob das bei dir auch auftritt.

ThomasRamm, welche Wirkung hat der Timeout Parameter?

Gruß, Jörg

Btw: von Perl, weiss ich auch nix Bescheid (hab den Fehler "unblessed hashref" mal vor ein paar Wochen auf einer Perl-Entwicklerplattform ergoogelt)
RasPI4, S5-95U, Hue, Volkszaehler, 1wireTemp, HMLan, sduino, Wlan-IR-Gateway, TelegramBot, Alexa, ...

JürgenD

Hallo Jörg,
grundsätzlich scheint es jetzt zu klappen.
Ich werde da aber heute noch mal ein paar Test machen und vor allem mal ein paar Ein und Ausgänge der SPS an den DB koppeln, zum rumspielen :)
Das ganze ist erst mal ein Testaufbau zum ausprobieren was möglich ist.
Wie ich dann die Verbindung zu dem "produktiv" SPS System der Haussteuerung mache muß ich noch mal sehen.
Das ist ein natürlicher , im laufe von fast 20 Jahren gewachsener Verbund aus fünf S5 Systemen die über ein L1 Bus kommunizieren.
Dadurch sind beide Schnittstellen der CPUs (ich verwende da schon extra welche mit zwei PG Anschlüssen) schon belegt.
Der zweite Anschluss ist für den PG Bus.
Bei der Verbindung SPS zu FHEM habe ich eigentlich einen CP521Si Komunikationsprozessor eingeplant, aber leider kann der das verwendete 511 Protokoll nicht sondern nur 3964R, was aber wohl NODAVE wieder nicht kann :(
Also muss ich mal Probieren Den Sinec L1 Bus auf den CP zu verlegen oder FHEM irgend wie 3964R beizubringen.

Gruß Jürgen

krueuw

Erstmal vielen Dank für eure Beiträge. Ich bin schon seit längerer Zeit auf der Jagd meine S5-Steuerung zu modernisieren. Dieses Projekt gefällt mir gut.

Habe nun endlich mit der beschriebenen Modifizierung des Horter-Adapters den Sprung geschafft, dass testAS511 -d /dev/ttyAMA0 Erfolg meldet   :D Verträgt der Raspi die 5 Volt dauerhaft? Bei einigen Suchmaschinentreffern wird ausdrücklich zu 3,3 Volt geraten. Was meint ihr?

Außerdem würde mich interessieren, ob ihr eine Möglichkeit kennt, das Programm der S5 mit Open-Source in die Steuerung zu bringen oder ob dazu geschützte DOS- oder Windows-Programme zwingend sind.

Ich denke, dass die praktischen Erkenntnisse ins Wiki einfließen sollten.

JoergBo

Hi krueuw,
die RX und TX am RasPi sind tatsächlich 3,3V. Der mod. Horter Adapter läuft hier trotzdem seit 3 Monaten. Es ist halt ein Restrisiko da, funktioniert aber.

Eine Lösung ohne gleich eine Simatic Programmierumgebung bauen zu müssen, könnte sein, im RasPi eine Emulation von AS511 auf TCP/IP Kommunikation zu machen, aber dafür reicht meine Fähigkeit zu programmieren nicht aus. Ich gehe noch immer in den Keller zur S5 und stecke bei Bedarf um...

Ach ja, bei mir trennt sich noch immer alle paar Tage die Verbindung zur S5, das habe ich erstmal gedeckelt:
+*01:00 IF ([sps] eq "disconnected from PLC") (set sps connect)
Jede volle Stunde wird gecheckt, ob die Verbindung noch steht. Wenn nicht, wieder die Verbindung wider hergestellt. Ist zwar nicht die feine Art, aber klappt bei mir. 


RasPI4, S5-95U, Hue, Volkszaehler, 1wireTemp, HMLan, sduino, Wlan-IR-Gateway, TelegramBot, Alexa, ...

ThomasRamm

Hallo,
ich habe solche Verbindungsprobleme nie gehabt, lief jetzt ca. 3 Jahre fehlerfrei bei mir.
im wiki habe ich meine komplette Installationsanleitung online gestellt, wobei ihr da wohl schon über diesen Schritt hinaus seid http://www.fhemwiki.de/wiki/Siemens_S5.

Da ich mit der S5 Programmierung nie wirklich warm geworden bin, teste ich gerade den Raspi die komplette Steuerung übernehmen zu lassen und die Relais durch den MCP23017-Chip schalten zu lassen, der per I2C am RPI angeschlossen ist.

Eine weiterentwicklung des Moduls von meiner Seite wird deshalb nicht mehr statt finden, aber vielleicht findet sich ja noch jemand der weitere Submodule erstellt oder auch das Basismodul weiter verbessert.

Gruß
Thomas