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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 26

Thema: Uhrzeit vom Fremdsystem übernehmen

  1. #1
    Registriert seit
    04.04.2007
    Beiträge
    182
    Danke
    27
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen
    ich bekomme in mein Datenbaustein DB130 über den Ethernet die Zeit vom Leitsystem (Wago I/O). Das heisst ich habe DB130.DB0 bis DB130.DB5 wo das Datum und Uhrzeit eingetragen wird. Das SFC0 ist für das Setzen der CPU-Uhr. Wie muss ich jetzt das ausprogrammieren? Aber ich weiss noch nicht ob ich Byte überkomme, sehr wahrscheinlich bekomme ich Integerwerte für Jahr, Monat, Tag, Std. , Min, Sek.. Was muss ich tun, damit ich den DB130.DBW0 (Jahr) im Bereichszeiger angeben kann und den SFC0 benutzen kann? (Bereichszeiger P#DB131.DBX0.0 Byte 8 Struct: DATE_TIME für SFC0)

    Danke für Hilfe!
    Zitieren Zitieren Uhrzeit vom Fremdsystem übernehmen  

  2. #2
    Registriert seit
    22.05.2005
    Ort
    sonniges Maifeld
    Beiträge
    1.067
    Danke
    77
    Erhielt 205 Danke für 159 Beiträge

    Standard

    Hallo,

    hier ein kleines Beispiel. Wenn du in der Simatic-Hilfe nach Datentyp Date_and_Time suchst, findest du den genauen Aufbau.

    Code:
         
          L     Jahr
          ITB   
          T     LB     0
    
          L     Monat
          ITB   
          T     LB     1
    
          L     Tag
          ITB   
          T     LB     1
    
          L     Stunde
          ITB   
          T     LB     3
    
          L     Minute
          ITB   
          T     LB     4
    
          L     Sekunde
          ITB   
          T     LB     5
    
          CALL  SFC    0
           PDT    :=#Uhrzeit      // Date_and_time tmp ab L0.0
           RET_VAL:=#val
    "Man kann auf seinem Standpunkt stehen, aber man sollte nicht darauf sitzen" - Erich Kästner

  3. #3
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von Pinguino Beitrag anzeigen
    ich bekomme in mein Datenbaustein DB130 über den Ethernet die Zeit vom Leitsystem (Wago I/O). Das heisst ich habe DB130.DB0 bis DB130.DB5 wo das Datum und Uhrzeit eingetragen wird. Das SFC0 ist für das Setzen der CPU-Uhr. Wie muss ich jetzt das ausprogrammieren? Aber ich weiss noch nicht ob ich Byte überkomme, sehr wahrscheinlich bekomme ich Integerwerte für Jahr, Monat, Tag, Std. , Min, Sek.. Was muss ich tun, damit ich den DB130.DBW0 (Jahr) im Bereichszeiger angeben kann und den SFC0 benutzen kann? (Bereichszeiger P#DB131.DBX0.0 Byte 8 Struct: DATE_TIME für SFC0)
    Hier ist ein kurzes Programmbeispiel von mir. Ich bin davon ausgegangen, dass die Werte für Jahr, Monat, Tag, Stunde, Minute und Sekunden vom Leitsystem (WAGO) als INT-Werte kommen.

    Code:
    FUNCTION FC 100 : VOID
    TITLE =SPS-Uhr stellen
    //16
    AUTHOR : KAI
    FAMILY : SPSFORUM
    NAME : WAGO
    VERSION : 1.0
     
    VAR_INPUT
      WAGO_UHR : POINTER ; 
      SPS_UHR_STELLEN : BOOL ; 
    END_VAR
    VAR_TEMP
      DB_REGISTER : WORD ; 
      AR1_REGISTER : DWORD ; 
      AR2_REGISTER : DWORD ; 
      DB_NUMMER : WORD ; 
      SPS_UHR : DATE_AND_TIME ; 
      RETVAL : INT ; 
    END_VAR
    BEGIN
    NETWORK
    TITLE =DB-Register und AR-Register sichern
     
          L     DBNO; // DB-Register
          T     #DB_REGISTER; 
     
          TAR1  #AR1_REGISTER; // AR1-Register
     
          TAR2  #AR2_REGISTER; // AR2-Register
     
    NETWORK
    TITLE =WAGO-Uhr nach SPS-Uhr kopieren
     
          L     P##WAGO_UHR; // WAGO POINTER
          LAR1  ; 
     
          L     W [AR1,P#0.0]; // WAGO DB-Nummer
          T     #DB_NUMMER; 
     
          AUF   DB [#DB_NUMMER]; 
     
          L     D [AR1,P#2.0]; // WAGO Bereichszeiger
          LAR1  ; 
     
     
          L     P##SPS_UHR; // SPS POINTER
          LAR2  ; 
     
     
          L     B [AR1,P#0.0]; // WAGO Jahr
          ITB   ; 
          T     B [AR2,P#0.0]; // SPS Jahr
     
          L     B [AR1,P#1.0]; // WAGO Monat
          ITB   ; 
          T     B [AR2,P#1.0]; // SPS Monat
     
          L     B [AR1,P#2.0]; // WAGO Tag
          ITB   ; 
          T     B [AR2,P#2.0]; // SPS Tag
     
          L     B [AR1,P#3.0]; // WAGO Stunde
          ITB   ; 
          T     B [AR2,P#3.0]; // SPS Stunde
     
          L     B [AR1,P#4.0]; // WAGO Minute
          ITB   ; 
          T     B [AR2,P#4.0]; // SPS Minute
     
          L     B [AR1,P#5.0]; // WAGO Sekunde
          ITB   ; 
          T     B [AR2,P#5.0]; // SPS Sekunde
     
    NETWORK
    TITLE =SPS-Uhr stellen
     
          U     #SPS_UHR_STELLEN; 
          SPBNB _001; 
          CALL SFC    0 (
               PDT                      := #SPS_UHR,
               RET_VAL                  := #RETVAL);
    _001: NOP   0; 
     
    NETWORK
    TITLE =DB-Register und AR-Register wiederherstellen
     
          AUF   DB [#DB_REGISTER]; // DB-Register
     
          LAR1  #AR1_REGISTER; // AR1-Register
     
          LAR2  #AR2_REGISTER; // AR2-Register
     
    END_FUNCTION
    Gruß Kai
    Angehängte Dateien Angehängte Dateien

  4. #4
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Und hier sind ein paar Bilder aus der Simulation mit PLCSIM.

    Gruß Kai
    Angehängte Grafiken Angehängte Grafiken

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

    Pinguino (22.03.2008)

  6. #5
    Pinguino ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.04.2007
    Beiträge
    182
    Danke
    27
    Erhielt 0 Danke für 0 Beiträge

    Frage

    Ich habe noch eine Frage betreffend diesen Code:

    L Jahr
    ITB
    T LB 0

    Ist Jahr ein Integer wert, z.B. DB200.DW2?

  7. #6
    Registriert seit
    18.09.2004
    Ort
    Münsterland/NRW
    Beiträge
    4.721
    Danke
    729
    Erhielt 1.159 Danke für 970 Beiträge

    Standard

    Zitat Zitat von Pinguino Beitrag anzeigen
    Ich habe noch eine Frage betreffend diesen Code:

    L Jahr
    ITB
    T LB 0

    Ist Jahr ein Integer wert, z.B. DB200.DW2?
    ITB = Integer to BCD, also sollte Jahr im Format integer vorliegen

  8. #7
    Pinguino ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.04.2007
    Beiträge
    182
    Danke
    27
    Erhielt 0 Danke für 0 Beiträge

    Reden

    Ich habe jetzt den DB vom Fremdsystem definiert:

    DB150.DBW0 => Jahr
    DB150.DBW2 => Monat
    DB150.DBW4 => Tag
    DB150.DBW6 => Stunden
    DB150.DBW8 => Minuten
    DB150.DBW8 => Sekunden

    DB151 für Uhrzeit synchronisation :

    L DB150.DBW0 => Jahr
    ITB
    T DB151.DBB0 => Jahr in BCD

    L DB150.DBW2 => Monat
    ITB
    T DB151.DBB1 => Monat in BCD
    ...
    ...
    usw.

    und dann mit dem SFC0 (DB151) Uhrzeit CPU setzen.


    Funktioniert das??

    Merci für Hilfe

  9. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.780
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    Du mußt hier berücksichtigen, dass das Jahr auch nur von 0..99 zählt und zwar von 1990 an - 2008 wäre also 18 ...
    Der SFC0 erwartet hier auch nur 1 Byte, dass entsprechend beschaltet ist ...

    Gruß
    LL

  10. #9
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Du mußt hier berücksichtigen, dass das Jahr auch nur von 0..99 zählt und zwar von 1990 an - 2008 wäre also 18 ...
    Das ist so nicht ganz richtig.

    Wenn die SPS-Uhr auf das Jahr 2008 gestellt werden soll, muss folgendes gelten:

    DB150.DBW0 = INT 08 => DB151.DBB0 = BCD 08

    Gruß Kai

  11. #10
    Pinguino ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.04.2007
    Beiträge
    182
    Danke
    27
    Erhielt 0 Danke für 0 Beiträge

    Rotes Gesicht


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Kai Beitrag anzeigen
    Das ist so nicht ganz richtig.

    Wenn die SPS-Uhr auf das Jahr 2008 gestellt werden soll, muss folgendes gelten:

    DB150.DBW0 = INT 08 => DB151.DBB0 = BCD 08

    Gruß Kai

    Das heisst im DB150.DBW0 ist der INT Wert von 08 bis 89 oder den DB150.DBB1 ist den INT Wert 08 bis 89 wo dann mit
    Befehl ITB den DB151.DBB0 = BCD 08 abgelegt wird.

    Welchen von den zwei Varianten ist richtig (xxx.DBW0 oder xxx.DBB1)?
    Geändert von Pinguino (22.05.2008 um 13:05 Uhr) Grund: Es ist nicht DB150.DBB0 sondern DB150.DBB1 weil die Werte 00-89 im B1 agelegt sind

Ähnliche Themen

  1. Meldetexte aus DB übernehmen
    Von Knoll im Forum HMI
    Antworten: 2
    Letzter Beitrag: 14.05.2009, 11:37
  2. Fremdsystem auf DB zugreifen
    Von Pinguino im Forum Simatic
    Antworten: 18
    Letzter Beitrag: 08.06.2008, 19:59
  3. Antworten: 10
    Letzter Beitrag: 02.01.2008, 16:54
  4. CP342-5 an Fremdsystem (Foxboro)
    Von kipphase im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 12.12.2006, 13:51
  5. Antworten: 1
    Letzter Beitrag: 27.08.2005, 19:38

Lesezeichen

Berechtigungen

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