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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Funktion "daveSetPLCTimeToSystime" setzt falsches Datum

  1. #1
    Registriert seit
    24.04.2006
    Beiträge
    23
    Danke
    3
    Erhielt 2 Danke für 2 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Frohes neues Jahr an alle im Forum

    Habe seit ein paar Jahren eine Software, geschrieben mit Visualbasic 6.0, im Einsatz. Sie basiert auf Libnodave und liest Daten aus 5 CPUs (3x 317 DP/PN und 2x 319 DP/PN. Alles funkfionierte bis zum 1.1.2010 einwandfrei. Um die Uhren in den CPUs zu synconisieren benutze ich die Funktion "daveSetPLCTimeToSystime" (bei Abweichungen >5s). Seit dem 1.1.2010 setzt die Funktion das Jahr der CPUs auf 2000 statt auf 2010. Habe die aktuelle Libnodave drauf (0.8.4.5). Ist das Problem bekannt und gibt es evtl. eine Lösung?

    Gruß Buster
    Zitieren Zitieren Funktion "daveSetPLCTimeToSystime" setzt falsches Datum  

  2. #2
    Registriert seit
    05.10.2005
    Beiträge
    2.373
    Danke
    321
    Erhielt 296 Danke für 266 Beiträge

    Standard

    Bist du dir sicher, das du alle Stellen der Jahreszahl mit deinem Programm verarbeitest und nicht nur die letzte?Was passiert bei 1999 und vorher?
    Thomas

  3. #3
    Buster ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.04.2006
    Beiträge
    23
    Danke
    3
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Hallo thomass5,

    die Funktion "daveSetPLCTimeToSystime" hat keine Parameter und setzt die
    SPS-Uhr auf die Systemzeit des Servers. Deshalb brauche ich nichts verarbeiten. Die Systemzeit des Servers ist ok (2010).

    Gruß Buster
    Zitieren Zitieren Keine Verarbeitung notwendig  

  4. #4
    Registriert seit
    29.03.2004
    Beiträge
    5.741
    Danke
    143
    Erhielt 1.687 Danke für 1.226 Beiträge

    Standard

    Oh, ich habe mich heute noch mit jemanden über die ganzen Jahr 2010 Bugs unterhalten.
    Libnodave ist davon wohl auch betroffen.

    Das Problem liegt in der fehlerhaften BCD Kodierung der Jahreszahl.

    Einen Fehler darin habe ich letztens schon bemerkt, siehe hier:
    http://www.sps-forum.de/showthread.php?t=28848

    Das 19. Jahrhundert ist aber nicht das Problem hier, sondern der Modulo Operator.
    Um beide Probleme zu beheben kann man die nodave.c folgendermaßen korrigieren:
    Ab Zeile 5722 mal als diff
    Code:
    5722c5722,5728
    <     ts[2]=daveToBCD(t1.wYear % 10);
    ---
    >     if (t1.wYear > 2000) {
    >               ts[1]=daveToBCD(20);
    >               ts[2]=daveToBCD((t1.wYear - 2000));
    >       } else {
    >               ts[1]=daveToBCD(19);
    >               ts[2]=daveToBCD((t1.wYear - 1900));
    >       }
    Zottel sagt ja, ab 2038 ist mit S7 sowieso schluss

    Der Linux Part ist ebenso davon betroffen.
    Übrigens ist so ein BCD-Fehler auch der Grund gewesen warum Anfang 2010 einige EC-Karten nicht mehr funktionierten:
    http://www.heise.de/newsticker/meldu...er-895187.html

    Gruß

  5. #5
    Buster ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.04.2006
    Beiträge
    23
    Danke
    3
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Danke für die Info Thomas V2.1, hatte mir schon so was gedacht.Generell schein die Computerwelt ein Problem bei der Berechnung vom Datum zu haben. 2000...2010 was kommt noch?
    Habe leider keine Erfahrung mit C und der Compilierung, kann das Problem
    ohne Hilfe nicht beheben. Trotzdem Danke

    Gruß Buster

  6. #6
    Buster ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.04.2006
    Beiträge
    23
    Danke
    3
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Ist evtl. eine neue Version von Libnodave geplant die den Fehler korrigiert?

    Gruß Buster
    Zitieren Zitieren Neue Version LibNoDave?  

  7. #7
    Registriert seit
    29.03.2004
    Beiträge
    5.741
    Danke
    143
    Erhielt 1.687 Danke für 1.226 Beiträge

    Standard

    Zitat Zitat von Buster Beitrag anzeigen
    Ist evtl. eine neue Version von Libnodave geplant die den Fehler korrigiert?
    Im Bugtracker von libnodave steht es drin, von den Admins hat da aber noch keiner was zu geschrieben.

    Was brauchst du denn, nur die dll? Die kann ich dir übersetzen und zukommen lassen.

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

    Buster (16.01.2010)

  9. #8
    Buster ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.04.2006
    Beiträge
    23
    Danke
    3
    Erhielt 2 Danke für 2 Beiträge

    Lächeln

    Ja brauche nur die DLL. Wäre wirklich klasse wenn Du sie mir übersetzen könntest und zukommen lassen würdest. Würde mir sehr helfen, da ich in Kürze die Software im Ausland benötige. Da es um die Protokollierung von Vorgängen geht, ist die richtige SPS-Zeit wichtig für mich. Die SPS protokolliert in DB und meine Software liest über Libnodave die Protokolle aus. Ausserdem über wacht sie die SPS-Zeit und stellt sie auch.

    Danke im Vorraus für Deine Hilfe

    Gruß Buster
    Zitieren Zitieren Nur DLL  

  10. #9
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Code:
    5722c5722,5728
    <     ts[2]=daveToBCD(t1.wYear % 10);
    ---
    >     if (t1.wYear > 2000) {
    >               ts[1]=daveToBCD(20);
    >               ts[2]=daveToBCD((t1.wYear - 2000));
    >       } else {
    >               ts[1]=daveToBCD(19);
    >               ts[2]=daveToBCD((t1.wYear - 1900));
    >       }
    Ich glaube, über ts[1] (19 oder 20) haben wir schon mal gesprochen. Ergebnis meiner Versuche war, daß die CPU das Jahrhundert ignoriert, wenn ich mich richtig erinnere.
    Den Fehler mit %10 bedaure ich.
    Meiner Ansicht nach sollte es
    Code:
    ts[2]=daveToBCD(t1.wYear % 100);
    heißen.

  11. #10
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Anbei die korrigierte DLL.
    Angehängte Dateien Angehängte Dateien

  12. Folgende 3 Benutzer sagen Danke zu Zottel für den nützlichen Beitrag:

    AirKlaus (17.01.2010),Buster (18.01.2010)

Ähnliche Themen

  1. Funktion "RIGHT" setzt CPU in STOPP
    Von Bensen83 im Forum Simatic
    Antworten: 32
    Letzter Beitrag: 28.04.2011, 21:30
  2. Funktion "Global suchen"? (in allen FBs, DBs, ...)
    Von SPSstudent im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 11.01.2010, 08:52
  3. Antworten: 0
    Letzter Beitrag: 24.04.2007, 13:53
  4. integrierte Funktion "Positionieren" Siemens CPU 3
    Von Anonymous im Forum Feldbusse
    Antworten: 1
    Letzter Beitrag: 18.11.2005, 17:09
  5. Antworten: 0
    Letzter Beitrag: 17.11.2005, 19:38

Stichworte

Lesezeichen

Berechtigungen

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