# Datum Uhrzeit auslesen



## klauserl (28 September 2005)

Hallo habe ein Problem!! Wie kann ich am einfachsten die CPU Zeit zur Weiterverarbeitung auslesen??? :?  :?:


----------



## Atlantik (28 September 2005)

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:
> ...



Gruß
Thomas


----------



## volker (28 September 2005)

oder die temp vars des ob1 verwenden


----------



## Beidendorfer (20 August 2008)

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

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?


----------



## Larry Laffer (20 August 2008)

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


----------



## Manfred Stangl (20 August 2008)

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


----------



## vierlagig (20 August 2008)

soviel scheinst du nicht gelesen zu haben, oder du hast grundlegende schwierigkeiten damit, probleme zu zerlegen und ihre einzelnen bestandteile in anderen problemstellungen wieder zu finden...

hier ein beispiel von kai: http://www.sps-forum.de/showpost.php?p=93446&postcount=16

der fc100 macht, was du willst


----------



## Beidendorfer (20 August 2008)

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?


----------



## Manfred Stangl (20 August 2008)

SFC1???

oder meinst du das irgendie anders?


----------



## OHGN (20 August 2008)

Beidendorfer schrieb:


> 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.

.


----------



## HaDi (20 August 2008)

Zum Übertragen von #OB1_DATE_TIME in einen DB würd ich SFC20 nehmen.

Grüße von HaDi


----------



## Beidendorfer (20 August 2008)

```
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????????


----------



## Beidendorfer (20 August 2008)

```
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!


----------



## vierlagig (20 August 2008)

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!


----------



## OHGN (20 August 2008)

Versuch es doch mal so:

```
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
```


----------



## Ralle (20 August 2008)

@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!


----------



## HaDi (20 August 2008)

Nicht schön, geht aber auch (im OB1), wenn OB1_DATE_TIME auf Adresse L12.0 liegt:


