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

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

Thema: Absolut Betrag "ausrechnen"

  1. #1
    Registriert seit
    05.11.2004
    Ort
    Europa
    Beiträge
    1.247
    Danke
    241
    Erhielt 150 Danke für 95 Beiträge

    Standard


    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
    Zitieren Zitieren Absolut Betrag "ausrechnen"  

  2. #2
    Registriert seit
    25.02.2010
    Beiträge
    674
    Danke
    38
    Erhielt 141 Danke für 125 Beiträge

    Standard

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

  3. #3
    Krumnix ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    05.11.2004
    Ort
    Europa
    Beiträge
    1.247
    Danke
    241
    Erhielt 150 Danke für 95 Beiträge

    Standard

    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
    Registriert seit
    12.04.2013
    Beiträge
    8
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

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

  5. #5
    Registriert seit
    06.10.2003
    Beiträge
    3.767
    Danke
    502
    Erhielt 587 Danke für 468 Beiträge

    Standard

    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
    Registriert seit
    25.06.2017
    Ort
    Oerlinghausen
    Beiträge
    1.033
    Danke
    84
    Erhielt 179 Danke für 150 Beiträge

    Standard

    Zitat Zitat von Onkel Dagobert Beitrag anzeigen
    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!

    Geändert von Heinileini (06.12.2018 um 17:44 Uhr)

  7. #7
    Registriert seit
    23.06.2009
    Ort
    Sassnitz
    Beiträge
    12.754
    Danke
    1.038
    Erhielt 3.753 Danke für 3.031 Beiträge

    Standard

    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
    Registriert seit
    23.10.2009
    Beiträge
    443
    Danke
    71
    Erhielt 129 Danke für 103 Beiträge

    Standard

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

  10. #9
    Registriert seit
    09.04.2015
    Ort
    Bad Belzig
    Beiträge
    104
    Danke
    7
    Erhielt 14 Danke für 14 Beiträge

    Standard

    -----------------
    Geändert von UNI (06.12.2018 um 11:07 Uhr)

  11. #10
    Registriert seit
    25.06.2017
    Ort
    Oerlinghausen
    Beiträge
    1.033
    Danke
    84
    Erhielt 179 Danke für 150 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von PN/DP Beitrag anzeigen
    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.

Ähnliche Themen

  1. Antworten: 13
    Letzter Beitrag: 08.10.2018, 13:36
  2. "Betrag von" Funktionsbaustein
    Von Salzburger im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 17.07.2017, 11:46
  3. Antworten: 5
    Letzter Beitrag: 29.09.2016, 18:35
  4. Antworten: 6
    Letzter Beitrag: 16.03.2012, 19:20
  5. "Index Pulse", "Home Switch" und "Position Limit Switch"
    Von senmeis im Forum Antriebstechnik
    Antworten: 3
    Letzter Beitrag: 07.03.2011, 12:21

Lesezeichen

Berechtigungen

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