TIA Zykluszeit ändern TIA V13

oliversps

Level-1
Beiträge
95
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
TIA Portal V13 SP2, S7 1200 1214c dc,dc,dc mit Signalboard SB 1221 DC 200khz

Hallo ihr Lieben,

ich werte einen Drehgeber (Inkrementalgeber / AB-Zähler) über einen CTRL_HSC Zählerbaustein aus, Den ich in einen Cyclic Interrupt OB eingesetzt habe.
Für den aktivierten Schnellen Zähler HSC1 habe ich außerdem einen Hardware Interrupt OB als Prozessalarm (bei Zählerwert gleich Referenzwert) hinterlegt.
Ziel des ganzen soll sein, einen Vorschubmotor (Motor on/off ist auch im Cyclic Interrupt programmiert) möglichst wiederholgenau bei Aktivierung des Prozessalarms zu stoppen.

Meine Frage:
Kann ich in dem Cyclic Interrupt OB den Weckalarm der als Zeittakt in ms (von 1 bis 60000) auf 1ms stellen, obwohl meine CPU in der Onlinediagnose eine Zykluszeit von ca. 5ms hat? Und wird die Wiederholgenauigkeit dadurch auch wirklich besser als wenn ich oben genanntes in einem normalen FC Baustein programmieren würde?

Ausserdem habe ich noch in den Eigenschaften der CPU unter Zyklus zwei einstellbare Werte gefunden von denen ich gerne wüsste wofür diese eigentlich sind.
1. Zyklusüberwachungszeit (aktueller Wert 150ms)
2. Mindestzykluszeit für zyklische OB´s aktivieren (aktuell nicht aktiv)


Freue mich mal wieder auf eure kompetente Beratung.
LG Oliver
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier mal wichtige Info´s aus der Hilfe:

Aufruf von Fehler-OBs im Zusammenhang mit Weckalarm-OBs
Die Laufzeit eines Weckalarm-OB muss deutlich kleiner sein als sein Zeitintervall. Andernfalls kann es passieren, dass das Zeitintervall eines Weckalarms abgelaufen ist, der zugehörige Weckalarm-OB aber noch bearbeitet wird. In diesem Fall erzeugt das Betriebssystem einen Zeitfehler (Aufruf des OB80). Anschließend wird der Fehler verursachende Weckalarm nachgeholt oder verworfen. Für jede Priorität kann allerdings nur ein Weckalarm-OB nachgeholt werden.


Hier die komplette Hilfe:
Beschreibung
Mit Hilfe von Weckalarm-OB können Sie Programmteile nach äquidistanten Zeitabschnitten starten.
Die Startzeitpunkte eines Weckalarm-OB ergeben sich wie folgt aus seinem Zeitintervall und seiner Phasenverschiebung:
Startzeitpunkte = n * Zeitintervall + Phasenverschiebung (n = 0, 1, 2 ...)

  • Das Zeitintervall ist die Zeitspanne zwischen zwei Aufrufen. Es ist ein ganzzahliges Vielfaches des Grundtakts von 1 µs.
  • Die Phasenverschiebung ist diejenige Zeitspanne, um die die Startzeitpunkte gegenüber den Vielfachen des Zeitintervalls verschoben sind.
    Eine Phasenverschiebung kann bei der Benutzung mehrerer Weckalarm-OBs sinnvoll sein. Wenn deren Zeitintervalle nämlich gemeinsame Vielfache haben, können Sie durch Verwendung einer Phasenverschiebung gleichzeitige Startzeitpunkte verhindern.
Beispiel für die Verwendung einer Phasenverschiebung
Sie benutzen in Ihrem Programm zwei Weckalarm-OBs: einen mit einem Zeitintervall von 20 ms und einen mit einem Zeitintervall von 100 ms. Um zu gewährleisten, dass diese bei ganzzahligen Vielfachen von 100 ms nicht gleichzeitig aufgerufen werden, verwenden Sie eine Phasenverschiebung.
Aufruf von Fehler-OBs im Zusammenhang mit Weckalarm-OBs
Die Laufzeit eines Weckalarm-OB muss deutlich kleiner sein als sein Zeitintervall. Andernfalls kann es passieren, dass das Zeitintervall eines Weckalarms abgelaufen ist, der zugehörige Weckalarm-OB aber noch bearbeitet wird. In diesem Fall erzeugt das Betriebssystem einen Zeitfehler (Aufruf des OB80). Anschließend wird der Fehler verursachende Weckalarm nachgeholt oder verworfen. Für jede Priorität kann allerdings nur ein Weckalarm-OB nachgeholt werden.
Struktur der Startinformation

  • wie bei S7-300- und S7-400-CPUs
    Siehe Weckalarm-OBs (OB 30 bis OB 38)
    Abweichend von der Belegung der Startinformation bei S7-300- und S7-400-CPUs gilt:
    • STRT_INF=B#16#3F, wennn die OB-Nummer > 122 ist und die Phasenverschiebung und der Zeittakt in ms angegeben werden
    • OB_NUMBR=B#16#FF, wenn die OB-Nummer > 254 ist
  • Optimierte Startinformation


Name Datentyp Bedeutung
Initial_Call BOOL =TRUE im ersten Aufruf dieses OB

  • Beim Übergang von STOP bzw. HALT nach RUN
  • Nach Neuladen
Event_count INT Anzahl der verworfenen Startereignisse seit dem letzten Start dieses OB
 
Ausserdem habe ich noch in den Eigenschaften der CPU unter Zyklus zwei einstellbare Werte gefunden von denen ich gerne wüsste wofür diese eigentlich sind.
1. Zyklusüberwachungszeit (aktueller Wert 150ms)
2. Mindestzykluszeit für zyklische OB´s aktivieren (aktuell nicht aktiv)
Zu 1.:
Gibt an, welche Zeit der OB1 maximal in einem Zyklus "verbraten" darf, ehe die ZykluszeitÜberwachung "zuschlägt" und die CPU in Stopp schickt.

Zu2. :
Gibt an, nach welcher Zeit der OB zum nächsten Durchlauf frühestens wieder gestartet wird. D.h., wenn der OB für seine Abarbeitung weniger Zeit benötigt, wird eine entsprechende Wartezeit eingefügt.
 
Erstmal vielen Dank für eure Antworten.

Also ist die Zyklusüberwachungszeit (1.) und die Mindestzykluszeit (2.) für mein Vorhaben nicht relevant (Wiederholgenaues stoppen) und
da ich nur einen Weckalarm OB (Cyclic Interrupt) habe, brauche ich die Phasenverschiebung wohl auch nicht zu berücksichtigen.

Dennoch bleibt mir jetzt die Frage ob ich den Cyclic Interrupt auf einen Zeittakt von 1ms stellen kann um die Wiederholgenauigkeit beim Abschalten des Motors durch den Prozessalarm zu realisieren, oder muss ich damit rechnen dass der Befehl auf Grund des geringen Zeittakts übersprungen wird, so dass mein Motor im Schlimmsten Fall nie ein Stopsignal (durch Prozessalarm) bekommt?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dennoch bleibt mir jetzt die Frage ob ich den Cyclic Interrupt auf einen Zeittakt von 1ms stellen kann um die Wiederholgenauigkeit beim Abschalten des Motors durch den Prozessalarm zu realisieren, oder muss ich damit rechnen dass der Befehl auf Grund des geringen Zeittakts übersprungen wird, so dass mein Motor im Schlimmsten Fall nie ein Stopsignal (durch Prozessalarm) bekommt?
Der Befehl wird zwar nicht aufgrund des geringen Zeittaktes übersprungen, aber es könnte sein, dass Du in Deinem Programm nicht dafür sorgst, dass der Motor überhaupt darüber informiert wird.
Du musst Dir überlegen, welche (Teil-)Aufgaben wo (im OB1, im WeckArlarm, im ProzessAlarm) abgehandelt werden und wie sich diese Tasks ggfs miteinander verständigen (Handshake) müssen, damit keine Information unwiederbringlich verloren geht, bevor die andere Task darauf zugreifen kann.
Die Tasks dürfen auch nicht gegeneinander arbeiten, so dass nicht die eine sagt STOP während die andere sich für GO entscheidet.
Zu beachten ist auch, dass Zugriffe auf die Eingangs- und Ausgangs-ProzessAbbilder (im OB1-Takt) einerseits und das Lesen und Schreiben mit PeripherieBefehlen (also unmittelbar unter Umgehung der ProzessAbbilder) andererseits sich nicht in die Quere kommen.
 
Zurück
Oben