Timerbaustein aus einem Taktmerker

magmaa

Level-1
Beiträge
349
Reaktionspunkte
27
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zur Laufzeitüberwachung diverser Sachen hab ich mir eine eigenen Verzögerungszeitbaustein geschrieben. Den ich dann immer wieder verwenden möchte. Da diese Laufzeitüberwachung ziemlich häufig vorkommt sollte keine S7 Timer verwendet werden da diese ja von der CPU begrenzt sind.
Nun mein Frage ich habe den Timerbaustein aus einem Taktmerker erzeugt kann man das machen oder bekomme ich dann bei vielen aufrufen probleme bzw. ist es besser den Takt mittel´s Weckalarm z.B. OB35 zu erzeugen?
 
Ich denke mal das du mit S7-Timer eigentlich die S5-Timer meinst oder?
Warum benutzt du stattdessen nicht einfach die IEC-Timer aus der Bibliothek?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
aus einem CPU-Taktmerker? oder einem selber generierten?

nein, da bekommst du, wenn du es richtig implemtiert hast keine probleme.

ist deine laufzeitüberwachung als FC oder FB ausgeführt? (wenn als FB kannst du auch SFB14 und SFB15 als multiinstanz benutzen, das ist noch schöner :rolleyes:) ...wenn als FC mußt du die aktuellen zeitwerte über die INOUT-schnittstelle speichern und lesen ... ansonsten sehe ich keine probleme auf dich zukommen ... die flankenauswertung wirste ja im FC auch richtig eingebaut haben, oder?
 
Zur Zeit ist es ein FC mit einem CPU Taktmerker über einen FB kann man ja mal nachdenken. Die ICE sollen auch nicht unbedingt verwendet werden.
Hatte noch überlegt den Takt mit OB 35 zu erzeugen oder gibt es noch andere möglichkeiten?
 
was brauchste denn für nen takt? 100ms, 1s und 2s sind doch schöne sachen und verfielfältigen auf 4s 8s 16s ist auch kein problem...
 
Funktionieren tut es schon mit dem cpu Taktmerker wollt nur wissen was besser ist CPU Taktmerker eigender Takt mit OB35 oder noch ne andere Lösung die es vieleicht gibt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe da (in Anlehnung an den Beitrag von Astralavista) noch einen netten Vorschlag, der aber nicht so ganz ohne ist :

Du baust dir einen FB, der als Eingangsparameter die Start- und Fertig-Bedingung des Prozesses. Dem FB übergibst du zusätzlich noch die SPS-Systemzeit. Intern legst du bei Start die akt. Systemzeit in einen Speicher. Solange wie Start ansteht und nicht fertig wird der gespeicherte Wert von dem akt. Wert subtrahiert. Die Differenz kannst du als akt. Laufzeit ausgeben und auch mit einem Time-Out-Wert vergleichen, was dann bei Überschreitung wieder ein zusätzliches Bit bringen würde.
Auf diese Weise lassen sich deine Abläufe recht gut überwachen.

Ist vielleicht auch noch eine Idee ...

Gruß
LL
 
Also in etwa so:

Code:
FUNCTION "ZeitInt" : VOID
TITLE =
//Mit diesem Baustein kann man z.B. die Laufzeit eines Bausteines aufnehmen.
//Hierzu wären die Aufrufe wie folgt:
////Löschen der Speicher  
//    CALL  "ZeitMess"
//       Sample      :="VKE0"
//       Reset       :="VKE1"
//       ZeitSpeicher:=MD450
//       LetztZeit   :=MD454
//
////Erster Aufruf zum Messtart
//      CALL  "ZeitMess"
//       Sample      :="VKE1"
//       Reset       :="VKE0"
//       ZeitSpeicher:=MD450
//       LetztZeit   :=MD454
//
//      CALL  "FB_SPS_COMM" , "DB_SPS_COMM"
//
////Zweiter Aufruf für Messende
//      CALL  "ZeitMess"
//       Sample      :="VKE1"
//       Reset       :="VKE0"
//       ZeitSpeicher:=MD450
//       LetztZeit   :=MD454
//
//Wird der Baustein ohne Reset Aufgerufen, integriert dieser die Zeit in der 
//Variablen Zeitspeicher kontinuierlich auf.
VERSION : 0.0

VAR_INPUT
  Sample : BOOL ; 
  Reset : BOOL ; 
END_VAR
VAR_IN_OUT
  ZeitSpeicher : TIME ; 
  LetztZeit : TIME ; 
END_VAR
VAR_TEMP
  DateTime : DATE_AND_TIME ; 
  Zeit : TIME_OF_DAY ; 
  SFC_Status : INT ; 
END_VAR
BEGIN
NETWORK
TITLE =Speicher zurücksetzen
 
      U     #Reset; 
      SPBNB _003; 
      L     0; 
      T     #ZeitSpeicher; 
_003: NOP   0; 
NETWORK
TITLE =Zeitscheibe generieren
      U(    ; 
      CALL "READ_CLK" (
           RET_VAL                  := #SFC_Status,
           CDT                      := #DateTime);
      U     BIE; 
      )     ; 
      SPBNB _014; 
      CALL "DT_TOD" (
           IN                       := #DateTime,
           RET_VAL                  := #Zeit);
_014: NOP   0; 
NETWORK
TITLE =Zeitscheibe addieren
      U     #Sample; 
      SPBN  kzsb; 
      L     #Zeit; 
      L     #LetztZeit; 
      -D    ; 
      L     #ZeitSpeicher; 
      +D    ; 
      T     #ZeitSpeicher; 
kzsb: L     #Zeit; 
      T     #LetztZeit; 
END_FUNCTION
 
Zurück
Oben