Timerproblem!

M

Merker0.0

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin Jungs, ich habe ein Problem!

Und zwar möchte ich einen Timer T1 zweimal benutzen.Einen FB, den ich mit einem Eingangsparameter(E1) deklariert habe rufe ích im OB1 zweimal auf, und zwar mit unterschiedlichen Eingängen an den Parametern. Im FB benutze ich den Timer T1. Am Anfang des FB lade ich den Zeitwert für den Timer und am Ende des FB schreibe ich diese zurück. Die Zeitwerte werden in DB's gespeichert(natürlich in unterschiedlichen Wörtern für beide Timer). Der Zeitwert in DB41(aktuelle Zeiten) wird von einem selbstprogrammierten Timer runtergezählt.
Das ganze funktioniert aber nur, wenn nur einer der Timer läuft. Läuft der Erste und der zweite wird angeschaltet gehen beide Timer auf 0 und es ist "Ende im Gelände".
Hoffentlich kann mir jemand helfen(bin total verzweifelt)!?:-D


FB1(wird 2mal aufgerufen, aber versch.DBW's)
Code:
      UN    E      1.0                  // Simuliert Erstanlauf
      SPB   ende
 
      AUF   DB    40                    // Laden des Startwertes des Timers
      L     50
      T     DBW    0
 
         BE    
ende: NOP   0
 
 
      U     #E1
      FP    #pos_Fla                    // Flankenabfrage Eingangsparameter
      U     #pos_Fla
      SPBN  sta1
 
      AUF   DB    40                    // Laden des Startwertes des Timers
      L     DBW    0
      ITB                               // Umwandeln Integer zu BCD
      SPA   tim1
 
sta1: U     #E1
        AUF   DB    41                    // Laden des aktuellen Zeitwertes
        L     DBW    0
        ITB
 
tim1: OW    W#16#1000                   // Zeitbasis 100ms addieren
        SE    T      1
 
 
AUF   DB    41
      LC    T      1                    // Zurückschreiben der aktuellen Zeitwerte
      BTI   
      T     DBW    0
 
hi,
also du kannst das mit einem Timer machen, wenn sicher gestellt ist,
das der Baustein nicht zweimal gleichzeitig aufgerufen wird.
Wird der Baustein 2 mal aufgerufen mußt du verschiedene Timer nutzen, du kannst ja auch die Timer als Übergabeparameter nutzen.

gruß Thomas
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Du musst zwei Timer benutzen ( für jeden Aufruf des FB's einen )

Die SPS braucht für jeden Zyklus eine gewisse Zeit.
Auch wenn gerade nicht der genannte FB bearbeitet wird, läuft der Timer.
Wenn Du den Timer mehrfach zuweist und startest usw. kann das nicht funktionieren.


mfG

Christof
 
Code:
U     #E1
      FP    #pos_Fla                    // Flankenabfrage Eingangsparameter
      U     #pos_Fla
      SPBN  sta1

Funktioniert der bedingte Sprung so wie du dir das vorstellst?

#pos_Fla ist ein Hilfsmerker dafür das die pos Flanke überhaupt funktioniert. Der ist eigentlich immer solange auf 1 gesetzt solange #E1 vorhanden ist.
Entweder das "U #pos_Fla" entfernen oder eine andere Variable verwenden.

Lg Godi
 
Bei dem alem Z80 gab es auch solche Zeitbausteine, die nannten
sich Z80 CTC. So ähnlich ist das auch in der S5/S7. Am besten Du schreibst Dir einen "Timer" selber in dem Du über über die Taktmerker ein Datenwort hoch/runter zählst und somit einen Timer simulierst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Merker 0.0,

schau dir mal die TON/TOFF Bausteine an. Die kannst du in einem FB als Stat-Variable deklarieren und sie exakt wie einen SE/SA Timer verwenden. Bei jedem FB Aufruf hast Du dann einen anderen Instanz-DB und somit auch neue Timer die garantiert noch nicht im Programm verwendet hast. Dann brauchst Du nicht mehr die Timerwerte umkopieren....


MfG SPS_Fuzzy
 
Zurück
Oben