Warum hängt das Programm auf VIPA 115DP ?

sunny22

Level-2
Beiträge
261
Reaktionspunkte
52
Zuviel Werbung?
-> Hier kostenlos registrieren
Servus,

ich hätt mal wieder eine Frage an die Runde.
Ich hab hier ein kleines Testprogramm. Das läuft auf einer VIPA 115DP CPU. Im Sekundentakt soll ein Ausgang blinken und das MB10 hochgezählt werden. Gestartet wird über M0.0.
Steuerung des M0.0 und Anzeige des MB10 erfolgt auf einem HMI. Das funktioniert auch, allerdings immer nur so 30-90 Sekunden lang (immer unterschiedlich). Das Programm läuft dann zwar noch aber der Takt bleibt stehen weil der Timer nicht mehr funktioniert. Der Zustand ist dann so wie in dem Onlineteil zu sehen nur halt jeweils mit einem anderen Zählerstand. Das selbe passiert auch ohne HMI an der CPU. Die CPU wurde urgelöscht und es befindet sich nur der OB1 mit dem kurzen Programm auf der CPU. Kann sich das jemand erklären?

Grüße Oliver

programm.jpg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Weil die S7-Timer asynchron zum SPS-Programm in einer anderen Task ablaufen, ist es generell keine gute Idee, den Zustand von S7-Timern mehrmals im Programm abzufragen/zu verknüpfen, weil sich der Zustand zwischen den Abfragen ändern kann! Wenn man den Timer-Zustand mehrmals verwenden will, dann muß man sich (für diese Task) ein "Prozessabbild" (Taskabbild) des Timers erstellen, indem man den Zustand in eine BOOL-Variable kopiert und dann nur diese Kopie verwendet.

Der nur kurzzeitig funktionierende Code:
Code:
      U    M 0.0
      [COLOR="#FF0000"]UN   T 15[/COLOR]
      L    S5T#1S
      SS   T 15
      [COLOR="#0000FF"]U    T 15[/COLOR]
      SPBN M001
      R    T 15
Wenn man S7-Timer mit sich selbst verknüpft, dann wird man immer solche Phänomene erhalten. Wenn der Timer genau zwischen den Anweisungen "UN T 15" und "U T 15" abläuft, dann erfolgt das "R T 15" während der Timer-Eingang 1 ist - nach dem Reset braucht der Timer erneut eine steigende Flanke beim "SS T 15" zum starten, die aber nicht kommt, weil das VKE da schon 1 war. Vermutlich hilft ein löschen des Timer-Flankenmerkers nach dem Reset des Timers (nicht getestet):
Code:
      U    T 15
      SPBN M001
      R    T 15
      [COLOR="#0000FF"]FR   T 15[/COLOR]   [COLOR="#008000"]//Flankenmerker des Timers löschen[/COLOR]
      L    MB 10
...
Besser: Um Timer unabhängig vom Ablaufzeitpunkt durch sich selbst neu zu starten, muß man den Timerzustand auf einer BOOL-Variable (z.B. Merker) zwischenspeichern und diese Variable verknüpfen (das oben erwähnte "Prozessabbild" des Timers):
Code:
      U    M 0.0
      [COLOR="#0000FF"]UN   M 1.5[/COLOR]   [COLOR="#008000"]// <--[/COLOR]
      L    S5T#1S
      SS   T 15
      U    T 15
      [COLOR="#0000FF"]=    M 1.5[/COLOR]   [COLOR="#008000"]// <--[/COLOR]
      SPBN M001

Anstatt dem umständlichen manipulieren des nicht gut geeigneten SS-Timers kann man auch einfach einen SE-Timer verwenden:
Code:
      U    M 0.0
      [COLOR="#0000FF"]UN   M 1.5[/COLOR]
      L    S5T#1S
      [COLOR="#0000FF"]SE   T 15[/COLOR]   [COLOR="#008000"]// <--[/COLOR]
      U    T 15
      [COLOR="#0000FF"]=    M 1.5[/COLOR]
      SPBN M001

      L    MB 10
      INC  1
      T    MB10
      UN   A0.0
      =    A0.0

M001: BE

Harald
 
Zuletzt bearbeitet:
Hallo Harald,

vielen Dank für die Tolle und ausführliche Erklärung! Jetzt weiß ich nicht nur das es so funktioniert und so nicht sondern auch warum das so ist. Das finde ich immer wichtig da man solche Erkenntnisse auch bei ähnlich gelagerten Problemen nutzen kann.

Grüße Oliver
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich muss mal nachhaken:
Das die klassischen S7-Timer azyklisch sind ist mir komplett neu.
TON bei TIA, ja klar.
Aber SE in einer 300er ?
Ist das wirklich so oder reden wir hier von Vipa-spezifischen Verhalten?
 
Zurück
Oben