Datum Uhrzeit auslesen

Hallo klauserl!

Bei S7 gehts am einfachsten über den SFC1, Read-CLK.

Hier die Beschreibung aus der S7-Hilfe:
Mit der SFC 1 "READ_CLK" (read system clock) lesen Sie die Uhr in der CPU aus. Sie erhalten das aktuelle Datum und die Uhrzeit.

Parameter Deklaration Datentyp Speicherbereich Beschreibung
RET_VAL OUTPUT INT:
Tritt während der Bearbeitung der Funktion ein Fehler auf, enthält der Rückgabewert einen Fehlercode.
CDT OUTPUT DT:
Am Ausgang CDT werden das aktuelle Datum und die aktuelle Uhrzeit ausgegeben.

Gruß
Thomas
 
MOIN habe schon sehr viel zu dem THEMA im Forum gelesen, aber noch nicht die hilfe gefunde die ich brauche :confused:

Habe in meinem OB1 die Variable OB1_DATE_TIME will Diese wenn ein Merker kommt in mein DB schreiben, was vom TYP DATE_AND_TIME ist.

Habe es mit dem L #OB1_DATE_TIME versucht, geht nicht, wahrscheinlich die OB1_DATE_TIME zu groß ist!

Gibt es eine Möglichkeit sie einfach ins DB zu kopieren?
 
Hallo,
"Date_and_Time" oder auch kurz "DT" ist eine BCD-Kette. Siehe hierzu auch die Step7-Hilfe. Wenn du daraus nur den Date-Anteil oder nur den TOD-Anteil haben willst, dann geht es am Einfachsten mit den Bausteinen FC6 und FC8 aus der Standard-Bibliothek ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

So kannst du os OB1 auslesen!

SFC1: read System Clock
FC7 iec: DT to DAY - um den Wochetag auszulesen
FC8 iec: DT to TOD - die Uhtzeit auslesen

viel erfolg
 

Anhänge

  • transfer+.jpg
    transfer+.jpg
    120,5 KB · Aufrufe: 684
  • umwandlung.jpg
    umwandlung.jpg
    102,6 KB · Aufrufe: 554
Zuletzt bearbeitet:
HI
Ich wollte eigendlich nur die Aktuelle Systemzeit in einen DB speichern, so wie sie ist und nach möglichkeit nicht zerlegen inDate and Time muss sie danach ja wieder zusammen fügen?
 
HI
Ich wollte eigendlich nur die Aktuelle Systemzeit in einen DB speichern, so wie sie ist und nach möglichkeit nicht zerlegen inDate and Time muss sie danach ja wieder zusammen fügen?
Dann benutze am einfachsten die SFC1 "READ_CLK". An deren Ausgang kannst Du direkt deine DB-Variable symbolisch dranschreiben ohne was zerlegen zu müssen.

.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
      L     "MW104"                     // Lädt das Adressbyte für den Pointer
      SLD   3                           // schieb es an die Richtige Position
      LAR1                              // Schreibt es in das Adressregister 1
      AUF   DB   112                    // Öffnet den DB 112
     [COLOR=red] CALL  "READ_CLK"
       RET_VAL:=#FEHLER_CLOCK
       CDT    :=#timestamp
