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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: Bei negativem Ergebnis mit CC Funktionsbaustein aufrufen?

  1. #11
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.184
    Danke
    923
    Erhielt 3.290 Danke für 2.659 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Für die Korrektur bei Überlauf der Time-Tick würde ich auch nicht extra eine Funktion schreiben,
    ist es doch nur 1 Zeile Code und benötigt auch keine Sprünge:
    Code:
          L     "Systemzeit_jetzt"    // Time: 0 ... 2.147.483.647 ms
          L     "Systemzeit_vorher"   // Time: 0 ... 2.147.483.647 ms
          -D                          // Differenz jetzt-vorher
          UD    DW#16#7FFFFFFF        // immer positiv machen
          T     "Differenzzeit"
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  2. #12
    Registriert seit
    06.10.2003
    Beiträge
    3.410
    Danke
    449
    Erhielt 504 Danke für 407 Beiträge

    Standard

    Zitat Zitat von Scoby Beitrag anzeigen
    ..Bei meiner Variante sinds nur 2 Zeilen an jeder Stelle und 2 Zeilen in der Funktion...
    Naja, ob man immer eine Funktion schreiben muss, um zwei, drei Zeilen zu sparen? Ich würde jedenfalls nicht auf die Idee kommen. Performance und Speicher benötigt ein Bausteinaufruf auch.

    @Harald,
    du blendest einfach nur das Vorzeichen aus? Tut dat denn gut?
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  3. #13
    Registriert seit
    25.01.2011
    Ort
    97980
    Beiträge
    23
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich weis nicht ob du das Bewusst machst, einfach Flag für negative Zahl ausblenden, langt aber nicht um die gleiche Zahl als positiv darzustellen...

    Du müsstest eigentlich das Zweierkomplement bilden
    Code:
    UD DW#16#7FFFFFFF // immer positiv machen
    Harald
    Code:
      10100100            Ausgangszahl (-92)
      01011011            1-er Komplement, alle Bits umdrehen
      01011100            noch 1 addieren (92)
     
    also
      INVD  
      INC   1
    Geändert von Heinz2011 (08.02.2011 um 10:12 Uhr)

  4. #14
    Registriert seit
    30.10.2009
    Ort
    10 km vom Herzen der Natur
    Beiträge
    1.626
    Danke
    120
    Erhielt 340 Danke für 255 Beiträge

    Standard

    Zitat Zitat von Heinz2011 Beitrag anzeigen
    Ich weis nicht ob du das Bewusst machst, einfach Flag für negative Zahl ausblenden, langt aber nicht um die Zahl gleich als positiv darzustellen...
    1. Wenn Du Dir den Thread mal von vorne durchliest, wirst Du sehen, dass es darum auch nicht geht.
    2. Weiß Harald das.

    @Harald: schöne Lösung!
    Gruß
    Michael

  5. Folgender Benutzer sagt Danke zu M-Ott für den nützlichen Beitrag:

    PN/DP (08.02.2011)

  6. #15
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.184
    Danke
    923
    Erhielt 3.290 Danke für 2.659 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Onkel Dagobert Beitrag anzeigen
    @Harald,
    du blendest einfach nur das Vorzeichen aus? Tut dat denn gut?
    Ja.


    Zitat Zitat von Heinz2011 Beitrag anzeigen
    Ich weis nicht ob du das Bewusst machst, einfach Flag für negative Zahl ausblenden, langt aber nicht um die gleiche Zahl als positiv darzustellen...

    Du müsstest eigentlich das Zweierkomplement bilden
    Ich mache das bewußt, weil es NICHT darum geht, aus -10 eine +10 zu machen.
    Der Time-Tick von SFC64 nutzt nur 31 Bit und ist immer positiv. Der höchste mögliche Wert ist 2.147.483.647 (16#7FFFFFFF).
    Danach "wrap"t (überläuft) der Time-Tick zu 0. Man muß bei einer negativen Differenz Jetzt-Vorher 2.147.483.648 (16#80000000)
    addieren oder subtrahieren, um die negative Differenz in den positiven "32-Bit-Quadranten" zu spiegeln. (Fast so hat es auch
    schon der TE Scoby im EP erkannt).
    "UD DW#16#7FFFFFFF" entspricht bei negativer Differenz einem "-D DW#16#80000000" und bei positiver Differenz stört es nicht.

    Beispiel:
    Code:
          L     "Systemzeit_jetzt"    // 16#00000005 =             +5
          L     "Systemzeit_vorher"   // 16#7FFFFFFB = +2.147.483.643
          -D                          // 16#8000000A = -2.147.483.638
          UD    DW#16#7FFFFFFF        // 16#0000000A =            +10
          T     "Differenzzeit"
    Man beachte, daß +5 - +2.147.483.643 = -2.147.483.638 (und NICHT -10 !).

    btw: Es gibt eine fertige Operation um das 32-Bit-Zweierkomplement zu bilden: NEGD (Akku1 := Akku1 * -1)
    INVD + INC 1 funktioniert leider nicht richtig für 32-Bit-Ganzzahl, weil INC nur die untersten 8 Bit des Akku1 inkrementiert.


    Zitat Zitat von M-Ott Beitrag anzeigen
    2. Weiß Harald das.

    @Harald: schöne Lösung!
    Danke für Dein Vertrauen in meine Kenntnisse und das Lob.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    Onkel Dagobert (11.02.2011)

Ähnliche Themen

  1. Ergebnis aus 2 PT1-Gliedern?
    Von Poldi007 im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 01.08.2011, 09:01
  2. Antworten: 3
    Letzter Beitrag: 13.02.2011, 22:33
  3. Antworten: 3
    Letzter Beitrag: 11.08.2010, 22:09
  4. Ergebnis CDT von SFC1 in DB ablegen
    Von rapser im Forum Simatic
    Antworten: 16
    Letzter Beitrag: 17.02.2010, 15:02
  5. Funktionsbaustein aufrufen
    Von Spoon im Forum CODESYS und IEC61131
    Antworten: 9
    Letzter Beitrag: 06.02.2010, 22:04

Lesezeichen

Berechtigungen

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