S7 Date_Time Year als Integerwert

Guste

Level-1
Beiträge
338
Reaktionspunkte
16
Zuviel Werbung?
-> Hier kostenlos registrieren
Oscat S7 FC,s
Im Oscat gibt es die nützlichen FB,s die z.B. aus Dat_Time den Monat oder Tag rausholen.
Nur sind die in SCL geschrieben.
Die kann ich somit im S7 nicht umbenennen.
Gibt es irgendwo Bausteine die in S7 geschrieben sind.
Z.B. Aus Date-Time das Jahr / Monat /Tag /usw. als Integer rausholen
 
Nur sind die in SCL geschrieben.
Die kann ich somit im S7 nicht umbenennen.
Warum nicht? wenn sie in deinem Projekt-Ordner liegen:

Anklicken, F2, neuen Namen eintragen! ;)

Gibt es irgendwo Bausteine die in S7 geschrieben sind.

S7 ist keine Programmiersprache! Meinst du jetzt SCL, AWL, FUP, KOP?

Z.B. Aus Date-Time das Jahr / Monat /Tag /usw. als Integer rausholen

Wenn ich mal meine Glaskugel heraushole nehme ich an, dass du den Datentyp DATE_AND_TIME meinst. Der ist relativ einfach zu zerlegen:
Zuerst machst du mal die Hilfe von Step7 auf, dort gibt es eine Rubrik, die sich Datentypen nennt.
Dort findest du auch den DATE_AND_TIME.
Der DATE_AND_TIME ist BCD-codiert.
Wenn du jetzt den Tag willst lädst du das X. (hab gerade kein S7 zur Hand) Byte in deinen Akku, dann BTI (BCD in Integer wandeln) und schon hast du den Tag!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab´s mal irgendwo hier im Forun gelesen...

Code:
*
Die Standartdeklaration von Siemens im OB 1:
OB1_DATE_TIME Adresse:12.0
 
Das ist der Code dafür:
L LB 12 //Jahr
BTI
+2000 
T "Jahr"
 
L LB 13 //Monat
BTI 
T "Monat"
 
L LB 14 //Tag
BTI 
T "Tag"

so sollte es klappen.

Gruß
Sven_HH
 
Aber im OB1 ist nur die Startzeit der CPU, oder?

Geht aber so ähnlich mit:
1) ein FC mit Temp-Deklaration Date_Time
2) call "Systemzeit" auslesen Ausgabewert in die Temp-Deklaration
3) weiter wie Vorschreiber.

lG
Karl
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hier ist ein FC dafür...

Code:
FUNCTION FC200 : VOID
TITLE =Extrahiert Datum und Uhrzeit aus den Startinformationen des OB1
VERSION : 0.1


VAR_INPUT
  OB1_LD12 : DWORD ;    //OB1 Date/Time Teil 1 (4 Bytes)
  OB1_LD16 : DWORD ;    //OB1 Date/Time Teil 2  (4 Bytes)
END_VAR
VAR_OUTPUT
  Jahr : INT ;    
  Monat : INT ;    
  Tag : INT ;    
  Stunde : INT ;    
  Minute : INT ;    
  Sekunde : INT ;    
  Millisekunde : INT ;    
  Wochentag : INT ;    //1=So 2=Mo 3=Di 4=Mi 5=Do 6=Fr 7=Sa
END_VAR
BEGIN
NETWORK
TITLE =


      L     #OB1_LD12; // lade Teil 1 von OB1 Date/Time
      SRD   24; // verschieben
      BTI   ; // umwandeln BCD --> INT
      T     #Jahr; 


      L     #OB1_LD12; // lade Teil 1 von OB1 Date/Time
      L     DW#16#FF0000; // andere bits ausmaskieren
      UD    ; 
      SRD   16; // verschieben
      BTI   ; // umwandeln BCD --> INT
      T     #Monat; 


      L     #OB1_LD12; // lade Teil 1 von OB1 Date/Time
      L     DW#16#FF00; // andere bits ausmaskieren
      UD    ; 
      SRD   8; // verschieben
      BTI   ; // umwandeln BCD --> INT
      T     #Tag; 


      L     #OB1_LD12; // lade Teil 1 von OB1 Date/Time
      L     DW#16#FF; // andere bits ausmaskieren
      UD    ; 
      BTI   ; // umwandeln BCD --> INT
      T     #Stunde; 


      L     #OB1_LD16; // lade Teil 2 von OB1 Date/Time
      SRD   24; // verschieben
      BTI   ; // umwandeln BCD --> INT
      T     #Minute; 


      L     #OB1_LD16; // lade Teil 2 von OB1 Date/Time
      L     DW#16#FF0000; // andere bits ausmaskieren
      UD    ; 
      SRD   16; // verschieben
      BTI   ; // umwandeln BCD --> INT
      T     #Sekunde; 

      L     #OB1_LD16; // lade Teil 2 von OB1 Date/Time
      L     DW#16#FFF0; // andere bits ausmaskieren
      UD    ; 
      SRD   4; // verschieben
      BTI   ; // umwandeln BCD --> INT
      T     #Millisekunde; 


      L     #OB1_LD16; // lade Teil 2 von OB1 Date/Time
      L     DW#16#F; // andere bits ausmaskieren
      UD    ; 
      BTI   ; // umwandeln BCD --> INT
      T     #Wochentag; 


END_FUNCTION
 
Danke an alle. Hab das nun kapiert.
Ist doch einfacher als gedacht.
Kann ja nun die 4 Byte Monat / Tag / Std. / Min. die ich brauch rausziehen und als Doppelwort ablegen.
 
Zurück
Oben