Step 7 Timer startet einfach nicht

Studiologe

Level-1
Beiträge
57
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich stehe mit meinem S5T (T8) bei meiner CPU 315-2DP
voll auf dem Schlauch.
Ich habe Timer schon seit mehr als 6 Jahre in Projekten eingesetzt habe aber noch nicht
so viele Schwierigkeiten gehabt, wie mit diesem.

Und zwar kommen aus verschiedenen Bereichen der Machine Signal Anfragen, die nach einer bestimmten
Zeit aktiv gesetzt werden.

Im angehaengten NW sind zu Test-Zwecken die Merker 124.6 und 116.7 eingefuehrt, um zu sehen, dass
die Sprungmarken angesprungen werden. Klappt auch, nur meiner Timer 8 startet nicht.
Ich habe auch versucht, es komplett zu verhindern, dass die Sprungmarke RT08 nicht angesprungen wird,
um zu sehen, ob ausversehen, nach setzten des T8 er gleich wieder zurueckgesetzt wird. Ist nicht der Fall.

Ich sehe einfach nicht, wo hier das Problem liegt.
Gibt es eine Limitierung bei den Timer in der 315-2DP? Es sind Timer 0-19 verfuegbar, da sollte es doch keinen Unterschied geben, oder?


Code:
      U(    
      O     DB100.DBX  116.7            //Timer Request Infeed
      )     
      UN    M    116.7
      SPB   ST08


      UN(   
      O     DB100.DBX  116.7            //Timer Request Infeed
      )     
      U     T      8
      UN    M    116.7
      O     DB100.DBX  103.3            //Request Timer Reset
      SPB   RT08
      SPA   EN08


//SET T08
ST08: NOP   0
      L     S5T#50S
      SE    T      8
      S     M    116.7
      R     DB100.DBX  116.7
      SPA   EN08


//RESET T08
RT08: NOP   0
      R     DBX [AR1,P#116.7]           //GBL_T_8
      R     DB100.DBX  116.7            //Timer Request Infeed
      R     T      8
      L     S5T#0MS
      SE    T      8
      R     M    116.7
      S     M    124.6
      SPA   EN08


EN08: NOP   0
      U     T      8
      R     M    116.7





Danke fuer Hilfe,
StudiT8.PNG
 
Also pauschal, da du nicht schreibst was das eigentlich Fehlverhalten ist, ist das eine ausgesprochen, sich selbst das Leben schwer machende Art zu programmieren.
Für mich sind da um den Timer erheblich zuviel, meiner Meinung nach absolut sinnfreie, Springerei.

Entiwickel jetzt erst mal einen Code, der ohne diese zweifelhafte Springerei auskommt, dann klappts auch mit dem Timer.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich denke mal, das Problem liegt im Überspringen des Timers.

Wenn ich die ganzen Timer-Threads hier so sehe, ist dies zu 99% der Fall.
Ich bin mir ziemlich sicher, das man Dein obiges Programm ohne einen einzigen Sprung programmieren könnte. Gleichzeitig wäre es dadurch auch noch einfacher les- und wartbar.
 
Hi MSB, hi hucki,
Vielen Dank fuer euere rasche Antwort!
Soweit ich informiert bin, ist der Lade-Befehl nicht vom VKE abhaenging --> daher die Springerei, um einigermassen das Laden kontrollieren zu koennen.

Ich ueberspringe den Timer nicht, da der M 116.7 ja gesetz wird, und zwar wird die jeweilige Sprungmarke einen Zyklus lang (also genau 1 mal)
angesprungen.

Ich versuche mal in der Zwischenzeit das ohne die Springerei zu proggen, noch andere Ideen?
 
Du lädst aber im obigen Code nur die Timer-Zeit.
Das gehört zum Timer-Befehl und braucht nicht übersprungen zu werden.

Nach dem Setzen überspringst Du. Es ist bei den Timern aber erfahrungsgemäß besser, wenn sie in jedem Zyklus passiert werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also habe es mal schnell und dirty programmiert, funktioniert natuerlich nicht, da wie gesagt, der Lade-Befehl vom VKE abhaengt. Hier der "defekte" Code:

Code:
      UN(   
      O     DB100.DBX  116.7            //Timer Request Infeed
      )     
      U     T      8
      UN    M    116.7
      O     DB100.DBX  103.3
      L     S5T#0MS
      SE    T      8
      R     M    116.7


      U(    
      O     DB100.DBX  116.7            //Timer Request Infeed
      )     
      UN    M    116.7
      L     S5T#30S
      SE    T      8
      S     M    116.7


      U     T      8
      R     DB100.DBX  116.7            //Timer Request Infeed
      R     DB100.DBX  103.3
      R     M    116.7

Ich verstehe es einfach nicht, ich setzte Timer schon seit Jahren ein, und habe noch nie solche Probleme gehabt.

Woran kann es im ersten Code-Beispiel noch liegen, dass der Timer T8 nicht startet????
 
Code:
      U     DB100.DBX  116.7            //Timer Request Infeed
      UN    DB100.DBX  103.3            //Request Timer Reset
      L     S5T#50S
      SE    T      8


      U    DB100.DBX  103.3            //Request Timer Reset
      R     DBX [AR1,P#116.7]           //GBL_T_8
      R     DB100.DBX  116.7            //Timer Request Infeed

Jetzt mal auf die Schnelle das ganze ohne Srprünge, kann schon sein das noch ein wenig fehlt, da mir offengestanden nicht vollumfänglich klar ist, was du mit dem Prog bezweckst.
 
Also es funktioniert mit Sicherheit nicht, wenn man den gleichen Timer in einem Zyklus mit unterschiedlichen Start- und Zeitbedingungen füttert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Im ersten Code wird der Timer T8 immer mit VKE=1 aufgerufen, er benötigt aber eine 0/1-Flanke zum starten. Oder die Flankenerkennung des Timers muß mit der FR-Anweisung manipuliert werden.

Im zweiten Code wird der Timer immer zweimal aufgerufen, auch noch mit unterschiedlichen Zeitwerten! Das ist auch keine gute Idee.

Ändere das Programm so daß der Timer nur ein einziges mal aufgerufen wird (es nur eine SE-Anweisung gibt).

Harald
 
Wozu verschiedene Zeitwerte laden und den Timer mehrmals aufrufen? Ist der Aufruf mit S5T#0ms vielleicht Deine Standard-Programmlösung, um einen Timer zu stoppen/rückzusetzen? Das ist so nicht nötig, dafür gibt es eigentlich den Rücksetzbefehl "R T8". Ein SE muß noch nicht 'mal rückgesetzt werden - ein Aufruf mit VKE=0 reicht schon.

Mir scheint - obwohl Du Timer schon jahrelang benutzt - ist Dir nicht klar, daß die S7-Timer über das VKE beim Aufruf gesteuert werden. Das Steuern per Start-Aufruf + Stop-Aufruf und dazwischen ohne Aufruf "frei laufen lassen" ist so nicht vorgesehen und wird meist auch nicht funktionieren.

Das Programm aus Deinem Eingangspost mit den verwirrenden Sprüngen kann man wahrscheinlich einfach so schreiben:
Code:
      U     DB100.DBX  116.7            //Timer Request Infeed
      UN    DB100.DBX  103.3            //Request Timer Reset
      L     S5T#30S
      SE    T      8

      O     T      8
      O     DB100.DBX  103.3            //Request Timer Reset
      R     DB100.DBX  103.3            //Request Timer Reset
      R     DB100.DBX  116.7            //Timer Request Infeed

Wenn Du den DBX116.7 schon beim Start des Timers rücksetzen mußt, dann brauchst Du allerdings einen Hilfsmerker oder mußt einen anderen Timertyp nehmen (z.B. SS).

Harald
 
Zurück
Oben