S5-Modifikationen

Im Rahmen des Einsatzes einer Siemens SPS S115U für Hausautomation entstanden 2 Hardwaremodifikationen an Original Siemens-Baugruppen. Da für die Platinen der SPS keinerlei Schaltpläne von Siemens verfügbar sind, mussten notwendige Informationen über Reverse Engineering  gewonnen werden.

1. I2C Ankopplung an S5 über Standard digital I/O Baugruppen

Der I²C-Bus ist ein serieller Datenbus, mit welchem man  Peripherieschaltkreise wie Echtzeituhrenchip, I/O-Ports, EEPROMS, LCD-Anzeigen, Sensoren, A/D-Wandler, Chipkartenleser u.s.w. an einem Master ankoppeln kann.
An sich lässt sich dieser synchrone 2-Drahtbus nicht an einer Siemens SPS, und schon garnicht an einer 115U nutzen. Zum einen arbeitet der Bus mit bidirektionalen Signalen, also auf einem Draht sowohl Senden und Empfangen, zum anderen muss innerhalb eines SPS-Zyklus ein serielles Protokoll realisiert werden.

Lösung Timingproblem:
Es gibt im Step5 die PY Befehle, um unabhängig vom zyklischen Prozessabbild Peripheriebytes zu lesen oder zu schreiben. Leider ergaben Versuchsstellungen, dass trotzdem innerhalb eines Zyklus keine Echtzeitreaktion möglich war. Ursächlich ist eine Verzögerung von einigen Millisekunden innerhalb der Eingangsbaugruppe 6ES5 420-7. Diese dient normalerweise der Unterdrückung von Störimpulsen oder Kontaktprellen, verhindert aber eine Echtzeitnutzung der Ports.

Eine Schaltungsaufnahme der Siemens-Platine zeigt die Eingangsschutzschaltung nachfolgend von einem Verzögerungsglied mit den zeitbestimmenden  R1 und C2. Eine Überschlagsrechnung 150k*22nF=3,3ms bestätigt die Verantwortlichkeit dieser 2 Bauelemente. Schaltplan (20 kbyte)

Die Lösung für mich sah dann einfacherweise so aus, dass ich bei den 2 Eingängen für den I2C-Bus jeweils den Kondensator mit 22nF entlötete.

Lösung Ankopplung I2C Bus:
Die I2C-Interfaceschaltung dient der galvanischer Entkopplung, der Pegelwandlung 24V/5V, und der Erzeugung der beiden bidirektionalen Signale SCL (CLOCK) und SDA (Data) aus jeweils 2 SPS-Ausgabeports und 2 präparierter Eingabeports. In der Schaltung gleich mit enthalten ist ein Uhrenchip PFC8583 mit Batteriepufferung und ein 8 Bit I/O IC PCF857. Fast alle CPU der 115U-Serie haben keine integrierte Uhr, dieses machte die quarzstabilisierte Zeitbasis für alle zeitgesteuerten Funktionen einer Haussteuerung nötig. Schaltplan (20 kbyte)

Diese Schaltung baute ich auf Lochrasterleiterkarte in ein altes 19" Switchgehäuse.

Step5 Realisierung:
Die Kodierung und Protokoll des I2C-Bus sind im Internet hinreichend dokumentiert, zur Umsetzung in Step5 schrieb ich einige Funktionsbausteine.

Im I2C Bus folgt generell nach einer Startsequenz ein 7 Bit Devicecode und 1 Bit als R/W Kennung. Die folgenden Bytes sind spezifisch auf den anzusteuernden IC abzustimmen. Der IC muss jedes Byte mit ACK bestätigen, mit einer Stopsequenz gibt der Master zum Schluss den Bus wieder frei. 

 

weitere Beschreibung folgt

 

2. Alarmverwendung  ohne Alarmbaugruppe

Für die Auswertung der S0 Schnittstelle eines Stromzählers ist die Zykluszeit der S5-115U zu lang.
Für die Messung des Momentanverbrauch muss eine  Periodendauermessung des S0-Signals mit einer Genauigkeit im unteren Millisekundenbereich erfolgen. Für die Erfassung des Gesamtstromverbrauch je Zeiteinheit darf keiner der 90ms kurzen Impulse ungezählt bleiben, der Stromzähler liefert 1000 Impulse je kWh.

Somit benötigt man eine Alarmbaugruppe, wie die 6ES5 434-7 . Leider würde  diese für nur 8 Eingänge einen der raren Steckplätze belegen, unnötig Stromverbrauch generieren, und kostet mehr als eine Standard Digitaleingabebaugruppe 6ES5 420-7 mit 32 Eingängen. Also erarbeitete ich, wie man eine herkömmliche Eingabebaugruppe an einem Eingang um eine Alarmfunktion nachrüsten kann.

Eine Überprüfung der Steckverbinderbelegung der unterschiedichen Baugruppen ergab, dass entgegen  Systemhandbuch die Auslösung überhaupt nicht über die Interruptleitungen INTA-INTD erfolgen konnte. Das einzigste Signal, welches an der 434 benutzt werden könnte, wäre PRAL=Prozessalarm. Ein manueller Test bestätigte die Vermutung: ein kurzes Low auf diesem Pin startet Aufruf OB2.
Somit erweiterte ich die vorhandene Eingabebaugruppe um folgende kleine Schaltung:

 

Der zusätzliche Schaltkreis wurde auf der Platine der Siemens-Eingabebaugruppe 6ES5 420-7 an einer freien Stelle zusätzlich integriert. Eingesetzt habe ich wegen Stromverbrauch und hochohmigen Eingängen einen CMOS 74HCT00 aus Funkwerkproduktion :

 

Kontrollüberprüfung mit Oszi: mit L/H Flanke des S0 Signal (CH1) wird nach 2,5 ms Verzögerung durch Vorfilter ein kurzer negativer Interruptimpuls (CH2)  generiert:

 

Der Impuls selber ist ein 2 µs langes Lowziehen der PRAL-Leitung der CPU, durch die Germanium-Schaltdiode wird ein guter Lowpegel erzeugt, der langsamere Wiederanstieg erfolgt über Pull-UP-Widerstand innerhalb der CPU-Baugruppe:

 

Programmtechnisch erfolgt in OB2 lediglich ein Inkrement in einem Merkerword, der Timer zur Impulsabstandmessung wird ausgelesen, abgespeichert und der Timer wird neu mit 999.0 gestartet.
Timerumfangserweiterung und Übergabe an Visualisierung erfolgt im zyklischem FB. In der Visualisierung erfolgt neben der Momentanstromverbrauchsanzeige eine grafische Auswertung in Form von Tages- und Monatsdiagrammen.