Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 7 von 7

Thema: S7 Date_Time Year als Integerwert

  1. #1
    Registriert seit
    03.09.2006
    Ort
    bei Ulm
    Beiträge
    210
    Danke
    82
    Erhielt 8 Danke für 8 Beiträge

    Standard


    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
    Zitieren Zitieren S7 Date_Time Year als Integerwert  

  2. #2
    Registriert seit
    01.03.2007
    Beiträge
    262
    Danke
    26
    Erhielt 33 Danke für 28 Beiträge

    Standard

    Zitat Zitat von Guste Beitrag anzeigen
    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!

    Zitat Zitat von Guste Beitrag anzeigen
    Gibt es irgendwo Bausteine die in S7 geschrieben sind.
    S7 ist keine Programmiersprache! Meinst du jetzt SCL, AWL, FUP, KOP?

    Zitat Zitat von Guste Beitrag anzeigen
    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!
    „Software wird schneller langsamer als Hardware schneller wird.“ - Niklaus Wirth (1995)

  3. Folgender Benutzer sagt Danke zu Human für den nützlichen Beitrag:

    Guste (10.07.2009)

  4. #3
    Registriert seit
    11.12.2007
    Beiträge
    189
    Danke
    54
    Erhielt 33 Danke für 32 Beiträge

    Standard

    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

  5. Folgender Benutzer sagt Danke zu Sven_HH für den nützlichen Beitrag:

    Guste (10.07.2009)

  6. #4
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    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

  7. #5
    Registriert seit
    03.11.2006
    Ort
    Niedersachsen
    Beiträge
    1.126
    Danke
    170
    Erhielt 303 Danke für 259 Beiträge

    Standard

    Zitat Zitat von borromeus Beitrag anzeigen
    Aber im OB1 ist nur die Startzeit der CPU, oder?
    Im OB1_DATE_TIME steht die Startzeit des OB1
    also immer die Zeit zu der ein neuer Zyklus beginnt.
    Gruß
    crash

    Ich bin nicht bekloppt,
    ich bin verhaltensoriginell!

  8. Folgender Benutzer sagt Danke zu crash für den nützlichen Beitrag:

    borromeus (10.07.2009)

  9. #6
    Registriert seit
    03.11.2006
    Ort
    Niedersachsen
    Beiträge
    1.126
    Danke
    170
    Erhielt 303 Danke für 259 Beiträge

    Standard

    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
    Gruß
    crash

    Ich bin nicht bekloppt,
    ich bin verhaltensoriginell!

  10. Folgender Benutzer sagt Danke zu crash für den nützlichen Beitrag:

    Guste (10.07.2009)

  11. #7
    Guste ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    03.09.2006
    Ort
    bei Ulm
    Beiträge
    210
    Danke
    82
    Erhielt 8 Danke für 8 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    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.

Ähnliche Themen

  1. Libnodave und Date_Time per VB.NET
    Von StefanK im Forum Hochsprachen - OPC
    Antworten: 4
    Letzter Beitrag: 23.10.2010, 00:13
  2. Date_Time Struktur
    Von Nerowinger84 im Forum HMI
    Antworten: 0
    Letzter Beitrag: 15.03.2010, 16:56
  3. S7-Graph: Ausgangsvariable mit Integerwert belegen
    Von spsfreak12345 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 28.12.2009, 14:43
  4. Day of year
    Von r00k1e im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 17.10.2008, 09:57
  5. Antworten: 5
    Letzter Beitrag: 09.07.2008, 16:05

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •