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

Page 1 of 3 123 LastLast
Results 1 to 10 of 30

Thread: Absolut Betrag "ausrechnen"

  1. #1
    Join Date
    05.11.2004
    Location
    Europa
    Posts
    1,275
    Danke
    247
    Erhielt 156 Danke für 100 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo.

    Ich hab hier ne Steuerung (iTNC530) welche keinen ABS Befehl kennt.
    Gibt es eine Möglichkeit mit einer Formel den "Abstand" zu Null, also den absolut Betrag zu errechnen?

    Ich möchte keine IF Bedingung erstellen, da ich die Auswertung auch an andere Stelle brauche, wo IF nicht funktioniert.

    Jemand einen Tipp?
    Danke!
    Kommt Zeit.... Kommt Rat.... In der Tat.
    Gartenlampe mit Windenergie anstelle von Solar? Bei Interesse -> PN
    Reply With Quote Reply With Quote Absolut Betrag "ausrechnen"  

  2. #2
    Join Date
    25.02.2010
    Posts
    723
    Danke
    40
    Erhielt 152 Danke für 133 Beiträge

    Default

    du könntest das Quadrat bilden und daraus die Wurzel ziehen.

  3. #3
    Krumnix is offline Erfahrener Benutzer
    Themenstarter
    Join Date
    05.11.2004
    Location
    Europa
    Posts
    1,275
    Danke
    247
    Erhielt 156 Danke für 100 Beiträge

    Default

    Hab ich leider nicht. Also den Wurzel-Befehl.
    Kommt Zeit.... Kommt Rat.... In der Tat.
    Gartenlampe mit Windenergie anstelle von Solar? Bei Interesse -> PN

  4. #4
    Join Date
    12.04.2013
    Posts
    10
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Default

    Nimm doch deinen Wert und den mit -1 multiplizierten Wert und bilde daraus eine Maxauswahl.
    Das Ergebnis sollte dann dein Betragswert sein.

  5. #5
    Join Date
    06.10.2003
    Posts
    3,925
    Danke
    525
    Erhielt 631 Danke für 497 Beiträge

    Default

    Wie sieht es mit "Schieben" aus? Einmal nach links und einmal nach rechts?
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  6. #6
    Join Date
    25.06.2017
    Location
    Oerlinghausen
    Posts
    1,476
    Danke
    129
    Erhielt 264 Danke für 213 Beiträge

    Default

    Quote Originally Posted by Onkel Dagobert View Post
    Wie sieht es mit "Schieben" aus? Einmal nach links und einmal nach rechts?
    Gaaanz schlecht, Onkel Dagobert!
    Sogar, wenn man zwei Arten von RechtsSchieben zur Auswahl hat:
    - mit Vorzeichen: damit machst Du u.U. aus einer positiven Zahl eine negative, nämlich, wenn das zweithöchstwertige Bit 1 ist.
    - ohne Vorzeichen: damit machst Du u.U. aus einer negativen Zahl eine positive.
    Aber in beiden Fällen: mit dem Betrag der so bearbeiteten Zahl hat das nix zu tun!
    Das sogenannte VorzeichenBit heisst nur so, weil man an dem Bit ablesen kann, ob die Zahl positiv oder negativ ist.
    Das "Umkippsen" des VorzeichenBits verändert aber in jedem Fall den Betrag der Zahl und nicht nur das Vorzeichen!

    Ansatz:
    Zahl*(Zahl>(-Zahl))+ Zahl*(Zahl<(-Zahl)) // funktioniert in Excel, da True 1 entspricht und False 0
    Wenn allerdings True -1 entspricht, müsste man z.B.
    -Zahl*(Zahl>(-Zahl)) - Zahl*(Zahl<(-Zahl))
    schreiben.

    Korrektur:
    Sorry, es war so gut gemeint, aber trotzdem so falsch! Also, jetzt mit ohne TippFehler (hoffentlich):
    Zahl*(Zahl>(-Zahl)) - Zahl*(Zahl<(-Zahl)) // funktioniert in Excel (TabellenBlatt), da True 1 entspricht und False 0
    Wenn allerdings True -1 entspricht, müsste man z.B.
    Zahl*(Zahl<(-Zahl)) - Zahl*(Zahl>(-Zahl)) // z.B. in VBA
    schreiben!

    Last edited by Heinileini; 06.12.2018 at 15:44.

  7. #7
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    13,558
    Danke
    1,090
    Erhielt 4,001 Danke für 3,233 Beiträge

    Default

    In Step7 bedeutet "ABS": Absolutwert einer Gleitpunktzahl
    Da funktioniert die Betragsbildung tatsächlich so, daß das höchste Bit .31 (das Vorzeichenbit) auf 0 gebracht wird, weil bei Gleitkommazahlen nach IEEE 754 (REAL) das Vorzeichen und der Betrag der Zahl getrennt gespeichert sind.

    Bei Ganzzahlen (Festpunktzahlen) funktioniert das nicht, weil die im Zweierkomplement gespeichert sind und es kein isoliertes Vorzeichenbit gibt.

    Das höchste Bit auf 0 setzen kann man durch maskieren/ausblenden: "AbsBetrag := realValue AND DW#16#7FFFFFFF"
    oder auch durch das vom Onkel erwähnte 1 Bit Links- und nachfolgend 1 Bit Rechtsschieben. Wichtig: das Rechtsschieben muß ein 0-Bit einschieben.

    Die Max-Funktion halte ich für am besten, weil die mit Gleitpunktzahlen und auch mit Ganzzahlen gleich funktionieren würde. (SCL, ST, FUP, KOP, CFC) Welche Anweisungen die hier verwendete NC-Steuerung kann, weiß ich aber nicht. Vermutlich läßt sich da auch eine Rechenformel ohne IF (ohne Sprünge) finden.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

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

    Rudi (05.12.2018)

  9. #8
    Join Date
    23.10.2009
    Posts
    464
    Danke
    78
    Erhielt 134 Danke für 107 Beiträge

    Default

    Hier steht die Formel für INT.
    Gruß
    Erich

  10. #9
    Join Date
    09.04.2015
    Location
    Bad Belzig
    Posts
    107
    Danke
    7
    Erhielt 14 Danke für 14 Beiträge

    Default

    -----------------
    Last edited by UNI; 06.12.2018 at 09:07.

  11. #10
    Join Date
    25.06.2017
    Location
    Oerlinghausen
    Posts
    1,476
    Danke
    129
    Erhielt 264 Danke für 213 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Quote Originally Posted by PN/DP View Post
    Vermutlich läßt sich da auch eine Rechenformel ohne IF (ohne Sprünge) finden.
    Davon gehe ich auch aus und das hatte ich in #6 gemeint. Leider hatte ich dort + und - verwechselt
    Hab dort die Korrektur angefügt.
    Die beiden dortigen Formeln habe ich nun zu einer zusammengefasst, durch Hinzufügen von "* (0=0)", wodurch nun egal ist, ob TRUE ProgrammierSprachen-abhängig den ZahlenWert 1 oder -1 hat:

    AbsVonZahl = (Zahl * (Zahl > (-Zahl)) - Zahl * (Zahl < (-Zahl)) * (0 = 0)

    Natürlich geht das auch noch etwas kompakter, da ABS(Zahl) = SGN(Zahl) * Zahl ist:
    Mit
    SgnVonZahl = ((Zahl > 0) - (Zahl < 0)) * (0 = 0)
    erhält man
    AbsVonZahl = ((Zahl > 0) - (Zahl < 0)) * (0 = 0) * Zahl

    Vorausgesetzt wird aber weiterhin, dass die ProgrammierSprache mit den Bool-Ergebnissen der Vergleiche weiterrechnen kann, also automatisch die TypKonvertierung durchführt oder grosszügig über den TypenMischMasch hinwegsieht. Falls nicht, müsste man die 3 TypKonvertierungen noch ergänzen - sofern sie in der ProgrammierSprache nicht auch noch wegrationalisiert wurden.

    Apropos Typ: Zahl kann eine Ganzzahl oder GleitKommaZahl sein.

Similar Threads

  1. Replies: 13
    Last Post: 08.10.2018, 11:36
  2. "Betrag von" Funktionsbaustein
    By Salzburger in forum CODESYS und IEC61131
    Replies: 4
    Last Post: 17.07.2017, 09:46
  3. Replies: 5
    Last Post: 29.09.2016, 16:35
  4. Replies: 6
    Last Post: 16.03.2012, 17:20
  5. "Index Pulse", "Home Switch" und "Position Limit Switch"
    By senmeis in forum Antriebstechnik
    Replies: 3
    Last Post: 07.03.2011, 10:21

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •