S7 200 Interrupt mit mehreren Unterprogrammen! Problem?

plc_tippser

Well-known member
Beiträge
2.500
Punkte Reaktionen
300
Zuviel Werbung?
->Hier kostenlos registrieren
Hi,

ich habe mir ein Unterprogramm mit 6 Netzwerken geschrieben, in dem 2 Addierer und eine kleine Berechnung sind. Alles mit referenzierten Lokaldaten. (Die Daten liegen im DB.)

Diesen rufe ich im Augenblick 2 mal in der Interrupt Routine auf. Eigentlich sollen es hinterher 19 Aufrufe werden.

Jetzt löse ich den Interrupt aus und stelle fest, dass manchmal das zähler geschlabbert wird.? Gibt es irgend welche bekannten Probleme in dieser Richtung?

pt
 
OP
P

plc_tippser

Well-known member
Beiträge
2.500
Punkte Reaktionen
300
Interessant ist, es werden 3 Additionen ausgeführt, mit der selben Vorbedingung. Das eine ist ein Zyklusmengenzähler, der andere ein Tagesmengen und der dritte ein Gesamtmengenzähler. Der Gesamtmengenzähler ist DINT, die anderen beiden INT. Der Gesamtmengenzähler zählt immer und zuverlässig und das obwohl ich bei dem noch vorher die Menge expliziet in DINT wandeln muss.

Nun habe ich die 3 Additionen hintereinander gehängt (testhalber), doch es hat sich nichts geändert.

Was kann denn da los sein?????

pt
 

Zottel

Well-known member
Beiträge
2.299
Punkte Reaktionen
277
Zuviel Werbung?
->Hier kostenlos registrieren
Hmm, mir fehlt jetzt der Durchblick, aber irgendwie kommt es mir komisch vor, in Interrupts Lokaldaten zu benutzen. Keine Ahnung, ob die einen eigenen Lokaldaen-Stack haben.

Habe ein Programm auf der S7-200, das 5 Interrupts kombiniert benutzt:

High-Speed-Counter 1:
Erreichen eines Zählerstands
Umkehr der Zählrichtung
Drei Interrupts von flankengetriggerten Eingänge, 2 davon um die 30Hz.
Timer-Interrupt jede Sekunde

Beim Counter wird in der Interrupt-Routine dem nächsten Interrupt eine andere Routine zugeordnet.Soweit keine Probleme.
Einmal glaubte ich zu sehen, daß nach Anstecken eines TD200 ein Interrupt verloren ging.

Während der Interrupts sind andere Interrupts gesperrt, wenn ich es noch richtig weiß.
Interruptroutinen sollten daher möglichst kurz sein und nur das nötigste selbst machen. Wenn mehr zu tun ist, setze ich einen Merker und lasse das Hauptprogramm die Arbeit erledigen und den Merker zurücksetzen.
 

Question_mark

Well-known member
Beiträge
3.381
Punkte Reaktionen
578
Hallo pt,
irgendwie kommt es mir komisch vor, in Interrupts Lokaldaten zu benutzen
so hat Zottel geschrieben und auch mir kommt das sehr suspekt vor. Die Lokaldaten sind beim nächsten Interrupt ganz einfach zufällige Werte. Aber das kann man meiner Meinung nach nur mit einem Code-snippet von Deinem Prorgamm nachvollziehen.
Gruss
Question_mark
 
OP
P

plc_tippser

Well-known member
Beiträge
2.500
Punkte Reaktionen
300
Zuviel Werbung?
->Hier kostenlos registrieren
Also,

Temp sind nur Variablen, die beschrieben und im gleichen Zyklus gelesen werden. Statisch, IO-Var. sind mit dem DB verbunden, so dass bei jedem Aufruf die Zustände wieder vorhanden sind. Die Addierer laden über den IO-Parameter Q_Gesamt die Istmenge, addieren Pulsmenge und schreiben zurück in die Istmenge.

pt
 
Oben