Timer aus Uhrzeit

Azrael

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Gibt es eine Möglichkeit die Uhrzeit in ein UNIX Time Stamp umzuwandeln ? Also, dass eine INT Variable ab einem definierten Zeitpunkt an in 1/10s oder 1s hochgezählt wird ?

Ich muss sehr viele Zeitvergleiche und Abfragen verwenden, so dass mir eventuell die zur verfügung stehenden Timer in der Steuerung nicht ausrechen. Nebenbei sind INT vergleiche einfacher zu handhaben als TOD oder D&T vergleiche.

Bin für Hilfe sehr dankbar !
 
Hallo,
ja - du kannst mit dem SFC1 die Systemuhr der CPU auslesen und in eine Vaiable vom Typ TOD schreiben. Mit dem System-FC3 kannst du aus dem TOD die Uhrzeit in Millisekunden herauslesen - wird dann ein DWord. Wenn du das dann entsprechend teist hast du m.E. genau das was du brauchst ...
 
Gibt der SFC 1 nicht nur das format Date And Time aus ?
Ja das stimmt.

Eine ganz einfache Variante wäre die Verwendung des Taktmerkerbytes (in der HW-Konfiguration zu konfigurieren). Dadurch werden in einem Merkerbyte Takte von 10Hz bis 0,5 Hz generiert.

z.B. Taktmerkerbyte = MB6
--> M6.0 = 10 Hz, M6.5 = 1 Hz

Durch Erzeugen eines Flankenmerkbytes mit
Code:
      L     MB     8                    // Taktmerker (n-1)
      L     MB     6                    // Taktmerker 
      T     MB     8                    // Taktmerker (n-1)
      XOW   
      UW    
      T     MB     7                    // Flankenmerker
würden dann im Merkerbyte 7 Taktflanken zur Verfügung stehen.

Damit kannst Du dir ohne Probleme einen Timer-Baustein basteln, der mit 1Hz und einem Datenwort arbeitet.


Bei uns wird sowas meist zum Programmieren von Störmeldungen verwendet.


mfg
Maxl
 
Hab mal kurz eine AWL-Quelle von meinem Timer-Baustein gemacht:

Code:
FUNCTION FC 92 : VOID
TITLE =TON [0.1 sek mit M7.0]
AUTHOR : PenM
VERSION : 0.1
 
VAR_INPUT
  IN : BOOL ; //Timer starten
  PT : INT ; //Soll-Zeitwert [0.1 sek] [0.1 - 3276.7 sek]
END_VAR
VAR_OUTPUT
  Q : BOOL ; //Timer abgelaufen
END_VAR
VAR_IN_OUT
  Hilfswort : INT ; //Hilfswort für intere Zwecke
END_VAR
BEGIN
NETWORK
TITLE =
      U     #IN; 
      SPB   M010; 
      L     0; 
      T     #Hilfswort; 
      SPA   M011; 
M010: ON    M      7.0; 
      O(    ; 
      L     #Hilfswort; 
      L     32766; 
      >I    ; 
      )     ; 
      SPB   M011; 
      L     #Hilfswort; 
      +     1; 
      T     #Hilfswort; 
M011: L     #Hilfswort; 
      L     #PT; 
      >=I   ; 
      U     #IN; 
      =     #Q; 
      SAVE  ; 
END_FUNCTION

M7.0 ist der Flankenmerker 10Hz (wird absolut angesprochen, da die Takt- und Flankenmerker bei uns genormt sind)

Ein Timer-Aufruf sieht dann z.B. so aus:
Code:
      CALL  FC    92
       IN       :=M100.0
       PT       :=100
       Q        :=M100.1
       Hilfswort:=DB100.DBW0

Durch das Kommando SAVE am Ende des Bausteins wird das VKE ins BIE-Bt gerettet, was ein Weiterverwenden des FCs in FUP erlaubt. (siehe Bild)

mfg
Maxl

PS: wenn jemand einen Fehler in der Quelle entdeckt, bitte melden. Danke!
 

Anhänge

  • TON M7.0.png
    TON M7.0.png
    7,5 KB · Aufrufe: 87
genau lad dir den mal runter.
da wird das über takt und datenworte gemacht. die anzahl ist also nur durch deinen zur verfügung stehenden speicher begrenzt.
Code:
4 Zeiten die durch einen Takt ein Datenwort
erhöhen. So sind auch extrem lange Zeiten Länge
realisierbar. Wenn sie mehrere Zeiten bzw
Restlaufzeiten addieren möchten ist dies mit
diesen Bausteinen einfacher, da diese mit
Dezimalzahlen arbeiten. 1.Einschaltverzögerung
2.Auschschaltverzögerung 3.Verlängerter Impuls
4.Impuls.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mich hat das ganze nun doch sehr interessiert und habe mir kurzerhand eine 315-2 PN/DP aus der Arbeit geholt um das ganze auszuprobieren....

Nur stell ich mich entweder zu blöd an oder da funktioniert was nicht mit den Timern. Habe das Beispielprojekt 1 zu 1 auf meine CPU geladen (natürlich HW entsprechend angepasst) und die Tmer probiert. Da tut sich irgendwie überhauptnichts. B eispiel SE Timer: Sobald ich den "Run" schalte ist auch der Out high... ohne zeitverzögerung ?!

Beim öffnen des Projekts bekomme ich noch die Meldung das mir DOCPRO fehlt. Müsste dazu aber doch egal sein ?

----edit----

Ok, habs rausgefunden.
War selbst schuld. Hatte als Takt nen Taktmerker angegeben. Da der symetrisch kommt und nicht als flanke gings nicht.
 
Zuletzt bearbeitet:
docpro kannst du ignorieren.

anstatt des timers für den takt nimmst du besser eine flanke des taktmerkers oder den ob35.
das ist genauer. kommt halt drauf an wie genau du die zeiten haben willst.
 
Servus!!

"Mal wieder".... Der Threat wurde von mir am 30.03.2007 gestartet... Über die Timerproblematik bin ich schon seit langem hinweg :)
 
tja, uch bin auch nicht täglich hier ;-)

hab ess nur gefunden und gedacht zu grüßen, wenn man sonst schon so wenig von einander hört ;-)
 
Zurück
Oben