Timer (SE) starten nicht immer

Hello_SPS

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,
ich habe folgendes Problem und zwar will ich nach Beenden von unterschiedlichen Ereignissen (ich nenn sie mal „Ereignis A“ und „Ereignis B“) bestimmte Bits zeitverzögert wieder freigeben. Ich wollte es mit SE Timern machen, aber nach ein paar Durchläufen starten die Timer nicht mehr. (Die Timer werden im FB mit Instanzen DB aufgerufen/gestartet.)
Ich benutze: VIPA CPU 313SC und Step7 V5.4

bei Ereignis_A : sperre1=1 /
sperre2=1 / sperre3=0 / sperre4=1 / sperre5=1
bei Ereignis_B : sperre1=1 / sperre2=1 / sperre3=1 / sperre4=1 / sperre5=1

Hier mal mein code
Code:
      U     #Ereignis_A
      FN    #NF1
      =     #Impuls_NF1
      U     #Impuls_NF1
      S     #Stat_NF1
      
      U     #Ereignis_B
      FN    #NF2
      =     #Impuls_NF2
      U     #Impuls_NF2
      S     #Stat_NF2
      
      U     #Stat_NF1
      UN    #Stat_NF2
      SPBN  too1
      L     0
      T     #Sprungzahl
to1: NOP   0

      UN    #Stat_NF1
      U     #Stat_NF2
      SPBN  to2
      L     4
      T     #Sprungzahl
too2: NOP   0

      UN    #Hilf_NF1
      UN    #Hilf_NF2
      UN    #Stat_NF1
      UN    #Stat_NF2
      SPB   Ende

// #### Sprungverteiler #### //
      L     #Sprungzahl
      SPL   sEnd                        // Sprungzahl > 8
      SPA   spv0                        // Sprungzahl = 0
      SPA   spv1                        // Sprungzahl = 1
      SPA   spv2                        // Sprungzahl = 2
      SPA   spv3                        // Sprungzahl = 3
      SPA   spv4                        // Sprungzahl = 4
      SPA   spv5                        // Sprungzahl = 5
      SPA   spv6                        // Sprungzahl = 6
      SPA   spv7                        // Sprungzahl = 7
      SPA   spv8                        // Sprungzahl = 8

//----------------------------
sEnd: NOP   0
      SPA   Ende

// ---- Freigabe, wenn Ereignis_A deaktiviert wurde --- //
//----------------------------
spv0: NOP   0
      S     #Hilf_NF1
      U     #Stat_NF1
      L     S5T#1S
      SE    T    200
      U     T    200
      R     #Stat_NF1
      SPBN  m000
      R     #Sperre1
      L     1
      T     #Sprungzahl
m000: SPA   Ende
//----------------------------
spv1: NOP   0
      UN    DB86.DBX    1.0
      L     S5T#1S
      SE    T    201
      U     T    201
      SPBN  m001
      R     #Sperre2
      L     2
      T     #Sprungzahl
m001: SPA   Ende
//----------------------------
spv2: NOP   0
      UN    DB86.DBX    1.1

      L     S5T#1S
      SE    T    202
      U     T    202
      SPBN  m002
      R     #Sperre4
      L     3
      T     #Sprungzahl
m002: SPA   Ende
//----------------------------
spv3: NOP   0
      UN    DB86.DBX    2.1
      L     S5T#1S
      SE    T    203
      U     T    203
      SPBN  m003
      R     #Sperre5
      R     #Hilf_NF1
      L     100                         //spl sEnd (>8)
      T     #Sprungzahl
m003: SPA   Ende


// ---- Freigabe, wenn Ereignis_A deaktiviert wurde --- //
//----------------------------
spv4: NOP   0
      S     #Hilf_NF2
      R     #Stat_NF2

      U     #Hilf_NF2
      L     S5T#1S
      SE    T    210
      U     T    210
      SPBN  m004
      R     #Sperre1
      L     5
      T     #Sprungzahl
m004: SPA   Ende
//----------------------------
spv5: NOP   0
      UN    DB86.DBX    1.0
      L     S5T#1S
      SE    T    211
      U     T    211
      SPBN  m005
      R     #Sperre2
      L     6
      T     #Sprungzahl
m005: SPA   Ende
//----------------------------
spv6: NOP   0
      UN    DB86.DBX    1.1
      L     S5T#1S
      SE    T    212
      U     T    212
      SPBN  m006
      R     #Sperre3
      L     7
      T     #Sprungzahl
m006: SPA   Ende
//----------------------------
spv7: NOP   0
      UN    DB86.DBX    1.2
      L     S5T#1S
      SE    T    213
      U     T    213
      SPBN  m007
      R     #Sperre4
      L     8
      T     #Sprungzahl
m007: SPA   Ende
//----------------------------
spv8: NOP   0
      UN    DB86.DBX    2.1
      L     S5T#1S
      SE    T    214
      U     T    214
      SPBN  m008
      R     #Sperre5
      R     #Hilf_NF2
      L     100                         //spl sEnd (>8)
      T     #Sprungzahl
