Quantcast
Channel: SPS-Forum - Automatisierung und Elektrotechnik
Viewing all articles
Browse latest Browse all 46421

Step 7 CPU 315-2 DP: Fehler mit Zeitstempel "fangen"

$
0
0
Hallo!

Ich habe folgendes Problem: Bei uns ist seit fast 20 Jahren eine alte S7-300 (CPU 315-2 DP, eine 6ES7 315-2AF01-0AB0, Firmwarestand im Moment noch unbekannt) für die Steuerung von einigen Pumpen im Einsatz. Die Programmierung der Steuerung ist hinsichtlich des Steuerungsprogramms recht komplex, die Anlage sehr wichtig und darf nicht ausfallen. Das Steuerungsprogramm wurde seit vielen Jahren (so um 2004 rum vermutlich) nicht mehr angerührt.

Nun gibt es in der letzten Zeit das Phänomen, dass eine der Pumpen immer wieder "rausgeworfen" wird, ohne, dass im übergeordneten Leitsystem dauerhaft eine eindeutige Fehlermeldung ersichtlich ist. An der Anbindung im Leitsystem bzw. deren Meldesystem kann ich nichts ändern. Da diese Störung natürlich sehr schlecht nachzuverfolgen ist (scheinbar nur kurze "Wischer"), will ich eine Art "Fehlerfang-Baustein" bauen, bei dem ich alle mögliche Abschaltbedingungen überwache - und sobald eine davon eintritt einen Zähler ansteuern, der sich um 1 erhöht. Soweit dürfte das für mich als Nicht-Programmierer auch kein Problem sein.

Nun würde ich aber auch ganz gern zum Nachvollziehen, wann dieser Fehler aufgetreten ist, den Zeitstempel von diesem Zeitpunkt speichern. Meine Lösungsvariante wäre hier die Folgende:

Zur "Definition":

Zähler: Zählt die Anzahl der eingetretenen Fehler der jeweiligen Abschaltbedingung
Merkerbereich 1...10: Speicherbereich für den Zeitstempel

Programm-Ablauf:


  1. Zähler überprüfen, ob vor "Überlauf" (>= 255). Wenn vor Überlauf, dann auf "0" setzen und Überlauf-Bit setzen
  2. Fehler tritt auf.
  3. Zähler um 1 erhöhen.
  4. Bisher gespeicherte Zeitstempel in den nächsten Merkerbereich schieben (9 -> 10, 8 -> 9 ... 1 -> 2)
  5. Zeitstempel der Steuerung auslesen (SFC1) und in den Merkerbereich 1 schreiben.


Das Ganze habe ich mal versucht umzusetzen - siehe FC1.pdf im Anhang. Der Aufruf des FCs würde sich dann so darstellen, wie in der OB1.pdf im Anhang zu sehen (Symbol-Tabelle in der Symbole.pdf). Die Netzwerke 1 bis 6 sind für die Zähler-Geschichte da, die Netzwerke 7 bis 24 für die Zeitstempel-Schieberei und schließlich die Netzwerke 25 bis 27 für das Auslesen und abspeichern des jüngsten Zeitstempels.

Nun ist das ziemlich umfangreich, verbraucht doch Einiges an Merkern - und irgendwie erscheint's mir auch recht umständlich, gerade die Verschieberei mit den einzelnen Zeitstempel-Einträgen.

Ein wenig habe ich auch im Forum gestöbert und diesen Beitrag gefunden: http://www.sps-forum.de/simatic/7261...fzeichnen.html

Dort wird das Ganze mittels DB gelöst - nur habe ich DBs bisher nicht wirklich genutzt (nur als "Merker missbraucht"). Irgendwie komme ich nicht mit den DBs und der Pointer-Geschichte klar :confused: Speziell der Transfer der Daten in den DB kriege ich nicht hin. Ich habe mir testweise einen Global-DB mit 10 Datensätzen vom Typ DATE_AND_TIME angelegt, in die ich den ausgelesenen Zeitstempel schieben würde - aber selbst, wenn ich versuche da einen Datensatz anzugeben, krieg ich Fehlermeldungen. Scheinbar stimmt die Syntax nicht. Ich weiß aber auch nicht, wie ich da einen Datensatz vom Typ DATE_AND_TIME angeben kann.

Weiterhin würde ich ganz gern beim Aufruf des FC eine DB-Nummer angeben, in dem dann die Daten gespeichert werden. Das Verschieben der Daten (analog Pkt. 4 oben) sollte auch erfolgen, so dass die aktuellste Störung ganz oben steht (oder unten - wäre ja egal, solange es "sortiert" bleibt).

Und noch etwas "bewegt" mich: Wäre die Geschichte in einem FB ggf. besser aufgehoben? Aus meiner Berufsausbildung (schon über ein Jahrzehnt her) hab' ich irgendwie noch in Erinnerung, dass bei mehrfachen Aufrufen von FCs nach dem Ende des Aufrufs der genutzte Lokaldatenbereich von anderen Bausteinen überschrieben werden kann - bei FBs werden die Lokaldaten nach Ende des Aufrufs wohl im Instanz-DB gespeichert und beim nächsten Aufruf "wiederhergestellt". Es kann aber auch sein, dass ich mich hier irre... Ursächlich für diese Frage ist hier die Nutzung des Zählers - wie verhält es sich da mit den Zählerständen? Wenn ich den FC mehrfach (für zwei verschiedene Fehlerursachen bspw.) hintereinander aufrufe, kommen dann auch zwei verschiedene Zählerstände raus oder gibt's da Probleme, weil ich ja für beide Aufrufe den selben Zähler nutze? Wie sieht das mit einem FB aus? Oder muss ich generell verschiedene Zähler nutzen? Wie kann ich das dann mit einem FC/FB realisieren, das bei der wiederholten Nutzung ein anderer Zähler genutzt wird?

So viele Fragen... Ich hoffe, es ist nicht zu verwirrend geschrieben :confused: Eine Lösung in FUP wäre erstrebenswert, AWL würde notfalls aber auch gehen. SCL steht nicht zur Verfügung.

Besten Dank schonmal vorab für die Antworten! :)

Grüße, Xaar.
Angehängte Dateien

Viewing all articles
Browse latest Browse all 46421


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>