TIA CPU 1212 Fehler aus dem nichts.

Otwin

Level-1
Beiträge
134
Reaktionspunkte
21
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

ich habe eine CPU 1212 V3.0 die meine Heizung regelt.
Läuft seit einem halben Jahr ohne Probleme.
Heute morgen war die CPU in Stop.
Nebenbei erfasst die CPU noch ein paar Zähler -S0-Signale im OB31 im 10ms Zyklus.
Folgende Diagnosemeldungen hat die CPU geliefert:

Temporary CPU error: Buffer overflow for OB 31 events
buffer size: 2 events
priority class 7
Function will continue (system reaction)

Temporary CPU error: Accepted number of pending OB 31 events exceeded
set warning limit: 2 events
priority class 7
Time error, OB80 start requested

Temporary CPU error: Time error (OB start event)
CPU changes to STOP mode (no OB processing)

Zur Fehlerzeit hat die CPU nichts besonderes getan (Tageswerte rotieren oder so) was sonderlich viel Rechenzeit benötigen würde.

Hat jemand eine Idee, an was sowas liegen kann?

Ach ja, was müsste ich denn im OB80 machen, damit sowas nicht wieder auftritt?

Gruß
Otwin
 
Hi!

Das laden des OB80 wird beim Auftreten der Fehlers von der cpu angefordert. Da er nicht vorhanden ist, geht die cpu in Stopp. Für was ist denn der OB80 genau? Vielleicht findest du so etwas über den Fehler heraus.

EDIT:
Scheinbar dauert dein OB31 zu lange, wodurch ein Stau auftritt. Was ist im OB31 denn alles programmiert?

Gruß,

Ottmar
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,
der OB80 ist ein "Time error interrupt", zumindest sagt das TIA, wenn ich den OB80 anlege.
Dieser wird wohl aufgerufen, wenn die max. Zykluszeit überschritten wird. Zumiondest hab ich die Hilfe so verstanden.
Nur was soll ich in diesem OB80 machen, um einen CPU-Stop abzuwenden?
Bzw. was passiert, wenn ein leerer OB80 vorhanden ist?

Im OB31 passiert eigentlich nicht viel, der wertet nur die Eingänge der S0-Schnittstellen der Zähler aus, und addiert die Verbrauchswerte. Das macht er aber seit langem ohne Fehler.
Ich hab die S0-Abfrage in den 10ms OB31 gelegt, weil die S0-Impulse teilweise nur 20ms lang sind.
 
Nebenbei erfasst die CPU noch ein paar Zähler -S0-Signale im OB31 im 10ms Zyklus.
Ok, OB31 läuft mit 10ms
Temporary CPU error: Buffer overflow for OB 31 events
buffer size: 2 events
priority class 7
Function will continue (system reaction)

Temporary CPU error: Accepted number of pending OB 31 events exceeded
set warning limit: 2 events
priority class 7
Time error, OB80 start requested
Scheint eigentlich recht eindeutig.
Die CPU hat einen Puffer für die Anzahl der ausstehenden OB31-Zyklen die abgearbeitet werden müssen.
Scheint 2 zu sein.
Wenn also der OB31 (und falls noch andere Interupts in der selben Prioritätsklasse) nicht innerhalb der vorgegebenen 10ms abgearbeitet werden könne, dann kommt es zum "Rückstau". Die CPU möchte dann als Fehlerreaktion den OB80 (Zeitfehler-OB) aufrufen, wenn der nicht da ist geht sie auf Stop.
Wenn du den OB80 drin hast könnte man theoretisch darauf in irgendeiner Art und Weise reagieren. Wenn man nur den Stopp verhindern will, dann kann der OB80 auch leer bleiben. Die CPU ruft dann OB80 auf, läuft ihn durch, tut nichts und geht auch nicht in Stopp.

Trotzdem würde ich mir anschauen warum es zu dem Problem kommen kann. Sie dir die Routienen innerhalb von OB31 (und möglciherweise noch anderern OBs) an und schaue ob es dort zu einem Zeitproblem kommen kann.

Ich hab das erst einmal bei einer 300er gesehen. Da hat ein Kollege einen Rücksprung in den OB35 geschrieben... :rolleyes:

OB80 wird zum Beispiel bei folgenden Ereignissen angefordert:
TIA-Hilfe schrieb:
B#16#01: Zykluszeit überschritten
B#16#02: Der angeforderte OB ist noch in Bearbeitung.
B#16#05: abgelaufener Uhrzeitalarm durch Uhrzeitsprung
B#16#06: abgelaufener Uhrzeitalarm bei Wiedereintritt in RUN nach HALT
B#16#07: Überlauf des OB-Anforderungspuffers für die aktuelle Prioritätsklasse
B#16#08: Taktsynchronalarm-Zeitfehler
B#16#09: Alarmverlust durch zu hohe Alarmlast
B#16#0B: Technologiesynchronalarm-Zeitfehler
Ich nehme an du hast Fehlercode B#16#07
 
