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

Ergebnis 1 bis 4 von 4

Thema: S7-200; gezählte Sekunden als hh:mm ausgeben...

  1. #1
    Registriert seit
    25.08.2003
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Unglücklich


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Servus an alle, die bei dieser Hitze trotzdem vor der Kiste sitzen (müssen)...

    Ich bin leider nicht sonderlich bewandert, was die Programmierung anbelangt, aber eine so simple Routine hätte ich mir schon zugetraut - was scheinbar sehr überheblich war.

    Problem:
    Auf einer S7-226, programmiert mit Step 7-Micro/WIN, V 4.0.0.81 zähle ich für bestimmte Zustände die Dauer dieser Ereignisse in Sekunden mit.

    In einem Unterprogramm sollen diese Sekunden für die Ausgabe in Stunden und Minuten umgewandelt werden. Hier meine Lösung für das Unterprogramm:

    Code:
    Network 1
    LD     SM0.0
    MOVR   LD0, LD8
    /R     3600.0, LD8
    TRUNC  LD8, AC1
    DTI    AC1, LW4
    
    Network 2 
    LD     SM0.0
    DTR    AC1, AC1
    MOVR   LD8, AC2
    -R     AC1, AC2                    //Std. als Real mit Nachkomma minus Ganzzahl
    *R     60.0, AC2                   //Umrechnung in Minuten
    ROUND  AC2, AC2
    DTI    AC2, LW6
    wobei LD0 die Eingangsvariable in Sekunden ist, LW4 und LW6 die Ausgabevariablen und LD8 eine temporäre Variable.


    Im Prinzip funktioniert das auch alles wunderbar, ABER:
    ab ca. 4.460 Stunden (also ca. 16.800.000 Sek) hat mein Tag plötzlich 48 Stunden, d. h. war Ereignis XY für 3 Stunden angestanden, werden 6 Stunden ausgegeben....

    Nach Rücksetzen der Stundenzähler läuft wieder alles bestens - bis wieder über 4.460 Stunden zusammenkommen...

    Kann mir jemand auf die Sprünge helfen???

    Vielen Dank schon jetzt

    Gruß
    Servus
    Zitieren Zitieren S7-200; gezählte Sekunden als hh:mm ausgeben...  

  2. #2
    Servus_1 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    25.08.2003
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Frage

    Guten Morgen Gemeinde,

    nach vielen "Trys and Errors" hab' ich jetzt das Problem scheinbar behoben, aber ich versteh's nicht...
    Vielleicht erklärt's mir jemand???

    Der "Fehler" lag nicht im Unterprogramm sondern scheinbar beim Aufaddieren der Sekunden. Der Quellcode sah so aus:

    Code:
    Network 1 
    // div andere Netzwerke
    
    Network 2 
    LD     SM0.5
    EU
    =      M1.0
    
    Network 3 
    // div andere Netzwerke
    
    Network 4  //nur im Sekundentakt auslesen
    LDN    M1.0
    JMP    1
    
    Network 5  //alle Sekunden 1 dazuzählen
    LD     SM0.0
    +R     1.0, VD1000
    
    Network 6 
    // div andere Netzwerke
    
    Network 7 
    LBL    1
    
    Network 8  //VD1000 (Sekunden) umwandeln ins hh:mm
    //Unterproggi siehe vorheriges posting
    
    CALL   SBR1, VD1000, VW100, VW120
    
    // wobei VW100 und VW120 die Ausgangsvariablen des Unterprogramms sind,
    // eben die Zeit in Stunden und Minuten
    
    Network 9 
    // div andere Netzwerke
    Wie gesagt, das hat gut funktioniert bis ca. 16.800.000 Sekunden aufgelaufen waren, dann wurde jede Sekunde 2 Sekunden dazuaddiert.

    Das Problem gelöst habe ich mittlerweile durch Änderung von Netzwerk 5:

    Code:
    Network 5  //alle Sekunden 1 dazuzählen
    LD     SM0.0
    INCD  VD1000
    und Änderung der Eingangsvariablen im SBR von Real auf DW und Änderung in Netzwerk1:

    Code:
    LD SM0.0
    DTR LD0, LD8   //vorher: MOVR   LD0, LD8

    So, ich bin ja froh, dass die SPS jetzt brav zählt, auch wenn die Anzahl an Sekunden größer wird,
    ABER:
    ich weiß nicht, weshalb es vorher nicht gefunzt hat!!!

    Falls mir da jemand Nachhilfe geben könnte, wäre ich froh!

    Viele Grüße
    Servus
    Zitieren Zitieren bitte um Erklärung  

  3. #3
    Registriert seit
    17.09.2003
    Ort
    Zell bei Dietfurt a.d. Altmühl
    Beiträge
    358
    Danke
    8
    Erhielt 27 Danke für 25 Beiträge

    Standard

    Hallo Servus_1.

    Habe mir dein Programm mal angeschaut weshalb bei 16.800.000 sek. immer plus 2 oder mehr gezählt wird. Das liegt an den Exponenten der Realzahlen, da du eine Exponente mit 7 stellen hast (16.800.000) und eine mit 1 stelle (1.0). Bei Realzahlen wird aber nur mit einer Genauigkeit von 6 Stellen gerrechtnet. Als Erklärung hängt ein Siemens FAQ bei. Des weitere ist mir noch augefallen, dass du schon nach 30 sek. eine Mintute hast. Ist das so gewollt?
    Dein Code.
    Code:
    Network 2
    LD     SM0.0
    DTR    AC1, AC1
    MOVR   LD8, AC2
    -R     AC1, AC2                    //Std. als Real mit Nachkomma minus Ganzzahl
    *R     60.0, AC2                   //Umrechnung in Minuten
    ROUND  AC2, AC2 // Runde Realzahl
    DTI    AC2, LW6
    Mein Code
    Code:
    Network 2
    LD     SM0.0
    DTR    AC1, AC1
    MOVR   LD8, AC2
    -R     AC1, AC2                    //Std. als Real mit Nachkomma minus Ganzzahl
    *R     60.0, AC2                   //Umrechnung in Minuten
    TRUNC AC2, AC2 // Abschneiden Realzahl
    DTI    AC2, LW6
    Bei meinem Code werden erste nach 59 Sekunden 1 Minute Betriebszeit ausgegeben.

    Ich hoffe ich konnte dir etwas weiterhelfen.
    Angehängte Dateien Angehängte Dateien
    MfG

    Hubert

    \"Never change a running system. \"

  4. #4
    Servus_1 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    25.08.2003
    Beiträge
    4
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Daumen hoch


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ...oder auch nicht so ganz *gg*

    Vielen Dank Hubert für die Aufklärung und die Siemens FAQ.

    Versteh' zwar trotzdem nicht, weshalb es dann ausgerechnet ab 16.800.000 Sek. Probleme gab (=1,680000 Exp , denn bereits ab 10 Mio ist ja dann die letzte Stelle in der Ungenauigkeit...
    Und auch weshalb den "2" addiert wird, statt Null habe ich noch nicht ganz verstanden...

    Aber ehrlich gesagt: es soll mir jetzt auch egal sein , ich weiß, dass ich in Zukunft nur bis 6 Stellen hinter dem Komma rechnen darf *gg*

    Was die andere Sache anbelangt:
    TRUNC verwende ich bei der Stundenausgabe, da sollen nur ganze Stunden angezeigt werden.
    Bei den Minuten habe ich bewußt ROUND gewählt, da ja die Sekunden nicht extra ausgewiesen werden. Von daher wird tatsächlich ab 30 sec aufgerundet.

    Noch Mal vielen Dank!

    Gruß
    Servus
    Zitieren Zitieren Danke für die Hilfe, alles klar jetzt...  

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 06.10.2011, 07:42
  2. 2 sekunden blinker
    Von zoidberg im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 27.03.2009, 07:12
  3. TON (1 Sekunde dauert ca. 3 Sekunden)???
    Von olitheis im Forum CODESYS und IEC61131
    Antworten: 6
    Letzter Beitrag: 28.11.2008, 20:42
  4. Sekunden ins Merkerwort
    Von tomstl im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 17.10.2007, 00:52
  5. Nur 30 Sekunden
    Von Unregistrierter gast im Forum Stammtisch
    Antworten: 5
    Letzter Beitrag: 26.03.2007, 13:09

Lesezeichen

Berechtigungen

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