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

Seite 2 von 5 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 41

Thema: Uhrzeit synchronisieren -- Konvertierungsfehler

  1. #11
    MatthiasH24 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    02.09.2008
    Beiträge
    132
    Danke
    38
    Erhielt 6 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich wollte ihn noch schreiben

    habe mir aber überlegt das ich ihn doch hier anhängen werde.

    Also mein problem habe mit der Hilfe von Siemens ein kleines Programm geschrieben:

    Code:
        FP..
          CALL  "SET_CLK"
           PDT    :=#Datum_Uhrzeit
           RET_VAL:=MW20
          U     "Stellen"
          SPB   a
          BEA   
    a:    LAR1  P##Datum_Uhrzeit
          L     #Jahr
          T     B [AR1,P#0.0]
          L     #Monat
          T     B [AR1,P#1.0]
          L     #tag
          T     B [AR1,P#2.0]
          L     #Stunde
          T     B [AR1,P#3.0]
          L     #Minute
          T     B [AR1,P#4.0]
          L     #Sekunde
          T     B [AR1,P#5.0]
          L     #Wochentag
          T     B [AR1,P#7.0]
    
          BE
    das Fp wird noch programmiert.
    Die Eingabefelder sind auf eine WinCC seite getrennt von einander und in einem datenbaustein abgelegt. mit der größe von jeweils 1byte.

    Das Problem ist jetzt nur das wenn ich die varaiblen über VAT beobachte sehe ich das er die werte übernimmt nur die zeit wird nicht getstellt.

    Dazu habe ich 2 Vermutungen entweder das Programm stimmt nicht (wahrscheinlich ) oder kann es sein das dass mit dem SFC0 nur bei na richtigen angeschlossenen CPU geht im mom mache ich es nur über Baugruppen simulieren.

    Ne Idee?

  2. #12
    Registriert seit
    08.11.2006
    Ort
    Uckermark
    Beiträge
    903
    Danke
    201
    Erhielt 256 Danke für 208 Beiträge

    Standard

    Das Datenformat "Date and Time" ist BCD-Codiert, deshalb musst Du deine Eingaben vom Panel noch entsprechend wandeln.
    Den Wochentag brrauchst Du übrigens zum Uhrzeitstellen nicht berücksichtigen, den ermittelt die Steuerung mit Hilfe des integrierten Kalenders selbsttätig.
    Code:
    a:    LAR1  P##Datum_Uhrzeit
          L     #Jahr
          ITB
          T     B [AR1,P#0.0]
          L     #Monat
          ITB
          T     B [AR1,P#1.0]
          L     #tag
          ITB
          T     B [AR1,P#2.0]
          L     #Stunde
          ITB
          T     B [AR1,P#3.0]
          L     #Minute
          ITB
          T     B [AR1,P#4.0]
          L     #Sekunde
          ITB
          T     B [AR1,P#5.0]
    Neue Ideen begeistern jene am meisten, die auch mit den alten nichts anzufangen wussten.
    Karl Heinrich Waggerl (1897-1973)

  3. #13
    MatthiasH24 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    02.09.2008
    Beiträge
    132
    Danke
    38
    Erhielt 6 Danke für 6 Beiträge

    Standard

    ja gut also im moment habe ich die Eingabe Felder bei WinCc als hexa deklariert da brauche ich es ja nicht umwandlen. Es geht aber trotzdem net wirklich.

    Auf der Wincc seite benutze ich 2 Felder zur Ausgabe
    1.feld Ausgabe - Uhrzeit anzeigen - systemzeit anzeigen
    2.feld ausgabe - datum anzeigen - systemzeit anzeigen

    kann es sein das ich den SFC1 noch explizit beschrieben muss? Im mom sieht das nur so aus Code im Ob1

    Code:
     
          CALL  FC     1
           Jahr     :="Uhrzeit".Jahr
           Monat    :="Uhrzeit".Monat
           tag      :="Uhrzeit".Tag
           Stunde   :="Uhrzeit".Stunde
           Minute   :="Uhrzeit".Minuten
           Sekunde  :="Uhrzeit".Sekunde
           Wochentag:="Uhrzeit".Wochentag
          CALL  "READ_CLK"
           RET_VAL:=#t_RetVal
           CDT    :="Areapointer_Date_Time".DATE_TIME_OP.DATE_TIME
          NOP   0
     
          BEA
    CDT ist symbolisch programmiert und liegt im DB1
    Geändert von MatthiasH24 (27.10.2008 um 10:28 Uhr)

  4. #14
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.712
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    Hallo Matthias,
    ich versuche es nochmal :
    Wenn du von der CPU aus die Uhrzeit (oder das Datum) im Bediengerät stellen willst, so geht das nur über einen Steuerungsauftrag. Diesen legst du in der Projektierung der Visu fest. Er bezieht sich auf einen 8 Byte (4 Worte) großen Puffer in der SPS.

    Dieser Puffer ist dann so aufgebaut :
    Byte 0 : Reserviert
    Byte 1 : Jobnummer
    Byte 2 - 5 : Daten

    Wenn du dass Datum zum Bediengerät schreiben willst so ist die Zuordnung wie folgt :
    Byte 1 : 15
    Byte 5 : Tag
    Byte 6 : Monat
    Byte 7 : Jahr

    Wenn du die Uhrzeit zum Bediengerät schreiben willst so ist die Zuordnung wie folgt :
    Byte 1 : 14
    Byte 3 : Stunde
    Byte 4 : Minute
    Byte 5 : Sekunde

    Du kannst immer nur einen Auftrag absetzen.
    Das ein Auftrag abgesetzt ist und abgearbeitet wurde kannst du dabnn erkennen, dass das Bediengerät die Jobnummer wieder auf 0 gesetzt hat ...

    Vielleicht kommst du so etwas weiter.
    Gruß
    LL

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

    MatthiasH24 (27.10.2008)

  6. #15
    Registriert seit
    08.11.2006
    Ort
    Uckermark
    Beiträge
    903
    Danke
    201
    Erhielt 256 Danke für 208 Beiträge

    Standard

    Hier mal eine fix und fertige Funktion von mir.
    Allerdings sind die Uhrzeitvorgaben hier als 16-Bit Integer vorgesehen.
    Es funktioniert aber so wie es ist.
    Code:
    FUNCTION "set_sys_clk" : VOID
    TITLE =set_sys_clk
    //Baustein zum stellen der AG-Uhr nach der Systemzeit des Visualisierungs-PC
    AUTHOR : ne
    FAMILY : clock
    VERSION : 1.1
     
    VAR_INPUT
      jahr : INT ; 
      monat : INT ; 
      tag : INT ; 
      stunden : INT ; 
      minuten : INT ; 
      sekunden : INT ; 
    END_VAR
    VAR_IN_OUT
      set : BOOL ; 
    END_VAR
    VAR_TEMP
      zeit_v : DATE_AND_TIME ; //Zeitvorgabe
      zeit_s : DATE_AND_TIME ; //Systemzeit SPS
      rt_vl : INT ; 
      jahrxx : INT ; //Jahr 2-stellig
      AR1_sik : DWORD ; 
      AR2_sik : DWORD ; 
    END_VAR
    BEGIN
    NETWORK
    TITLE =Wenn #set 0 Baustein nicht bearbeiten
          UN    #set; 
          BEB   ; 
    NETWORK
    TITLE =Jahresangabe auf 2-stellig umrechnen
    //Baustein funktioniert nur bis 2099
          O(    ; 
          L     #jahr; 
          L     2099; 
          >I    ; 
          )     ; 
          O(    ; 
          L     #jahr; 
          L     1900; 
          <I    ; 
          )     ; 
          U(    ; 
          L     #jahr; 
          L     99; 
          >I    ; 
          )     ; 
          BEB   ; 
    //zweistellige Jahresangabe am Eingang
          L     #jahr; 
          L     100; 
          <I    ; 
          SPBN  sp01; 
          L     #jahr; 
          T     #jahrxx; 
          SPA   sp04; 
    //vierstellige Jahresangabe im 20. Jahrhundert 
    sp01: U(    ; 
          L     #jahr; 
          L     1900; 
          >=I   ; 
          )     ; 
          U(    ; 
          L     #jahr; 
          L     1999; 
          <=I   ; 
          )     ; 
          SPBN  sp02; 
          L     #jahr; 
          L     1900; 
          -I    ; 
          T     #jahrxx; 
          SPA   sp04; 
    //vierstellige Jahresangabe im 21. Jahrhundert 
    sp02: U(    ; 
          L     #jahr; 
          L     2000; 
          >=I   ; 
          )     ; 
          U(    ; 
          L     #jahr; 
          L     2099; 
          <=I   ; 
          )     ; 
          SPBN  sp04; 
          L     #jahr; 
          L     2000; 
          -I    ; 
          T     #jahrxx; 
    sp04: NOP   0; 
     
    NETWORK
    TITLE =Date_And_Time- Variable beschreiben
     
          TAR1  ; 
          T     #AR1_sik; 
          LAR1  P##zeit_v; 
          L     #jahrxx; 
          ITB   ; 
          T     B [AR1,P#0.0]; 
          L     #monat; 
          ITB   ; 
          T     B [AR1,P#1.0]; 
          L     #tag; 
          ITB   ; 
          T     B [AR1,P#2.0]; 
          L     #stunden; 
          ITB   ; 
          T     B [AR1,P#3.0]; 
          L     #minuten; 
          ITB   ; 
          T     B [AR1,P#4.0]; 
          L     #sekunden; 
          ITB   ; 
          T     B [AR1,P#5.0]; 
          L     B#16#0; 
          T     B [AR1,P#6.0]; 
          T     B [AR1,P#7.0]; 
     
    NETWORK
    TITLE =Systemuhr stellen
          CALL "SET_CLK" (
               PDT                      := #zeit_v,
               RET_VAL                  := #rt_vl);
    NETWORK
    TITLE =Systemuhr lesen
          CALL "READ_CLK" (
               RET_VAL                  := #rt_vl,
               CDT                      := #zeit_s);
     
    NETWORK
    TITLE =Neue Zeit prüfen und #set zurücksetzen 
    //Es werden nur Tag, Stunde, Minute und Sekunde geprüft
          TAR2  ; 
          T     #AR2_sik; 
          LAR2  P##zeit_s; 
          L     D [AR1,P#2.0]; 
          L     D [AR2,P#2.0]; 
          ==D   ; 
          R     #set; 
     
    NETWORK
    TITLE =Adressregister zurücksichern
          L     #AR1_sik; 
          LAR1  ; 
          L     #AR2_sik; 
          LAR2  ; 
     
    END_FUNCTION
    Neue Ideen begeistern jene am meisten, die auch mit den alten nichts anzufangen wussten.
    Karl Heinrich Waggerl (1897-1973)

  7. #16
    MatthiasH24 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    02.09.2008
    Beiträge
    132
    Danke
    38
    Erhielt 6 Danke für 6 Beiträge

    Standard

    hey

    ja das mit den Jobaufträgen ansich ist mir eigentlich soweit klar. Die sync mit dem panel geht ja auch. Ich will jetzt nur aktiv die Systemzeit der Cpu schreiben können. Dreht sich ganz einfach darum das die Kunde die Maschinen am Wochenende ausschalten will und dann Montags bei Beginn die Uhrzeit stellen soll/will. die CPu uhrzeit ist gepuffert klar aber es soll trotzdem die Möglichkeit geben die CPu neu stellen zu können.

  8. #17
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.712
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    ... dann machst du das Ganze eben umgekehrt.
    Hier läuft dann allerdíngs alles in der CPU. Im MP machst du die Eingaben, die in der SPS irgendwo im DB landen. Die übergebenen Werte mußt du nun in das Format Date_Time umwandeln und dann mit dem SFC1 die Systemuhr neu setzen. Das Ganze würde ich von einem Bit abhängig machen, dass du in der Visu setzt und in der CPU auswertest ...

    Dafür brauchst du dann keinen Steuerungsauftrag ...

  9. #18
    MatthiasH24 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    02.09.2008
    Beiträge
    132
    Danke
    38
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Ja so will ich es ja nur leider geht es mit dem programm was ich euch gezigt habe net.

    Frage zu read CLK im mom ist das wie folgt aufgebaut

    Aufruf:

    Code:
     CALL  "READ_CLK"
           RET_VAL:=#t_RetVal
           CDT    :="Areapointer_Date_Time".DATE_TIME_SPS.DATE_TIME
          NOP   0
    Datenbaustein:

    Code:
     STRUCT  
       DATE_TIME_SPS : STRUCT  
        DATE_TIME : DATE_AND_TIME ; 
        reserve : ARRAY  [0 .. 3 ] OF BYTE ; 
       END_STRUCT ; 
      END_STRUCT ; 
    BEGIN
       DATE_TIME_SPS.DATE_TIME := DT#90-1-1-0:0:0.000; 
       DATE_TIME_SPS.reserve[0] := B#16#0; 
       DATE_TIME_SPS.reserve[1] := B#16#0; 
       DATE_TIME_SPS.reserve[2] := B#16#0; 
       DATE_TIME_SPS.reserve[3] := B#16#0; 
    END_DATA_BLOCK
    @OHGN

    Danke für dein Programm aber sei mir nicht böse das werde ich nur als letzte möglichkeit verwenden anversich ist es ja so wie meins. Denn nur was ich selber gemahct habe habe ich auch verstanden. Brauche nur ein paar Tips.
    Geändert von MatthiasH24 (27.10.2008 um 11:06 Uhr)

  10. #19
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.712
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    Read_Clk ist korrekt aufgebaut ... aber den brauchst du doch dann nun nicht ... Der liest die CPU-Zeit in den Speicher ...

    Du willst doch von der Visu die SPS-Zeit setzen. Das wäre dann Set_Clk (SFC1).

  11. #20
    MatthiasH24 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    02.09.2008
    Beiträge
    132
    Danke
    38
    Erhielt 6 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ja und SET CLk ist so aufgebaut wie ich weiter oben gepostet habe. ich stecke jetzt grad mal ne echte sps an mal schauen was die dann macht.

Ähnliche Themen

  1. S7-1200 Datum und Uhrzeit synchronisieren
    Von zinke-berlin im Forum Simatic
    Antworten: 18
    Letzter Beitrag: 22.10.2012, 08:43
  2. HMI Panel Uhrzeit und Datum synchronisieren
    Von mueller-m im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 13.10.2011, 06:45
  3. Uhrzeit regelmäßig synchronisieren
    Von Beren im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 24.02.2010, 15:20
  4. Uhrzeit S5 <--> OP77 synchronisieren
    Von Jupp06 im Forum HMI
    Antworten: 2
    Letzter Beitrag: 06.01.2009, 12:54
  5. Uhrzeit synchronisieren
    Von prajos im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 23.03.2005, 12:27

Lesezeichen

Berechtigungen

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