speicherminimierte Zeitfunktion

Farinin

Level-2
Beiträge
352
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich bin derzeit auf der Suche nach einer alternativen Zeitfunktion in multiinstanzierten FB's. Derzeit nutze ich die SFB Timer. Funktioniert auch seht gut, aber die brauchen nun mal einiges an Speicher und da die FB's später bis zu 200x angesprochen werden, ... .

Hat jemand dazu eine Alternative?

Kann man aus einem FB direkt (o. Merkerwort) an die Zykluszeit kommen und damit rechnen?
Gibt es Timer die weniger Speicher brauchen?

Bin für jede Alternative dankbar!
 
einen sekundenimpuls basteln den du dann überall verwenden kannst
und dann so in deine fb´s fc´s einbinden
Code:
un sekundenimpuls //kann man auch minuten,stunden usw.machen
spb next
l #zeit
l 1
+I
t #zeit
next: Nop 0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich gehe mal davon aus, das du mit einer S7 arbeitest. da steht die zykluszeit im ob1 ldw 6. Die schiebe ich mir immer in ein Merkerwort.
So kann man dann Projektweit mit der Zykluszeit arbeiten. Oder man macht es mit den Taktmerkern, bildet daraus einen Impuls, und dann so wie es Gerhard angesprochen hat.
 
und es muß nicht unbedingt der von gerhard erwähnte SEKUNDEN_pulse sein ... das taktmerkerbyte der CPU gibt auch kleinere taktzeiten, größere frequenzen, her ... zeitsensitive bausteine mach ich,k soweit es möglich ist, mit den takten der CPU ... noch nie probs gehabt.
 
Eine "normale" S7 hat doch 256 Timer an Bord. Wenn Du Deinen Multiinstanz FB noch mit einem weiteren Eingang versiehst, an dem Du die Timernummer anlegst und intern dann diesen Timer verwendest, sollte es doch auch gehen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
jetzt hab ich dann auch mal die frage richtig gelesen: ja, es gibt die möglichkeit, die dauer des letzten zyklusses auszulesen. im ob1 ... prev_cycle ... oder so (ich hasse es, kein step7 zu haben .... waaaaaaaaaah) ... am besten diese zeit durch schreiben in DB/M-bereich global verfügbar machen.
 
Hallo Leute,
nun zunächst einmal vielen Dank für eure Ideen!

Unter den Vorschlägen, gefällt mir am besten die Variante mit dem Taktmerkerbyte. Die Dinge sind eh da, das Handling ist einfach, Speicherreduzierend auch.

Fazit: Das ist eine Alternative!

Danke!
 
Ja, ich mach das auch mit einem 100ms-Impuls, den ich aus dem Taktmerkerbyte der SPS erzeuge. Damit zähle ich eine Zählvariable hoch, die dann mit einem vorgegebenen In-Wert vergleichen wird und z.Bsp einen Fehler auslöst. Gerade für Laufzeitfehler von Zylindern etc. recht die Auflösung von 100ms völlig. Auf die Weise benutze ich Zeiten wirklich nur noch für spezielle Dinge.
 
Bei mir sieht das so aus...

//ZeitSekPulse zählen
UN #SekPuls
SPB ENDE

L #Zeit
L 1
+I
T #Zeit
//Überpüfen ob die Zykluszeit erreicht wurde, wenn nicht dann springe
//zum ENDE des Bausteins.
L #Zeit
L #Zykluszeit
<I
SPB ENDE
//Puffer für die Zeit zurücksetzen
L 0
T #Zeit
//hier der zu bearbeitende CODE der Funktion

ENDE: NOP 0
 
Hier meine SE/SA-Timer, mit Start/Stopp Möglichkeit.
Als FC programmiert
i_xxxx = Eingangsvariablen
io_xxx = Durchgangsvariablen
o_xxx = Ausgangsvariablen

"i_Ereignis" : Bool - ist das was verzögert werden soll
'i_StartStop" = 1 => Verzögerung starten/fortsetzen
"i_startStop" = 0 => Verzögerung anhalten
"o_Ereignis" : Bool - ist das verzögerte Signal
"i_Zeit" : TIME - Verzögerungszeit (Soll-Zeit)
"io_aktuelleZeit" : TIME
"i_ZyklusZeit" : TIME (Damit mit der Konsistenzprüfung keine Probleme gibt, aus OB 1 mit ITD umwandeln und auf DBD vom Typ TIME ablegen)


Code:
[B]SE-TIMER[/B]

      U     #i_Ereignis
      SPB   M011
      L     T#0MS
      T     #io_AktuelleZeit
      R     #o_Ereignis
      SPA   M099
M011: L     #i_Zeit
      L     #io_AktuelleZeit
      <=D   
      =     #o_Ereignis
      O     #o_Ereignis
      ON    #i_StartStop
      SPB   M099
      L     #i_ZyklusZeit
      +D    
      T     #io_AktuelleZeit
M099: NOP   0
Code:
[B]SA-TIMER[/B]

      UN    #i_Ereignis
      SPB   M001
      L     #i_Zeit
      T     #io_AktuelleZeit
      S     #o_Ereignis
      SPA   M009
M001: UN    #o_Ereignis
      SPBN  M002
      L     T#0MS
      T     #io_AktuelleZeit
M002: L     #i_ZyklusZeit
      L     #io_AktuelleZeit
      <=D   
      =     #o_Ereignis
      ON    #o_Ereignis
      ON    #i_StartStop
      SPB   M009
      L     #i_ZyklusZeit
      -D    
      T     #io_AktuelleZeit
M009: NOP   0
Man kann natürlich anstelle der Zykluszeit (vergangene Zykluszeit) konstante Impulse (CPU-Takt-Merker) zählen.
Naja ich finde es als Time-Format und mit Zykluszeit schöner :rolleyes:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, das habe ich drin.
Wo und wie läßt sich der nötige Speicherbedarf sonst noch reduzieren?

Hallo,
da ist bei mir die Systemzeit als globale Variable das Mittel der Wahl. Das kann man so wie von Ralle geschildert machen - ich habe mir die Systemzeit in ein MD geschrieben und parametriere das an FB's dran mit denen ich Laufzeitmessung oder andere Zeitüberwachungen mache ... Ob das allerdings dann weniger Platz braucht ...

Gruß
LL
 
Zurück
Oben