Uhrzeit synchronisieren -- Konvertierungsfehler

Zuviel Werbung?
-> Hier kostenlos registrieren
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.
Keine Ursache....
Ich hatte das ja auch nur als Beispiel gepostet, damit Du es Dir ansehen kannst und dabei verstehst wie das generell funktioniert.:rolleyes:

PS. Wenn Du Deinen Programmteil irgendwann mal fertig hast bin ich mir sicher, dass sich das ganze nicht wesentlich von meinem Beispiel unterscheiden wird, der Lösungsweg ist doch ziemlich eng durch das System vorgegeben.
 
So ich bin noch am probieren mit der SPS wenn sich was neues ergibt melde ich mich wieder

Update die tatsächliche SPS geht in stop wenn ich das stellen starten will. bei Diagnosepuffer meldet sie:


Baugruppenträger: 0
Steckplatz: 2
Ereignis 1 von 100: Ereignis-ID 16# 4562
STOP durch Programmierfehler (OB nicht geladen oder nicht möglich, bzw. kein FRB vorhanden )
Unterbrechungstelle im Anwenderprogramm: Zyklisches Programm (OB 1)
Prioritätsklasse: 1
FC-Nummer: 1
Bausteinadresse: 18
Bisheriger Betriebszustand: RUN
Angeforderter Betriebszustand: STOP (intern)
interner Fehler, kommendes Ereignis
14:07:42.520 16.09.2008

Ereignis 2 von 100: Ereignis-ID 16# 2525
Bereichsfehler beim Schreiben
Falsche Bereichskennung: 86
Angeforderter OB: Programmierfehler-OB (OB 121)
OB nicht vorhanden oder gesperrt oder nicht startbar im aktuellen Betriebszustand
interner Fehler, kommendes Ereignis
14:07:42.520 16.09.2008

und wenn ich auf bausteinöffnen gehe dann

Code:
      U     "Stellen"
      SPB   a
      BEA   
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]
//      L     #Wochentag
//    ITB   
//  T     B [AR1,P#7.0]
      CALL  "SET_CLK"
       PDT    :=#Datum_Uhrzeit
       RET_VAL:=MW20

      BE

dann steht der Cursor bei Anweisung 6 im netzwerk1
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Also bei mir funktioniert der Code von MatthiasH24 so wie er oben gepostet wurde, auch mit den Hexzahlen als Vorgabe.
Kann da keinen Fehler feststellen, es geht auch nichts in "Stopp":confused:
 
Also die CPu geht aufjedenfall in Stop wegem dem Transferieren habe das mit dem jahr jetzt mal ausgeblendet und nur ist es beim Monta stehen geblieben.

Also soll ich jetzt das eingabe feld in Wincc als dezimal deklarieren. die Größe der jeweiligen speicher also jahr monat usw ist ja 1byte groß und dann mittels ITb wandeln!?
 
Also bei mir funktioniert der Code von MatthiasH24 so wie er oben gepostet wurde, auch mit den Hexzahlen als Vorgabe.
Kann da keinen Fehler feststellen, es geht auch nichts in "Stopp":confused:

das einzige was mir dazu einfällt ist... ich denke ja auch die ganze zeit das dass vom code hergehen muss. meine CPU Ist eine CPU315 2DP 315-2AF02-0AB0

nochmal die fehlerliste.
Code:
Diagnosepuffer der Baugruppe CPU 315-2 DP
Bestell-Nr./ Bezeichn.         Komponente                     Ausgabestand                  
6ES7 315-2AF02-0AB0            - - -                          3                             
Baugruppenträger:              0
Steckplatz:                    2
Ereignis 1 von 100:  Ereignis-ID 16# 4562
STOP durch Programmierfehler (OB nicht geladen oder nicht möglich, bzw. kein FRB vorhanden ) 
Unterbrechungstelle im Anwenderprogramm: Zyklisches Programm (OB 1) 
Prioritätsklasse:    1
FC-Nummer:     1
Bausteinadresse:     18 
Bisheriger Betriebszustand: RUN
Angeforderter Betriebszustand: STOP (intern)
interner Fehler, kommendes Ereignis
15:09:42.160  16.09.2008

Ereignis 2 von 100:  Ereignis-ID 16# 2525
Bereichsfehler beim Schreiben 
Falsche Bereichskennung:   86
Angeforderter OB: Programmierfehler-OB (OB 121)
OB nicht vorhanden oder gesperrt oder nicht startbar im aktuellen Betriebszustand
interner Fehler, kommendes Ereignis
15:09:42.159  16.09.2008

Ereignis 3 von 100:  Ereignis-ID 16# 4302
Betriebszustandsübergang von ANLAUF nach RUN 
Anlaufinformation:
- Uhr für Zeitstempel bei letztem NETZ-EIN nicht gepuffert
- Einprozessorbetrieb
Aktuelle/letzte durchgeführte Anlaufart:
- Neustart (Warmstart) durch MPI-Bedienung; letzter NETZ-EIN gepuffert
Zulässigkeit bestimmter Anlaufarten:
- manueller Neustart (Warmstart) zulässig
- automatischer Neustart (Warmstart) zulässig
Letzte gültige Bedienung oder Einstellung der automatischen Anlaufart bei NETZ-EIN:
- Neustart (Warmstart) durch MPI-Bedienung; letzter NETZ-EIN gepuffert 
Bisheriger Betriebszustand: ANLAUF (Neustart/Warmstart) 
Angeforderter Betriebszustand: RUN
kommendes Ereignis
15:06:11.554  16.09.2008

