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

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

Thema: PCS7 Ungenauigkeit bei Zeitmessung

  1. #1
    Registriert seit
    14.04.2012
    Beiträge
    8
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich bitte um Hilfe bezüglich des folgenden Sachverhaltes: Software PCS7 V8.0 SP2, CFC V8.0 SP4 + Upd4, SCL V5.3 + SP6 + Upd 1

    In einem Funktionsbaustein laufen zwei Zeitmessungen wie folgt:
    - Zeitmessung 1 über zyklischen Aufruf von TimerP (AdvLib71 FB1810) Baustein
    - Zeitmessung 2 über Aufsummierung der Zykluszeit des aufrufenden OB (100ms) Rechenvorschrift Zeit := Zeit + 0.1;

    Beide Zeitmessungen laufen nach gemeinsamen Start deutlich auseinander:
    - Wert Zeitmessung 1 über TimerP: 223.8338 s
    - Wert Zeitmessung 2 über Zykluszeit des OB: 220.5043 s

    Frage 1: Wie ist diese Abweichung zu erklären?
    Frage 2: Wie kommt bei der Rechenvorschrift Zeit := Zeit + 0.1; die 0.0043 zustande?

    MfG
    Zitieren Zitieren PCS7 Ungenauigkeit bei Zeitmessung  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.207
    Danke
    927
    Erhielt 3.293 Danke für 2.662 Beiträge

    Standard

    Rundungsfehler durch die begrenzte Auflösung von REAL-Zahlen. IEEE 754
    Dadurch passiert es sogar irgendwann, daß bei der Addition "Zeit := Zeit + 0.1;" Zeit 'rauskommt, Zeit sich also nicht mehr ändert - so als hätte man 0.0 addiert.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #3
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    Servus, wie misst Du denn die Zeit mit dem TimerP?
    Wie schaut der FB genau aus?

  4. #4
    B1tst0rm ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.04.2012
    Beiträge
    8
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Anbei der Quelltext des FB:


    FUNCTION_BLOCK TEST
    TITLE = 'TEST'
    //
    // TEST
    //
    {
    S7_m_c := 'false'
    }
    VERSION : '0.1'
    AUTHOR : TEST
    NAME : TEST
    FAMILY : TEST

    VAR_INPUT

    SAMPLE_T {
    S7_visible := 'false';
    S7_link := 'false';
    S7_sampletime := 'true'
    } : REAL := 0.01;

    START {S7_m_c := 'false'; S7_link := 'false'; S7_visible := 'true'} : BOOL := FALSE;
    RESET {S7_m_c := 'false'; S7_link := 'false'; S7_visible := 'true'} : BOOL := FALSE;

    END_VAR
    VAR_OUTPUT

    ZEIT_TIMER_P {S7_m_c := 'false'; S7_visible := 'true'} : REAL;
    ZEIT_ZYKLUS {S7_m_c := 'false'; S7_visible := 'true'} : REAL;

    END_VAR
    VAR

    ST_IN_TRUE : STRUCT
    VALUE : BOOL := TRUE;
    ST : BYTE := 16#80;
    END_STRUCT;

    ST_IN_FALSE : STRUCT
    VALUE : BOOL := FALSE;
    ST : BYTE := 16#80;
    END_STRUCT;

    ST_IN_BOOL : STRUCT
    VALUE : BOOL := FALSE;
    ST : BYTE := 16#80;
    END_STRUCT;

    ST_OUT_BOOL : STRUCT
    VALUE : BOOL := FALSE;
    ST : BYTE := 16#80;
    END_STRUCT;

    ST_OUT_REAL : STRUCT
    VALUE : REAL := 0.0;
    ST : BYTE := 16#80;
    END_STRUCT;
    Timer_P_1 : TimerP; //FB1810

    END_VAR


    BEGIN

    //Einschaltverzögerung
    Timer_P_1.Ti := 86400.0; //24 Stunden
    Timer_P_1.SampleTime := SAMPLE_T; //Abtastzeit automatisch an Timer weiterreichen
    Timer_P_1.Mode := 2; //Timer einschaltverzögernd starten
    Timer_P_1.Reset := ST_IN_FALSE;

    ST_IN_BOOL.Value := START;

    Timer_P_1.In := ST_IN_BOOL;
    Timer_P_1();

    ST_OUT_REAL := Timer_P_1.TimeRemaining;

    IF START THEN
    ZEIT_TIMER_P := 86400.0 - ST_OUT_REAL.Value;
    ZEIT_ZYKLUS := ZEIT_ZYKLUS + 0.1; //Zykluszeit aufrufender OB = 100ms = SAMPLE_T
    END_IF;

    IF RESET THEN
    RESET := FALSE;
    ZEIT_TIMER_P := 0.0;
    ZEIT_ZYKLUS := 0.0;
    END_IF;

    END_FUNCTION_BLOCK

  5. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.207
    Danke
    927
    Erhielt 3.293 Danke für 2.662 Beiträge

    Standard

    Zitat Zitat von B1tst0rm Beitrag anzeigen
    - Zeitmessung 2 über Aufsummierung der Zykluszeit des aufrufenden OB (100ms) Rechenvorschrift Zeit := Zeit + 0.1;
    Betrachte es mal so: eine Anzahl von 0.1s-Einheiten zählen.

    Zählen: Üblicherweise zählt man ganze Einheiten, was den netten Effekt hat, daß keine Rundungsfehler entstehen.

    Du könntest/solltest also statt Aufsummieren von 0.1 auf einen REAL-Wert besser 1 in einen DINT-Wert aufsummieren (also zählen), und erst zu Anzeige- oder Berechnungszwecken die DINT-Summe zu REAL wandeln und durch 10.0 teilen. Genauer geht es nicht.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #6
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.227
    Danke
    534
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Wobei man dann noch klären müßte:

    1. wie genau schlägt der Zeit-OB zu (da muß es ja einen Jitter geben)
    2. Auch die Zeiten sind nur endlich genau
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  7. #7
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    Also ich bau das mal nach....
    Das mit dem Jitter als Ursache glaube ich nicht so recht, weil der Timer_P ja dieselbe SAMPLE_T zur Verfügung hat.

  8. #8
    Registriert seit
    29.03.2004
    Beiträge
    5.742
    Danke
    143
    Erhielt 1.688 Danke für 1.226 Beiträge

    Standard

    Zum einen erfasst er mit der Zykluszeit schonmal um 1xSampleTime falsch, weil er direkt beim ersten Aufruf schon aufsummiert, und nicht nach dem ersten Aufruf.
    Die Genialität einer Konstruktion liegt in ihrer Einfachheit – Kompliziert bauen kann jeder.

    (Sergei Pawlowitsch Koroljow, sowjetischer Konstrukteur von Raketen und Weltraumpionier)

  9. #9
    Registriert seit
    29.03.2004
    Beiträge
    5.742
    Danke
    143
    Erhielt 1.688 Danke für 1.226 Beiträge

    Standard

    Ein weiterer Unterschied wird durch die zusätzliche Subtraktion beim TimerP zustandekommen. Du kannst ja mal den ersten Fehler korrigieren, und dann deinen Timer über die Zykluszeit genauso programmieren wie den TimerP. Also bei Startflanke auf Wert setzen, und dann rückwärtszählen.
    Die Genialität einer Konstruktion liegt in ihrer Einfachheit – Kompliziert bauen kann jeder.

    (Sergei Pawlowitsch Koroljow, sowjetischer Konstrukteur von Raketen und Weltraumpionier)

  10. #10
    B1tst0rm ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    14.04.2012
    Beiträge
    8
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke für die bisherigen Ratschläge. Ich habe den Datentyp wie vorgeschlagen angepasst.

    Auszug Quelltext:

    IF START THEN
    ZEIT_TIMER_P := 86400.0 - ST_OUT_REAL.Value;
    Zyklen := Zyklen + 1;
    ZEIT_ZYKLUS := DINT_TO_REAL(Zyklen);
    ZEIT_ZYKLUS := ZEIT_ZYKLUS / 10.0;
    END_IF;

    IF RESET THEN
    RESET := FALSE;
    ZEIT_TIMER_P := 0.0;
    ZEIT_ZYKLUS := 0.0;
    Zyklen := 0;
    END_IF;

    Abweichung der Zeiterfassung:

    TimerP = 138.2266 s
    OB Zyklus = 136.2 s

    TimerP = 215.5156 s
    OB Zyklus = 212.3 s

    Die Abweichung von einem Zyklus möchte bzw. kann ich im Testfall vernachlässigen (konstanter systematischer Fehler).

    Das Problem ist der deutlich anwachsende Fehler mit der Dauer der Messung und dessen Ursache!

    Als erstes dachte ich es könnte an PLCSIM liegen. Aber die gleiche Abweichung stellt sich auf einer realen S7-416 ein.

Ähnliche Themen

  1. Hilfe bei PCS7 gesucht
    Von DieterSG im Forum Suche - Biete
    Antworten: 1
    Letzter Beitrag: 19.12.2012, 23:18
  2. Antworten: 1
    Letzter Beitrag: 29.11.2012, 19:13
  3. Alle Pläne bei PCS7 ausdrucken *.pdf
    Von matthias_1982 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 09.12.2011, 07:39
  4. Hörmelder bei PCS7 Version 7.1
    Von Torstiborsti im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 19.02.2011, 16:00
  5. Drehgeber ungenauigkeit
    Von Anaconda55 im Forum Antriebstechnik
    Antworten: 50
    Letzter Beitrag: 13.11.2009, 19:18

Stichworte

Lesezeichen

Berechtigungen

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