// L     #timestamp                  // MerkerWorT für zu[/COLOR] Speichernde Wert
      T     DBW [AR1,P#0.0]             // Werte DB112 Abspeichern

Da liegt mein problem! Da der Lade befehl nicht geht und ich die Speicheradresse in DB ständig andern muss(siehe Pointer) brauche ich einen befehl der ein Timestamp ins DB schreibt????????
 
Code:
      CALL  "BLKMOV"
       SRCBLK :=#OB1_DATE_TIME
       RET_VAL:=#FEHLER_CLOCK
       DSTBLK :=DB112.DBwerte[AR1,P#0.0]

funkt auch nicht

Ist schade das ich im DB Werte mit DT deklarieren kann aber Sie nicht beschreiben kann!
 
DSTBLK muß ein anypointer sein und deine zeit, die du ausliest passt auch nicht in ein wort ...

vielleicht solltest du dir erstmal nen kopf machen, was für einen zeitstempel du überhaupt brauchst, dir dann die zeit vernünftig zusammenbauen und dann deine udt nochmal überarbeiten

und zu deinen symbolen: hatte ich schon erwähnt, dass sinnvolle symbole ein programm übersichtlicher machen? ja, ich glaube gestern!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Versuch es doch mal so:
Code:
      L     P##ziel                     //Pointer auf die Anyvariable für das Speicherziel
      LAR1  
      L     W#16#1002                   // Typ Byte
      T     W [AR1,P#0.0]
      L     8                           // Anzahl der Bytes
      T     W [AR1,P#2.0]
      L     112                         // Ziel-DB-Nummer
      T     W [AR1,P#4.0]
      L     #byte_adr                   // Speicheradresse im Ziel-DB, muss vom vorangehenden Programm beschrieben werden
      SLD   3
      OD    DW#16#84000000
      T     D [AR1,P#6.0]
 
 
      U     "trigger"                   // bei "1" speichere Zeitstempel
      SPBNB _001
      CALL  "BLKMOV"
       SRCBLK :=P#L 12.0 BYTE 8         //Anypointer auf #OB1_DATE_TIME
       RET_VAL:=MW100
       DSTBLK :=#ziel                   //Variabler Pointer auf das Speicherziel
_001: NOP   0
 
@OHGN, Beidendorfer

Aber Achtung, das Beispiel geht so nur im OB 1, da nur dort die OB1_Date_Time zur Verfügung steht. Aus anderen Bausteinen heraus noch den SFC1 vorschalten!
 
Nicht schön, geht aber auch (im OB1), wenn OB1_DATE_TIME auf Adresse L12.0 liegt:

Code:
L MD104              // Byte-Adresse im Ziel-DB
SLD 3
LAR1
AUF DB112           // Ziel-DB
L LD12
T DBD[AR1,P#0.0] 
L LD16
T DBD[AR1,P#4.0]

Grüße von HaDi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo forumfreunde
ich habe was gebastelt
ich kann es aber bei mir in firma nist testen

Code:
[FONT=Arial] [/FONT]
[FONT=Arial] [/FONT]
[FONT=Arial]      LAR1  P##Ziel_ANY[/FONT]
[FONT=Arial] [/FONT]
[FONT=Arial] [/FONT]
[FONT=Arial]      L     B#16#10                     // syntax S7[/FONT]
[FONT=Arial]      T     LB [AR1,P#0.0][/FONT]
[FONT=Arial] [/FONT]
[FONT=Arial] [/FONT]
[FONT=Arial]      L     B#16#E                      //datentyp is date and time[/FONT]
[FONT=Arial]      T     LB [AR1,P#1.0][/FONT]
[FONT=Arial] [/FONT]
[FONT=Arial] [/FONT]
[FONT=Arial]      L     1                           //1 stück [/FONT]
[FONT=Arial]      T     LB [AR1,P#2.0][/FONT]
[FONT=Arial] [/FONT]
[FONT=Arial]      L     44                          // DB44[/FONT]
[FONT=Arial]      T     LW [AR1,P#4.0][/FONT]
[FONT=Arial] [/FONT]
[FONT=Arial]      L     #index                      // bei datentyp=Date and time muss man jedes ml um 8 erhöht [/FONT]
[FONT=Arial]                                           // index ist  zeiger auf der stelle im db44[/FONT]
[FONT=Arial]      ITD   [/FONT]
[FONT=Arial]      SLD   3[/FONT]
[FONT=Arial]      T     LD [AR1,P#6.0][/FONT]
[FONT=Arial] [/FONT]
[FONT=Arial]      L     B#16#84                     // 84 wegn DB[/FONT]
[FONT=Arial] [/FONT]
[FONT=Arial]      T     LB [AR1,P#6.0][/FONT]
[FONT=Arial] [/FONT]
[FONT=Arial] [/FONT]
[FONT=Arial] [/FONT]
[FONT=Arial]      CALL  "BLKMOV"[/FONT]
[FONT=Arial]       SRCBLK :=#Datum_Uhrzeit[/FONT]
[FONT=Arial]       RET_VAL:=MW10[/FONT]
[FONT=Arial]       DSTBLK :=#Ziel_ANY[/FONT]
 
... ich versuche es jetzt nur noch ein Mal ... und dann verspreche ich auch, dass ich mich aus den "Beidendorfer"-Thredas heraushalten werde ...

Ihr füttert ihn ständig mit irgendwelchen fertigen Teil-Vorschlägen ohne dabei auf die Grundlagen zu achten. Es nützt gar nichts, wenn man mit ANY-Pointern oder Date_Time oder SFC's usw. um sich schmeisst, wenn das auf der anderen Seite gar nicht ankommt. Dieses Gefühl hatte ich auch schon im Vorgänger-Thread (Daten loggen) und hier erst recht ...

@Beidendorfer:
Bevor du damit herumspielst ... schau die doch bitte mal die Variablentypen in der Step7-Hilfe an. Hierbei solltest du mit dem Aufbau von Date_Time (DT) und den anderen beteiligten Größen schon etwas anzufangen wissen. Der DT beinhaltet alle Datums-Informationen. Für deine Aufgabe benötigst du ggf. nur Teile daraus ... und auch wenn nicht, dann solltest du trotzdem wissen, was du mit den archivierten Gesamt-Info's anfangen kannst ...

Gruß
LL
 
Zurück
Oben