Zuletzt bearbeitet:
Wenn du den OB80 drin hast könnte man theoretisch darauf in irgendeiner Art und Weise reagieren. Wenn man nur den Stopp verhindern will, dann kann der OB80 auch leer bleiben. Die CPU ruft dann OB80 auf, läuft ihn durch, tut nichts und geht auch nicht in Stopp.

Was passiert dann mit den noch pendenten OB31? Ich meine wenn der OB80 durchlaufen wurde müsste ja wieder zur nächstniedrigeren Prio springen und das wäre der noch laufende OB31 was ja dann gleich wieder den OB80 auf den Plan rufen würde.

Ich hab das erst einmal bei einer 300er gesehen. Da hat ein Kollege einen Rücksprung in den OB35 geschrieben... :rolleyes:

Der klassiker ;)

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Ist deine Gesamtzykluszeit größer als 10ms?
Wenn nein, dann könntest den Code aus dem OB31 zyklisch im Programm bearbeiten.
Es sei denn, es muss immer im gleichen Takt reagiert werden. S0, Heizung usw...
 
Was passiert dann mit den noch pendenten OB31? Ich meine wenn der OB80 durchlaufen wurde müsste ja wieder zur nächstniedrigeren Prio springen und das wäre der noch laufende OB31 was ja dann gleich wieder den OB80 auf den Plan rufen würde.
Ja, bin auch der Meinung das der OB80 einen nicht zwingend rettet da die OB31-Warteschlange warscheinlich nicht gelöscht wird.
Könnte dann sein das man bei jedem OB31-Aufruf auch gleich einen OB80-Aufruf mitbekommt.
Ob CPU aber dann auf Stop geht weiß ich nicht, ich glaub schon dass sie weiterlaufen würde, aber schön ist der Systemzustand nicht.

Wenn da Problem so wie beim TE sporadisch auftritt könnte schon seine dass man die Situation übertauchen kann und sich das System wieder fängt,
man ist aber trotzdem gut daran beraten zu schauen woher das Problem kommt.
 
Die Zykluszeit liegt bei ca. 12ms. Es würde also im Moment auch noch im OB1 funktionieren.
Aber wer weiss schon, was einem noch so alles einfällt, deswegen habe ich die Abfrage der S0-Impulse von Anfang an in den 10ms-OB gelegt. Hat ja bis jetzt auch problemlos funktioniert.

Gibt es denn eine Möglichkeit, die bearbeitungsdauer des OB31 zu erfassen?

Kann man im OB80 den Puffer irgendwie löschen, damit die CPU weiterläuft und nicht mehr versucht, die angestauten Anfragen an den OB31 zu bearbeiten?
Wäre ja kein Problem, wenn der mal nicht abgearbeitet wird. (Wenns nicht jeden zweiten Zyklus ist:))
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Gibt es denn eine Möglichkeit, die bearbeitungsdauer des OB31 zu erfassen?
Schau dir den Befehl "RUNTIME" an. In der TIA-Hilfe ist sogar das Beispiel für dass was du suchst.

Du könntest dir auch den Wert "Event-Count" (Events Discarded) der in den Temp-Bereich des OB geschrieben wird anschauen.
Ob der z.B. größer 0 wird.

Hast du nur den OB31 oder auch noch andere?
 
Zuletzt bearbeitet:
Schau dir den Befehl "RUNTIME" an. In der TIA-Hilfe ist sogar das Beispiel für dass was du suchst.

Du könntest dir auch den Wert "Event-Count" (Events Discarded) der in den Temp-Bereich des OB geschrieben wird anschauen.
Ob der z.B. größer 0 wird.

Ich war der Meinung, RUNTIME gäbe es nur bei den 1500er CPUs.
Danke für den Tip!

Die Sache mit dem "Event-Count" versteh ich nicht so ganz, wo find ich den?
 
Hast Du die Firmware V3.0 oder V3.02 ???

Sonst mach doch einfach erst mal ein Update auf die aktuelle Version V3.02.... Man weiß ja nie was da alles wirklich an Fehlern beseitigt wurde.

http://support.automation.siemens.com/WW/view/de/64850727

Ein Update der Firmware einer V3 S7-1200 ist via integrierten Web Server der CPU möglich und man braucht keine Speicherkarte wie bei einer älteren Version
 
Zurück
Oben