kann euch auch wenn ihr wollt mein komplettes Projekt schicken. hat im mom noch keine vertrauliche daten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ja das habe ich ja alles schon geschrieben die #jahr usw stehen in einem datenbaustein drin und sind wie laut siemens hilfe 1byte groß. Was hast denn du gemacht das es bei dir geht?

Also ich bin langsam echt am verzweifeln das ist ja eigentlich so ein billiegs programm und es will net laufen. kann ich eigentlich IBT auch bei nur 1 byte großen variablen verwenden?
 
Zuletzt bearbeitet:
ja das habe ich ja alles schon geschrieben die #jahr usw stehen in einem datenbaustein drin und sind wie laut siemens hilfe 1byte groß. Was hast denn du gemacht das es bei dir geht?
Die Variable kannst Du doch mit #jahr garnicht so aufrufen wenn sie in einem Datenbaustein steht...:confused: (IDB mal ausgenommen).
Ich habe zum Testen Deines Codes der Einfachheit halber Deine Variablen durch Merkerbytes ersetzt, ansonsten aber nichts verändert.
So wie hier habe ich das ganze in die CPU geladen und es funktioniert:
Code:
      U     M      0.0                  //stellen
      SPB   a
      BEA   
a:    LAR1  P##Datum_Uhrzeit
      L     MB    10                    //Jahr
// ITB   
      T     B [AR1,P#0.0]
      L     MB    11                    //Monat
// ITB   
      T     B [AR1,P#1.0]
      L     MB    12                    //Tag
//ITB   
      T     B [AR1,P#2.0]
      L     MB    13                    //Stunde
//ITB   
      T     B [AR1,P#3.0]
      L     MB    14                    //Minute
//ITB   
      T     B [AR1,P#4.0]
      L     MB    15                    //Sekunde
//ITB   
      T     B [AR1,P#5.0]
//      L     #Wochentag
//    ITB   
//  T     B [AR1,P#7.0]
      CALL  "SET_CLK"
       PDT    :=#Datum_Uhrzeit
       RET_VAL:=MW20
      BE
 
Ich übergebe die variablen doch im OB1 wie hier

Übergabe:

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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also doch IN's (stoßseufz):ROFLMAO:
Aber ehrlich, da muss ich jetzt passen! Ich habe keine Idee mehr warum das bei Dir nicht funktioniert...:-(

Edit:
Zum testen könntest Du allerdings mal probieren auf Deine Variable #Datum_Uhrzeit absolut zuzugreifen, das ist zwar nicht gern gesehen, aber wenn's der Fehlerfindung dient...:cool:

Code:
      U     "Stellen"
      SPB   a
      BEA   
a:    L     #Jahr
      T     LB     0                    //Vorrausgesetzt #Datum_Uhrzeit liegt auf Lokaldatenadresse 0
      L     #Monat
      T     LB     1
      L     #tag
      T     LB     2
      L     #Stunde
      T     LB     3
      L     #Minute
      T     LB     4
      L     #Sekunde
      T     LB     5
      CALL  "SET_CLK"
       PDT    :=#Datum_Uhrzeit
       RET_VAL:=MW20
      BE
 
Zuletzt bearbeitet:
Hi

so jetzt darf ich euch endlich mitteilen das es geht. Ich weiß nicht ob es das problem war aber im Simatic Manager -> Zielsystem -> Diagnose/Einstellungen -> uhrzeit stellen -> war ein haken gesetzt bei Uhrzeit von PG/PC übernehmen das habe ich raus gemacht und es ging.

Hier mal mein Code für die, die es auch gebrauchen können.:

Aufjedenfall ein großes Dankeschön an euch beide für eure Hilfe

Funnktionsbaustein:
Code:
     CALL  "READ_CLK"
       RET_VAL:=MW22
       CDT    :="Areapointer_Date_Time".DATE_TIME_SPS.DATE_TIME
 
      FP    "Stellen"
      SPB   a
      BEA   
a:    LAR1  P##Datum_uhrzeit
      L     "Uhrzeit".Jahr
      ITB   
      T     B [AR1,P#0.0]
      L     "Uhrzeit".Monat
      ITB   
      T     B [AR1,P#1.0]
      L     "Uhrzeit".Tag
      ITB   
      T     B [AR1,P#2.0]
      L     "Uhrzeit".Stunde
      ITB   
      T     B [AR1,P#3.0]
      L     "Uhrzeit".Minuten
      ITB   
      T     B [AR1,P#4.0]
      L     "Uhrzeit".Sekunde
      ITB   
      T     B [AR1,P#5.0]
 
      CALL  "SET_CLK"
       PDT    :=#Datum_uhrzeit
       RET_VAL:=MW20
 
      BE

Im OB1 steht nur
Code:
Call FB3,db7

Dazu habe ich noch mit einen DB einen bereichszeiger erstellt.

DB:

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
 
Schön dass es jetzt funktioniert.:)
Was mich persönlich aber stören würde ist die mangelnde Kapselung Deines Bausteins. Und warum muss das bei Dir unbedingt ein FB sein?:confused:
Eine FC erfüllt das IMHO genauso gut!

Jetzt, nachdem Du ja selber auf eine funktionierende Lösung gekommen bist solltest Du Dir ja vielleicht doch mal die Variante von mir näher anschauen....
https://www.sps-forum.de/showpost.php?p=163065&postcount=15
 
Zurück
Oben