m008: SPA   Ende
//----------------------------
Ende: NOP   0
// ######## ENDE ######## //
  
      L     100
      L     #Sprungzahl
      ==I   
      SPBN  unte
      R     T    200
      R     T    201
      R     T    202
      R     T    203
      R     T    204
      R     T    210
      R     T    211
      R     T    213
      R     T    214
      FR    T    200
      FR    T    201
      FR    T    202
      FR    T    203
      FR    T    204
      FR    T    210
      FR    T    211
      FR    T    213
      FR    T    214

unte: NOP   0
Das Reseten und Freigeben der Timer war ne Verzweifelungstat, es ging bissle besser. Ich sitze nun schon zu lange dran. Habe gerade kein kopf mehr dafür.
Versuche ich das zeitverzögerte Rücksetzen der Sperren zu kompliziert zu lösen? Das muss doch einfacher gehen, oder?
Ich hoffe man kann mir helfen. Danke im Voraus.
 
Eines musst du dir ganz grundsätzlich merken:
Timer Arbeiten Flankengesteuert und sollten aus genau diesem Grund NICHT übersprungen werden.
D.H. z.B. dein Timer 200, dieser läuft ab, und schaltet dein Sprungleiste 1 Weiter,
das Stat_NF1 wieder LOW ist bekommt der Timer schon gar nicht mehr mit.

Ich würde sogar soweit gehen, das dein Ablauf jeweils genau 1 mal funktioniert, und dann einfach durchrattert,
wenn dein Rücksetzen Freigeben nicht wäre.

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, das werde ich mir merken.
Das stimmt, es geht auch nur einmal, wenn das Reseten und Freigeben nicht wäre.
Wie könnte man die Sperren denn dann nach einander verzögert reseten?
 
Du schreibst die Zeit außerhalb der Sprungleiste.

Dein Code:

Code:
spv6: NOP   0
      UN    DB86.DBX    1.1
      L     S5T#1S
      SE    T    212
      U     T    212
      SPBN  m006
      R     #Sperre3
      L     7
      T     #Sprungzahl
m006: SPA   Ende

Neuer Code:

Das hier schreibst du ganz an den Anfang des Bausteins und zwar dann für alle Schitte:
(evtl. ist noch je ein Vergleicher mit dem Schrittzähler auf den jeweilige Schritt nötig, kommt
darauf an, was genau die DB86.DBX... machen)

Code:
      UN    DB86.DBX    1.1
      L     S5T#1S
      SE    T    212


Code:
spv6: NOP   0
      U     T    212
      SPBN  m006
      R     #Sperre3
      L     7
      T     #Sprungzahl
m006: SPA   Ende

Siemens-Timer in Multiinstanz-FB sind eigentlich Mist, du solltest besser IEC-Timer nutzen (Siehe Step7-Library unter IEC-Funktions), die du im Stat-Bereich des FB deklarierst!
 
Das hier schreibst du ganz an den Anfang des Bausteins und zwar dann für alle Schitte:
(evtl. ist noch je ein Vergleicher mit dem Schrittzähler auf den jeweilige Schritt nötig, kommt darauf an, was genau die DB86.DBX... machen)

Ich hatte es vergessen DB86.DBX.. in Sperre.. zu ändern. Und zwar wenn die Sperre1 resetet wurde dann soll der nächste timer starten (UN #Sperre1) (so war es mal gedacht ;) )

Wo ist denn der Unterschied zwischen "normalen" Timern von S7 und den IEC Timern? Hatte es auch schon mit dem SFB4 versucht aber halt auch mit sprüngen...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hatte es vergessen DB86.DBX.. in Sperre.. zu ändern. Und zwar wenn die Sperre1 resetet wurde dann soll der nächste timer starten (UN #Sperre1) (so war es mal gedacht ;) )

Wo ist denn der Unterschied zwischen "normalen" Timern von S7 und den IEC Timern? Hatte es auch schon mit dem SFB4 versucht aber halt auch mit sprüngen...

Die IEC-Timer deklarierst du im Statbereich des Multi-FB. Du hast dann nicht das Problem mit den Timernummern der S5-Timer. T200 darf ja nur einmal verwendet werden. Solltest du den Baustein 2 Mal verwenden geht das nicht mit festen S5-Timern! Auch bei den IEC-Timern datst du in deinem Fall nicht drumherum springen, da besteht dann auch das Problem, daß eine Flanke nicht mehr wahrgenommen werden kann. Stell dir vor, du sitzt in einer dunklen Kiste und nur Nachts macht einer mal kurz den Deckel auf. Dann bekommst du nie mit, daß es auch mal Tag ist, der Tag-Nachtwechsel entgeht dir. So ist es mit deinen Timern, die du umspringst!.
 
Habe es eben mit IEC Timern gelöst und sie am Anfang des FB "gelegt". Nun läuft alles wie geschmiert.

Danke an allen schnellen Helfern :s12:
 
Zurück
Oben