```
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


----------



## WIX (20 August 2008)

hallo forumfreunde
ich habe was gebastelt
ich kann es aber bei mir in firma nist testen


```
[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]
```


----------



## Larry Laffer (20 August 2008)

... 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


----------



## Manfred Stangl (20 August 2008)

Hallo!

@LL

diesen thread hat aber ein "klauserl" eröffnet!
ich bin schon vor einer Weile ausgestiegen


----------



## vierlagig (20 August 2008)

@manni, guck mal bild 

so, jetzt endlich, der lang ersehnte link:

http://www.automation.siemens.com/fea/html_00/down_module.htm


----------



## Manfred Stangl (20 August 2008)

:sw18::sm10:

bin schon ruhig!

sorry!!!!

jaja ich kenn da jemanden der hat folgendes (oder so ähnlich) in seiner Signatur:

...lesen sollte man...(können)


----------



## Beidendorfer (21 August 2008)

Moin lieb Forumsfreunde

Ein kleiner Nachtrag 

1) bin ich euch allen sehr dankbar für eure hilfe :s1:
2) Weiß ich das ich meinen Zeitstempel auch anders bauen kann, dank euerer Hilfe, 

Aber mich hat einfach interessiert, warum es das Datenformat DT im Datenbaustein gibt und auch im OB, es aber keine direkte möglichkeit gibt diese zu verschieben oder kopieren, ohne sie vorher zerlegen oder bearbeiten zu müssen?

So denke nun genug zu dem Thema

Noch mals Danke @all


----------



## Larry Laffer (21 August 2008)

Beidendorfer schrieb:


> Aber mich hat einfach interessiert, warum es das Datenformat DT im Datenbaustein gibt und auch im OB, es aber keine direkte möglichkeit gibt diese zu verschieben oder kopieren, ohne sie vorher zerlegen oder bearbeiten zu müssen?


 
Das geht deshalb nicht, weil die SPS maximal Doppelworte direkt ansprechen kann. Das Datenformat DT ist ein zusammengesetzer Typ (wie z.B. auch STRING oder ARRAY).
Unter Berücksichtigung der Spielregeln kannst du diesen Typ aber sehr wohl in einen DB verschieben (z.B. Blockmove - SFC20 oder auch mit 2 x Doppelwort laden-transferieren - vorderes/hinteres DWORD).

Zerlegen würdest du diesen Typ, wenn dich Teil-Informationen daraus interessieren, die du irgendwie verarbeiten möchtest.

Gruß
LL


----------



## Blackhawk89 (19 Januar 2011)

Beidendorfer schrieb:


> HI
> Ich wollte eigendlich nur die Aktuelle Systemzeit in einen DB speichern,




Wenn ich nen SFC1 benutze wie schreib ich dann genau die werte in nen DB??? Kann mir vll mal jemand ein beispiel geben aber am besten in fup...mit awl kann ich irgendwie nichts anfangen

danke schonma auch wenn das erstelldatum des threads schon ne weile her ist


----------



## Paule (19 Januar 2011)

Blackhawk89 schrieb:


> Wenn ich nen SFC1 benutze wie schreib ich dann genau die werte in nen DB??? Kann mir vll mal jemand ein beispiel geben aber am besten in fup...mit awl kann ich irgendwie nichts anfangen
> 
> danke schonma auch wenn das erstelldatum des threads schon ne weile her ist


Das geht entweder mit dem SFC20 Blockmove oder du gibst direkt am SFC1 die DB-Adresse an, aber Symbolisch.
Sprich: Du legst im DB eine Variable an im Format "Date_and_Time" und das hängst du Symbolisch an den SFC1


----------



## Kai (19 Januar 2011)

Blackhawk89 schrieb:


> Wenn ich nen SFC1 benutze wie schreib ich dann genau die werte in nen DB??? Kann mir vll mal jemand ein beispiel geben aber am besten in fup...mit awl kann ich irgendwie nichts anfangen


 
Siehe das folgende Programmbeispiel für eine Schaltuhr:

http://www.sps-forum.de/showpost.php?p=214121&postcount=10

http://www.sps-forum.de/showpost.php?p=214122&postcount=11

Gruß Kai


----------



## vierlagig (19 Januar 2011)

Blackhawk89 schrieb:


> Wenn ich nen SFC1 benutze wie schreib ich dann genau die werte in nen DB??? Kann mir vll mal jemand ein beispiel geben aber am besten in fup...mit awl kann ich irgendwie nichts anfangen
> 
> danke schonma auch wenn das erstelldatum des threads schon ne weile her ist



http://tinyurl.com/4s2bdhl


----------



## vierlagig (19 Januar 2011)

20:37, 20:38, 20:38 ... guter schnitt


----------



## Nordischerjung (19 Januar 2011)

vierlagig schrieb:


> http://tinyurl.com/4s2bdhl


und ich war schon beim tippen *ACK*


----------



## Blackhawk89 (19 Januar 2011)

danke euch...werds morgen mal testen ansonsten meld ich mich morgen nochma ^^


----------



## Blackhawk89 (20 Januar 2011)

hey also habe es mal mit dem sfc1 verucht...aber es geht schon los dass ich den baustein gar nicht ins netzwerk bekomme...es steht immer da: "der baustein kann nicht plaziert werden"
was bedeutets das bzw was kann ich machen damit es geht???


----------



## HaDi (20 Januar 2011)

Gib doch einfach mal "Der Baustein kann nicht plaziert werden" hier ein, vielleicht hilft das ja weiter ...

Grüße von HaDi


----------



## Kai (20 Januar 2011)

Blackhawk89 schrieb:


> hey also habe es mal mit dem sfc1 verucht...aber es geht schon los dass ich den baustein gar nicht ins netzwerk bekomme...es steht immer da: "der baustein kann nicht plaziert werden"
> was bedeutets das bzw was kann ich machen damit es geht???


 
Du solltest den SFC1 READ_CLK aus folgender Bibliothek verwenden:

Bibliotheken / Standard Library / System Function Blocks / SFC1 READ_CLK

Gruß Kai


----------



## PN/DP (20 Januar 2011)

Bei SFC schreibe ich einfach in der AWL-Ansicht "CALL SFC1" und Enter und schwups ist der SFC von ganz allein im Bausteine-Ordner drin.

Harald


----------



## Nordischerjung (20 Januar 2011)

Blackhawk89 schrieb:


> hey also habe es mal mit dem sfc1 verucht...aber es geht schon los dass ich den baustein gar nicht ins netzwerk bekomme...es steht immer da: "der baustein kann nicht plaziert werden"
> was bedeutets das bzw was kann ich machen damit es geht???



Du musst auch vorher ins Programmierfeld klicken und nicht im Kommentarfeld oder so


----------



## Blackhawk89 (21 Januar 2011)

ok hab es nun hinbekommen dass ichd ei ezit auslesen kann

nun spalte ich das was ich in db geschreiben habe in tage (fc7) und uhrzeit auf (fc8)
mitm fc7 klappt alles io ...ich bekomme die tage als zahlen raus
beim fc8 bekomm ich in an meinem md20 raus: 16#03cc7d...usw
wie bekomm ich das hin das ich das als richtige uhrzeit rausbekomme (tod#17:10:02) was weiß ich


----------



## Verpolt (21 Januar 2011)

Hallo,

das sind Millisekunden


----------



## Blackhawk89 (21 Januar 2011)

na wie mach ich es dass es ich im beobachten modus bin (brille ) mir die richtige uhrzeit angezeigt wird???


----------



## Jochen Kühner (21 Januar 2011)

Das geht nicht, nur in einer Vartab, aber beim Baustein beobachten geht TOD als Format nicht!


----------



## Blackhawk89 (21 Januar 2011)

gut das wollt ich wissen

un noch was anderes...wie kann ich das also mein mw 20(tod) vergleichen dass wenn es ne bestimmte zeit hat ein ausgang gesetzt wird???


----------



## Kai (21 Januar 2011)

Siehe die folgenden Programmbeispiel für eine Schaltuhr in STEP 7 mit Schaltzeiten in TOD:

http://www.sps-forum.de/showpost.php?p=214121&postcount=10

http://www.sps-forum.de/showpost.php?p=93446&postcount=16

Gruß Kai


----------



## Blackhawk89 (22 Januar 2011)

kann ich nich auch einfach den wert den ich in der variablentabelle beobachten kann einfach auf nen bestimmten wert setzen un diesen dann wiederum verglkeichen???


----------

