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

Page 2 of 2 FirstFirst 12
Results 11 to 12 of 12

Thread: Date_and_Time vom OB auslesen

  1. #11
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Code:
    *
    FUNCTION FC 1710 : VOID
    TITLE =READ_CLK
    //Funktion zum Lesen und Speichern der Systemzeit im Merker- oder 
    //Datenbausteinbereich
    //Die Uhrzeit wird fortlaufend ab dem ersten Word am Eingang anyDateTime gespeichert
    //Jahr,Monat,Tag,Stunde,Minute,Sekunde,Millisekunde,Wochentag
    //
    //Aufrufbeispiel:
    //      CALL  FC     2
    //       anyDateTime   :=#OB1_DATE_TIME
    //       anyDestination:=DB1.DBW16
    //
    //DATE:     09.12.2008
    //AUTHOR:   4lagig
    //VERSION:  V0.1 BasicVer
    AUTHOR : '4lagig'
    FAMILY : ClockGF
    VERSION : 0.1
    
    VAR_INPUT
      anyDateTime : ANY ;    
      anyDestination : ANY ;    
    END_VAR
    VAR_TEMP
      dwTempAR1 : DWORD ;    
      dwTempAR2 : DWORD ;    
      xDB : BOOL ;    
      wDB : WORD ;    
      iLoop : INT ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    
          TAR1  #dwTempAR1; // adressregister
          TAR2  #dwTempAR2; // sichern
    
          L     0; // schleife
          T     #iLoop; // initialisieren
    
          L     P##anyDestination; // ziel prüfen
          LAR1  ; 
    
          L     W [AR1,P#4.0]; // ob DB
          L     0; 
          <>I   ; 
          SPBN  db2; 
          TAK   ; 
          T     #wDB; 
          SET   ; 
          =     #xDB; 
          SPA   ver; 
    db2:  CLR   ; 
          =     #xDB; // oder nicht
    
    ver:  L     D [AR1,P#6.0]; // speicherbereich aus ANY
          LAR1  ; // in AR1
    
          L     P##anyDateTime; // quelle
          LAR2  ; 
          L     D [AR2,P#6.0]; // adressieren
          LAR2  ; 
    
          U     #xDB; // wenn DB
          SPB   ver2; // die andere schleife nutzen
    
          L     6; 
    nex1: T     #iLoop; // jahr, monat, tag,
          L     B [AR2,P#0.0]; // stunden, minuten, sekunden
          BTI   ; // in integer wandeln
          T     W [AR1,P#0.0]; // und speichern
          +AR1  P#2.0; 
          +AR2  P#1.0; 
          L     #iLoop; 
          LOOP  nex1; 
    
          L     W [AR2,P#0.0]; // millisekunden
          SRW   4; // filtern
          BTI   ; 
          T     W [AR1,P#0.0]; // und speichern
    
          L     W [AR2,P#0.0]; // wochentag
          SLW   12; // filtern
          SRW   12; 
          BTI   ; 
          T     W [AR1,P#2.0]; // und speichern
    
          SPA   ver3; 
    
    ver2: AUF   DB [#wDB]; 
    
          L     6; 
    nex2: T     #iLoop; 
          L     B [AR2,P#0.0]; 
          BTI   ; 
          T     DBW [AR1,P#0.0]; 
          +AR1  P#2.0; 
          +AR2  P#1.0; 
          L     #iLoop; 
          LOOP  nex2; 
    
          L     W [AR2,P#0.0]; 
          SRW   4; 
          BTI   ; 
          T     DBW [AR1,P#0.0]; 
    
          L     W [AR2,P#0.0]; 
          SLW   12; 
          SRW   12; 
          BTI   ; 
          T     DBW [AR1,P#2.0]; 
    
    ver3: LAR1  #dwTempAR1; // adressregister zurückspeichern
          LAR2  #dwTempAR2; 
    
          SET   ; //EN0-handling
          SAVE  ; 
    END_FUNCTION
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  2. #12
    Join Date
    01.06.2008
    Posts
    1
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Quote Originally Posted by vierlagig View Post
    so sieht es aus, wenn man sich an Gebs vorgaben hält - danke dafür auch von mir.

    Code:
    *
          L     LW    18
          SRW   4
          BTI   
          T     &quot;Millisekunden&quot;
    
          L     LW    18
          SLW   12
          SRW   12
          BTI   
          T     &quot;Wochentag&quot;
    So hab ich´s gemacht mit Ausblenden
    Code:
     CALL SFC1
    RET_VAL:=MW10
    CDT:=#DATUM_UHRZEIT
    
    LAR1 P##DATUM_UHRZEIT
    ...
    
    L W#16#FFF0
    L W [AR1, P#6.0]
    UW
    T "Millisekunden"
    L B#16#F
    L B [AR1, P#7.0]
    UW
    T "Wochentag"
    PS: Sollte man nicht besser immer über den Pointer arbeiten, falls jemand von den Kollegen mal auf die pfiffige Idee kommt eine Variable dazwischen zu schieben?
    Gruß, Mike
    Last edited by MikeDO; 10.12.2008 at 22:46.

Similar Threads

  1. Replies: 0
    Last Post: 25.11.2015, 06:17
  2. Replies: 8
    Last Post: 22.04.2011, 22:58
  3. Aktuelle Position vom Schrittmotor auslesen
    By sharkal in forum Simatic
    Replies: 1
    Last Post: 13.09.2010, 09:21
  4. AS-Register vom externen Programm auslesen
    By Zoomy in forum Simatic
    Replies: 9
    Last Post: 10.12.2009, 21:10
  5. DB automatisch auslesen? abhägig vom MW-Zustand
    By Anonymous in forum Simatic
    Replies: 5
    Last Post: 27.09.2005, 09:55

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •